Árvore de páginas

Ponto de Entrada 

Descrição:

Este ponto de entrada está localizado nas rotinas Req Peças (OFIOM020) e Req Serviços/Apont (OFIOM030), tendo como finalidade verificar se será feita a análise de crédito do cliente selecionado como Faturar Para.

O ponto de entrada é chamado nos seguintes pontos:

Req Peças (OFIOM020): Alteração da Requisição / FieldOK dos campos VO3_QTDREQ e VO3_QTD2UM / Importação de Peças Oriúndas do Orçamento na Requisição.

Req Serviços/Apont (OFIOM030): Alteração da Requisição / FieldOK dos campos VO4_TIPTEM, VO4_TIPSER e VO4_TEMPAD.

Localização:

Atualizações \ Mov Oficina \ Req Peças (OFIOM020)

Atualizações \ Mov Oficina \ Req Serviços/Apont (OFIOM030)

Eventos:

Req Peças (OFIOM020) - TudoOK para Gravação da Requisição


Function FS_TUDOK020()


Local nCont

Local nPosFORMUL, nPosCODTES

Local lRetorno := .t.

Local lVerTpgCC := .t.


Local cResCliente := ""

Local nVO3TIPTEM := FG_POSVAR("VO3_TIPTEM")

Local nVO3FATPAR := FG_POSVAR("VO3_FATPAR")

Local nVO3LOJA := FG_POSVAR("VO3_LOJA")

Local nVO3NOMCLI := FG_POSVAR("VO3_NOMCLI")


// Requisicao

If cReqDev == "1"


// Se avalia credito na requisicao, limpa a matriz para levar os valores atuais ...

If "P" $ cMVCHKCRE

aAvCred := {}

EndIf

//


nPosFORMUL := FG_POSVAR("VO3_FORMUL")

nPosCODTES := FG_POSVAR("VO3_CODTES")


SF4->(dbSetOrder(1))

For nCont := 1 to Len(aCols)

If aCols[nCont,Len(aCols[nCont])]

Loop

EndIf


If OFP8600016 .And. !OFP8600016_VerificacaoFormula(aCols[nCont,nPosFORMUL])

lRetorno := .f. // A mensagem já é exibida dentro da função

Exit

EndIf


If !SF4->(MsSeek(xFilial("SF4") + aCols[nCont,nPosCODTES]))

Help(" ",1,"REGNOIS",,AllTrim(RetTitle("VO3_CODTES")) + ": " + aCols[nCont,nPosCODTES] + CHR(13) + CHR(10) + STR0135 + ": " + AllTrim(Str(nCont)) ,4,0)

lRetorno := .f.

Exit

EndIf



// Requisicao importada de orcamento

If aCols[nCont,FG_POSVAR("VO3_IMPORC")] == "1"


if lInconveniente

nPosOrc := aScan(aPecaOrc, {|x| x[06] == aCols[nCont,FG_POSVAR("VO3_GRUITE")] .and. x[07] == aCols[nCont,FG_POSVAR("VO3_CODITE")] .and. x[20] == aCols[nCont,FG_POSVAR("VO3_SEQINC")] .and. x[02] == aCols[nCont,FG_POSVAR("VO3_TIPTEM")] .and. x[03] == aCols[nCont,FG_POSVAR("VO3_FATPAR")] .and. x[04] == aCols[nCont,FG_POSVAR("VO3_LOJA")] })

else

nPosOrc := aScan(aPecaOrc, {|x| x[06] == aCols[nCont,FG_POSVAR("VO3_GRUITE")] .and. x[07] == aCols[nCont,FG_POSVAR("VO3_CODITE")] .and. x[02] == aCols[nCont,FG_POSVAR("VO3_TIPTEM")] .and. x[03] == aCols[nCont,FG_POSVAR("VO3_FATPAR")] .and. x[04] == aCols[nCont,FG_POSVAR("VO3_LOJA")] })

endif


If nPosOrc == 0

Loop

EndIf


If !OM020CMPTES( aPecaOrc[nPosOrc,19] , aCols[nCont,FG_POSVAR("VO3_CODTES")] , chr(13) + chr(10) + RetTitle("VO3_CODITE") + ": " + aCols[nCont,FG_POSVAR("VO3_GRUITE")] + " - " + aCols[nCont,FG_POSVAR("VO3_CODITE")] )

lRetorno := .f.

Exit

EndIf


EndIf

//


// Validacao por Ponto de Entrada

If PEVERTPGCC // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC", .f., .f., {"OFIOM020"})

EndIf


If lVerTpgCC

// Verifica Credito do Cliente

if "P" $ cMVCHKCRE

If !((aCols[nCont, nVO3FATPAR]+ aCols[nCont,nVO3LOJA]+"/") $ cResCliente)

cResCliente += aCols[nCont, nVO3FATPAR]+ aCols[nCont,nVO3LOJA] + "/"

If !OM020AVCRED( aCols[nCont, nVO3FATPAR] , aCols[nCont,nVO3LOJA], aCols[nCont,nVO3TIPTEM] , FS_TOTAL( aCols[nCont, nVO3FATPAR] , aCols[nCont,nVO3LOJA] ,.f.,.T.) )

lRetorno := .f.

Exit

EndIf

Endif

EndIf

EndIf


Req Peças (OFIOM020) - Alteração da Requisição

Function FS_ALTREQ()


Local lLimCre := .T. , nValor := 0 ,lTPGRU := .t. , i := 0 , iP := 0 , iPA := 0 , iS := 0

Local lRet := .t. , nPosPeca := 0, nwnk := 0

Local aItensNew:={}

Local lMovEstoque := .t. // Indica se movimentara estoque (TES)


Local lIgual // Controla se a Linha de aPecas for igual a aPecasAlt

Local lCpoDesconto := (VO3->(FieldPos("VO3_VALDES")) <> 0 .and. VO3->(FieldPos("VO3_PERDES")) <> 0 .and. VO3->(FieldPos("VO3_VALLIQ")) <> 0)

Local lAltCli := .f.

Local cAliasVFB := "SQLVFB"


Local aPecBKP := aClone( aPecas ) // Backup da Array aPecas

Local aPecAltBKP := aClone( aPecasAlt ) // Backup da Array aPecasAlt


Local lAltDpI := .f.

Local lAltDpG := .f.


Local lVO3SEQINC := (VO3->(FieldPos("VO3_SEQINC")) <> 0)

Local aLockVO3 := {}

Local aLockVO4 := {}


Local oPeca := DMS_Peca():New()

Local oOficina := DMS_Oficina():New()


Local nPosAEstq

Local nUltPos


Local nTamAEstq := 0

Local l261IntWMS := a261IntWMS()


Local lSEMAF261 := (GetNewPar("MV_MIL0130","0")=="1") // Utiliza semáforo na Movimentação de Pecas da rotina Requisição de Pecas (0-Nao, 1-Sim)

///////////////////////////////////////////////////

// Posicoes no Vetor de Integracao com o MATA261 //

///////////////////////////////////////////////////

nTamAEstq := 21

If l261IntWMS

nTamAEstq += 1

EndIf

nTamAEstq += 1

If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS

nTamAEstq += 1

EndIf

If SD3->(FieldPos("D3_OBSERVA")) <> 0

nTamAEstq += 1

EndIf

///////////////////////////////////////////////////


if oCLiente:Bloqueado(M->VO3_FATPAR, M->VO3_LOJA, .T.)

Return(.f.)

EndIf


If !FMX_TTVLDCLIENTE( VO1->VO1_NUMOSV, M->VO3_TIPTEM , M->VO3_FATPAR , M->VO3_LOJA )

Return .f.

EndIf


If !FG_FATSP(M->VO3_TIPTEM,M->VO3_FATPAR+M->VO3_LOJA,"M->VO3_NOMCLI","A1_NOME")

If !MsgYesNo(STR0074+" "+M->VO3_TIPTEM,STR0075) //Sera Alterado todos os clientes do tipo de tempo###Atencao!!!

Return(.f.)

Else

lAltCli := .t.

EndIf

EndIf


If oOficina:TipoTempoBloqueado(M->VO3_TIPTEM,.t.) // Valida se Tipo de Tempo esta BLOQUEADO

Return(.f.)

EndIf

If VOI->VOI_DEPINT == "1" // Tipo de Tempo Interno

If Empty(M->VO3_DEPINT)

MsgStop(STR0121+CHR(13)+CHR(10)+CHR(13)+CHR(10)+STR0068,STR0075) // Departamento não informado! / Dep Interno / Atencao

Return(.f.)

EndIf

lAltDpI := .t.

ElseIf VOI->VOI_DEPGAR == "1" // Tipo de Tempo Garantia

If Empty(M->VO3_DEPGAR)

MsgStop(STR0121+CHR(13)+CHR(10)+CHR(13)+CHR(10)+STR0069,STR0075) // Departamento não informado! / Dep Garantia / Atencao

Return(.f.)

EndIf

lAltDpG := .t.

EndIf


aEval(aPecasAlt,{ |x| x[1] := .f. })


For i:=1 to Len(aPecas)

For iPA:=1 to Len(aPecasAlt)

If aPecasAlt[iPA,18] == aPecas[i,17]

If aPecas[i,1]

If aPecasAlt[iPA,3] == "0"

nValor := nValor - aPecasAlt[iPA,9]

Else

nValor := nValor + aPecasAlt[iPA,9]

EndIf

EndIf


aPecasAlt[iPA,1] := aPecas[i,1]

EndIf

Next

If aPecas[i,1]

// Servicos

If Len(aServicos)#0 .And. aScan(aServicos,{|x| x[4] == aPecas[i,2]}) # 0

For iS:=1 to Len(aServicos)

// Mesmo Tipo de Tempo

If aServicos[iS,4] == aPecas[i,2]

lIgual := .f.


// Se utiliza inconveniente, a Sequencia deve ser a mesma

if lInconveniente

if aServicos[iS,12] == aPecas[i,13]

lIgual := .t.

endif

else

lIgual := .t.

endif

//


if lIgual

aServicos[iS,1] := aPecas[i,1]

endif


nValor := nValor + aServicos[iS,8]

EndIf

Next

EndIf

EndIf

Next


// Alterar

lMsHelpAuto := .F.

//Validacao por Ponto de Entrada

If ExistBlock("OM020ALT") // Valida antes da Requisicao

lRet := ExecBlock("OM020ALT",.f.,.f.)

If !lRet

Return (.f.)

Endif

Endif


If !lAltCli

nValor := 0

Endif


//Validacao por Ponto de Entrada

lVerTpgCC := .t.

If PEVERTPGCC // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC",.f.,.f.,{"OFIOM020"})

Endif


If lVerTpgCC


If "P" $ cMVCHKCRE .And. !(VOI->VOI_SITTPO $ "2/3/4")


If !FGX_AVALCRED(M->VO3_FATPAR,M->VO3_LOJA,nValor,.t.)

Help(" ",1,"LIMITECRED")

lRet := .f.

Return(.t.)

EndIf


EndIf


Endif


Req Peças (OFIOM020) - FieldOK dos campos VO3_QTDREQ e VO3_QTD2UM


Function FS_FIELD020(lExeFGMEMVAR)


Local nPosCODITE := 0

Local aInconv


Local lRet := .t.

Local lCpoDesconto

Local _cReadVar := Readvar()

Local cAuxTES

Local cSQL

Local cAuxSG


Local cLocal

Local cLocaliz


Local oOficina := DMS_Oficina():New()


Default lExeFGMEMVAR := .t.


If lExeFGMEMVAR

FG_MEMVAR()

EndIf


lReadTipT := .f.

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Indica se os campos de desconto estao criado ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

if FG_POSVAR("VO3_VALDES") <> 0 .and. VO3->(FieldPos("VO3_VALDES")) <> 0 .and. ;

FG_POSVAR("VO3_PERDES") <> 0 .and. VO3->(FieldPos("VO3_PERDES")) <> 0 .and. ;

VO3->(FieldPos("VO3_VALLIQ")) <> 0

lCpoDesconto := .t.

endif


//ÚÄÄÄÄÄÄÄÄÄÄ¿

//³Requisicao³

//ÀÄÄÄÄÄÄÄÄÄÄÙ

If cReqDev == '1'


if !Empty(M->VO3_GRUITE) .and. !Empty(M->VO3_CODITE)

if M->VO3_GRUITE+M->VO3_CODITE <> SB1->B1_GRUPO+SB1->B1_CODITE

SB1->(DbSetOrder(7))

SB1->(DbSeek(xFilial("SB1")+M->VO3_GRUITE+M->VO3_CODITE))

EndIf

EndIf


if Empty(aCols[n,FG_POSVAR("VO3_TIPTEM")]) .and. !Empty(cTpTpoPEVM)

aCols[n,FG_POSVAR("VO3_TIPTEM")] :=cTpTpoPEVM

M->VO3_TIPTEM := cTpTpoPEVM

lReadTipT := .t.

endif

if !Empty(cProdPEVM) // Empty(aCols[n,FG_POSVAR("VO3_PROREQ")]) .and.

aCols[n,FG_POSVAR("VO3_PROREQ")] :=cProdPEVM

M->VO3_PROREQ := cProdPEVM

endif


If ReadVar() $ 'M->VO3_QTDREQ' .OR. ReadVar() $ "M->VO3_QTD2UM"


If !Empty(M->VO3_LOTECT)

OM020LOCAL( n , @cLocal , @cLocaliz )

If !FG_RASTRO(M->VO3_GRUITE,M->VO3_CODITE,M->VO3_QTDREQ,M->VO3_LOTECT,M->VO3_NUMLOT,,,cLocal)

Return .f.

EndIf

EndIf


If ReadVar() == "M->VO3_QTD2UM"

M->VO3_QTDREQ := Round(Iif(SB1->B1_TIPCONV=="M",M->VO3_QTD2UM/SB1->B1_CONV,M->VO3_QTD2UM*SB1->B1_CONV),TamSX3("VO3_QTDREQ")[2])

aCols[n,FG_POSVAR("VO3_QTDREQ")]:= M->VO3_QTDREQ

EndIf

If ReadVar() == "M->VO3_QTDREQ" .and. FG_POSVAR("VO3_QTD2UM") > 0

M->VO3_QTD2UM := Round(Iif(SB1->B1_TIPCONV=="M",M->VO3_QTDREQ*SB1->B1_CONV,M->VO3_QTDREQ/SB1->B1_CONV),TamSX3("VO3_QTDREQ")[2])

aCols[n,FG_POSVAR("VO3_QTD2UM")]:= M->VO3_QTD2UM

EndIf


//Validacao por Ponto de Entrada

lVerTpgCC := .t.

If PEVERTPGCC // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC", .f., .f., {"OFIOM020"})

EndIf


If lVerTpgCC

// Sempre chama a avaliacao para atualizar tambem o total (FS_TOTAL)

If "P" $ cMVCHKCRE .and. GetNewPar("MV_MIL0138","1") <> "0" // Checagem do limite de Credito do Cliente, Peça a Peça

If !OM020AVCRED(M->VO3_FATPAR, M->VO3_LOJA, M->VO3_TIPTEM, FS_TOTAL(M->VO3_FATPAR, M->VO3_LOJA, .T., .T.))

Return .f.

EndIf

EndIf

EndIf

EndIf


Req Peças (OFIOM020) - Importação de Peças Oriúndas do Orçamento na Requisição.


Static Function OM0200091_LimiteCreditoPecasOrcamento( nRegIni , nRegFin , lCheckALL )

Local nReg := 0

Local lVerTpgCC := .t.

Local nTotalImp := 0

Local lVldCrd := .f.

Local aCliJaOk := {}

Default lCheckALL := .t.


//Validacao por Ponto de Entrada

If PEVERTPGCC // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC",.f.,.f.,{"OFIOM020"})

Endif


Req Serviços/Apont (OFIOM030) - TudoOK para Gravação da Requisição


Function FS_030TUDOK()


Local lRet := .t.

Local lVerTpgCC := .t.

Local aAuxaCols

Local aAuxaHeader

Local aAvCred := {}

Local ni := 0

Local nAvCred := 0

Local nVlHrTab := 0


If lOM030Auto .or. oFolder030:nOption == 1

aAuxaHeader := aClone(aHeader)

aAuxaCols := aClone(aCols)

Else

aAuxaHeader := aClone(aHeaderSrv)

aAuxaCols := aClone(aColsSrv)

EndIf


For ni := 1 to Len(aAuxaCols)

If !aAuxaCols[ni,Len(aAuxaCols[ni])]

lRet := OM030GRUSRV(aAuxaCols[ni,FG_POSVAR("VO4_GRUSER","aHeaderSrv")],;

aAuxaCols[ni,FG_POSVAR("VO4_TIPTEM","aHeaderSrv")],;

VV1->VV1_CODMAR,;

.t.)

If !lRet

Exit

EndIf


// Montar vetor de Credito com as novas Requisições

If aAuxaCols[ni,FG_POSVAR("VO4_REC_WT","aHeaderSrv")] == 0

nAvCred := aScan(aAvCred, { |x| x[1] == aAuxaCols[ni,FG_POSVAR("VO4_FATPAR","aHeaderSrv")] .And. x[2] == aAuxaCols[ni,FG_POSVAR("VO4_LOJA","aHeaderSrv")] })

If nAvCred == 0

AADD(aAvCred, Array(03))

nAvCred := Len(aAvCred)


aAvCred[nAvCred,01] := aAuxaCols[ni,FG_POSVAR("VO4_FATPAR","aHeaderSrv")]

aAvCred[nAvCred,02] := aAuxaCols[ni,FG_POSVAR("VO4_LOJA","aHeaderSrv")]

aAvCred[nAvCred,03] := 0

EndIf


nVlHrTab := (FG_ValHor(aAuxaCols[ni,FG_POSVAR("VO4_TIPTEM","aHeaderSrv")], ;

OM030TPVLSRV(aAuxaCols[ni,FG_POSVAR("VO4_TIPTEM","aHeaderSrv")], ;

M->VO4_NOSNUM), ;

"1", ;

aAuxaCols[ni,FG_POSVAR("VO4_VALHOR","aHeaderSrv")], ;

VV1->VV1_CODMAR, ;

aAuxaCols[ni,FG_POSVAR("VO4_CODSER","aHeaderSrv")], ;

aAuxaCols[ni,FG_POSVAR("VO4_TIPSER","aHeaderSrv")], ;

aAuxaCols[ni,FG_POSVAR("VO4_FATPAR","aHeaderSrv")], ;

aAuxaCols[ni,FG_POSVAR("VO4_LOJA","aHeaderSrv")]) ;

* (Val(Left(StrZero(aAuxaCols[ni,FG_POSVAR("VO4_TEMPAD","aHeaderSrv")], 4), 2)) * 60);

+ Val(Right(StrZero(aAuxaCols[ni,FG_POSVAR("VO4_TEMPAD","aHeaderSrv")], 4), 2)) ) / 60


aAvCred[nAvCred,03] += nVlHrTab

EndIf

EndIf

Next


If lRet .And. Len(aAvCred) > 0

For ni := 1 To Len(aAvCred)

// Validacao por Ponto de Entrada

If ExistBlock("VERTPGCC") // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC",.f.,.f.,{"OFIOM030"})

Endif


If lVerTpgCC

// Verifica Credito do Cliente

If "S" $ GetMv("MV_CHKCRE") .And. !(VOI->VOI_SITTPO $ "2/3/4")

If !OM0200045_ChecaCredGar()

lRet := .t.

Exit

Endif


If !FGX_AVALCRED(aAvCred[ni,01], aAvCred[ni,02], aAvCred[ni,03], .t.)

lRet := .f.

Help(" ",1,"LIMITECRED")

Exit

EndIf

EndIf

EndIf

Next

EndIf


Req Serviços/Apont (OFIOM030) - Alteração da Requisição


Function FS_ALTSRV()


Local i := 0 , iP := 0 , nValor := 0 , nVlHrTab := 0

Local lLimCre := .T. , lRet := .t. , aItensNew:={}

Local lInconveniente := (GetNewPar("MV_INCORC","N") == "S")

Local lAltCli := .f.


Local lConsidera := .t.


Local lAltDpI := .f.

Local lAltDpG := .f.


Local oOficina := DMS_Oficina():New()


Private lMsHelpAuto := .t. , lMsErroAuto := .t., lMsFinalAuto := .f.


if oCLiente:Bloqueado(M->VO4_FATPAR , M->VO4_LOJA, .T.)

Return(.f.)

EndIf


If !FG_FATSP(M->VO4_TIPTEM,M->VO4_FATPAR+M->VO4_LOJA,"M->VO4_NOMCLI","A1_NOME")


If !MsgYesNo(STR0065+" "+M->VO4_TIPTEM,STR0066) //"Sera Alterado todos os clientes do tipo de tempo"###"Atencao!!!"

Return(.f.)

Else

lAltCli := .t.

EndIf


EndIf


If oOficina:TipoTempoBloqueado(M->VO4_TIPTEM,.t.) // Valida se Tipo de Tempo esta BLOQUEADO

return .f.

EndIf


If VOI->VOI_DEPINT == "1" // Tipo de Tempo Interno

If !Empty(M->VO4_DEPINT)

lAltDpI := .t.

Endif

ElseIf VOI->VOI_DEPGAR == "1" // Tipo de Tempo Garantia

If !Empty(M->VO4_DEPGAR)

lAltDpG := .t.

Endif

EndIf


//Validacao por Ponto de Entrada

If ExistBlock("OM030VAS") // Valida Alteração do Servico

lRet := ExecBlock("OM030VAS",.f.,.f.)

If !lRet

Return (.f.)

Endif

Endif


VOX->( DbSetOrder(1) )

lConsidera := .t.

if VOI->(FieldPos("VOI_CONVOX")) > 0

VOI->(DbSetOrder(1))

VOI->(DbSeek( xFilial("VOI") + M->VO4_TIPTEM ))

if VOI->VOI_CONVOX == "0"

lConsidera := .f.

endif

endif

If lConsidera .and. !Empty(M->VO4_TIPSER)

If !VOX->( DbSeek( xFilial("VOX") + M->VO4_TIPSER + M->VO4_TIPTEM))

lMsHelpAuto := .F.

Help(1," ","TPSERTEM",,M->VO4_TIPSER+" - "+M->VO4_TIPTEM ,4,1)

lMsHelpAuto := .T.

Return(.f.)

EndIf

EndIf


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³Marca as pecas com mesmo tipo de tempo dos servicos selecionados para alteracao³

//³Calcula valor total que ficara para verificar o credito do FATURAR PARA ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

For i := 1 to Len(aServicos)


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³Servico marcado para alteracao³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If aServicos[i,1]


lMensagem := .t.


// Se exigir relacao do tipo de tempo com tipo de servico (VOX) e nao for informado o tipo de servico

// na alteracao, verifica relacao com o TIPO DE SERVICO atual

If lConsidera .and. Empty(M->VO4_TIPSER)

If !VOX->( MsSeek( xFilial("VOX") + aServicos[i,13] + M->VO4_TIPTEM))


If lMensagem

lMsHelpAuto := .F.

Help(1," ","TPSERTEM",,aServicos[i,13]+" - "+M->VO4_TIPTEM ,4,1)

lMsHelpAuto := .T.

EndIf


Return(.f.)


EndIf

EndIf


nValor := nValor + aServicos[i,9]


// Pecas

If Len(aPecas)#0 .And. aScan(aPecas,{|x| x[3] == aServicos[i,2]}) # 0


For iP:=1 to Len(aPecas)


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³Peca com mesmo TT do Servico³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If aPecas[iP,3] == aServicos[i,2]


if lInconveniente .and. !aPecas[iP,3] <> aServicos[i,14]

loop

endif


aPecas[iP,1] := aServicos[i,1]


If aPecas[iP,2] =="0"

nValor := nValor - aPecas[iP,8]

Else

nValor := nValor + aPecas[iP,8]

EndIf


EndIf


Next


EndIf


EndIf


Next


If !lAltCli

nValor := 0

Endif


lMsHelpAuto := .f.


lVerTpgCC := .t.

If ExistBlock("VERTPGCC") // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC",.f.,.f.,{"OFIOM030"})

Endif


Req Serviços/Apont (OFIOM030) - FieldOK dos campos VO4_TIPTEM, VO4_TIPSER e VO4_TEMPAD


Function FS_030VALID(cLinhaField, lRestaura)


Local nPosTipSer := 0 ,nSit := 0

Local cTTSrv , cReadVarOld := ReadVar()

Local aSitMec := {}

Local ni := 0

Local nQtdMec := 0

Local aProdTrab := {}

Local aInconv, nPosCODITE

Local lInconveniente := (GetNewPar("MV_INCORC","N") == "S")


Local oOficina := DMS_Oficina():New()


lReadTipT := .f.


Default lRestaura := .f.


// Chamada pelo FieldOK

If cLinhaField == "F"


If !lAlterou

lAlterou := .t.

EndIf


FG_MEMVAR()


//Validacao por Ponto de Entrada

If ExistBlock("OM030VLD")

lRet := ExecBlock("OM030VLD",.f.,.f.,{__ReadVar})

If !lRet

Return (.f.)

Endif

Endif

// Aba de Servicos

If lOM030Auto .or. oFolder030:nOption == 1


if Empty(aCols[n,FG_POSVAR("VO4_TIPTEM")]) .and. !Empty(cTpTpoPEVM)

aCols[n,FG_POSVAR("VO4_TIPTEM")] :=cTpTpoPEVM

M->VO4_TIPTEM := cTpTpoPEVM

lReadTipT := .t.

endif


// Verifica se o tipo de tempo esta posicionado corretamente ...

If oOficina:TipoTempoBloqueado(M->VO4_TIPTEM,.t.) // Valida se Tipo de Tempo esta BLOQUEADO

return .f.

EndIf

//


nPosTipSer := Ascan(aCols,{ |x| x[FG_POSVAR("VO4_CODSER")] == M->VO4_CODSER .and. x[Len(x)] == .f. } )


If ReadVar() == "M->VO4_TIPSER" .And. (Empty(aCols[n,FG_POSVAR("VO4_TIPSER")]) .Or. aCols[n,FG_POSVAR("VO4_TIPSER")] # M->VO4_TIPSER) ;

.And. nPosTipSer # 0 .And. nPosTipSer # n ;

.And. !(VOK->VOK_INCMOB $ "2/6")


Help(" ",1,"SRVJAREQ")

Return(.f.)


EndIf


If !Empty(M->VO4_TIPSER)

VOK->(dbSetOrder(1))

VOK->(MsSeek(xFilial("VOK") + M->VO4_TIPSER))

EndIf


If ReadVar() == "M->VO4_GRUSER"

If !OM030GRUSRV(M->VO4_GRUSER,;

M->VO4_TIPTEM,;

VV1->VV1_CODMAR,;

.t.)

Return(.f.)

EndIf


EndIf


If ReadVar() == "M->VO4_CODSER"


FS_DUPLAPM(M->VO4_CODSER)

// FS_AGRUSER(VV1->VV1_CODMAR,VV1->VV1_MODVEI,M->VO4_CODSER)


If !FG_GARANTIA( VO1->VO1_CHAINT , M->VO4_TIPTEM , , , M->VO4_CODSER , dDataBase , VO1->VO1_KILOME )

Return(.f.)

EndIf


M->VO4_VALHOR := aCols[n,FG_POSVAR("VO4_VALHOR")] := FG_ValHor(M->VO4_TIPTEM,OM030TPVLSRV(M->VO4_TIPTEM,M->VO4_NOSNUM),,,VV1->VV1_CODMAR,M->VO4_CODSER,M->VO4_TIPSER,M->VO4_FATPAR,M->VO4_LOJA)


if lInconveniente

// Se a OS utilizou ao menos um inconveniente, deve ser selecionado um inconveniente para o item

if Empty(aCols[n,FG_POSVAR("VO4_SEQINC")])

// Procura um item com inconveniente selecinado

nPosCODITE := Ascan(aCols,{|x| !Empty(x[FG_POSVAR("VO4_SEQINC")]) })


// Se tiver um item com inconveniente ou ja tiver uma peca requisitada com um inconveniente ...

if nPosCODITE <> 0 .or. OM420UTILINC( "2" , VO1->VO1_NUMOSV )

aInconv := OM420SELINCON(aCols, { FG_POSVAR("VO4_SEQINC") , ;

FG_POSVAR("VO4_GRUINC") , ;

FG_POSVAR("VO4_CODINC") , ;

FG_POSVAR("VO4_DESINC") } , oMainWnd , "2" , VO1->VO1_NUMOSV )


M->VO4_GRUINC := aCols[n,FG_POSVAR("VO4_GRUINC")] := aInconv[1]

M->VO4_CODINC := aCols[n,FG_POSVAR("VO4_CODINC")] := aInconv[2]

M->VO4_DESINC := aCols[n,FG_POSVAR("VO4_DESINC")] := aInconv[3]

M->VO4_SEQINC := aCols[n,FG_POSVAR("VO4_SEQINC")] := aInconv[4]


endif


endif

endif


OFM0300011_PosicionaVO6( M->VO4_CODSER )


M->VO4_VALSER := aCols[n,FG_POSVAR("VO4_VALSER")] := VO6->VO6_VALSER // GRAVAR o Valor do Serviço


EndIf


If (ReadVar()$'M->VO4_TIPTEM'.Or.ReadVar()$'M->VO4_DEPINT'.Or.ReadVar()$'M->VO4_DEPGAR') .or. lReadTipT

if lReadTipT .and. !(ReadVar()$'M->VO4_TIPTEM')

__readvar := "M->VO4_TIPTEM"

FS_TPFSRV(.T.)

endif

If !FS_030INTGAR(VO1->VO1_NUMOSV,M->VO4_TIPTEM)

Return(.f.)

EndIf


EndIf


If (ReadVar()$'M->VO4_TIPTEM'.Or.ReadVar()$'M->VO4_TIPSER'.Or.ReadVar()$'M->VO4_TEMPAD') .or. lReadTipT


If ReadVar() == "M->VO4_TIPSER"


nPosTipSer := Ascan(aColsIniFim,{|x| x[FG_POSVAR("VO4_CODSER","aHeaderIniFim")] == aCols[n,FG_POSVAR("VO4_CODSER")]})


If !Empty(aCols[n,FG_POSVAR("VO4_TIPSER")]) .And. nPosTipSer # 0 .And. !(aColsIniFim[nPosTipSer,Len(aColsIniFim[nPosTipSer])]);

.And. VOK->VOK_INCMOB == "2"


Help(" ",1,"ALTTIPSER")

Return(.f.)


EndIf


// Verifica se o Srv e de Retorno

If !FS_GARSRV( M->VO2_CHASSI , M->VO4_CODSER , M->VO4_TIPSER )

Return(.f.)

EndIf


If !(VOK->VOK_INCMOB $ "2/5") // Só há valor de Hora se não for Serviço de Terceiro e Kilometragem

M->VO4_VALHOR := aCols[n,FG_POSVAR("VO4_VALHOR")] := FG_ValHor(M->VO4_TIPTEM,OM030TPVLSRV(M->VO4_TIPTEM,M->VO4_NOSNUM),,,VV1->VV1_CODMAR,M->VO4_CODSER,M->VO4_TIPSER,M->VO4_FATPAR,M->VO4_LOJA)

Endif


EndIf


// If FG_LIMCRE(M->VO4_FATPAR,M->VO4_LOJA) < (FG_ValHor(M->VO4_TIPTEM,dDataBase)* (Val(Left(StrZero(M->VO4_TEMPAD,4),2))*60)+Val(Right(StrZero(M->VO4_TEMPAD,4),2)) )/60

lVerTpgCC := .t.

If ExistBlock("VERTPGCC") // Verifica tipo de Pagamento para Checagem de Credito

lVerTpgCC := ExecBlock("VERTPGCC",.f.,.f.,{"OFIOM030"})

Endif

Programa Fonte:

OFIOM020.PRW e OFIOM030.PRW

Função:

FS_TUDOK020() / FS_ALTREQ() / FS_FIELD020() / OM0200091_LimiteCreditoPecasOrcamento() / FS_030TUDOK() / FS_ALTSRV() / FS_030VALID()

Parâmetros:

cOrigCham - Caractere - Indica qual rotina está chamando o PE. Informar conforme abaixo:

"OFIOM020" - Ponto de entrada foi chamado pela requisição de peças.

"OFIOM030" - Ponto de entrada foi chamado pela requisição de serviços.

Retorno:

lRetorno, indica se será feita análise de crédito do cliente informado no campo de Faturar Para.

 

Exemplo:

#include "TOTVS.ch"

User Function VERTPGCC()


Local cOrigCham := ParamIXB[1]

Local lRetorno := .T.


If cOrigCham == "OFIOM020"

MsgInfo("Ponto de Entrada chamado pela Requisicao de Peças")

ElseIf cOrigCham == "OFIOM030"

MsgInfo("Ponto de Entrada chamado pela Requisicao de Serviços")

EndIf


Return lRetorno