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
#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)