Á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
Bloco de código
themeEclipse
linenumberstrue
#INCLUDE 
#INCLUDE 
"PROTHEUS.CH"


#INCLUDE
 
 "FWMVCDEF.CH"

 
User Function 

 
User Function CalcValor()


Local
 aAreaTFF      
 aAreaTFF      :=
 
 TFF->(GetArea())
 
 //
 Salva area
Local nDataIni      := 
 Salva area
Local nDataIni      := Day(dDataBase)


Local
 nMes          
 nMes          :=
 
 Month(dDataBase)


Local
 nAno          
 nAno          :=
 
 Year(dDataBase)


Local
 
 dDataIniCtr
   
   :=
 
 cTod("")


Local
 
 dDataFimCtr
   
   :=
 
 cTod("")


Local
 cCompet       
 cCompet       :=
 
 ""


Local
 cCodTFJ       
 cCodTFJ       :=
 
 ""


Local
 cCodTFF       
 cCodTFF       :=
 
 ""


Local
 nDataFim      
 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()If 
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()

If IsInCallStack("AT870Antco")

    dDataIniCtr 

    dDataIniCtr :=
 
 PARAMIXB[1]

    dDataFimCtr 

    dDataFimCtr :=
 
 PARAMIXB[2]

    nDataIni    

    nDataIni    :=
 
 Day(dDataIniCtr)
 //dia de inicio do contrato
    nDtFimMes   := 
 //dia de inicio do contrato
    nDtFimMes   := Day(dDataFimCtr)
 // dia de fim do contrato
    nMes        := 
 // dia de fim do contrato
    nMes        := Month(dDataFimCtr)

    nAno        := 

    nAno        := Year(dDataFimCtr)

    cCodTFJ     

    cCodTFJ     :=
 
 PARAMIXB[3]

    nValor      := 

    nValor      := PARAMIXB[4]
 // preço de venda do contrato
    nQtd        := 
 // preço de venda do contrato
    nQtd        := PARAMIXB[5]
 // preço de venda do contrato 
    cCompetAnt  := 
 // preço de venda do contrato 
    cCompetAnt  := PARAMIXB[6]

    cCodTFF     

    cCodTFF     :=
 
 PARAMIXB[7]

Else
    dDataIniCtr := 

Else
    dDataIniCtr := FwFldGet("TFF_PERINI")

    dDataFimCtr 

    dDataFimCtr :=
 
 FwFldGet("TFF_PERFIM")

    nDataIni    

    nDataIni    :=
 
 Day(dDataIniCtr)
 //dia de inicio do contrato
    nDtFimMes   := 
 //dia de inicio do contrato
    nDtFimMes   := Day(dDataFimCtr)
 // dia de fim do contrato
    nMes        := 
 // dia de fim do contrato
    nMes        := Month(dDataFimCtr)

    nAno        := 

    nAno        := Year(dDataFimCtr)

    cCodTFJ     

    cCodTFJ     :=
 
 FwFldGet("TFJ_CODIGO")

    nValor      := 

    nValor      := FwFldGet("TFF_PRCVEN")
 // preço de venda do contrato
    nQtd        := 
 // preço de venda do contrato
    nQtd        := FwFldGet("TFF_QTDVEN")
 // preço de venda do contrato  
    cCompetAnt  := At740GtPer()
    cCodTFF     := 
 // preço de venda do contrato  
    cCompetAnt  := At740GtPer()
    cCodTFF     := FwFldGet("TFF_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 

EndIf
 
If Month(dDataFimCtr)
 
 ==
 
 Month(dDataIniCtr)
 
 .And.
 
 Year(dDataFimCtr)
 
 ==
 
 Year(dDataIniCtr)

    nValor 

    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",
 
 cCodTFF,
 
 cCompet,
 
 nValor,
 
 cCodTFJ,cCompetAnt,nDataIni
 > 
 > 1)

 

 
FWModelActive(oModel)



RestArea(aAreaTFF)



Return
 nValor
  
User Function 
 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 lRet

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


...