...
Informações |
---|
|
#INCLUDE "PROTHEUS.CH" #INCLUDE "FWMVCDEF.CH" User Function CalcValor() Local aAreaTFF := TFF->(GetArea()) // Salva area Local nDataIni := Day(dDataBase) Local nMes := Month(dDataBase) Local nAno := Year(dDataBase) Local dDataIniCtr := cTod("") Local dDataFimCtr := cTod("") Local cCompet := "" Local cCodTFJ := "" Local cCodTFF := "" Local nDataFim := 30 //Qtd de dias para calculo do Vlr dia. Local nValor := 0 Local nQtd := 0 Local nDtFimMes := Day(dDataBase) Local cCompetAnt := "" Local nMesAnt := 0 Local nAnoAnt := 0 Local oModel := FwModelActive() Crie o seguinte gatilho pelo configurador. Image Removed |
Campo | Conteúdo |
---|
Campo | TFF_PERINI |
Sequencia | 001 |
Cnt. Dominio | TFF_VLPRPA |
Tipo | Primário |
Regra | U_CalcValor() |
Posiciona | Não |
Condicao | U_Condicao() |
Após a criação do gatilho, inclua as seguintes funções (user function).
Bloco de código |
---|
|
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
User Function CalcValor()
Local nDataIni := Day(FwFldGet("TFF_PERINI")) //dia de inicio do contrato
Local nMes := Month(FwFldGet("TFF_PERINI"))
Local nAno := Year(FwFldGet("TFF_PERINI"))
Local cCompet := ""
Local cCodTFJ := FwFldGet("TFJ_CODIGO")
Local nDataFim := 30 //Qtd de dias para calculo do Vlr dia.
Local nValor :=
If IsInCallStack("AT870Antco")
dDataIniCtr := PARAMIXB[1]
dDataFimCtr := PARAMIXB[2]
nDataIni := Day(dDataIniCtr) //dia de inicio do contrato
nDtFimMes := Day(dDataFimCtr) // dia de fim do contrato
nMes := Month(dDataFimCtr)
nAno := Year(dDataFimCtr)
cCodTFJ := PARAMIXB[3]
nValor := PARAMIXB[4] // preço de venda do contrato
nQtd := PARAMIXB[5] // preço de venda do contrato
cCompetAnt := PARAMIXB[6]
cCodTFF := PARAMIXB[7]
Else
dDataIniCtr := FwFldGet("TFF_PERINI")
dDataFimCtr := FwFldGet("TFF_PERFIM")
nDataIni := Day(dDataIniCtr) //dia de inicio do contrato
nDtFimMes := Day(dDataFimCtr) // dia de fim do contrato
nMes := Month(dDataFimCtr)
nAno := Year(dDataFimCtr)
cCodTFJ := FwFldGet("TFJ_CODIGO")
nValor :=
FwFldGet("TFF_PRCVEN")
//
preço de venda do contrato
Local nQtd := preço de venda do contrato
nQtd := FwFldGet("TFF_QTDVEN")
// preço de venda do contrato
Local nDtFimMes := Day( // preço de venda do contrato
cCompetAnt := At740GtPer()
cCodTFF := FwFldGet("TFF_
PERFIM")) // dia de fim do contrato
Local cCompetAnt := At740GtPer()
Local nMesAnt := 0
Local nAnoAnt := 0
Local oModel := FwModelActive()
If COD")
EndIf
If !Empty(cCompetAnt)
nMesAnt
nMesAnt :=
Month(cCompetAnt)
nAnoAnt
nAnoAnt :=
Year(cCompetAnt)
If
If Len(cValToChar(nMesAnt))
==
1
cCompetAnt := 1
cCompetAnt := "0"
+
cValToChar(nMesAnt)
+
"/"
+
cValToChar(nAnoAnt)
Else
cCompetAnt :=
Else
cCompetAnt := cValToChar(nMesAnt)
+
"/"
+
cValToChar(nAnoAnt)
EndIf
EndIf
If
EndIf
EndIf
If Len(cValToChar(nMes))
==
1
cCompet := 1
cCompet := "0"
+
cValToChar(nMes)
+
"/"
+
cValToChar(nAno)
Else
cCompet :=
Else
cCompet := cValToChar(nMes)
+
"/"
+
cValToChar(nAno)
EndIf
If Month(FwFldGet("TFF_PERFIM")) == Month(FwFldGet("TFF_PERINI")) .And. Year(FwFldGet("TFF_PERFIM")) == Year(FwFldGet("TFF_PERINI"))
nValor :=
EndIf
If Month(dDataFimCtr) == Month(dDataIniCtr) .And. Year(dDataFimCtr) == Year(dDataIniCtr)
nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
Else
nValor :=
Else
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
EndIf
//Arredonda o valor
nValor := nValor * nQtd
nValor :=
EndIf
//Arredonda o valor
nValor := nValor * nQtd
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
//
Atualiza o cronograma
Atualiza o cronograma
At740IAuto("TFF",
FwFldGet("TFF_COD"), cCodTFF, cCompet,
nValor,
cCodTFJ,cCompetAnt,nDataIni
> > 1)
FWModelActive(oModel
)
Return nValor
User Function )
RestArea(aAreaTFF)
Return nValor
User Function Condicao()
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 extra
If lIsRecorrente .And. !lIsItenExtra .AND.
//Só será executado para contratos recorrentes e não será executado para item extra
If lIsRecorrente .And. !lIsItenExtra .AND. Day(FwFldGet("TFF_PERFIM"))
!=
1
lRet := 1
lRet := .T.
EndIf
Return
EndIf
Return lRet
Informações |
---|
|
Veja abaixo de uma forma mais detalhada como será feito o calculo do valor da próxima parcela Valor do Posto é de R$4.500,00 O dia de inicio do posto é 15/04/2021 O calculo a ser feito será ((4500 / 30) * (30-15)+1 ) ((150) * (16)) = 2400 onde o resultado do valor da próxima parcela será de R$2.400,00 A quantidade de dias é 16, pois contamos o dia de inicio, ou seja, do dia 15 ao dia 30 tem 16 dias se contarmos o dia 15. |
A função Condição() é criada para garantir que o gatilho não vai ser executado para contratos não recorrentes e itens extras
Se a condição criada for positiva, o gatilho será chamado e o calculo será feito.
Com isso ao ser informado uma data de inicio do contrato(TFF_PERINI), o calculo será feito conforme o dia e o valor(TFF_PRCVEN).
...