Árvore de páginas

Versões comparadas

Chave

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


01. DADOS GERAIS

Produto:

Solucoes_totvs
SolucaoTOTVS Prestadores de Serviços Terceirização

Solucoes_totvs_cross
SolucaoCross

Solucoes_totvs_parceiros
SolucaoParceiros

Solucoes_totvs_parceirosexptotvs
SolucaoParcsExpsTOTVS

Linha de Produto:

Linhas_totvs
SegmentoDistribuição
RegionConstrução Projetos
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoServiços

Módulo:Prestadores de Serviços Terceirização
Função:TECA740.PRW
Ticket:Não há
Requisito/Story/Issue (informe o requisito relacionado) :DSERSGS-10241


02. SITUAÇÃO/REQUISITO

Ao gerar um orçamento de serviço, o calculo para a primeira parcela de um contrato é necessário que o mesmo seja informado manualmente.

03. SOLUÇÃO

Criação de gatilho para o calculo automático do valor da primeira parcela, quando é informado o período inicial. 

Aviso
titleImportante

Essa implementação só será executada para contratos recorrentes(TFJ_CNTREC) e não terá efeito para itens extras.


04. DEMAIS INFORMAÇÕES


Informações
titleExemplo de Uso

Crie o seguinte gatilho pelo configurador.

Image Modified


Campo

Conteúdo

CampoTFF_PERINI
Sequencia001
Cnt. Dominio

TFF_VLPRPA

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


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


Bloco de código
themeEclipse
linenumberstrue
#INCLUDE
 
 "PROTHEUS.CH"


#INCLUDE
 
 "FWMVCDEF.CH"

 
User
 
 Function
 CalcValor()
Local nDataIni      := Day(FwFldGet("TFF_PERINI")) //dia de inicio do contrato
Local nDataFim      :=  Day(LastDate(FwFldGet("TFF_PERINI"))) // ultimo dia do mes
Local nValor        := FwFldGet("TFF_PRCVEN"// preço de venda do contrato
nValor := 
 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()

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(dDataIniCtr)
    nAno        := Year(dDataIniCtr)
    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(dDataIniCtr)
    nAno        := Year(dDataIniCtr)
    cCodTFJ     := FwFldGet("TFJ_CODIGO")
    nValor      := FwFldGet("TFF_PRCVEN") // preço de venda do contrato
    nQtd        := FwFldGet("TFF_QTDVEN") // preço de venda do contrato  
    cCompetAnt  := At740GtPer()
    cCodTFF     := FwFldGet("TFF_COD")
EndIf

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(dDataFimCtr) == Month(dDataIniCtr) .And. Year(dDataFimCtr) == Year(dDataIniCtr)
    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", cCodTFF, cCompet, nValor, cCodTFJ,cCompetAnt,nDataIni > 1
)
Return nValor
User Function 
)
 
FWModelActive(oModel)

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
    lRet := .T.
EndIf
Return lRet

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


05. ASSUNTOS RELACIONADOS



Templatedocumentos

...