Histórico da Página
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