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 |
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.
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
VEIVM011, PVM011DTENT
PVM011DTENT - Calcula data ( [ VVA->VVA_NUMTRA ], [ VVA->VVA_CHAINT ], [ dDtESug ] ) --> dVVA_DTESUG
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 |
-
dVVA_DTESUG(data)
- Data de sugestão da entrega
#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)
Nome | Tipo | Escopo | Pode Alterar | descrição | ||||||||||
Array of Record | Global | Não |