Tempo aproximado para leitura: 00:05:00 min
Dúvida
Como configurar Pro rata na medição de orçamentos recorrentes?
Ambiente
Prestadores de Serviços - SIGATEC - a partir da versão P12.1.2310.
Solução
Para solucionar essa dúvida, realize os seguintes passos:
1. Orçamentos desagrupados (MV_GSDSGCN = 1) e recorrentes (TFJ_CNTREC = 1);
2. Crie o seguinte gatilho pelo configurador;
| Campo | Conteúdo |
| Campo |
TFF_PRFIM |
|
Sequencia |
001 |
| Cnt. Dominio | TFF_VLORPA |
| Tipo | Primário |
| Regra | U_ValFinal() |
| Posiciona | Não |
| Condição | U_ValidRec() |
3. Efetuar aplicação do ponto de entrada abaixo:
#INCLUDE "PROTHEUS.CH"#INCLUDE "FWMVCDEF.CH"User Function ValFinal()Local nDataIni := Day(FwFldGet("TFF_PERINI")) //dia de inicio do contratoLocal nDtFimMes := Day(FwFldGet("TFF_PERFIM")) // dia de fim do contratoLocal nMes := Month(FwFldGet("TFF_PERFIM"))Local nAno := Year(FwFldGet("TFF_PERFIM"))Local cCompet := ""Local cCodTFJ := FwFldGet("TFJ_CODIGO")Local nDataFim := 30 // ultimo dia do mesLocal nDtPerfim := 30 // ultimo dia do mesLocal nDtIniPer := Day(FirstDate(FwFldGet("TFF_PERFIM"))) // primeiro dia do mesLocal nValor := FwFldGet("TFF_PRCVEN") // preço de venda do contratoLocal nQtd := FwFldGet("TFF_QTDVEN") // preço de venda do contratoLocal nValProx := FwFldGet("TFF_VLPRPA")Local cCompetAnt := At740GtPer()Local nMesAnt := 0Local nAnoAnt := 0Local oModel := FwModelActive()Local lAltera := .T.If !Empty(cCompetAnt)nMesAnt := Month(cCompetAnt)nAnoAnt := Year(cCompetAnt)If Len(cValToChar(nMesAnt)) == 1cCompetAnt := "0" + cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt)ElsecCompetAnt := cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt)EndIfEndIfIf Len(cValToChar(nMes)) == 1cCompet := "0" + cValToChar(nMes) + "/" + cValToChar(nAno)ElsecCompet := cValToChar(nMes) + "/" + cValToChar(nAno)EndIfIf isInCallStack("TECA870")//Só realiza o calculo quando o mes e ano do periodo final for o mesmo do periodo inicialIf Month(dDataBase) == Month(FwFldGet("TFF_PERFIM")) .And. Year(dDataBase) == Year(FwFldGet("TFF_PERFIM")) .And. Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI"))nValor := (nValor/nDtPerfim)*((nDtFimMes-nDtIniPer)+1)ElselAltera := .F.If Year(FwFldGet("TFF_PERFIM")) <> Year(FwFldGet("TFF_PERINI"))If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM")))nValor := (nValor/nDataFim)*((nDataFim-1)+1)ElsenValor := (nValor/nDataFim) * nDtFimMesEndIfElseIf Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI"))If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM")))nValor := (nValor/nDataFim)*((nDataFim-1)+1)ElsenValor := (nValor/nDataFim) * nDtFimMesEndIfElsenValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)EndIfEndIfEndIfElseIf Month(FwFldGet("TFF_PERFIM")) == Month(FwFldGet("TFF_PERINI")) .And. Year(FwFldGet("TFF_PERFIM")) == Year(FwFldGet("TFF_PERINI"))If nDtFimMes == LastDate(FwFldGet("TFF_PERFIM"))nValor := (nValor/nDataFim)*30ElsenValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)EndIfElsenValor := (nValor/nDataFim) * nDtFimMeslAltera := .F.EndIfEndIf//Arredonda o valornValor := nValor * nQtdnValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])If nValor > 0//Atualiza o cronogramaAt740IAuto("TFF", FwFldGet("TFF_COD"), cCompet, nValor, cCodTFJ,cCompetAnt,nDtFimMes < Day(LastDate(FwFldGet("TFF_PERFIM"))))EndIfIf !lAlteranValor := nValProxEndIfFWModelActive(oModel)Return nValorUser Function ValidRec()Local lRet := .F.Local lIsRecorrente := FwFldGet("TFJ_CNTREC") == "1"Local lIsItenExtra := FwfldGet("TFF_COBCTR") == "2"//Só será executado para contratos recorrentes e não será executado para item extraIf lIsRecorrente .And. !lIsItenExtralRet := .T.EndIfReturn lRet
A função ValidRec() é criada para garantir que o gatilho não vai ser executado para contratos não recorrentes e itens extras
Saiba Mais: DSERSGS-10968 DT Gatilho de pro-rata para o campo Dt.Fim
0 Comentários