Exemplo de regra para recálculo de apuração a partir da tela de Históricos de Afastamentos/Alteração

<div class="Code"><p>Definir alfa xAbrEmp;<br></br>Definir alfa xAbrTcl;<br></br>Definir alfa xAbrCad;<br></br>Definir Data xData;<br></br>Definir alfa xHorTerAnt;<br></br>Definir alfa xQhrAfant;<br></br>Definir alfa xSitAfaAnt;<br></br>Definir cursor CurR038AFA;<br></br>Definir interno.com.senior.g5.rh.hr.calculoApuracao.Calcular vCalculo; <br></br><br></br>Se (vExecucaoRegra = 0)<br></br>{ <br></br>/*As variáveis texto1, texto2, texto3 e valor1 são variáveis internas de sistema que tem como objetivo armazenar<br></br>os valores dos registros anteriores a alteração. Se Utilizar variáveis locais, seus valores são zerados ao executar a regra após a alteração.*/<br></br><br></br>texto1 = ""; @HorTer anterior@<br></br>texto2 = ""; @SitAfa Anterior@<br></br>texto3 = ""; @QhrAfa anterior@<br></br>valor1 = 0; @Data Termino Anterior@<br></br>@Dados do colaborador@<br></br>IntParaAlfa(R038AFA.NUMEMP, xAbrEmp);<br></br>IntParaAlfa(R038AFA.TIPCOL, xAbrTcl);<br></br>IntParaAlfa(R038AFA.NUMCAD, xAbrCad);<br></br>xData = R038AFA.DATAFA;<br></br><br></br>CurR038AFA.SQL "SELECT SITAFA, QHRAFA, DATTER, HORTER FROM R038AFA WHERE NUMEMP = :xAbrEmp AND TIPCOL = :xAbrTcl AND NUMCAD = :xAbrCad AND DATAFA = :xData "<br></br>CurR038AFA.AbrirCursor();<br></br>Se (CurR038AFA.Achou)<br></br>{<br></br>valor1 = CurR038AFA.DATTER; <br></br>IntParaAlfa(CurR038AFA.HORTER, xHorTerAnt);<br></br>texto1 = xHorTerAnt;<br></br>IntParaAlfa(CurR038AFA.QHRAFA, xQhrAfant);<br></br>texto2 = xQhrAfant;<br></br>IntParaAlfa(CurR038AFA.SITAFA, xSitAfaAnt);<br></br>texto3 = xSitAfaAnt; <br></br>}<br></br>CurR038AFA.FecharCursor(); <br></br>}<br></br>Senao<br></br>{ <br></br><br></br>Res = Mensagem(Retorna, "Esta operação irá afetar a apuração do Colaborador. Deseja Apurar todo o período alterado automaticamente ?[&#x26;Sim, &#x26;Não]");<br></br>Se (Res = 0)<br></br>{<br></br>AlfaParaInt(texto1, xHorTerOLD);<br></br>AlfaParaInt(texto2, xQhrAfaOLD);<br></br>AlfaParaInt(texto3, xSitAfaOLD);<br></br><br></br>@Verifica se não mudou nenhum dado que reflete na apuracao. Nao Recalcula.@<br></br>Se ((R038AFA.DatTer &#x3C;> valor1) OU (R038AFA.HorTer &#x3C;> xHorTerOLD) OU (R038AFA.SitAfa &#x3C;> xSitAfaOLD) OU (R038AFA.QhrAfa &#x3C;> xQhrAfaOLD))<br></br>{<br></br>xdatini = R038AFA.DATAFA;<br></br>xdatfim = R038AFA.DATTER;<br></br>xdatfimant = valor1;<br></br><br></br>Se (xdatfim = 0) <br></br>xdatfim = 65535;<br></br><br></br>Se (xdatfimant = 0) <br></br>xdatfimant = 65535;<br></br><br></br>Se (xdatfim &#x3C; xdatfimant) <br></br>{<br></br>xdatini = xdatfim;<br></br>xdatfim = xdatfimant;<br></br>}<br></br>Senao<br></br>Se (xdatfimant &#x3C; xdatfim) <br></br>xdatini = xdatfimant;<br></br><br></br>Se (R038AFA.DatTer = 0)<br></br>xdatFim = 0;<br></br>Senao<br></br>xdatFim = R038AFA.DatTer;<br></br><br></br><br></br>Se ((R038AFA.HorTer &#x3C;> xHorTerOLD) OU (R038AFA.SitAfa &#x3C;> xSitAfaOLD) OU (R038AFA.QhrAfa &#x3C;> xQhrAfaOLD)) <br></br>xdatini = R038AFA.DATAFA;<br></br><br></br><br></br>vCalculo.DatIni = xdatini;<br></br>vCalculo.DatFim = xdatfim;<br></br>vCalculo.ProApu = "1"; @Tipo de Processamento - Recalcula Apuração@<br></br>vCalculo.ReaMar = "S"; @Realocar Marcações@<br></br>vCalculo.DesAce = "S"; @Desfazer Acertos Situações@<br></br>vCalculo.NumEmp = EmpAtu;<br></br>vCalculo.CodCal = CalAtu;<br></br><br></br>IntParaAlfa(R038AFA.NUMEMP, xAbrEmp);<br></br>IntParaAlfa(R038AFA.TIPCOL, xAbrTcl);<br></br>IntParaAlfa(R038AFA.NUMCAD, xAbrCad);<br></br>vCalculo.AbrEmp = xAbrEmp;<br></br>vCalculo.AbrTcl = xAbrTcl;<br></br>vCalculo.AbrCad = xAbrCad;<br></br><br></br>vCalculo.ModoExecucao = 3; @ Assíncrono - requisão é enviada deixando o sistema liberado para outros processos @<br></br>vCalculo.Executar(); <br></br> }<br></br> }<br></br>}</p></div>

Este artigo ajudou você?