Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Prestadores de Serviços - SIGATEC - Como configurar Pro rata na medição de orçamentos recorrentes

time.png 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;
Gatilho.PNG

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 contrato
Local nDtFimMes     := Day(FwFldGet("TFF_PERFIM")) // dia de fim do contrato
Local nMes          := Month(FwFldGet("TFF_PERFIM"))
Local nAno          := Year(FwFldGet("TFF_PERFIM"))
Local cCompet       := ""
Local cCodTFJ       := FwFldGet("TFJ_CODIGO")
Local nDataFim      := 30  // ultimo dia do mes
Local nDtPerfim     := 30  // ultimo dia do mes
Local nDtIniPer     := Day(FirstDate(FwFldGet("TFF_PERFIM"))) // primeiro dia do mes
Local nValor        := FwFldGet("TFF_PRCVEN") // preço de venda do contrato
Local nQtd          := FwFldGet("TFF_QTDVEN") // preço de venda do contrato
Local nValProx      := FwFldGet("TFF_VLPRPA")
Local cCompetAnt    := At740GtPer()
Local nMesAnt       := 0
Local nAnoAnt       := 0
Local oModel        := FwModelActive()
Local lAltera       := .T.

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 isInCallStack("TECA870")
    //Só realiza o calculo quando o mes e ano do periodo final for o mesmo do periodo inicial
    If 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) 
    Else
        lAltera := .F.
        If Year(FwFldGet("TFF_PERFIM")) <> Year(FwFldGet("TFF_PERINI"))
            If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM")))
                nValor := (nValor/nDataFim)*((nDataFim-1)+1)
            Else
                nValor := (nValor/nDataFim) * nDtFimMes
            EndIf   
        Else
            If Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI"))
                If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM")))
                     nValor := (nValor/nDataFim)*((nDataFim-1)+1)
                Else
                    nValor := (nValor/nDataFim) * nDtFimMes
                EndIf   
            Else
                nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
            EndIf 
        EndIf
    EndIf
Else
     If 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)*30
        Else
            nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
        EndIf   
     Else
        nValor := (nValor/nDataFim) * nDtFimMes
        lAltera := .F.
    EndIf
EndIf

//Arredonda o valor
nValor := nValor * nQtd
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])

If nValor > 0
    //Atualiza o cronograma
    At740IAuto("TFF", FwFldGet("TFF_COD"), cCompet, nValor, cCodTFJ,cCompetAnt,nDtFimMes < Day(LastDate(FwFldGet("TFF_PERFIM"))))
EndIf

If !lAltera
    nValor := nValProx
EndIf

FWModelActive(oModel) 

Return nValor
  
User 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 extra
If lIsRecorrente .And. !lIsItenExtra
    lRet := .T.
EndIf
 
Return 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

Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _