Árvore de páginas

Ponto-de-Entrada: PVM011DTENT - Calcula data
Abrangências: Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Microsiga Protheus 10
Versões: Todas
Compatível Países: Todos
Sistemas Operacionais: Todos
Compatível às Bases de Dados: Todos
Descrição:
O ponto de Entrada PVM011DTENT está localizado no momento do cálculo da data de sugestão de entrega do veiculo, assim a data de entrega poderá ser calculada obedecendo qualquer critério. O retorno do ponto de entrada é a data de sugetão a ser utilizada na rotina de entrega de veiculos.
Eventos

DbSelectArea("VVA")
 DbSetOrder(1)
 If DbSeek( xFilial("VVA") + M->VV0_NUMTRA )
  While !Eof() .and. xFilial("VVA") == VVA->VVA_FILIAL .and. M->VV0_NUMTRA == VVA->VVA_NUMTRA
   If ( Inclui .or. Altera ) .and. !Empty(VVA->VVA_DTEPRV)
    If lMostraMsg // Faz apenas uma vez a perguta
     lMostaMsg  := .f.
     lFazLevant := .f.
     If MsgYesNo(STR0333,STR0012) // Deseja recalcular a Data de Sugestao de Entrega? / Atencao
      lFazLevant := .t.
     EndIf
    EndIf  
   EndIf
   DbSelectArea("VV1")
   DbSetOrder(1)
   DbSeek(xFilial("VV1")+VVA->VVA_CHAINT)
   If ( Inclui .or. Altera ) .and. lFazLevant
    DbSelectArea("VE4")
    DbSetOrder(1)
    If DbSeek(xFilial("VE4")+VV1->VV1_CODMAR)
     If VE4->VE4_QTDENT > 0
      nDias := 0
      ni    := 0
      While .t.
       nDias++
       If dow(dDtESug+nDias) <> 7 .and. dow(dDtESug+nDias) <> 1 // Dias Uteis, desprezar Sabado e Domingo
        ni++
        If ni >= VE4->VE4_QTDENT
         Exit
        EndIf
       EndIf
      EndDo
      dDtESug += nDias
     EndIf
    EndIf
    DbSelectArea("VV2")
    DbSetOrder(1)
    If DbSeek(xFilial("VV2")+VV1->VV1_CODMAR+VV1->VV1_MODVEI)
     If VV2->VV2_QTDENT > 0
      nDias := 0
      ni    := 0
      While .t.
       nDias++
       If dow(dDtESug+nDias) <> 7 .and. dow(dDtESug+nDias) <> 1 // Dias Uteis, desprezar Sabado e Domingo
        ni++
        If ni >= VV2->VV2_QTDENT
         Exit
        EndIf
       EndIf
      EndDo
      dDtESug += nDias
     EndIf
    EndIf
    If ExistBlock("PVM011DTENT")
     dDtESug := ExecBlock("PVM011DTENT",.f.,.f.,{VVA->VVA_NUMTRA,VVA->VVA_CHAINT,dDtESug})
    Endif
   Else
    dDtESug := VVA->VVA_DTESUG
   EndIf
   dDtEPrv := dDtESug
   If !Empty(VVA->VVA_DTEPRV)
    dDtEPrv := VVA->VVA_DTEPRV
   EndIf
   lGrava  := .f.
   cObserv := ""
   If lTela
    // ParamBox //
    aParamBox := {}
    aAdd(aParamBox,{1,RetTitle("VVA_DTESUG"),dDtESug,"@D","","",".f.",0,.f.})
    aAdd(aParamBox,{1,RetTitle("VVA_DTEPRV"),dDtEPrv,"@D","!Empty(MV_PAR02)","","",0,.t.})
    If ParamBox(aParamBox,VVA->VVA_CHASSI,@aRet,,,,,,,,.F.)
     If aRet[1]<>aRet[2]
      While Empty(cObserv)
       FS_Obs011(cCadastro+" - "+STR0291,VVA->VVA_ENTMEM,"VVA_ENTMEM","VVA_OBSENT",.t.) // Precisao de Entrega - Observacoes
       If !Empty(cObserv)
        lEmBranco := .t.
        For Cont := 1 to MLCount(cObserv,nTamObs)
         If !Empty(MemoLine(cObserv,nTamObs,Cont))
          lEmBranco := .f.
          Exit
         EndIf
        Next
        If lEmBranco
         cObserv := ""
        EndIf
       EndIf
      EndDo
     EndIf
     lGrava := .t.
    EndIf
   Else
    lGrava := .t.
   EndIf
   If lGrava .and. ( Inclui .or. Altera )
    DbSelectarea("VVA")
    RecLock("VVA",.f.)
     VVA->VVA_DTESUG := aRet[1] // Grava Dt. de Entrega sugerida pelo sistema
     VVA->VVA_DTEPRV := aRet[2] // Grava Dt. de Entrega prevista pelo usuario (vendedor)
     MSMM(,TamSx3("VVA_OBSENT")[1],,cObserv,1,,,"VVA","VVA_ENTMEM") // Observacao
    MsUnlock()
   EndIf
   DbSelectArea("VVA")
   DbSkip()
  EndDo

 

Programa Fonte
VEIVM011, PVM011DTENT
Sintaxe

PVM011DTENT - Calcula data ( [ VVA->VVA_NUMTRA ], [ VVA->VVA_CHAINT ], [ dDtESug ] ) --> dVVA_DTESUG

Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
VVA->VVA_NUMTRA Caracter
VVA->VVA_CHAINT Array of Record
dDtESug Array of Record Data de sugestão da entrega
Retorno
    dVVA_DTESUG(data)
  • Data de sugestão da entrega
Exemplos
#include "Protheus.ch"/*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܱ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±±±³Funcao    ³PVM011DTENT³ Autor ³ Andre Luis Almeida   ³ Data ³ 03/12/09 ³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±±±³Descricao ³ Ponto de Entrada para calcular a Dt.Sugerida para Entrega  ³±±±±³          ³ Soma a qtde de dias que for maior entre as tarefas VZ7.    ³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±±±³Uso       ³ VIAMAR - Veiculos                                          ³±±±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/User Function PVM011DTENT()Local cVVA_NUMTRA := PARAMIXB[1] // NUMTRA (NUMERO ATENDIMENTO)//Local cVVA_CHAINT := PARAMIXB[2] // CHASSI INTERNO (VV1)Local dVVA_DTESUG := PARAMIXB[3] // DATA SUGERIDA PELO SISTEMA e RETORNO COMO DATA DA SUGESTAOLocal nRecVZ7     := VZ7->(RecNo())Local nMaxDias    := 0Local nDias       := 0Local ni          := 0If VZ7->(FieldPos("VZ7_QTDENT")) <> 0 If Type("aColsIC") <> "U" // Verifica se existe aColsIC  For ni := 1 to Len(aColsIC)   If !aColsIC[ni,len(aColsIC[ni])]    If aColsIC[ni,FG_POSVAR("VZ7_QTDENT","aHeaderIC")] > nMaxDias // Levanta a qtde de dias maior entre as tarefas     nMaxDias := aColsIC[ni,FG_POSVAR("VZ7_QTDENT","aHeaderIC")]    EndIf   EndIf  Next Else  DbSelectArea("VZ7")  DbSetOrder(1)  DbSeek(xFilial("VZ7")+cVVA_NUMTRA)  while !eof() .and. VZ7->VZ7_FILIAL==xFilial("VZ7") .and. VZ7->VZ7_NUMTRA == cVVA_NUMTRA   If VZ7->VZ7_QTDENT > nMaxDias // Levanta a qtde de dias maior entre as tarefas    nMaxDias := VZ7->VZ7_QTDENT   EndIf   DbSkip()  Enddo EndIf If nMaxDias > 0  nDias := 0  ni    := 0  While .t.   nDias++   If dow(dVVA_DTESUG+nDias) <> 7 .and. dow(dVVA_DTESUG+nDias) <> 1 // Dias Uteis, desprezar Sabado e Domingo    ni++    If ni >= nMaxDias     Exit    EndIf   EndIf  EndDo  dVVA_DTESUG += nDias EndIf If nRecVZ7 > 0  VZ7->(DbGoto(nRecVZ7)) EndIfEndIfDbSelectArea("VVA")Return(dVVA_DTESUG)
Variáveis
Nome Tipo Escopo Pode Alterar descrição
Array of Record Global Não