| Produto: | |
|---|---|
| Linha de Produto: | |
| Segmento: | |
| Módulo: | Prestadores de Serviço |
| Função: | ModVlPr |
| País: | Brasil |
| Ticket: | Não há. |
| Requisito/Story/Issue (informe o requisito relacionado) : | DSERSGS-10679 |
Necessidade da documentação do ModVlPr (Reajuste Retroativo).
O Reajuste Retroativo tem como objetivo ajustar os cálculos da próxima parcela e o preço de venda dos itens de um contrato.
Está funcionalidade está disponível apenas para contratos recorrentes. |
Informações do contrato:


TFF_PRCVEN = 10.000
TFF_VLPRPA = 1.000
Ao revisar um contrato recorrente, na tela de revisão como mostra a seguir, em outras ações, selecionando o botão ajuste retroativo, é exibida uma tela.

![]()
Os campos Função, Escala e Apurado em são filtros para aplicar o reajuste nos itens de RH(TFF), caso nenhum deles forem informados todas as linhas serão consideradas para a aplicação do reajuste.
Para os campos Percentual e Multiplicador, o calculo para o valor de venda do item de RH será explicado abaixo:
Exemplo:
Percentual = 10%
Multiplicador = 2
O cálculo é feito da seguinte forma:
Cálculo: (1.000 + ((1.000 * (10 / 100)) * 2))
TFF_VLPRPA = 1.200
Cálculo: (10.000 + ((10.000 * (10 / 100))))
TFF_PRCVEN = 11.000
A opção "Em todos os locais" indica se o cálculo deve ser feito para todos os locais com suas TFF´s, ou seja, caso seja informado o campo com o valor Sim, todos os itens de RH(TFF) de todos os locais do orçamento serão considerados, se o valor informado for Não, somente os itens de RH(TFF) do local posicionado será considerado.
O campos agrupados na opção "Alteração de Quantidade" são referentes a alteração de quantidade de venda do item de RH(TFF), ele só terá funcionalidade se o valor for maior que zero.
O campo Nova Quantidade será aplicado ao campo TFF_QTDVEN e consequentemente alterará o valor de venda do item de RH(TFF_SUBTOT) do orçamento.
O campo Data de Referência será utilizado para o cálculo da próxima parcela(TFF_VLPRPA).
Exemplo 1:
Vamos supor que foi informado o valor 2 para o campo Nova Quantidade e a data de 15/01/2021 para o campo Data de Referência
nValor corresponde ao preço de venda(TFF_PRCVEN) multiplicado pela nova quantidade menos a quantidade já existente
nDataFim corresponde ao ultimo dia do mês de referência(Mês de Janeiro o ultimo dia é 31, se for fevereiro é 28, se for Abril é 30)
nDataIni corresponde ao dia referente a data de referência
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
nValor = 10.000
nDataFim = 31
nDataIni = 15
Cálculo: (10.000/31)*((31-15)+1)
TFF_VLPRPA = 5.483,87
O campo "Todas as linhas" indica se a alteração de quantidade será somente para o item de RH(TFF) posicionada ou a todas as linhas que serão reajustadas.
Caso informe o valor posicionada, a alteração de quantidade e o cálculo para a próxima parcela informado acima só será aplicada para o item de RH(TFF) posicionada, o seguinte log será exibido para melhor visualização da alteração.

Nesse log pode-se visualizar a alteração da quantidade, do valor de venda e também o novo valor para a próxima parcela, onde consta o valor anterior R$: 10.000,00 somado com o valor proporcional detalhado acima no valor de R$ 5.483,87
Caso informe o valor Todas, a alteração de quantidade e o cálculo para a próxima parcela será aplicado para todas as linhas encontradas.

Nesse log pode-se visualizar a alteração da quantidade, do valor de venda e também o novo valor para a próxima parcela, onde também é acrescentado o percentual informado.
Para o percentual foi utilizado o valor de 10% e o multiplicador utilizado foi de 2.
Veja que o valor de R$ 17.483,87 é composto do valor da próxima parcela R$ 15.483,87 e o valor do percentual aplicado para o local R$ 2.000,00
O valor de R$: 15.483,87 é composto do valor anterior da próxima parcela R$ 10.000,00 somado com o valor proporcional de R$ 5.483,87, verifique o cálculo no exemplo 1
Para os 2 cenários foi utilizado o valor de 2 no campo Nova Quantidade e a data de 15/01/2021 como Data de Referência.
#INCLUDE 'PROTHEUS.CH'
User function a740GrdV()
Local oView := PARAMIXB[1] //Viewdef
If !isBlind() .AND. VALTYPE(oView) == 'O' .AND. (isInCallStack("At870PRev") .OR. isInCallStack("AT870PlaRe"))
oView:AddUserButton("Reajuste Retroativo","",{|oView| U_RRetroat(oView)},,,)
EndIf
Return
User Function RRetroat(oView)
Local oModel
Local oMdlTFJ
Local oDlgSelect
Local cFuncao := SPACE(TamSx3("TFF_FUNCAO")[1])
Local cEscala := SPACE(TamSx3("TFF_ESCALA")[1])
Local nPerc := 0
Local nMult := 0
Local nQuant := 0
Local dDataRef := dDataBase
Local cAplReajs := "2"
Local cTodosLoc := "2"
Local cTodasLin := "2"
Local cCronog := '1'
Local cCompet := Space(7)
Local aOpcRea := {"2 - Não","1 - Sim"}
Local aOpcs := {"2 - Não","1 - Sim"}
Local aOpcComp := {}
Local aQtd := {"2 - Posicionada","1 - Todos"}
Local aCronog := {"1 - Sim", "2 - Não"}
Local oGrp
If VALTYPE(oView) == 'O' .AND. VALTYPE(oModel := oView:GetModel()) == 'O'
oMdlTFJ := oModel:GetModel("TFJ_REFER")
If oMdlTFJ:GetValue("TFJ_CNTREC") == '1'
aOpcComp := U_CompetCo()
DEFINE MSDIALOG oDlgSelect FROM 0,0 TO 450,300 PIXEL TITLE "Reajuste Retroativo"
oGrp1 := TGroup():New(000, 005, 53, 140, "Filtros", oDlgSelect,,, .T.)
@ 10, 9 SAY "Função" SIZE 30, 30 PIXEL
oGetSRA := TGet():New( 020, 009, { | u | If(PCount() > 0, cFuncao := u, cFuncao) },oDlgSelect, ;
060, 010, "!@",{ || .T.}, 0, 16777215,,.F.,,.T.,,.F.,;
,.F.,.F.,{|| .T.},.F.,.F. ,,"cFuncao",,,,.T. )
oGetSRA:cF3 := 'SRJ'
@ 10, 77 SAY "Escala" SIZE 30, 30 PIXEL
oGetTDW := TGet():New( 020, 077, { | u | If(PCount() > 0, cEscala := u, cEscala) },oDlgSelect, ;
060, 010, "!@",{ || .T.}, 0, 16777215,,.F.,,.T.,,.F.,;
,.F.,.F.,{|| .T.},.F.,.F. ,,"cEscala",,,,.T. )
oGetTDW:cF3 := 'TDW'
@ 40, 9 SAY "Apurado em:" SIZE 80, 30 PIXEL
oCompet := TGet():New( 39, 077, { | u | If( PCount() == 0, cCompet, cCompet := u ) },oDlgSelect, ;
020, 010, "@E 99/9999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cCompet",,,,.T.)
oGrp2 := TGroup():New(055, 005, 107, 140, "Reajuste", oDlgSelect,,, .T.)
@ 65, 9 SAY "Percentual (%)" SIZE 50, 30 PIXEL
oDataDe := TGet():New( 75, 009, { | u | If( PCount() == 0, nPerc, nPerc := u ) },oDlgSelect, ;
060, 010, "@E 9999.99",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nPerc",,,,.T.)
@ 65, 77 SAY "Multiplicador" SIZE 50, 30 PIXEL
oDataAte := TGet():New( 75, 077, { | u | If( PCount() == 0, nMult, nMult := u ) },oDlgSelect, ;
060, 010, "@E 99.99",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nMult",,,,.T.)
@ 95, 9 SAY "Aplica Reajuste?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(94,77,{|u|if(PCount()>0,cAplReajs:=u,cAplReajs)},;
aOpcRea,40,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cAplReajs')
oGrp := TGroup():New(112, 005, 167, 140, "Alteração de Quantidade", oDlgSelect,,, .T.)
@ 122, 9 SAY "Em todos os Locais?" SIZE 80, 30 PIXEL
oCombo := TComboBox():New(121,77,{|u|if(PCount()>0,cTodosLoc:=u,cTodosLoc)},;
aOpcs,40,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cTodosLoc')
@ 142, 9 SAY "Nova Quantidade" SIZE 50, 30 PIXEL
oQuant := TGet():New( 152, 009, { | u | If( PCount() == 0, nQuant, nQuant := u ) },oDlgSelect, ;
060, 010, "@E 99,999,999,999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nQuant",,,,.T.)
@ 142, 77 SAY "Data de Referencia" SIZE 50, 30 PIXEL
oDataAte := TGet():New( 152, 077, { | u | If( PCount() == 0, dDataRef, dDataRef := u ) },oDlgSelect, ;
060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataRef",,,,.T.)
@ 172, 9 SAY "Todas as Linhas?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(172, 077,{|u|if(PCount()>0,cTodasLin:=u,cTodasLin)},;
aQtd,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cTodasLin')
@ 187, 9 SAY "Aplic. Cronograma?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(187, 077,{|u|if(PCount()>0,cCronog:=u,cCronog)},;
aCronog,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cCronog')
oRefresh := TButton():New( 210, 005, "Aplicar",oDlgSelect,{|| U_AplicVl(oModel, cFuncao , nPerc, nMult, LEFT(cTodosLoc,1), cEscala, nQuant, dDataRef, LEFT(cTodasLin,1), cCompet, LEFT(cAplReajs,1), LEFT(cCronog,1)) , oDlgSelect:End()}, 60,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oExit := TButton():New( 210 , 080, "Sair",oDlgSelect,{|| oDlgSelect:End() }, 60,10,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlgSelect CENTER
Else
MsgAlert("Opção disponível apenas para contratos Recorrentes")
EndIf
EndIf
Return .T.
User Function AplicVl(oModel, cFuncao , nPerc, nMult, cTodosLoc, cEscala, nQuant, dDataRef, cTodasLin, cCompet, cAplReajs, cCronog)
Local lAllLoc := cTodosLoc == '1'
Local lAllLinha := cTodasLin == '1'
Local lAplicRea := cAplReajs == '1'
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFF := oModel:GetModel("TFF_RH")
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local nX := 0
Local nY := 0
Local cLog := ""
Local aSaveRows := FwSaveRows()
Local nTotal := 0
Local nGrandTot := 0
Local nVal := 0
Local nValPrc := 0
Local nPosTFF := 0
Local nPosTFL := 0
Local nValParc := 0
Local lServRet := .F.
Local cProdRet := SuperGetMv("MV_PRODRET",,"")
Local cProxParc := ""
Local nValPrx := 0
Local nDiff := 0
DbSelectArea("TFF")
TFF->(DbSetOrder(1))
If TFF->(ColumnPos("TFF_PRDRET")) > 0 .And. TFF->(ColumnPos("TFF_VLRRET")) > 0
lServRet := .T.
EndIf
If nQuant > 0 .And. !lAllLinha
nPosTFF := oMdlTFF:GetLine()
nPosTFL := oMdlTFL:GetLine()
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
cLog += "Local: " + Alltrim(POSICIONE("ABS",1,xFilial("ABS") + oMdlTFL:GetValue("TFL_LOCAL"), "ABS_DESCRI")) + Chr(13) + Chr(10)
cLog += " - RH: " + oMdlTFF:GetValue("TFF_COD") + Chr(13) + Chr(10)
cLog += " - Função: " + Alltrim(POSICIONE("SRJ",1,xFilial("SRJ") + oMdlTFF:GetValue("TFF_FUNCAO"), "RJ_DESC")) + Chr(13) + Chr(10)
cLog += " - Produto: " + Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlTFF:GetValue("TFF_PRODUT"), "B1_DESC")) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda Anterior: " + Alltrim(AllToChar(oMdlTFF:GetValue("TFF_QTDVEN"))) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda: " + Alltrim(AllToChar(nQuant)) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Anterior: R$ " + Alltrim(TRANSFORM( oMdlTFF:GetValue("TFF_SUBTOT") , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Novo: R$ " + Alltrim(TRANSFORM( ROUND(nQuant * oMdlTFF:GetValue("TFF_SUBTOT"), TamSX3("TFF_SUBTOT")[2]) , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
IF nPerc == 0 .AND. lAplicRea
nValParc := 0
Else
nValParc := U_AplicQtd(oMdlTFF,nQuant,dDataRef,.F.,,cCronog == '1')
EndIf
nGrandTot += nValParc
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nTotal))
nTotal := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
Else
nTotal := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
//cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((nValParc), "@e 999,999,999.99" ))"
cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValParc + nTotal)), "@e 999,999,999.99" )) +;
" ( R$ " + Alltrim(TRANSFORM(nValParc, "@e 999,999,999.99" )) + " )" + " + ( R$ " + Alltrim(TRANSFORM(IIF(nPerc == 0 .AND. lAplicRea, 0, nTotal), "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
EndIf
If lAplicRea
For nX := 1 To oMdlTFL:Length()
If lAllLoc
oMdlTFL:GoLine(nX)
EndIf
For nY := 1 To oMdlTFF:Length()
If !lAllLinha
nPosTFF := oMdlTFF:GetLine()
oMdlTFF:GoLine(nPosTFF)
Else
oMdlTFF:GoLine(nY)
EndIf
If U_VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet) .AND. oMdlTFF:GetValue("TFF_COBCTR") != '2'
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nValPrx))
nValPrx := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
Else
nValPrx := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
cLog += "Local: " + Alltrim(POSICIONE("ABS",1,xFilial("ABS") + oMdlTFL:GetValue("TFL_LOCAL"), "ABS_DESCRI")) + Chr(13) + Chr(10)
cLog += " - RH: " + oMdlTFF:GetValue("TFF_COD") + Chr(13) + Chr(10)
cLog += " - Função: " + Alltrim(POSICIONE("SRJ",1,xFilial("SRJ") + oMdlTFF:GetValue("TFF_FUNCAO"), "RJ_DESC")) + Chr(13) + Chr(10)
cLog += " - Produto: " + Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlTFF:GetValue("TFF_PRODUT"), "B1_DESC")) + Chr(13) + Chr(10)
If lAllLinha .And. nQuant > 0
cLog += " - Qtd. Venda Anterior: " + Alltrim(AllToChar(oMdlTFF:GetValue("TFF_QTDVEN"))) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda: " + Alltrim(AllToChar(nQuant)) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Anterior: R$ " + Alltrim(TRANSFORM( oMdlTFF:GetValue("TFF_SUBTOT") , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Novo: R$ " + Alltrim(TRANSFORM( ROUND(nQuant * oMdlTFF:GetValue("TFF_SUBTOT"), TamSX3("TFF_SUBTOT")[2]) , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Valor Antigo (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrx , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
nValParc := U_AplicQtd(oMdlTFF,nQuant,dDataRef,.F.,,cCronog == '1')
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := ROUND( (nValPrx * (nPerc / 100)) * nMult , TamSX3("TFF_VLPRPA")[2] )
EndIf
nGrandTot += nTotal
If nPerc == 0 .AND. lAplicRea
nValParc := 0
Else
nValParc := nValPrx + nValParc
EndIf
cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValParc + nTotal)), "@e 999,999,999.99" )) +;
" ( R$ " + Alltrim(TRANSFORM(nValParc, "@e 999,999,999.99" )) + " )" + " + ( R$ " + Alltrim(TRANSFORM(IIF(nPerc == 0 .AND. lAplicRea, 0, nTotal), "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
Else
cLog += " - Valor Antigo (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrx , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (oMdlTFF:GetValue("TFF_PRCVEN") * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
nGrandTot += nTotal
cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrx) + nTotal), "@e 999,999,999.99" )) +;
" ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
EndIf
EndIf
If !lAllLinha
Exit
EndIf
Next nY
cLog += REPLICATE("-",10)
cLog += Chr(13) + Chr(10)
If !lAllLoc
Exit
EndIf
Next nX
EndIf
cLog += REPLICATE("-",15)
cLog += Chr(13) + Chr(10)
cLog += "Valor adicional prox. parcela: R$ " + Alltrim(TRANSFORM(nGrandTot, "@e 999,999,999.99" ))
AtShowLog(cLog,"Prévia de Valores",/*lVScroll*/,/*lHScroll*/,/*lWrdWrap*/,.F.)
If MsgYesNo("Aplicar valores calculados?")
//Verifica se vai aplicar a quantidade somente para a linha posicionada
If !lAllLinha .And. nQuant > 0
oMdlTFL:GoLine(nPosTFL)
oMdlTFF:GoLine(nPosTFF)
U_AplicQtd(oMdlTFF,nQuant,dDataRef,.T.,nPerc,cCronog == '1',cCompet)
EndIf
For nX := 1 To oMdlTFL:Length()
If lAllLoc
oMdlTFL:GoLine(nX)
EndIf
For nY := 1 To oMdlTFF:Length()
If !lAllLinha
oMdlTFF:GoLine(nPosTFF)
Else
oMdlTFF:GoLine(nY)
EndIf
lAplicDiff := .F.
If U_VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet) .AND. oMdlTFF:GetValue("TFF_COBCTR") != '2'
//aplicar a quantidade para todas as linhas encontradas conforme os filtros
If lAllLinha .And. nQuant > 0
U_AplicQtd(oMdlTFF,nQuant,dDataRef,.T.,nPerc,cCronog == '1')
EndIf
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nVal))
nVal := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
Else //aplicar apenas a diferença
lAplicDiff := .T.
EndIf
Else
nVal := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
nValPrc := oMdlTFF:GetValue("TFF_PRCVEN")
If lServRet .And. nMult > 0
nTotal := (nValPrc + (nValPrc * (nPerc / 100)))
If nPerc > 0
nDiff := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
oMdlTFF:SetValue("TFF_PRCVEN", nTotal)
nDiff := (At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))- nDiff)
EndIf
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (nValPrc * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
If cCronog == '1'
If lAplicDiff
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nDiff, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nVal + nTotal, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
Else
oMdlTFF:SetValue("TFF_VLPRPA",nVal + nTotal)
EndIf
If !Empty(cProdRet)
oMdlTFF:SetValue("TFF_PRDRET",cProdRet)
EndIf
nTotal := (nValPrc * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
nTotal := nTotal * nMult
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
oMdlTFF:SetValue("TFF_VLRRET",nTotal)
Else
If nPerc > 0
nDiff := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
oMdlTFF:SetValue("TFF_PRCVEN",;
ROUND((nValPrc + (nValPrc * (nPerc / 100))),;
TamSX3("TFF_PRCVEN")[2]))
nDiff := (At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))- nDiff)
EndIf
If nPerc == 0 .AND. lAplicRea
IF nQuant == 0
If cCronog == '1'
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, 0, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
oMdlTFF:SetValue("TFF_VLPRPA", 0)
EndIf
EndIf
Else
If cCronog == '1'
If lAplicDiff .And. ROUND(nDiff * nMult,TamSX3("TFF_VLPRPA")[2]) > 0
At740IAuto("TFF",;
oMdlTFF:GetValue("TFF_COD"),;
cProxParc,;
ROUND(nDiff * nMult,TamSX3("TFF_VLPRPA")[2]),;
oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF",;
oMdlTFF:GetValue("TFF_COD"),;
cProxParc,;
ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),TamSX3("TFF_VLPRPA")[2]),;
oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
Else
oMdlTFF:SetValue("TFF_VLPRPA",;
ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),;
TamSX3("TFF_VLPRPA")[2]))
EndIf
EndIf
EndIf
EndIf
If !lAllLinha
Exit
EndIf
Next nY
If !lAllLoc
Exit
EndIf
Next nX
EndIf
FwRestRows( aSaveRows )
Return
User Function VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet)
Local lRetorno := .T.
If !Empty(cFuncao) .And. !Empty(cEscala) .AND. !Empty(cCompet)
If oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao .And. oMdlTFF:GetValue("TFF_ESCALA") == cEscala
If !(U_VldCompC(oMdlTFF:GetValue("TFF_COD"), cCompet))
lRetorno := .F.
EndIf
Else
lRetorno := .F.
EndIf
Else
If !Empty(cFuncao)
lRetorno := oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao
EndIf
If !Empty(cEscala) .AND. lRetorno
lRetorno := oMdlTFF:GetValue("TFF_ESCALA") == cEscala
EndIf
If !Empty(cCompet) .AND. lRetorno
lRetorno := U_VldCompC(oMdlTFF:GetValue("TFF_COD"), cCompet)
EndIf
EndIf
Return lRetorno
User Function AplicQtd(oMdlTFF,nQuant,dDataRef,lSetValue, nPerc, lCronog, cCompet)
Local lRet := .T.
Local nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes
Local nValor := 0
Local nValorCalc := 0
Local nVlrPrx := oMdlTFF:GetValue("TFF_VLPRPA") //Valor da proxima parcela
Local nDataIni := Day(dDataRef) //dia de inicio do contrato
Local nQtdAnt := oMdlTFF:GetValue("TFF_QTDVEN")
Local oModel := oMdlTFF:GetModel()
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFF:GetValue("TFF_CONTRT")+oMdlTFF:GetValue("TFF_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
Default cCompet := ""
If lSetValue
//Altera a quantidade do campo TFF_QTDVEN
lRet := oMdlTFF:SetValue("TFF_QTDVEN",nQuant)
//Realiza o calculo da proxima parcela
If lRet
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // preço de venda do contrato
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
//Arredonda o valor
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
nValorCalc := nValor
nValor := nVlrPrx + nValor
oMdlTFF:SetValue("TFF_VLPRPA",nValor)
If lCronog
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nVlrPrx))
nVlrPrx := At740PrxPa(/*cTipo*/,;
nQtdAnt,;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
nValor := nVlrPrx + nValorCalc
If !Empty(cCompet) .And. cProxParc > cCompet
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cCompet, nValorCalc, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nValor, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
EndIf
EndIf
Else
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // Valor a ser reajustado
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
//Arredonda o valor
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
EndIf
Return nValor
User Function CompetCo()
Local aCompets := CtrCompets()
Local nX
For nX := 1 to Len(aCompets)
aCompets[nX] := CVALTOCHAR(nX)+'='+aCompets[nX]
Next nX
Return aCompets
User Function VldCompC(cCodTFF, cCompet)
Local cQuery := ""
Local cAliasCND := GetNextAlias()
Local lRet := .T.
cQuery := ""
cQuery += " SELECT 1 FROM " + RetSQLName("TFF") + " TFF "
cQuery += " INNER JOIN " + RetSQLName("TFL") + " TFL "
cQuery += " ON TFL.TFL_CODIGO = TFF.TFF_CODPAI "
cQuery += " AND TFL.TFL_FILIAL = '" + xFilial("TFL") + "' "
cQuery += " AND TFL.D_E_L_E_T_ = ' ' "
cQuery += " INNER JOIN " + RetSQLName("CNE") + " CNE "
cQuery += " ON CNE.CNE_CONTRA = TFF.TFF_CONTRT "
cQuery += " AND CNE.CNE_NUMERO = TFL.TFL_PLAN "
cQuery += " AND CNE.CNE_REVISA = TFF.TFF_CONREV "
cQuery += " AND CNE.CNE_ITEM = TFF.TFF_ITCNB "
cQuery += " AND CNE.CNE_FILIAL = '" + xFilial("CNE") + "' "
cQuery += " AND CNE.D_E_L_E_T_ = ' ' "
cQuery += " INNER JOIN " + RetSQLName("CND") + " CND "
cQuery += " ON CND.CND_CONTRA = CNE.CNE_CONTRA "
cQuery += " AND CND.CND_REVISA = CNE.CNE_REVISA "
cQuery += " AND CND.CND_FILIAL = '" + xFilial("CND") + "' "
cQuery += " AND CND.D_E_L_E_T_ = ' ' "
cQuery += " AND CND.CND_COMPET = '" + cCompet + "' "
cQuery += " WHERE "
cQuery += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' "
cQuery += " AND TFF.TFF_COD = '" + cCodTFF + "' "
cQuery += " AND TFF.D_E_L_E_T_ = ' ' "
cQuery := ChangeQuery(cQuery)
DbUseArea(.T., "TOPCONN",TcGenQry(,,cQuery), cAliasCND , .T., .T.)
lRet := ( cAliasCND )->( !EOF() )
( cAliasCND )->(DbCloseArea())
Return lRet
|
DSERSGS-10241 DT Criação de gatilho para preenchimento de valor pro-rata
DSERSGS-10968 DT Gatilho de pro-rata para o campo Dt.Fim
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after {
background: #FF9900; !important
}
.menu-item.active-tab {
border-bottom: none !important;
}
</style>
|