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