Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Informações
titleExemplo de Uso

Crie o seguinte gatilho pelo configurador.


CampoConteúdo
CampoTFF_PERINI
Sequencia001
Cnt. Dominio

TFF_VLPRPA

TipoPrimário
RegraU_CalcValor()
PosicionaNão
CondicaoU_Condicao()


Após a criação do gatilho, inclua as seguintes funções (user function).


Bloco de código
titleExemplo de uso
#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        := FwFldGet("TFF_PRCVEN") // preço de venda do contrato
Local nQtd          := FwFldGet("TFF_QTDVEN") // preço de venda do contrato
Local nDtFimMes     := Day(FwFldGet("TFF_PERFIM")) // dia de fim do contrato
Local cCompetAnt    := At740GtPer()
Local nMesAnt       := 0
Local nAnoAnt       := 0
Local oModel	    := FwModelActive()

If !Empty(cCompetAnt)
    nMesAnt := Month(cCompetAnt)
    nAnoAnt := Year(cCompetAnt)
    If Len(cValToChar(nMesAnt)) == 1
        cCompetAnt  := "0" + cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt)
    Else
        cCompetAnt := cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt)
    EndIf 
EndIf

If Len(cValToChar(nMes)) == 1
    cCompet  := "0" + cValToChar(nMes) + "/" + cValToChar(nAno)
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 := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
Else
    nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
EndIf   
 
//Arredonda o valor
nValor := nValor * nQtd
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])

//Atualiza o cronograma
At740IAuto("TFF", FwFldGet("TFF_COD"), cCompet, nValor, cCodTFJ,cCompetAnt,nDataIni > 1) 

FWModelActive(oModel)

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. Day(FwFldGet("TFF_PERFIM")) != 1
    lRet := .T.
EndIf
 
Return lRet
Informações
titleExemplo

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).


...