01. DADOS GERAIS
Produto: | TOTVS Prestadores de Serviços Terceirização |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Serviços |
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 |
02. SITUAÇÃO/REQUISITO
Necessidade da documentação do ModVlPr (Reajuste Retroativo).
03. SOLUÇÃO
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.
Contrato Recorrente
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:
- Valor da primeira parcela (TFF_VLPRPA) = (TFF_VLPRPA + ((TFF_VLPRPA * (Percentual / 100)) * Multiplicador))
Cálculo: (1.000 + ((1.000 * (10 / 100)) * 2))
TFF_VLPRPA = 1.200
- Valor Unitário Rh (TFF_PRCVEN) = (TFF_PRCVEN+ ((TFF_PRCVEN* (Percentual / 100))))
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" #INCLUDE "FWMVCDEF.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 nValRet := 0 Local nQuant := 0 Local dDataRef := dDataBase Local dDataDe := CTOD(" / / ") Local dDataAte := CTOD(" / / ") Local cAplReajs := "2" Local cAplHE := "2" Local cAplMT := "2" Local cTodosLoc := "2" Local cTodasLin := "2" Local cCronog := '1' Local cProdRet := '2' Local cCompet := Space(7) Local aOpcRea := {"2 - Não","1 - Sim"} Local aOpcHE := {"2 - Não","1 - Sim"} Local aOpcMT := {"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 aRetroat := {"1 - Sim", "2 - Não"} Local oGrp := Nil Local oGrp1 := NIL Local oGrp2 := Nil Local oGrp3 := Nil 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 560,400 PIXEL TITLE "Reajuste Retroativo" oGrp1 := TGroup():New(000, 005, 43, 200, "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' @ 10, 147 SAY "Apurado em:" SIZE 80, 30 PIXEL oCompet := TGet():New( 020, 147, { | 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(045, 005, 150, 200, "Reajuste", oDlgSelect,,, .T.) @ 55, 9 SAY "Novo Valor (R$) " SIZE 50, 30 PIXEL oDataDe := TGet():New( 65, 009, { | u | If( PCount() == 0, nValRet, nValRet := u ) },oDlgSelect, ; 090, 010, "@E 99,999,999,999.99",{|| U_VldCpoRe(nValRet,nPerc,"Percentual (%)")}, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nValRet",,,,.T.) @ 85, 9 SAY "Percentual (%)" SIZE 50, 30 PIXEL oDataDe := TGet():New( 95, 009, { | u | If( PCount() == 0, nPerc, nPerc := u ) },oDlgSelect, ; 060, 010, "@E 9999.99",{||U_VldCpoRe(nPerc,nValRet,"Novo Valor (R$) ")}, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nPerc",,,,.T.) @ 85, 77 SAY "Multiplicador" SIZE 50, 30 PIXEL oDataAte := TGet():New( 95, 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.) @ 115, 9 SAY "Data de ?" SIZE 50, 30 PIXEL oDataRet := TGet():New( 125, 009, { | u | If( PCount() == 0, dDataDe, dDataDe := u ) },oDlgSelect, ; 060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataDe",,,,.T.) @ 115, 77 SAY "Data Ate ?" SIZE 50, 30 PIXEL oDataRet1 := TGet():New( 125, 077, { | u | If( PCount() == 0, dDataAte, dDataAte := u ) },oDlgSelect, ; 060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataAte",,,,.T.) @ 55, 147 SAY "Aplica Reajuste?" SIZE 80, 30 PIXEL oCombo1 := TComboBox():New(65,147,{|u|if(PCount()>0,cAplReajs:=u,cAplReajs)},; aOpcRea,40,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cAplReajs') @ 85, 147 SAY "Reajusta Materiais?" SIZE 80, 30 PIXEL oCombo3 := TComboBox():New(95,147,{|u|if(PCount()>0,cAplMT:=u,cAplMT)},; aOpcMT,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Reajusta Materiais?",cAplMT)},,,.T.,,,,,,,,,'cAplMT') @ 115, 147 SAY "Reajusta H.E.?" SIZE 80, 30 PIXEL oCombo2 := TComboBox():New(125,147,{|u|if(PCount()>0,cAplHE:=u,cAplHE)},; aOpcHE,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Reajusta H.E.?",cAplHE)},,,.T.,,,,,,,,,'cAplHE') oGrp := TGroup():New(152, 005, 192, 200, "Alteração de Quantidade", oDlgSelect,,, .T.) @ 162, 9 SAY "Nova Quantidade" SIZE 50, 30 PIXEL oQuant := TGet():New( 172, 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.) @ 162, 77 SAY "Data de Referencia" SIZE 50, 30 PIXEL oDataAte := TGet():New( 172, 077, { | u | If( PCount() == 0, dDataRef, dDataRef := u ) },oDlgSelect, ; 060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataRef",,,,.T.) oGrp3 := TGroup():New(195, 005, 260, 200, "Locais", oDlgSelect,,, .T.) @ 207, 9 SAY "Em todos os Locais?" SIZE 80, 30 PIXEL oCombo := TComboBox():New(217,09,{|u|if(PCount()>0,cTodosLoc:=u,cTodosLoc)},; aOpcs,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Em todos os Locais?",cTodosLoc)},,,.T.,,,,,,,,,'cTodosLoc') @ 207, 77 SAY "Todas os itens de RH?" SIZE 80, 30 PIXEL oCombo1 := TComboBox():New(217, 077,{|u|if(PCount()>0,cTodasLin:=u,cTodasLin)},; aQtd,60,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Todas os itens de RH?",cTodasLin)},,,.T.,,,,,,,,,'cTodasLin') @ 233, 9 SAY "Aplic. Cronograma?" SIZE 80, 30 PIXEL oCombo1 := TComboBox():New(243, 09,{|u|if(PCount()>0,cCronog:=u,cCronog)},; aCronog,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cCronog') @ 233, 77 SAY "Cobra Retroativo ?" SIZE 80, 30 PIXEL oCombo2 := TComboBox():New(243, 077,{|u|if(PCount()>0,cProdRet:=u,cProdRet)},; aRetroat,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cProdRet') oExit := TButton():New( 263 , 005, "Sair",oDlgSelect,{|| oDlgSelect:End() }, 090,12,,,.F.,.T.,.F.,,.F.,,,.F. ) oRefresh := TButton():New( 263, 105, "Aplicar",oDlgSelect,{|| U_AplicVl(oModel, cFuncao , nPerc, nMult, LEFT(cTodosLoc,1), cEscala, nQuant, dDataRef, LEFT(cTodasLin,1), cCompet, LEFT(cAplReajs,1), LEFT(cCronog,1), LEFT(cAplHE,1), LEFT(cAplMT,1),LEFT(cProdRet,1),dDataDe,dDataAte,nValRet) , oDlgSelect:End()}, 095,12,,,.F.,.T.,.F.,,.F.,,,.F. ) // Define CSS oRefresh:SetCss( U_ColorAplic() ) 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, cAplHE,cAplMT, cProdRet,dDataDe,dDataAte,nValRet) 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 oMdlTFG := oModel:GetModel("TFG_MI") Local oMdlTFH := oModel:GetModel("TFH_MC") Local oMdlTFJ := oModel:GetModel("TFJ_REFER") Local nX := 0 Local nY := 0 Local nZ := 0 Local cLog := "" Local aSaveRows := FwSaveRows() Local aErroMVC := {} Local aErrors := {} 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 lContinua := .T. Local cProxParc := "" Local cMsg := "" Local nValPrx := 0 Local nDiff := 0 Local aTFF := {} Local aTFFAtu := {} Local lDataRet := U_VldDtRet(nPerc,dDataDe,dDataAte) Local lReajuste := .F. If nValRet > 0 .And. nPerc > 0 MsgAlert("O campo Novo Valor (R$) e o campo Percentual (%) estão preenchidos, verifique qual opção de reajuste será utilizado", "Atenção") Return EndIf //Para reajuste por valor, a aplicação é somente no posto posicionado e não reajusta H.E e nem Materiais If nValRet > 0 lAllLinha := .F. lAllLoc := .F. cAplHE := '2' cAplMT := '2' If oMdlTFF:GetValue("TFF_PRCVEN") > nValRet MsgAlert("O Novo Valor deve ser maior que o valor do Posto selecionado", "Atenção") Return EndIf EndIf DbSelectArea("TFF") TFF->(DbSetOrder(1)) If cProdRet == "1" 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((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 .And. lDataRet 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' //.And. oMdlTFF:GetValue("TFF_ENCE") != '1' 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 RH (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrx , "@e 999,999,999.99" )) + Chr(13) + Chr(10) If nValRet > 0 nTotal := nValRet ElseIf 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 If nValRet > 0 cLog += " - Valor Novo RH(prox. parcela): R$ " + Alltrim(TRANSFORM((nTotal), "@e 999,999,999.99" )) +; " ( + R$ " + Alltrim(TRANSFORM(nTotal - nValPrx, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10) cLog += Chr(13) + Chr(10) Else cLog += " - Valor Novo RH(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 If cAplMT == "1" If oMdlTFG:Length() > 0 U_CheckMat("TFG",oMdlTFG,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,@nGrandTot) EndIf If oMdlTFH:Length() > 0 U_CheckMat("TFH",oMdlTFH,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,@nGrandTot) EndIf EndIf 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, @lContinua) EndIf If lContinua 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' //.And. oMdlTFF:GetValue("TFF_ENCE") != '1' If cAplHE == '1' U_AjustHE(nPerc, oMdlTFF) EndIf //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', , @lContinua) EndIf aTFFAtu := U_MontaTFFAtu(oMdlTFF,dDataDe,dDataAte) If lContinua If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1' cProxParc := cCompet lReajuste := .T. 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) .Or. (lServRet .And. lDataRet) If nValRet > 0 nTotal := nValRet Else nTotal := (nValPrc + (nValPrc * (nPerc / 100))) EndIf If nPerc > 0 .Or. nValRet > 0 nDiff := At740PrxPa(/*cTipo*/,; oMdlTFF:GetValue("TFF_QTDVEN"),; oMdlTFF:GetValue("TFF_PRCVEN"),; oMdlTFF:GetValue("TFF_DESCON"),; oMdlTFF:GetValue("TFF_TXLUCR"),; oMdlTFF:GetValue("TFF_TXADM")) If oMdlTFF:GetValue("TFF_ENCE") != '1' lContinua := lContinua .AND. 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) Else nDiff := nTotal - nDiff EndIf EndIf If nValRet > 0 nTotal := nValRet ElseIf 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 If !lReajuste .And. nPerc > 0 U_AplicTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),nTotal) At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nDiff, oMdlTFJ:GetValue("TFJ_CODIGO")) EndIf Else If oMdlTFF:GetValue("TFF_ENCE") != '1' U_AplicTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),nTotal) If nValRet > 0 At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nTotal, oMdlTFJ:GetValue("TFJ_CODIGO")) Else At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nVal + nTotal, oMdlTFJ:GetValue("TFJ_CODIGO")) EndIf EndIf EndIf Else lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_VLPRPA",nVal + nTotal) EndIf If nValRet > 0 nTotal := nValRet Else nTotal := (nValPrc * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN") EndIf //Valida as datas para sempre fazer os calculos baseados em 30 dias If Day(dDataAte) > 30 dDataAte := dDataAte - 1 EndIf //Valida as datas para sempre fazer os calculos baseados em 30 dias If Day(dDataDe) > 30 dDataDe := dDataDe - 1 EndIf //Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados //aTFF := U_GetTFFAnt("TFF",oMdlTFF:GetValue("TFF_CONTRT"),oMdlTFF:GetValue("TFF_CONREV"),oMdlTFF:GetValue("TFF_COD"),dDataDe,dDataAte,aTFFAtu,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE")) aTFF := U_GetValTFF("TFF",oMdlTFF,dDataDe,dDataAte,nValPrc,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE")) //Realiza o calculo conforme as revisões anteriores If Len(aTFF) > 0 nTotal := U_ValRetr(aTFF,nPerc, nDiff / oMdlTFF:GetValue("TFF_QTDVEN") ) /* For nX := 1 To 12 U_ValRetMes(aTFF,nX,1000) Next nX */ Else U_CeckMult(dDataDe,dDataAte,@nMult) nTotal := nTotal * nMult nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2]) EndIf If cProdRet == "1" U_AplicRet(oMdlTFF,oMdlTFJ,cProxParc,nTotal,,nValPrc,dDataDe,dDataAte,nPerc,nValRet) EndIf If cAplMT == "1" If !oMdlTFG:IsEmpty() .And. oMdlTFG:Length() > 0 U_AplicMat("TFG",oMdlTFG,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"),nValRet) EndIf If !oMdlTFH:IsEmpty() .And. oMdlTFH:Length() > 0 U_AplicMat("TFH",oMdlTFH,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"),nValRet) EndIf EndIf 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")) lContinua := lContinua .AND. 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 lContinua := lContinua .AND. 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 lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_VLPRPA",; ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),; TamSX3("TFF_VLPRPA")[2])) EndIf EndIf EndIf EndIf EndIf If !lAllLinha .OR. !lContinua Exit EndIf Next nY If !lAllLoc .OR. !lContinua Exit EndIf Next nX EndIf EndIf If !lContinua aErroMVC := oModel:GetErrorMessage() If !Empty(aErroMVC[6]) AADD(aErrors, { "Id do formulário de origem:" + ' [' + AllToChar( aErroMVC[1] ) + ']',; //"Id do formulário de origem:" "Id do campo de origem:" + ' [' + AllToChar( aErroMVC[2] ) + ']',; //"Id do campo de origem:" "Id do formulário de erro:" + ' [' + AllToChar( aErroMVC[3] ) + ']',; //"Id do formulário de erro:" "Id do campo de erro:" + ' [' + AllToChar( aErroMVC[4] ) + ']',; //"Id do campo de erro:" "Id do erro:" + ' [' + AllToChar( aErroMVC[5] ) + ']',; //"Id do erro:" "Mensagem do erro:" + ' [' + AllToChar( aErroMVC[6] ) + ']',; //"Mensagem do erro:" "Mensagem da solução:" + ' [' + AllToChar( aErroMVC[7] ) + ']',; //"Mensagem da solução:" "Valor atribuído:" + ' [' + AllToChar( aErroMVC[8] ) + ']',; //"Valor atribuído:" "Valor anterior:" + ' [' + AllToChar( aErroMVC[9] ) + ']'; //"Valor anterior:" }) For nX := 1 To LEN(aErrors) For nZ := 1 To LEN(aErrors[nX]) cMsg += If(Empty(aErrors[nX][nZ]), aErrors[nX][nZ], aErrors[nX][nZ] + CRLF ) Next cMsg += CRLF + REPLICATE("-",30) + CRLF Next If !ISBlind() AtShowLog(cMsg,"Inconsistência",/*lVScroll*/,/*lHScroll*/,/*lWrdWrap*/,.F.) //"Error" EndIf EndIf 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, lContinua) Local nDataFim := 30 //qtd de dias mes para o calculo 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 lContinua := oMdlTFF:SetValue("TFF_QTDVEN",nQuant) //Realiza o calculo da proxima parcela If lContinua nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // preço de venda do contrato nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1) // Security = especifico // --------------------------------------------------- /* M->TFJ_XCPROR := FwFldGet("TFJ_XCPROR") lPadrao := .T. IF M->TFJ_XCPROR$"1_3" lPadrao := .F. IF M->TFJ_XCPROR=="1" // Dias corridos nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes nDiv := nDataFim ELSEIF M->TFJ_XCPROR=="3" // 30,42 (365/12) dias nDiv := 30.42 nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes nDataFim += 0.42 // ultimo dia do mes (28/29/30 OU 31) + 0.42 ENDIF nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) nValor := (nValor/nDiv)*((nDataFim-nDataIni)+1) ENDIF IF ExistBlock("TELARAT") IF M->TFJ_XCPROR$"2_3" .AND. !lPadrao U_TELARAT(M->TFJ_XCPROR , nDiv , nDataIni , nDataFim , oMdlTFF:GetValue("TFF_PRCVEN"), lpadrao ) ELSE U_TELARAT(M->TFJ_XCPROR,,,,,.t.) ENDIF ENDIF */ // --------------------------------------------------- //Arredonda o valor nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2]) nValorCalc := nValor nValor := nVlrPrx + nValor lContinua := 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 // Security - 20102021_1 // No processo atual, gera o prorata do decréscimo no mês/ano que será a próxima medição. // exemplo: ultima medição 09/2021, próxima medição 10/2021. Redução de posto para 10/11/2021, ou seja prorata competência para 11/2021, // o sistema preencheu cronograma com prorata para 10/2021. Concorda que nesse mês de competência 10/2021 os funcionários vão trabalhar na // quantidade integral...não faz sentido cobrar com prorata. //IF !Empty(cCompet) IF cCompet == substr(dtos(dDataRef),5,2) + "/" + left(dtos(dDataRef),4) 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"), cCompet, nValor, oMdlTFJ:GetValue("TFJ_CODIGO")) EndIf ELSE 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 EndIf Else nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // Valor a ser reajustado nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1) // Security = especifico // --------------------------------------------------- /*M->TFJ_XCPROR := FwFldGet("TFJ_XCPROR") lPadrao := .T. IF M->TFJ_XCPROR$"1_3" lPadrao := .F. IF M->TFJ_XCPROR=="1" // Dias corridos nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes nDiv := nDataFim ELSEIF M->TFJ_XCPROR=="3" // 30,42 (365/12) dias nDiv := 30.42 nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes nDataFim += 0.42 // ultimo dia do mes (28/29/30 OU 31) + 0.42 ENDIF nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) nValor := (nValor/nDiv)*((nDataFim-nDataIni)+1) ENDIF IF ExistBlock("TELARAT") IF M->TFJ_XCPROR$"1_3" .AND. !lPadrao U_TELARAT(M->TFJ_XCPROR , nDiv , nDataIni , nDataFim , oMdlTFF:GetValue("TFF_PRCVEN") ) ELSE U_TELARAT(M->TFJ_XCPROR,,,,,.t.) ENDIF ENDIF */ // --------------------------------------------------- //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 User Function AjustHE(nPerc, oMdlTFF) Local oModel := oMdlTFF:GetModel() Local oMdlHE := oModel:GetModel("TFU_HE") Local nX Local nValor := 0 If nPerc != 0 For nX := 1 To oMdlHE:Length() oMdlHE:GoLine(nX) nValor := ROUND( oMdlHE:GetValue("TFU_VALOR") + (oMdlHE:GetValue("TFU_VALOR") * nPerc / 100), TamSX3("TFU_VALOR")[2] ) oMdlHE:SetValue("TFU_VALOR", nValor ) Next nX EndIf Return User Function CheckMat(cTabela,oMdlMat,cTFFCOD,cTFJCOD,cCronog,cProxParc,cLog,nPerc,lAplicRea,nGrandTot) Local nX := 0 Local nValPrxMI := 0 Local nValPrxMC := 0 Local nTotal := 0 Local cDescProd := "" If cTabela == "TFG" For nX := 1 To oMdlMat:Length() oMdlMat:GoLine(nX) cDescProd := Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlMat:GetValue("TFG_PRODUT"), "B1_DESC")) cLog += " - Material de Implantação: " + oMdlMat:GetValue("TFG_COD") + " - " + cDescProd + Chr(13) + Chr(10) If cCronog == '1' If !(TecHasTGT("TFG",oMdlMat:GetValue("TFG_COD"),cProxParc,cTFJCOD,@nValPrxMI)) nValPrxMI := At740PrxPa(/*cTipo*/,; oMdlMat:GetValue("TFG_QTDVEN"),; oMdlMat:GetValue("TFG_PRCVEN"),; oMdlMat:GetValue("TFG_DESCON"),; oMdlMat:GetValue("TFG_TXLUCR"),; oMdlMat:GetValue("TFG_TXADM")) EndIf Else nValPrxMI := oMdlMat:GetValue("TFG_VLPRPA") EndIf cLog += " - Valor Antigo MI (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrxMI , "@e 999,999,999.99" )) + Chr(13) + Chr(10) If nPerc == 0 .AND. lAplicRea nTotal := 0 Else nTotal := (oMdlMat:GetValue("TFG_PRCVEN") * (nPerc / 100)) * oMdlMat:GetValue("TFG_QTDVEN") EndIf nTotal := Round(nTotal,TamSX3("TFG_VLPRPA")[2]) nGrandTot += nTotal cLog += " - Valor Novo MI (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrxMI) + nTotal), "@e 999,999,999.99" )) +; " ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10) cLog += Chr(13) + Chr(10) Next nX ElseIf cTabela == "TFH" For nX := 1 To oMdlMat:Length() oMdlMat:GoLine(nX) cDescProd := Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlMat:GetValue("TFH_PRODUT"), "B1_DESC")) cLog += " - Material de Consumo: " + oMdlMat:GetValue("TFH_COD") + " - " + cDescProd + Chr(13) + Chr(10) If cCronog == '1' If !(TecHasTGT("TFH",oMdlMat:GetValue("TFH_COD"),cProxParc,cTFJCOD,@nValPrxMC)) nValPrxMC := At740PrxPa(/*cTipo*/,; oMdlMat:GetValue("TFH_QTDVEN"),; oMdlMat:GetValue("TFH_PRCVEN"),; oMdlMat:GetValue("TFH_DESCON"),; oMdlMat:GetValue("TFH_TXLUCR"),; oMdlMat:GetValue("TFH_TXADM")) EndIf Else nValPrxMC := oMdlMat:GetValue("TFH_VLPRPA") EndIf cLog += " - Valor Antigo MC (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrxMC , "@e 999,999,999.99" )) + Chr(13) + Chr(10) If nPerc == 0 .AND. lAplicRea nTotal := 0 Else nTotal := (oMdlMat:GetValue("TFH_PRCVEN") * (nPerc / 100)) * oMdlMat:GetValue("TFH_QTDVEN") EndIf nTotal := Round(nTotal,TamSX3("TFH_VLPRPA")[2]) nGrandTot += nTotal cLog += " - Valor Novo MC (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrxMC) + nTotal), "@e 999,999,999.99" )) +; " ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10) cLog += Chr(13) + Chr(10) Next nX EndIf Return User Function AplicMat(cTabela,oMdlMat,cTFFCOD,cTFJCOD,cCronog,cProxParc,cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,lEncerra,dDataEncerra,nValRet) Local nX := 0 Local nValPrxMI := 0 Local nValPrxMC := 0 Local nTotal := 0 Local nValPrc := 0 Local aMatRet := {} Local aTFGAtu := {} Local aTFHAtu := {} Local nMult := 0 If cTabela == "TFG" For nX := 1 To oMdlMat:Length() oMdlMat:GoLine(nX) aMatRet := {} aTFGAtu := U_MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte) If cCronog == '1' If !(TecHasTGT("TFG",oMdlMat:GetValue("TFG_COD"),cProxParc,cTFJCOD,@nValPrxMI)) nValPrxMI := At740PrxPa(/*cTipo*/,; oMdlMat:GetValue("TFG_QTDVEN"),; oMdlMat:GetValue("TFG_PRCVEN"),; oMdlMat:GetValue("TFG_DESCON"),; oMdlMat:GetValue("TFG_TXLUCR"),; oMdlMat:GetValue("TFG_TXADM")) EndIf Else nValPrxMI := oMdlMat:GetValue("TFG_VLPRPA") EndIf nValPrc := oMdlMat:GetValue("TFG_PRCVEN") nTotal := (nValPrc + (nValPrc * (nPerc / 100))) If nPerc > 0 oMdlMat:SetValue("TFG_PRCVEN", nTotal) EndIf If nPerc == 0 .AND. lAplicRea nTotal := 0 Else nTotal := (nValPrc * (nPerc / 100)) * oMdlMat:GetValue("TFG_QTDVEN") EndIf nTotal := Round(nTotal,TamSX3("TFG_VLPRPA")[2]) If cCronog == '1' At740IAuto("TFG", oMdlMat:GetValue("TFG_COD"), cProxParc, nValPrxMI + nTotal, cTFJCOD) Else oMdlMat:SetValue("TFG_VLPRPA",nValPrxMI + nTotal) EndIf //Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados //aMatRet := U_GetTFFAnt(cTabela,oMdlMat:GetValue("TFG_CONTRT"),oMdlMat:GetValue("TFG_CONREV"),oMdlMat:GetValue("TFG_COD"),dDataDe,dDataAte,aTFGAtu,lEncerra,dDataEncerra) aMatRet := U_GetValTFF(cTabela,oMdlMat,dDataDe,dDataAte,nValPrc,lEncerra,dDataEncerra) //Realiza o calculo conforme as revisões anteriores If Len(aMatRet) > 0 nTotal := U_ValRetr(aMatRet,nPerc) Else U_CeckMult(dDataDe,dDataAte,@nMult) nTotal := nTotal * nMult nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2]) EndIf If cProdRet == "1" //U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela) U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet) EndIf Next nX ElseIf cTabela == "TFH" For nX := 1 To oMdlMat:Length() oMdlMat:GoLine(nX) aMatRet := {} aTFHAtu := U_MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte) If cCronog == '1' If !(TecHasTGT("TFH",oMdlMat:GetValue("TFH_COD"),cProxParc,cTFJCOD,@nValPrxMC)) nValPrxMC := At740PrxPa(/*cTipo*/,; oMdlMat:GetValue("TFH_QTDVEN"),; oMdlMat:GetValue("TFH_PRCVEN"),; oMdlMat:GetValue("TFH_DESCON"),; oMdlMat:GetValue("TFH_TXLUCR"),; oMdlMat:GetValue("TFH_TXADM")) EndIf Else nValPrxMC := oMdlMat:GetValue("TFH_VLPRPA") EndIf nValPrc := oMdlMat:GetValue("TFH_PRCVEN") nTotal := (nValPrc + (nValPrc * (nPerc / 100))) If nPerc > 0 oMdlMat:SetValue("TFH_PRCVEN", nTotal) EndIf If nPerc == 0 .AND. lAplicRea nTotal := 0 Else nTotal := (nValPrc * (nPerc / 100)) * oMdlMat:GetValue("TFH_QTDVEN") EndIf nTotal := Round(nTotal,TamSX3("TFH_VLPRPA")[2]) If cCronog == '1' At740IAuto("TFH", oMdlMat:GetValue("TFH_COD"), cProxParc, nValPrxMC + nTotal, cTFJCOD) Else oMdlMat:SetValue("TFH_VLPRPA",nValPrxMC + nTotal) EndIf //Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados //aMatRet := U_GetTFFAnt(cTabela,oMdlMat:GetValue("TFH_CONTRT"),oMdlMat:GetValue("TFH_CONREV"),oMdlMat:GetValue("TFH_COD"),dDataDe,dDataAte,aTFHAtu,lEncerra,dDataEncerra) aMatRet := U_GetValTFF(cTabela,oMdlMat,dDataDe,dDataAte,nValPrc,lEncerra,dDataEncerra) //Realiza o calculo conforme as revisões anteriores If Len(aMatRet) > 0 nTotal := U_ValRetr(aMatRet,nPerc) Else U_CeckMult(dDataDe,dDataAte,@nMult) nTotal := nTotal * nMult nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2]) EndIf If cProdRet == "1" //U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela) U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet) EndIf Next nX EndIf Return User Function AplicTGT(cTpItem,cCodItem,cCompet,cCodTFJ,nVal) Local aArea := GetArea() Local cSql := "" Local cAliasAux := GetNextAlias() cSql += " SELECT TGT.TGT_VALOR, TGT.TGT_COMPET FROM " + RetSqlName("TGT") + " TGT " cSql += " WHERE TGT.D_E_L_E_T_ = ' ' AND " cSql += " TGT.TGT_TPITEM = '"+cTpItem+"' AND " cSql += " TGT.TGT_CDITEM = '"+cCodItem+"' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) While (cAliasAux)->(!EOF()) If Val(Substr((cAliasAux)->TGT_COMPET,1,2)) + Val(Substr((cAliasAux)->TGT_COMPET,4,7)) >= Val(Substr(cCompet,1,2)) + Val(Substr(cCompet,4,7)) lRet := .T. At740IAuto("TFF", cCodItem, (cAliasAux)->TGT_COMPET, (cAliasAux)->TGT_VALOR + nVal, cCodTFJ) EndIf (cAliasAux)->(DbSkip()) EndDo (cAliasAux)->(DbCloseArea()) RestArea(aArea) Return User Function AplicRet(oMdlTFF,oMdlTFJ,cCompet,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet) Local lRet := .T. Local cProdRet := "" Local cCodItem := "" Local lCpoTGT := U_ChkCpoTGT() Default cTabela := "TFF" Default nValPrc := 0 Default dDataDe := CTOD('') Default dDataAte := CTOD('') Default nPerc := 0 Default nValRet := 0 If cTabela == "TFF" If !Empty(oMdlTFF:GetValue("TFF_PRDRET")) cProdRet := oMdlTFF:GetValue("TFF_PRDRET") Else cProdRet := oMdlTFJ:GetValue("TFJ_PRDRET") EndIf cCodItem := oMdlTFF:GetValue("TFF_COD") Else cProdRet := oMdlTFJ:GetValue("TFJ_PRDRET") If cTabela == "TFH" cCodItem := oMdlTFF:GetValue("TFH_COD") Else cCodItem := oMdlTFF:GetValue("TFG_COD") EndIf EndIf If nTotal < 0 nTotal := 0 EndIf /* If lCpoTGT If nValRet > 0 nPerc := U_ChkInd(nValPrc,nValRet) nPerc := nPerc * 100 nValRet := nValRet - nValPrc ElseIf nPerc > 0 nValRet := (nValPrc * (nPerc / 100)) EndIf EndIf */ U_ChkRtTGT(cTabela, cCodItem, cCompet, oMdlTFJ:GetValue("TFJ_CODIGO")) At740IExce(cTabela, cCodItem, cCompet, nTotal, oMdlTFJ:GetValue("TFJ_CODIGO"),cProdRet,dDataDe,dDataAte,nPerc,nValRet) Return lRet User Function ChkRtTGT(cTpItem, cCodItem, cCompet, cTFJ_CODIGO) Local cSql := "" Local cAliasAux := GetNextAlias() cSql += " SELECT TGT.R_E_C_N_O_ TGTRECNO FROM " + RetSqlName("TGT") + " TGT " cSql += " WHERE TGT.D_E_L_E_T_ = ' ' AND " cSql += " TGT.TGT_TPITEM = '"+cTpItem+"' AND " cSql += " TGT.TGT_CDITEM = '"+cCodItem+"' AND " cSql += " TGT.TGT_CODTFJ = '"+cTFJ_CODIGO+"' AND " cSql += " TGT.TGT_COMPET = '"+cCompet+"' AND " cSql += " TGT.TGT_EXCEDT = '1' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) TGT->( DbGoTo( (cAliasAux)->TGTRECNO ) ) Reclock("TGT", .F.) TGT->( DbDelete() ) TGT->( MsUnlock() ) (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Return User Function MontaTFFAtu(oMdlTFF,dDataDe,dDataAte) Local aItTFF := {} If Day(dDataAte) > 30 dDataAte := dDataAte - 1 EndIf If Day(dDataDe) > 30 dDataDe := dDataDe - 1 EndIf aAdd(aItTFF,{"TFF_COD",oMdlTFF:GetValue("TFF_COD")}) aAdd(aItTFF,{"TFF_QTDVEN",oMdlTFF:GetValue("TFF_QTDVEN")}) aAdd(aItTFF,{"TFF_PRCVEN",oMdlTFF:GetValue("TFF_PRCVEN")}) If oMdlTFF:GetValue("TFF_PERINI") <= dDataDe aAdd(aItTFF,{"TFF_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFF_PERINI",oMdlTFF:GetValue("TFF_PERINI")}) EndIf If oMdlTFF:GetValue("TFF_PERFIM") >= dDataAte aAdd(aItTFF,{"TFF_PERFIM",dDataAte}) Else aAdd(aItTFF,{"TFF_PERFIM",oMdlTFF:GetValue("TFF_PERFIM")}) EndIf Return aItTFF User Function MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte) Local aMatAtu := {} If cTabela == "TFG" aAdd(aMatAtu,{"TFG_COD",oMdlMat:GetValue("TFG_COD")}) aAdd(aMatAtu,{"TFG_QTDVEN",oMdlMat:GetValue("TFG_QTDVEN")}) aAdd(aMatAtu,{"TFG_PRCVEN",oMdlMat:GetValue("TFG_PRCVEN")}) aAdd(aMatAtu,{"TFG_PERINI",dDataDe}) aAdd(aMatAtu,{"TFG_PERFIM",dDataAte}) ElseIf cTabela == "TFH" aAdd(aMatAtu,{"TFH_COD",oMdlMat:GetValue("TFH_COD")}) aAdd(aMatAtu,{"TFH_QTDVEN",oMdlMat:GetValue("TFH_QTDVEN")}) aAdd(aMatAtu,{"TFH_PRCVEN",oMdlMat:GetValue("TFH_PRCVEN")}) aAdd(aMatAtu,{"TFH_PERINI",dDataDe}) aAdd(aMatAtu,{"TFH_PERFIM",dDataAte}) EndIf Return aMatAtu //Cria um Array com todas as revisões de um Item com as datas de inicio e fim da revisão User Function GetTFFAnt(cTabela,cContrato,cRevisa,cCodTFF,dDataDe,dDataAte,aTFFAtu,lEncerra,dDataEnce) Local cSql := "" Local aItTFF := {} Local aRevAnt := {} Local aRevAtu := {} Local cAliasAux := GetNextAlias() Local lRevAnt := .F. Local nX := 0 Local nMeses := 0 Local nDias := 0 Local lBuscaRev := !Empty(dDataDe) .And. !Empty(dDataAte) Local aTFFAnt := {} Local dTFFIniBKP := aTFFAtu[4][2] Default lEncerra := .F. Default dDataEnce := CTOD(" / / ") If lBuscaRev cSql += " SELECT CN9_DTREV,CN9_NUMERO,CN9_REVISA,CN9_REVATU FROM " + RetSqlName("CN9") + " CN9 " cSql += " WHERE CN9.D_E_L_E_T_ = ' ' AND " cSql += " CN9.CN9_FILIAL = '" + xFilial("CN9") + "' AND " cSql += " CN9.CN9_NUMERO = '" + cContrato + "' AND " cSql += " CN9.CN9_DTREV >= '" + DtoS(dDataDe) + "' AND " cSql += " CN9.CN9_DTREV <= '" + DtoS(dDataAte) + "' AND " cSql += " CN9.CN9_REVISA <= '" + cRevisa + "' " cSql += " ORDER BY CN9_REVISA " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) While (cAliasAux)->(!EOF()) If (cAliasAux)->CN9_DTREV >= DtoS(dDataDe) .And. !lRevAnt aRevAnt := U_BuscaRevAnt(cTabela,cContrato,cCodTFF,(cAliasAux)->CN9_REVISA,dDataDe,sTod((cAliasAux)->CN9_DTREV)) If Len(aRevAnt) > 0 aAdd(aItTFF,aRevAnt) aRevAnt := {} EndIf aTFFAnt := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,sTod((cAliasAux)->CN9_DTREV)) If Len(aTFFAnt) > 0 If sToD((cAliasAux)->CN9_DTREV) > aTFFAnt[4][2] aTFFAnt[4][2] := sToD((cAliasAux)->CN9_DTREV) EndIf aAdd(aItTFF,aTFFAnt) EndIf aTFFAnt := {} lRevAnt := .T. If (cAliasAux)->CN9_REVISA = '001' .And. Empty((cAliasAux)->CN9_REVATU) aTFFAnt := U_GetTFFAtu(cTabela,cContrato,cRevisa,cCodTFF,sTod((cAliasAux)->CN9_DTREV),dDataAte) If Len(aTFFAnt) > 0 aAdd(aItTFF,aTFFAnt) EndIf aTFFAnt := {} EndIf Else If (cAliasAux)->CN9_REVISA == cRevisa If Len(aItTFF) > 0 aItTFF[Len(aItTFF)][5][2] := sToD((cAliasAux)->CN9_DTREV) EndIf If !Empty((cAliasAux)->CN9_DTREV) aTFFAtu[4][2] := sToD((cAliasAux)->CN9_DTREV) EndIf aAdd(aItTFF,aTFFAtu) Else If Len(aItTFF) > 0 aItTFF[Len(aItTFF)][5][2] := sToD((cAliasAux)->CN9_DTREV) EndIf aTFFAnt := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,sTod((cAliasAux)->CN9_DTREV)) If Len(aTFFAnt) > 0 aTFFAnt[4][2] := sToD((cAliasAux)->CN9_DTREV) aAdd(aItTFF,aTFFAnt) EndIf aTFFAnt := {} EndIf EndIf (cAliasAux)->(DbSkip()) EndDo (cAliasAux)->(DbCloseArea()) //Caso não tenha nenhuma revisão, o array retorna vazio e o array com os dadados atuais serão criados If Empty(aItTFF) aRevAtu := U_GetTFFAtu(cTabela,cContrato,cRevisa,cCodTFF,dDataDe,dDataAte) If Len(aRevAtu) > 0 aAdd(aItTFF,aRevAtu) aRevAtu := {} EndIf EndIf //Ajusta o array com a data final de reajuste U_AjItTFF(aItTFF,dDataAte,lEncerra,dDataEnce,aTFFAtu[5][2],dTFFIniBKP) //Verifica se algum periodo ficou com a data maior que a data de encerramento da TFF U_ChkDtTFF(aItTFF, aTFFAtu[5][2], dDataAte) //Realiza o calculo para verificar a quantidade de dias e meses serão realizados o calculo For nX := 1 To Len(aItTFF) If aItTFF[nX][4][2] <> aItTFF[nX][5][2] .Or. nX == Len(aItTFF) If aItTFF[nX][5][2] > aItTFF[nX][4][2] If Day(aItTFF[nX][4][2]) > 1 nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) - 1 nDias := (30 - Day(aItTFF[nX][4][2])) + 1 If Day(aItTFF[nX][5][2]) == 30 nMeses += 1 Else nDias += Day(aItTFF[nX][5][2]) - 1 EndIf Else nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) If Day(aItTFF[nX][5][2]) == 30 nMeses += 1 Else nDias += Day(aItTFF[nX][5][2]) - 1 EndIf EndIf If nDias >= 30 nDias := nDias - 30 nMeses += 1 EndIf Else If nX == Len(aItTFF) .And. aItTFF[nX][5][2] == aItTFF[nX][4][2] nMeses := 0 nDias := 1 Else nMeses := 0 nDias := 0 EndIf EndIf EndIf aAdd(aItTFF[nX],{"MESES",nMeses}) aAdd(aItTFF[nX],{"DIAS",nDias}) nMeses := 0 nDias := 0 Next nX EndIf Return aItTFF //Faz uma busca nas revisoes anteriores User Function BuscaRevAnt(cTabela,cContrato,cCodTFF,cRevAtu,dDataDe,dDataRev) Local cSql := "" Local aItTFF := {} Local cAliasAux := GetNextAlias() cSql += " SELECT CN9_DTREV,CN9_NUMERO,CN9_REVISA,CN9_REVATU FROM " + RetSqlName("CN9") + " CN9 " cSql += " WHERE CN9.D_E_L_E_T_ = ' ' AND " cSql += " CN9.CN9_FILIAL = '" + xFilial("CN9") + "' AND " cSql += " CN9.CN9_NUMERO = '" + cContrato + "' AND " cSql += " CN9.CN9_REVATU = '" + cRevAtu + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->CN9_DTREV < DtoS(dDataDe) aItTFF := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,dDataRev,.T.) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Return aItTFF //Monta o array com as TFF´s de revisões anteriores com os respectivos dados User Function BuscaItAnt(cTabela,cContrato,cRevAtu,cCodTFF,dDataDe,dDataRev,lRevAnt) Local cSql := "" Local cAliasAux := GetNextAlias() Local aItTFF := {} Default lRevAnt := .F. Do Case Case cTabela == "TFF" cSql += " SELECT TFF.TFF_COD, TFF.TFF_CONREV ,TFF.TFF_QTDVEN,TFF.TFF_PRCVEN,TFF.TFF_PERINI,TFF.TFF_PERFIM FROM " + RetSqlName("TFF") + " TFF " cSql += " WHERE TFF.D_E_L_E_T_ = ' ' AND " cSql += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' AND " cSql += " TFF.TFF_CONTRT = '" + cContrato + "' AND " cSql += " TFF.TFF_CODSUB = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFF_CONREV == cRevAtu aAdd(aItTFF,{"TFF_COD",(cAliasAux)->TFF_COD}) aAdd(aItTFF,{"TFF_QTDVEN",(cAliasAux)->TFF_QTDVEN}) aAdd(aItTFF,{"TFF_PRCVEN",(cAliasAux)->TFF_PRCVEN}) If lRevAnt If (cAliasAux)->TFF_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFF_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFF_PERINI",sToD((cAliasAux)->TFF_PERINI)}) EndIf If sToD((cAliasAux)->TFF_PERINI) > dDataRev aAdd(aItTFF,{"TFF_PERFIM",sToD((cAliasAux)->TFF_PERINI)}) Else aAdd(aItTFF,{"TFF_PERFIM",dDataRev}) EndIf Else aAdd(aItTFF,{"TFF_PERINI",dDataRev}) aAdd(aItTFF,{"TFF_PERFIM",dDataRev}) EndIf Else aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFF_COD,dDataDe,dDataRev,.T.) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Case cTabela == "TFH" cSql += " SELECT TFH.TFH_COD, TFH.TFH_CONREV ,TFH.TFH_QTDVEN,TFH.TFH_PRCVEN,TFH.TFH_PERINI,TFH.TFH_PERFIM FROM " + RetSqlName("TFH") + " TFH " cSql += " WHERE TFH.D_E_L_E_T_ = ' ' AND " cSql += " TFH.TFH_FILIAL = '" + xFilial("TFH") + "' AND " cSql += " TFH.TFH_CONTRT = '" + cContrato + "' AND " cSql += " TFH.TFH_CODSUB = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFH_CONREV == cRevAtu aAdd(aItTFF,{"TFH_COD",(cAliasAux)->TFH_COD}) aAdd(aItTFF,{"TFH_QTDVEN",(cAliasAux)->TFH_QTDVEN}) aAdd(aItTFF,{"TFH_PRCVEN",(cAliasAux)->TFH_PRCVEN}) If lRevAnt If (cAliasAux)->TFH_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFH_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFH_PERINI",sToD((cAliasAux)->TFH_PERINI)}) EndIf aAdd(aItTFF,{"TFH_PERFIM",dDataRev}) Else aAdd(aItTFF,{"TFH_PERINI",dDataRev}) aAdd(aItTFF,{"TFH_PERFIM",dDataRev}) EndIf Else aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFH_COD,dDataDe,dDataRev,.T.) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Case cTabela == "TFG" cSql += " SELECT TFG.TFG_COD, TFG.TFG_CONREV ,TFG.TFG_QTDVEN,TFG.TFG_PRCVEN,TFG.TFG_PERINI,TFG.TFG_PERFIM FROM " + RetSqlName("TFG") + " TFG " cSql += " WHERE TFG.D_E_L_E_T_ = ' ' AND " cSql += " TFG.TFG_FILIAL = '" + xFilial("TFG") + "' AND " cSql += " TFG.TFG_CONTRT = '" + cContrato + "' AND " cSql += " TFG.TFG_CODSUB = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFG_CONREV == cRevAtu aAdd(aItTFF,{"TFG_COD",(cAliasAux)->TFG_COD}) aAdd(aItTFF,{"TFG_QTDVEN",(cAliasAux)->TFG_QTDVEN}) aAdd(aItTFF,{"TFG_PRCVEN",(cAliasAux)->TFG_PRCVEN}) If lRevAnt If (cAliasAux)->TFG_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFG_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFG_PERINI",sToD((cAliasAux)->TFG_PERINI)}) EndIf aAdd(aItTFF,{"TFG_PERFIM",dDataRev}) Else aAdd(aItTFF,{"TFG_PERINI",dDataRev}) aAdd(aItTFF,{"TFG_PERFIM",dDataRev}) EndIf Else aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFG_COD,dDataDe,dDataRev,.T.) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) EndCase Return aItTFF //Faz o calculo conforme as datas informadas no array aTFF User Function ValRetr(aTFF,nPerc,nValDiff) Local nRet := 0 Local nX := 0 Local nValor := 0 Local nQtd := 0 For nX := 1 To Len(aTFF) nValor := aTFF[nX][3][2] nQtd := aTFF[nX][2][2] If aTFF[nX][6][2] > 0 nRet += U_CalcMesTFF(nQtd,nValor,nPerc,nValDiff,aTFF[nX][6][2]) EndIf If aTFF[nX][7][2] > 0 nRet += U_CalcDTFF(nQtd,nValor,nPerc,nValDiff,aTFF[nX][7][2]) EndIf Next nX nRet := Round(nRet,TamSX3("TFF_VLPRPA")[2]) Return nRet //Realiza o calculo por mês do reajuste retroativo User Function CalcMesTFF(nQtd,nValor,nPerc,nValDiff,nMes) Local nVal := 0 If nPerc > 0 nVal := (nValor * (nPerc / 100)) * nQtd nVal := nVal * nMes ElseIf nValDiff > 0 nVal := (nValDiff * nMes) * nQtd EndIf Return nVal //Realiza o calculo por dia do reajuste retroativo User Function CalcDTFF(nQtd,nValor,nPerc,nValDiff,nDias) Local nVal := 0 Local nValDias := 0 If nPerc > 0 nValDias := U_CalcValDias(nValor) ElseIf nValDiff > 0 nValDias := U_CalcValDias(nValDiff) EndIf If nPerc > 0 nValDias := nValDias * nQtd nVal := (nValDias * (nPerc / 100)) nVal := nVal * nDias ElseIf nValDiff > 0 nVal := (nValDias * nDias) * nQtd EndIf Return nVal //Retorna o valor diario de um reajuste para calculo User Function CalcValDias(nValor) Return (nValor / 30 ) //Faz o calculo para verificar o periodo que foi informado nos campos Data De e Data Até para realizar os calculos User Function CeckMult(dDataDe,dDataAte,nMult) If !Empty(dDataDe) .And. !Empty(dDataAte) nMult := DateDiffMonth(dDataDe,dDataAte) + 1 EndIf Return //Valida se os campos de data serão preenchidos de forma correta User Function VldDtRet(nPerc,dDataDe,dDataAte) Local lRet := .T. If nPerc > 0 If Empty(dDataDe) MsgAlert("O campo Data de ? está vazio e deve ser preenchido para reajuste retroativo", "Atenção") lRet := .F. EndIf If lRet .And. Empty(dDataAte) MsgAlert("O campo Data Ate ? está vazio e deve ser preenchido para reajuste retroativo", "Atenção") lRet := .F. EndIf If lRet .And. dDataAte < dDataDe MsgAlert("O campo Data Ate ? deve ser maior que o campo Data De ?", "Atenção") lRet := .F. EndIf EndIf Return lRet //Monta o array com as informações da TFF atuais quando não tem revisão criada User Function GetTFFAtu(cTabela,cContrato,cRevAtu,cCodTFF,dDataDe,dDataAte) Local cSql := "" Local cAliasAux := GetNextAlias() Local aItTFF := {} Default lRevAnt := .F. Do Case Case cTabela == "TFF" cSql += " SELECT TFF.TFF_COD, TFF.TFF_CONREV ,TFF.TFF_QTDVEN,TFF.TFF_PRCVEN,TFF.TFF_PERINI,TFF.TFF_PERFIM FROM " + RetSqlName("TFF") + " TFF " cSql += " WHERE TFF.D_E_L_E_T_ = ' ' AND " cSql += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' AND " cSql += " TFF.TFF_CONTRT = '" + cContrato + "' AND " cSql += " TFF.TFF_COD = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFF_CONREV == cRevAtu aAdd(aItTFF,{"TFF_COD",(cAliasAux)->TFF_COD}) aAdd(aItTFF,{"TFF_QTDVEN",(cAliasAux)->TFF_QTDVEN}) aAdd(aItTFF,{"TFF_PRCVEN",(cAliasAux)->TFF_PRCVEN}) If (cAliasAux)->TFF_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFF_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFF_PERINI",sToD((cAliasAux)->TFF_PERINI)}) EndIf aAdd(aItTFF,{"TFF_PERFIM",dDataAte}) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Case cTabela == "TFH" cSql += " SELECT TFH.TFH_COD, TFH.TFH_CONREV ,TFH.TFH_QTDVEN,TFH.TFH_PRCVEN,TFH.TFH_PERINI,TFH.TFH_PERFIM FROM " + RetSqlName("TFH") + " TFH " cSql += " WHERE TFH.D_E_L_E_T_ = ' ' AND " cSql += " TFH.TFH_FILIAL = '" + xFilial("TFH") + "' AND " cSql += " TFH.TFH_CONTRT = '" + cContrato + "' AND " cSql += " TFH.TFH_COD = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFH_CONREV == cRevAtu aAdd(aItTFF,{"TFH_COD",(cAliasAux)->TFH_COD}) aAdd(aItTFF,{"TFH_QTDVEN",(cAliasAux)->TFH_QTDVEN}) aAdd(aItTFF,{"TFH_PRCVEN",(cAliasAux)->TFH_PRCVEN}) If (cAliasAux)->TFH_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFH_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFH_PERINI",sToD((cAliasAux)->TFH_PERINI)}) EndIf aAdd(aItTFF,{"TFH_PERFIM",dDataAte}) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) Case cTabela == "TFG" cSql += " SELECT TFG.TFG_COD, TFG.TFG_CONREV ,TFG.TFG_QTDVEN,TFG.TFG_PRCVEN,TFG.TFG_PERINI,TFG.TFG_PERFIM FROM " + RetSqlName("TFG") + " TFG " cSql += " WHERE TFG.D_E_L_E_T_ = ' ' AND " cSql += " TFG.TFG_FILIAL = '" + xFilial("TFG") + "' AND " cSql += " TFG.TFG_CONTRT = '" + cContrato + "' AND " cSql += " TFG.TFG_COD = '" + cCodTFF + "' " cSql := ChangeQuery(cSql) dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.) If (cAliasAux)->(!EOF()) If (cAliasAux)->TFG_CONREV == cRevAtu aAdd(aItTFF,{"TFG_COD",(cAliasAux)->TFG_COD}) aAdd(aItTFF,{"TFG_QTDVEN",(cAliasAux)->TFG_QTDVEN}) aAdd(aItTFF,{"TFG_PRCVEN",(cAliasAux)->TFG_PRCVEN}) If (cAliasAux)->TFG_PERINI < dToS(dDataDe) aAdd(aItTFF,{"TFG_PERINI",dDataDe}) Else aAdd(aItTFF,{"TFG_PERINI",sToD((cAliasAux)->TFG_PERINI)}) EndIf aAdd(aItTFF,{"TFG_PERFIM",dDataAte}) EndIf (cAliasAux)->(DbSkip()) EndIf (cAliasAux)->(DbCloseArea()) EndCase Return aItTFF //Ajusta a Data final no Array User Function AjItTFF(aItTFF,dDataAte,lEncerra,dDataEncerra,dDtFim, dDtIni) Local nPos := Len(aItTFF) If nPos > 0 If lEncerra If dDataAte > dDataEncerra aItTFF[nPos][5][2] := dDataEncerra ElseIf dDataAte < dDataEncerra aItTFF[nPos][5][2] := dDataAte EndIf Else If dDtFim >= dDataAte aItTFF[nPos][5][2] := dDataAte ElseIf dDtFim <= dDataAte aItTFF[nPos][5][2] := dDtFim EndIf If dDtIni >= aItTFF[nPos][4][2] aItTFF[nPos][4][2] := dDtIni EndIf EndIf EndIf Return aItTFF User Function ChkDtTFF(aItTFF, dDtfimTFF, dDataAte) Local nPos := Len(aItTFF) Local nX := 0 Local dDtIniRev Local dDtFimRev If nPos > 0 For nX := 1 To nPos If dDataAte <= dDtfimTFF If aItTFF[nX][5][2] < aItTFF[nX][4][2] dDtIniRev := aItTFF[nX][4][2] dDtFimRev := aItTFF[nX][5][2] If nX > 1 .And. (nX + 1) <= nPos aItTFF[nX-1][5][2] := aItTFF[nX][5][2] aItTFF[nX+1][4][2] := aItTFF[nX][4][2] aItTFF[nX][4][2] := dDtFimRev aItTFF[nX][5][2] := dDtIniRev EndIf EndIf Else If aItTFF[nX][5][2] > dDtfimTFF aItTFF[nX][5][2] := dDtfimTFF EndIf EndIf Next nX EndIf Return aItTFF //Coloca a cor azul no botão Aplicar User Function ColorAplic() Local cCssCor := "QPushButton{margin-top:1px; border-color:#1F739E; font:bold; border-radius:2px; background-color:#1F739E; color:#ffffff; border-style: outset; border-width:1px; }" Return (cCssCor) //Valida se os campos de Valor ou Percentual estão preenchidos User Function VldCpoRe(nValid,nValor,cCampo) Local lRet := .T. If nValor > 0 .And. nValid > 0 lRet := .F. MsgAlert("O campo " + cCampo + " não pode ser preenchido!") EndIf Return lRet //Valida os campos quando utiliza o processo de Valor e não Percentual User Function VldOpc(nValor,lValid,cCampo,cValCpo) Local lRet := .T. If nValor > 0 .And. lValid .And. Alltrim(SubStr(cValCpo,1,1)) == "1" lRet := .F. MsgAlert("O Campo " + cCampo + " não pode ser configurado com o valor " + cValCpo + " quando utilizar o campo Novo Valor (R$) " ) EndIf Return lRet User Function ChkCpoTGT() Return TGT->( ColumnPos('TGT_DTINI') ) > 0 .AND. TGT->( ColumnPos('TGT_DTFIM') ) > 0 .AND. TGT->( ColumnPos('TGT_INDICE') ) > 0 .AND. TGT->( ColumnPos('TGT_VALREA') > 0 ) User Function ChkInd(nValPrc,nValRet) Local nInd := 0 Local nDif := 0 nDif := nValRet - nValPrc nInd := nDif / nValPrc nInd := Round(nInd,TamSX3("TGT_INDICE")[2]) Return nInd //Faz o calculo para retornar o valor de reajuste de cada mês User Function ValRetMes(aTFF,nMes,nIndice,nValDiff) Local aValores := {} Local nX := 0 Local nQtd := 0 Local nRet := 0 Local nRetDias := 0 Local nValDias := 0 Local nDias := 0 Local nValBkp := nValDiff For nX := 1 To Len(aTFF) nValDiff := nValBkp If aTFF[nX][6][2] <> 0 .Or. aTFF[nX][7][2] <> 0 nQtd := aTFF[nX][2][2] If Month(aTFF[nX][4][2]) < nMes .And. Month(aTFF[nX][5][2]) > nMes If nValDiff > 0 nValdiff := nValDiff - aTFF[nX][3][2] nRet := (nValDiff * 1) * nQtd ElseIf nIndice > 0 nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd nRet := nRet * 1 EndIf Else If Month(aTFF[nX][4][2]) == nMes If Month(aTFF[nX][4][2]) == nMes .And. Month(aTFF[nX][5][2]) == nMes If nValDiff > 0 nValDiff := nValDiff - aTFF[nX][3][2] nValDias := U_CalcValDias(nValDiff) nDias := 30 nRetDias += (nValDias * nDias) * nQtd ElseIf nIndice > 0 nValDias := U_CalcValDias(aTFF[nX][3][2]) nValDias := (nValDias * (nIndice / 100)) nDias := 30 nRetDias += (nValDias * nDias) * nQtd EndIf ElseIf Day(aTFF[nX][4][2]) > 1 If nValDiff > 0 nValDiff := nValDiff - aTFF[nX][3][2] nValDias := U_CalcValDias(nValDiff) nDias := (30 - Day(aTFF[nX][4][2])) + 1 nRetDias += (nValDias * nDias) * nQtd Else nValDias := U_CalcValDias(aTFF[nX][3][2]) nValDias := (nValDias * (nIndice / 100)) nDias := (30 - Day(aTFF[nX][4][2])) + 1 nRetDias += (nValDias * nDias) * nQtd EndIf Else If nValDiff > 0 nValDiff := nValDiff - aTFF[nX][3][2] nRet := (nValDiff * 1) * nQtd ElseIf nIndice > 0 nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd nRet := nRet * 1 EndIf EndIf ElseIf Month(aTFF[nX][5][2]) == nMes .And. Day(aTFF[nX][5][2]) > 1 If Day(aTFF[nX][5][2]) < 30 If nValDiff > 0 nValDiff := nValDiff - aTFF[nX][3][2] nValDias := U_CalcValDias(nValDiff) If Day(aTFF[nX][5][2]) == 1 nDias := Day(aTFF[nX][5][2]) Else nDias := Day(aTFF[nX][5][2]) - 1 EndIf nRetDias += (nValDias * nDias) * nQtd ElseIf nIndice > 0 nValDias := U_CalcValDias(aTFF[nX][3][2]) nValDias := (nValDias * (nIndice / 100)) nDias := Day(aTFF[nX][5][2]) nRetDias += (nValDias * nDias) * nQtd EndIf Else If nValDiff > 0 nValdiff := nValDiff - aTFF[nX][3][2] nRet := (nValDiff * 1) * nQtd ElseIf nIndice > 0 nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd nRet := nRet * 1 EndIf EndIf EndIf EndIf EndIf Next nX If nRetDias > 0 nRet := Round(nRetDias,TamSX3("TFF_VLPRPA")[2]) Else nRet := Round(nRet,TamSX3("TFF_VLPRPA")[2]) EndIf aAdd(aValores,{ MesExtenso(nMes),nRet}) Return aValores User Function GetValTFF(cTable,oModel,dDataDe,dDataAte,nValor,lEncerra,dDataEnce) Local aItTFF := {} Local aItens := {} Local dIniAux := CTOD(" / / ") Local dFimAux := CTOD(" / / ") aAdd(aItTFF,{cTable+'_COD',oModel:GetValue(cTable+'_COD')}) aAdd(aItTFF,{cTable+'_QTDVEN',oModel:GetValue(cTable+'_QTDVEN')}) aAdd(aItTFF,{cTable+'_PRCVEN',nValor}) If oModel:GetValue(cTable+'_PERINI') <= dDataDe aAdd(aItTFF,{cTable+'_PERINI',dDataDe}) Else If Day(oModel:GetValue(cTable+'_PERINI')) > 30 dIniAux := oModel:GetValue(cTable+'_PERINI') - 1 Else dIniAux := oModel:GetValue(cTable+'_PERINI') EndIf aAdd(aItTFF,{cTable+'_PERINI',dIniAux}) EndIf If !lEncerra If oModel:GetValue(cTable+'_PERFIM') >= dDataAte aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else If Day(oModel:GetValue(cTable+'_PERFIM')) > 30 dFimAux := oModel:GetValue(cTable+'_PERFIM') - 1 Else dFimAux := oModel:GetValue(cTable+'_PERFIM') EndIf aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf Else If dDataEnce > dDataAte aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else If Day(dDataEnce) > 30 dFimAux := dDataEnce - 1 Else dFimAux := dDataEnce EndIf aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf EndIf aAdd(aItens,aItTFF) //Ajusta os itens para realizar o calculo dos dias U_GetDtItens(@aItens) Return aItens User Function GetDtItens(aItTFF) Local nX := 0 Local nMeses := 0 Local nDias := 0 //Realiza o calculo para verificar a quantidade de dias e meses serão realizados o calculo For nX := 1 To Len(aItTFF) If aItTFF[nX][4][2] <> aItTFF[nX][5][2] .Or. nX == Len(aItTFF) If aItTFF[nX][5][2] > aItTFF[nX][4][2] If Day(aItTFF[nX][4][2]) > 1 nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) - 1 nDias := (30 - Day(aItTFF[nX][4][2])) + 1 If Day(aItTFF[nX][5][2]) == 30 nMeses += 1 Else nDias += Day(aItTFF[nX][5][2]) EndIf Else nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) If Day(aItTFF[nX][5][2]) == 30 nMeses += 1 Else //Verifica se é fevereiro e é o ultimo dia do mês If Month(aItTFF[nX][5][2]) == 2 .And. (Day(aItTFF[1][5][2]) == 28 .Or. Day(aItTFF[1][5][2]) == 29) nMeses += 1 Else nDias += Day(aItTFF[nX][5][2]) EndIf EndIf EndIf If nDias >= 30 nDias := nDias - 30 nMeses += 1 EndIf Else If nX == Len(aItTFF) .And. aItTFF[nX][5][2] == aItTFF[nX][4][2] nMeses := 0 nDias := 1 Else nMeses := 0 nDias := 0 EndIf EndIf EndIf aAdd(aItTFF[nX],{"MESES",nMeses}) aAdd(aItTFF[nX],{"DIAS",nDias}) nMeses := 0 nDias := 0 Next nX Return aItTFF //Pega os valores e dias para realizar o calculo do valor retrotivo por mês, utilizado no relatorio TECR871 User Function GetDtTFF(cTable,nInd,cChave,cContr,dDataDe,dDataAte,lEncerra,dDataEnce) Local aItTFF := {} Local aItens := {} Local dIniAux := CTOD(" / / ") Local dFimAux := CTOD(" / / ") DbSelectArea(cTable) (cTable)->(DbSetOrder(nInd)) If (cTable)->(MsSeek(cChave)) aAdd(aItTFF,{cTable+'_COD',(&("(cTable)->" + cTable+'_COD'))}) aAdd(aItTFF,{cTable+'_QTDVEN',(&("(cTable)->" + cTable+'_QTDVEN'))}) aAdd(aItTFF,{cTable+'_PRCVEN',U_ValOriTFF((&("(cTable)->" + cTable+'_FILIAL')),(&("(cTable)->" + cTable+'_COD')),cContr,cTable,cTable+'_PRCVEN')}) If (&("(cTable)->" + cTable+'_PERINI')) <= dDataDe aAdd(aItTFF,{cTable+'_PERINI',dDataDe}) Else If Day((&("(cTable)->" + cTable+'_PERINI'))) > 30 dIniAux := (&("(cTable)->" + cTable+'_PERINI')) - 1 Else dIniAux := (&("(cTable)->" + cTable+'_PERINI')) EndIf aAdd(aItTFF,{cTable+'_PERINI',dIniAux}) EndIf If !lEncerra If (&("(cTable)->" + cTable+'_PERFIM')) >= dDataAte aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else If Day((&("(cTable)->" + cTable+'_PERFIM'))) > 30 dFimAux := (&("(cTable)->" + cTable+'_PERFIM')) - 1 Else dFimAux := (&("(cTable)->" + cTable+'_PERFIM')) EndIf aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf Else If dDataEnce > dDataAte aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else If Day(dDataEnce) > 30 dFimAux := dDataEnce - 1 Else dFimAux := dDataEnce EndIf aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf EndIf aAdd(aItens,aItTFF) //Ajusta os itens para realizar o calculo dos dias U_GetDtItens(@aItens) EndIf Return aItens //Pega o valor original da TFF antes do reajuste User Function ValOriTFF(cFilIt,cCodIt,cContr,cTabela,cCampo) Local cSql := "" Local cFields := "" Local cFrom := "" Local nValor := 0 Local cAliasIt := GetNextAlias() If cTabela == "TFF" cFields := "TFF.TFF_FILIAL,TFF.TFF_PRCVEN " cSql += " TFF.D_E_L_E_T_ = ' ' AND " cSql += " TFF.TFF_FILIAL = '" + cFilIt + "' AND " cSql += " TFF.TFF_CONTRT = '" + cContr + "' AND " cSql += " TFF.TFF_CODSUB = '" + cCodIt + "' " ElseIf cTabela == "TFG" cFields := "TFG.TFG_FILIAL,TFG.TFG_PRCVEN " cSql += " TFG.D_E_L_E_T_ = ' ' AND " cSql += " TFG.TFG_FILIAL = '" + cFilIt + "' AND " cSql += " TFG.TFG_CONTRT = '" + cContr + "' AND " cSql += " TFG.TFG_CODSUB = '" + cCodIt + "' " ElseIf cTabela == "TFH" cFields := "TFH.TFH_FILIAL,TFH.TFH_PRCVEN " cSql += " TFH.D_E_L_E_T_ = ' ' AND " cSql += " TFH.TFH_FILIAL = '" + cFilIt + "' AND " cSql += " TFH.TFH_CONTRT = '" + cContr + "' AND " cSql += " TFH.TFH_CODSUB = '" + cCodIt + "' " EndIf cFields := "%" + cFields + "%" cFrom := "%" + RetSqlName(cTabela) + " " + cTabela + "%" cSql := "%"+cSql+"%" BeginSql Alias cAliasIt SELECT %Exp:cFields% FROM %Exp:cFrom% WHERE %exp:cSql% EndSql If (cAliasIt)->(!Eof()) nValor := (cAliasIt)->&(cCampo) Endif (cAliasIt)->(DbCloseArea()) Return nValor
04. DEMAIS INFORMAÇÕES
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
DT PE AT870Ant Antecipação do Contrato
DSERSGS-12603 DT Gatilho Escala x Hora Extra Planejada
DSERSGS-10243 DT Inclusão de gatilho para recuperar valor de hora extra
5. ASSUNTOS RELACIONADOS
- Não há.