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 Added
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).
Bloco de código |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
| #INCLUDE | #INCLUDE User Function
User Function CalcValor() |
aAreaTFF Salva area Local nDataIni := Salva area
Local nDataIni := Day(dDataBase) |
nMes nAno cCompet cCodTFJ cCodTFF nDataFim 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 dDataFimCtr nDataIni //dia de inicio do contrato nDtFimMes := //dia de inicio do contrato
nDtFimMes := Day(dDataFimCtr) | // dia de fim do contrato nMes := Month(dDataFimCtr) nAno := Year(dDataFimCtr) 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 := // 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 nDataIni //dia de inicio do contrato nDtFimMes := //dia de inicio do contrato
nDtFimMes := Day(dDataFimCtr) | // dia de fim do contrato nMes := Month(dDataFimCtr) nAno := Year(dDataFimCtr) cCodTFJ := // dia de fim do contrato
nMes := Month(dDataIniCtr)
nAno := Year(dDataIniCtr)
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") |
nMesAnt nAnoAnt If
If Len(cValToChar(nMesAnt)) | 1 cCompetAnt := Else cCompetAnt :=
Else
cCompetAnt := cValToChar(nMesAnt) | EndIf EndIf If
EndIf
EndIf
If Len(cValToChar(nMes)) | 1 cCompet := Else cCompet :=
Else
cCompet := cValToChar(nMes) | EndIf If
EndIf
If Month(dDataFimCtr) | 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", | cCodTFJ,cCompetAnt,nDataIni | >
nValor User Function nValor
User Function Condicao() |
//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 := 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
...