01. DADOS GERAIS
Produto: | Solucoes_totvs |
---|
Solucao | TOTVS Prestadores de Serviços Terceirização |
---|
|
Solucoes_totvs_parceirosexptotvs |
---|
|
|
---|
Linha de Produto: | Linhas_totvs |
---|
Segmento | Distribuição |
---|
Region | Construção Projetos |
---|
Linha | Linha Protheus |
---|
|
|
---|
Segmento: | |
---|
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 |
---|
|
Essa implementação só será executada para contratos recorrentes(TFJ_CNTREC) e não terá efeito para itens extras. |
Informações |
---|
|
Crie o seguinte gatilho pelo configurador. Image Modified
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).#INCLUDE
Bloco de código |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
| #INCLUDE "PROTHEUS.CH" |
#INCLUDE "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 := "
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()
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) | //Arredonda o valor nValor := Round
EndIf
//Arredonda o valor
nValor := nValor * nQtd
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2]) | Return nValorUser Function Condicao() Local lRet := .F. Local lIsRecorrente := FwFldGet
//Atualiza o cronograma
At740IAuto("TFF", cCodTFF, cCompet, nValor, cCodTFJ,cCompetAnt,nDataIni > 1)
FWModelActive(oModel)
RestArea(aAreaTFF)
Return nValor
User Function Condicao()
Local lRet := .F.
Local lIsRecorrente := FwFldGet("TFJ_CNTREC") | Local lIsItenExtra FwfldGet //Só será executado para contratos recorrentes e não será executado para item extra If lIsRecorrente
//Só será executado para contratos recorrentes e não será executado para item extra
If lIsRecorrente .And. | !lIsItenExtra lRet := .T. EndIf Return lRet !lIsItenExtra .AND. Day(FwFldGet("TFF_PERFIM")) != 1
lRet := .T.
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).
|
05. ASSUNTOS RELACIONADOS
...