Identificador de Regra

IMP-661GIREC02

Finalidade: Permitir ao usuário calcular e atualizar, via regra, os valores de multa e juros (juros/multa) na guia de recolhimento.

Módulo: IMP - Impostos.

Tela: Guias de Recolhimento (F661GRI)

Transação: Não se aplica.

Regra:

Exemplo de regra:

Definir Alfa xSQL;
Definir Alfa xCur;
Definir Alfa ImpACodImp;
Definir Alfa ImpAObsGr1;
Definir Alfa AVlrResConvertido;
Definir Alfa ADiaCalConvertido;
Definir Alfa AMesCalConvertido;
Definir Alfa AAnoCalConvertido;
Definir Numero NPerJrs;
Definir Numero NPerMul;
Definir Numero NVlrRes;
Definir Numero ImpNVlrPri;
Definir Numero ImpNCodEmp;
Definir Numero ImpNCodFil;
Definir Numero ImpNSeqLct;
Definir Numero ImpNVlrJur;
Definir Numero ImpNVlrMul;
Definir Numero NDiaCal;
Definir Numero NDiaOri;
Definir Numero NMesCal;
Definir Numero NMesOri;
Definir Numero NAnoCal;
Definir Numero NAnoOri;
Definir Data ImpDVenOri;
Definir Data ImpDVenOriAjustado;
Definir Data DCalculo; @Nova data de vencimento@
Definir Data DCalculoAjustado;
Definir Data ImpDDatApi;

DataHoje(DCalculo); 

se (DCalculo > ImpDVenOri)
inicio
DesMontaData(DCalculo,NDiaCal,NMesCal,NAnoCal);
DesMontaData(ImpDVenOri,NDiaOri,NMesOri,NAnoOri);

NDiaCal = 1;

se (NMesCal = 1)
NMesCal = 12;
senao
NMesCal = NMesCal - 1;

NDiaOri = 1;

MontaData(NDiaCal, NMesCal, NAnoCal, DCalculoAjustado);
MontaData(01, NMesOri,NAnoOri, ImpDVenOriAjustado);

@calcula juros@
xSQL = "SELECT SUM(VLRCOT) AS NPERJRS \
FROM E031IMO \
WHERE E031IMO.CODMOE = 'SEL' AND \
E031IMO.DATMOE >= :DVENORI AND \
E031IMO.DATMOE <= :DCALCULO ";

SQL_Criar(xCur);
SQL_DefinirComando(xCur, xSQL);
SQL_DefinirData(xCur,"DCALCULO",DCalculoAjustado);
SQL_DefinirData(xCur,"DVENORI",ImpDVenOriAjustado);
SQL_AbrirCursor(xCur);
SQL_RetornarFlutuante(xCur, "NPERJRS", NPerJrs);

Se (NPerJrs > 0)
ImpNVlrJur = ImpNVlrPri * (NPerJrs / 100);

@calcula multa@
xSQL = "SELECT E095HFO.PAGMUL \
FROM E661GRI,E051GUI,E055PAR,E095HFO \
WHERE E051GUI.CODEMP=E661GRI.CODEMP AND \
E051GUI.CODGRI=E661GRI.CODGRI AND \
E055PAR.CODEMP=E051GUI.CODEMP AND \
E055PAR.CODFIL=E661GRI.CODFIL AND \
E055PAR.CODGRI=E051GUI.CODGRI AND \
E095HFO.CODEMP=E661GRI.CODEMP AND \
E095HFO.CODFIL=E661GRI.CODFIL AND \
E095HFO.CODFOR=E055PAR.PAGFOR AND \
E661GRI.CODEMP = :CODEMP AND \
E661GRI.CODFIL = :CODFIL AND \
E661GRI.CODIMP = :CODIMP AND \
E661GRI.DATAPI = :DATAPI AND \
E661GRI.SEQLCT = :SEQLCT ";

SQL_Criar(xCur);
SQL_DefinirComando(xCur, xSQL);
SQL_DefinirInteiro(xCur,"CODEMP",ImpNCodEmp);
SQL_DefinirInteiro(xCur,"CODFIL",ImpNCodFil);
SQL_DefinirAlfa(xCur,"CODIMP",ImpACodImp);
SQL_DefinirData(xCur,"DATAPI",ImpDDatApi);
SQL_DefinirInteiro(xCur,"SEQLCT",ImpNSeqLct);
SQL_AbrirCursor(xCur);
SQL_RetornarFlutuante(xCur, "PAGMUL", NPagMul);

Se (NPagMul > 0)
inicio
NDiaMul = DCalculo - ImpDVenOri;
NPerMul = NDiaMul * NPagMul;

Se (NPerMul > 20)
NPerMul = 20;

ImpNVlrMul = ImpNVlrPri * (NPerMul / 100);
fim;

@ Atualiza Guia de Recolhimento @
Se ((ImpNVlrJur > 0) ou (ImpNVlrMul > 0))
inicio
NVlrRes = ImpNVlrPri + ImpNVlrJur + ImpNVlrMul;

ConverteMascara(1,NVlrRes,AVlrResConvertido,"zzz.zzz.zz9,99");
DesMontaData(DCalculo,NDiaCal,NMesCal,NAnoCal);
IntParaAlfa(NDiaCal,ADiaCalConvertido);
IntParaAlfa(NMesCal,AMesCalConvertido);
IntParaAlfa(NAnoCal,AAnoCalConvertido);
LimpaEspacos(AVlrResConvertido);

ImpAObsGr1 = "Cálculo válido para " + ADiaCalConvertido + "/" + AMesCalConvertido + "/" + AAnoCalConvertido + ", valor total " + AVlrResConvertido;

xSQL = "UPDATE E661GRI SET OBSGR1 = :OBSGR1, VLRJUR = :VLRJUR, VLRMUL = :VLRMUL WHERE CODEMP = :CODEMP AND CODFIL = :CODFIL AND CODIMP = :CODIMP AND DATAPI = :DATAPI AND SEQLCT = :SEQLCT ";

SQL_Criar(xCur);
SQL_DefinirComando(xCur, xSQL);
SQL_DefinirInteiro(xCur,"CODEMP",ImpNCodEmp);
SQL_DefinirInteiro(xCur,"CODFIL",ImpNCodFil);
SQL_DefinirAlfa(xCur,"CODIMP",ImpACodImp);
    SQL_DefinirAlfa(xCur,"OBSGR1",ImpAObsGr1);
SQL_DefinirData(xCur,"DATAPI",ImpDDatApi);
SQL_DefinirInteiro(xCur,"SEQLCT",ImpNSeqLct);
    SQL_DefinirFlutuante(xCur,"VLRJUR",ImpNVlrJur);
    SQL_DefinirFlutuante(xCur,"VLRMUL",ImpNVlrMul);            
SQL_AbrirCursor(xCur);
fim;
fim;

Este artigo ajudou você?