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; |