Histórico da Página
Ponto de Entrada
Descrição: | Ponto de Entrada na rotina de Faturamento Direto, executado na validação dos campos da inclusão/alteração dos Veículos/Máquinas. Pode ser utilizado para atribuir automaticamente valores para outros campos na tela ou simplesmente para validar o conteudo de campos que foram customizados e inseridos através de outro Ponto de Entrada VXX30VVA, alem de validar o TudoOk da tela. | ||||||
Localização: | Atualizações \ Mov Atendimento \ Faturamento Direto (VEIXA030) | ||||||
Eventos: | ////////////// // Parambox - Tudo OK // ////////////// If GetNewPar("MV_MIL0014","0") == "0" // Utiliza Central de Pedido? (0=Não;1=Sim) AADD(aParVVA,{1,STR0016,aParDef[1,5],"@!","VX030VVAVL(1,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","VQ0",".f.", 60,.f.}) // Codigo Pedido Else AADD(aParVVA,{1,STR0016,aParDef[1,5],"@!","VX030VVAVL(1,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","VQ0",IIf(lAlt,"",".F."), 60,.f.}) // Codigo Pedido EndIf AADD(aParVVA,{1,STR0017,aParDef[1,6],"@!" ,"VX030VVAVL(2,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","" ,IIf(lAlt,"",".F.") , 60,.f.}) // Numero Pedido AADD(aParVVA,{1,STR0015,aParDef[1,7],"@!" ,"VX030VVAVL(3,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")",IIf(lCadVei,"VV1",""),IIf(lAlt,"",".F.") ,120,.f.}) // Chassi AADD(aParVVA,{1,STR0010,aParDef[1,1],"@!" ,"VX030VVAVL(4,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","VE1" ,IIf(lAlt.and.!lCadVei,"",".F."), 30,.t.}) // Marca AADD(aParVVA,{1,STR0011,aParDef[1,2],"@!" ,"VX030VVAVL(5,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","VX3" ,IIf(lAlt.and.!lCadVei,"",".F."),120,.t.}) // Modelo AADD(aParVVA,{1,STR0012,aParDef[1,3],"@!" ,"VX030VVAVL(6,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","VVC" ,IIf(lAlt.and.!lCadVei,"",".F."), 60,.t.}) // Cor AADD(aParVVA,{1,STR0013,aParDef[1,4],"@E 99,999,999.99","VX030VVAVL(7,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","" ,IIf(lAlt,"",".F.") , 60,.t.}) // Valor AADD(aParVVA,{1,STR0057,aParDef[1,8],"@E 99,999,999.99","VX030VVAVL(8,"+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")","" ,IIf(lAlt,"",".F.") , 60,.f.}) // Vlr.Associacao // For nCntFor := 1 to len(aVVACust) AADD(aParVVA,{ 1 , RetTitle(aVVACust[nCntFor,1]) , aParDef[1,9,nCntFor] , VVA->(X3PICTURE(aVVACust[nCntFor,1])) , "VX030VVAVL("+Alltrim(str(8+nCntFor))+","+IIf(nOpcVVA==3,"0",Alltrim(str(nLinVet)))+")" , "" , IIf(lAlt,"",".F.") , aVVACust[nCntFor,2] , X3Obrigat(aVVACust[nCntFor,1]) }) Next // While .t. If ParamBox(aParVVA,cTitTela,@aRetVVA,,,,,,,,.f.) If !ExistBlock("VX030VLD") .or. ExecBlock("VX030VLD",.f.,.f.,{ "MV_PAR00" }) // Chamada do Ponto de Entrada para o Tudo OK na tela Parambox lOkPar := .t. Exit EndIf Else Exit EndIf For nCntFor := 1 to len(aParVVA) aParVVA[nCntFor,3] := aRetVVA[nCntFor] // Carregar conteudos digitados pelo usuario Next aRetVVA := {} EndDo // ////////////// // VX030VVAVL - Campo a campo // ////////////// Function VX030VVAVL(nPar,nLinhaVVA) Local lRet := .f. Local nRecVQ0 := 0 Local aEUltMov := {} // Entrada por Compra Local aSUltMov := {} // Saida por Venda Local nCntFor := 0 Local oVeiculos := DMS_Veiculo():New() Do Case Case nPar == 1 // Codigo Pedido If Empty(MV_PAR01) lRet := .t. Else For nCntFor := 1 to len(aVVA) If nLinhaVVA == 0 .or. nLinhaVVA <> nCntFor If Alltrim(aVVA[nCntFor,6]) == Alltrim(MV_PAR01) // Codigo do Pedido MsgStop(STR0086,STR0002) // Veiculo ja existente neste Faturamento Direto. Impossivel continuar! / Atencao Return .f. EndIf EndIf Next DbSelectArea("VQ0") DbSetOrder(1) If MsSeek(xFilial("VQ0")+MV_PAR01) MV_PAR02 := VQ0->VQ0_NUMPED MV_PAR03 := VQ0->VQ0_CHASSI VV1->(DbSetOrder(1)) VV1->(MsSeek(xFilial("VV1")+VQ0->VQ0_CHAINT)) MV_PAR04 := aMV_PARBkp[1] := VV1->VV1_CODMAR MV_PAR05 := aMV_PARBkp[2] := VV1->VV1_MODVEI MV_PAR06 := aMV_PARBkp[3] := VV1->VV1_CORVEI lRet := .t. EndIf EndIf Case nPar == 2 // Numero Pedido If Empty(MV_PAR02) lRet := .t. Else nRecVQ0 := 0 DbSelectArea("VQ0") DbSetOrder(2) If !Empty(MV_PAR02) .and. MsSeek(xFilial("VQ0")+MV_PAR02) nRecVQ0 := VQ0->(RecNo()) EndIf DbSetOrder(1) If nRecVQ0 > 0 If !Empty(MV_PAR01) If MV_PAR01 <> VQ0->VQ0_CODIGO VQ0->(DbGoTo(nRecVQ0)) MV_PAR01 := VQ0->VQ0_CODIGO MV_PAR03 := VQ0->VQ0_CHASSI VV1->(DbSetOrder(1)) VV1->(MsSeek(xFilial("VV1")+VQ0->VQ0_CHAINT)) MV_PAR04 := aMV_PARBkp[1] := VV1->VV1_CODMAR MV_PAR05 := aMV_PARBkp[2] := VV1->VV1_MODVEI MV_PAR06 := aMV_PARBkp[3] := VV1->VV1_CORVEI EndIf EndIf Else MV_PAR01 := Space(TamSX3("VQ0_CODIGO")[1]) EndIf lRet := .t. EndIf Case nPar == 3 // Chassi If Empty(MV_PAR03) lRet := .t. Else If lCadVei If !FG_POSVEI("MV_PAR03",) MsgStop(STR0056,STR0002) // Veiculo não encontrado. Impossivel continuar! / Atencao Return .f. EndIf EndIf lRet := .t. // Chassi Bloqueado If oVeiculos:Bloqueado("", MV_PAR03) Return .f. // A mensagem já é exibida dentro da função Bloqueado() EndIf For nCntFor := 1 to len(aVVA) If nLinhaVVA == 0 .or. nLinhaVVA <> nCntFor If Alltrim(aVVA[nCntFor,8]) == Alltrim(MV_PAR03) // Chassi MsgStop(STR0086,STR0002) // Veiculo ja existente neste Faturamento Direto. Impossivel continuar! / Atencao Return .f. EndIf EndIf Next DbSelectArea("VQ0") DbSetOrder(1) If !Empty(MV_PAR01) .and. MsSeek(xFilial("VQ0")+MV_PAR01) If MV_PAR03 <> VQ0->VQ0_CHASSI MV_PAR01 := Space(TamSX3("VVA_CODPED")[1]) Else For nCntFor := 1 to len(aVVA) If nLinhaVVA == 0 .or. nLinhaVVA <> nCntFor If Alltrim(aVVA[nCntFor,6]) == Alltrim(MV_PAR01) // Codigo do Pedido MsgStop(STR0086,STR0002) // Veiculo ja existente neste Faturamento Direto. Impossivel continuar! / Atencao Return .f. EndIf EndIf Next EndIf EndIf DbSelectArea("VV1") DbSetOrder(2) If MsSeek(xFilial("VV1")+MV_PAR03) aEUltMov := FGX_VEIMOVS( VV1->VV1_CHASSI , "E" , "0" ) // Entrada por Compra aSUltMov := FGX_VEIMOVS( VV1->VV1_CHASSI , "S" , "0" ) // Saida por Venda If len(aEUltMov) > 0 .or. len(aSUltMov) > 1 .or. ( len(aSUltMov) == 1 .and. ( aSUltMov[1,2]+aSUltMov[1,3] <> xFilial("VV0")+VV0->VV0_NUMTRA ) ) MsgStop(STR0054,STR0002) // Veiculo ja possui movimentação de Entrada e/ou Saida. Impossivel continuar! / Atencao Return .f. Else If ( Empty(MV_PAR04) .or. MV_PAR04 == VV1->VV1_CODMAR ) .and. ; ( Empty(MV_PAR05) .or. MV_PAR05 == VV1->VV1_MODVEI ) .and. ; ( Empty(MV_PAR06) .or. MV_PAR06 == VV1->VV1_CORVEI ) If lCadVei .or. MsgYesNo(STR0022,STR0002) // Veiculo ja cadastrado! Deseja continuar? / Atencao lRet := .t. DbSelectArea("VQ0") DbSetOrder(3) If MsSeek(xFilial("VQ0")+VV1->VV1_CHAINT) If Alltrim(MV_PAR03) == Alltrim(VQ0->VQ0_CHASSI) MV_PAR01 := VQ0->VQ0_CODIGO MV_PAR02 := VQ0->VQ0_NUMPED EndIf EndIf DbSelectArea("VQ0") DbSetOrder(1) Else Return .f. EndIf ElseIf ( MV_PAR04 <> VV1->VV1_CODMAR ) .or. ( MV_PAR05 <> VV1->VV1_MODVEI ) .or. ( MV_PAR06 <> VV1->VV1_CORVEI ) If MsgYesNo(STR0023,STR0002) // Veiculo ja cadastrado com MARCA/MODELO/COR diferente do informado! Deseja continuar? / Atencao lRet := .t. DbSelectArea("VQ0") DbSetOrder(3) If MsSeek(xFilial("VQ0")+VV1->VV1_CHAINT) If Alltrim(MV_PAR03) == Alltrim(VQ0->VQ0_CHASSI) MV_PAR01 := VQ0->VQ0_CODIGO MV_PAR02 := VQ0->VQ0_NUMPED EndIf EndIf DbSelectArea("VQ0") DbSetOrder(1) Else Return .f. EndIf EndIf If lRet MV_PAR04 := aMV_PARBkp[1] := VV1->VV1_CODMAR MV_PAR05 := aMV_PARBkp[2] := VV1->VV1_MODVEI MV_PAR06 := aMV_PARBkp[3] := VV1->VV1_CORVEI EndIf EndIf Else lRet := .t. EndIf DbSelectArea("VV1") DbSetOrder(1) EndIf Case nPar == 4 // Marca DbSelectArea("VE1") DbSetOrder(1) If !Empty(MV_PAR04) .and. DbSeek(xFilial("VE1")+MV_PAR04) lRet := .t. EndIf If Empty(MV_PAR04) .or. ( lRet .and. MV_PAR04 <> aMV_PARBkp[1] ) lRet := .t. MV_PAR01 := Space(TamSX3("VVA_CODPED")[1]) MV_PAR02 := Space(TamSX3("VVA_NUMPED")[1]) MV_PAR03 := Space(TamSX3("VVA_CHASSI")[1]) MV_PAR05 := Space(TamSX3("VVA_MODVEI")[1]) MV_PAR06 := Space(TamSX3("VVA_CORVEI")[1]) EndIf If lRet aMV_PARBkp[1] := MV_PAR04 EndIf Case nPar == 5 // Modelo DbSelectArea("VV2") DbSetOrder(1) If !Empty(MV_PAR05) .and. DbSeek(xFilial("VV2")+MV_PAR04+MV_PAR05) lRet := .t. EndIf If Empty(MV_PAR05) .or. ( lRet .and. MV_PAR05 <> aMV_PARBkp[2] ) lRet := .t. MV_PAR01 := Space(TamSX3("VVA_CODPED")[1]) MV_PAR02 := Space(TamSX3("VVA_NUMPED")[1]) MV_PAR03 := Space(TamSX3("VVA_CHASSI")[1]) EndIf If lRet aMV_PARBkp[2] := MV_PAR05 If MV_PAR07 <= 0 .and. !Empty(MV_PAR05) MV_PAR07 := FS_VLRVEI(MV_PAR06) // Carregar Valor do Veiculo EndIf EndIf Case nPar == 6 // Cor DbSelectArea("VVC") DbSetOrder(1) If !Empty(MV_PAR06) .and. DbSeek(xFilial("VVC")+MV_PAR04+MV_PAR06) lRet := .t. EndIf If Empty(MV_PAR06) .or. ( lRet .and. MV_PAR06 <> aMV_PARBkp[3] ) lRet := .t. MV_PAR01 := Space(TamSX3("VVA_CODPED")[1]) MV_PAR02 := Space(TamSX3("VVA_NUMPED")[1]) MV_PAR03 := Space(TamSX3("VVA_CHASSI")[1]) EndIf If lRet aMV_PARBkp[3] := MV_PAR06 If MV_PAR07 <= 0 .and. !Empty(MV_PAR06) DbSelectArea("VV2") DbSetOrder(1) If !Empty(MV_PAR05) .and. DbSeek(xFilial("VV2")+MV_PAR04+MV_PAR05) MV_PAR07 := FS_VLRVEI(MV_PAR06) // Carregar Valor do Veiculo EndIf EndIf EndIf Case nPar == 7 // Valor If MV_PAR07 >= 0 lRet := .t. EndIf Case nPar == 8 // Vlr.Associacao If MV_PAR08 >= 0 lRet := .t. EndIf OtherWise lRet := .t. EndCase If lRet .and. ExistBlock("VX030VLD") lRet := ExecBlock("VX030VLD",.f.,.f.,{ "MV_PAR"+strzero(nPar,2) }) EndIf Return lRet | ||||||
Programa Fonte: | VEIXX030.PRW | ||||||
Função: | VX030VVAVL() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ VX030VLD º Autor ³ MIL º Data ³ 15/04/2020 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Executado na validacao dos campos dos itens no Fat.Direto, º±±
±±º ³ alem do TudoOK nesta tela (MV_PAR00) º±±
±±º ³ Retorno do Ponto de Entrada deve ser logico ( .t. ou .f. ) º±±
±±º ³ Caso desejar manipular o conteudo de algum campo na tela, º±±
±±º ³ atribuir valor para a variavel correspondente. Exemplos: º±±
±±º ³ MV_PAR08 := 1000 º±±
±±º ³ MV_PAR10 := "TESTE" º±±
±±º ³ MV_PAR11 := dDataBase+15 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function VX030VLD()
Local lRet := .t.
Local cNomVar := ParamIXB[01]
/////////////////////////////////////////////////
// //
// 'cNomVar' = Nome da variável correspondente //
// ao campo da tela: //
// //
// MV_PAR01, MV_PAR02, MV_PAR03,... , MV_PARXX //
// //
// Onde XX é o número corresponde ao último //
// campo da tela (no padrão é 08). Este número //
// pode ser maior dependendo da existência de //
// campos que foram customizados e inseridos //
// na tela através de outro PE 'VXX30VVA' //
// //
// Este Ponto de Entrada 'VX030VLD' também é //
// executado no TudoOk da tela. Neste caso, //
// o parametro enviado é MV_PAR00. //
// //
/////////////////////////////////////////////////
If !MsgYesNo( "Ponto de Entrada VX030VLD executado com sucesso!"+CHR(13)+CHR(10)+CHR(13)+CHR(10)+cNomVar+" ok ?" , "Atenção")
lRet := .f.
EndIf
Return lRet