Árvore de páginas

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:
NomeTipoDescrição

MV_PAR00, MV_PAR01, MV_PAR02, etc

Tipo do campo cadastrado

É executado no TudoOk da tela. Neste caso, o parametro enviado é MV_PAR00.

É executado também campo a campo, onde o Nome da variável corresponde ao campo da tela: MV_PAR01, MV_PAR02, MV_PAR03, etc , MV_PARXX. Onde XX é o número correspondente 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'.

Retorno:
NomeTipoDescrição

lRet

Lógico

Validação Ok ?

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