ERP – DIME – Como gerar a DIME Consolidada via regra
Dúvida
Como gerar a DIME Consolidada via regra, na tela F669DME - Controladoria / Gestão de Tributos / Arquivos Fiscais / Estaduais / DIME no módulo de Tributos?
Solução
Para gerar a DIME Consolidada via regra, utilize o identificador de regras IMP-669GDIME01.
Esse identificador permite habilitar a regra para modificações de valores da DIME durante o processamento das informações. A regra é ativada ao clicar no botão Processar.
As variáveis estão documentadas no próprio identificador e podem retornar sempre valor fixo ou através de cursor. Acesse aqui a documentação.
Observação
- Atualmente a rotina de consolidação, que transfere o saldo devedor/credor para empresa centralizadora sem nota fiscal é tratada via Dispositivo Fiscal, para mais detalhes clique aqui e acesse a documentação.
- A DIME funciona assim: quando é preenchido um determinado registro, exemplo: quadro 5 - outros débitos, também é preenchido automaticamente o quadro 30, ou seja, alguns registros são dependentes um do outro.
- Essa apuração consolidada é complexa, e no próprio manual da DIME existem as regras de preenchimento quando for consolidada.
Segue abaixo exemplo de regra para utilizar no identificador IMP-669GDIME01:
/*
Descrição: Regra para geração da DIME, transferencia de valores para apuração consolidada.
Quando dispositivo 2, gera bloco 130, quando dispositivo 3, gera bloco 140.
Quando utilizado variável VRegSel = 30, não estava gerando o registro 130/140,
desta forma executa em todos os registros.
- Criado tratamento para os dispositivos fiscais 32 e 33, apenas para filial 1. Os dispositivos 2 e 3
ficaram exclusivamente para as demais filiais
- Criado tratamento para somar o valor do dispositivo fiscal 22 ao valor do CIAP, gerando o registro 30
do quadro 5 do registro 26
- Criada regra para busca do DARF, classe e origem para o registro 33, com base na guia de recolhimento
*/
Definir Alfa VOper;
Definir Alfa VCodImp;
Definir Alfa aCreVlr;
Definir Alfa aSql;
Definir Alfa Cur_E661Res;
Definir Alfa aCodImp;
Definir Numero VCodEmp;
Definir Numero VCodFil;
Definir Numero vRegSel;
Definir Numero VVlrIte30_130;
Definir Numero VVlrIte30_150;
Definir Numero nCodDrf;
Definir Numero nClaVen;
Definir Numero VApuCon;
Definir Numero nOriPgt;
Definir Data VDatGer;
Definir Data dDatUlt;
Definir Data dDatVct;
Definir Cursor Cur_DCIP;
Definir Cursor Cur_ICMSST;
Definir Cursor Cur_E660NFV;
Definir Cursor Cur_E661CCI;
Definir Cursor Cur_E051Gui;
Definir Funcao Gera_Reg_33();
Se(vCodFil <> 1)
Inicio
vApuCon = 3;
Fim;
se (vregsel = 30)
Inicio
se (vCodFil <> 1)
Inicio
@ Qaundo tiver débitos - a pagar @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisC02 = 2 Then CreVl2 When DisC03 = 2 Then CreVl3 When DisC04 = 2 Then CreVl4 When DisC05 = 2 Then CreVl5";
aSql = aSql + " When DisC06 = 2 Then CreVl6 When DisC11 = 2 Then CreV11 When DisC12 = 2 Then CreV12 When DisC13 = 2 Then CreV13";
aSql = aSql + " When DisC14 = 2 Then CreV14 When DisC15 = 2 Then CreV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_130);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
@ Quando tiver créditos @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisD02 = 3 Then DebVl2 When DisD03 = 3 Then DebVl3 When DisD04 = 3 Then DebVl4 When DisD05 = 3 Then DebVl5";
aSql = aSql + " When DisD06 = 3 Then DebVl6 When DisD07 = 3 Then DebVl7 When DisD11 = 3 Then DebV11 When DisD12 = 3 Then DebV12";
aSql = aSql + " When DisD13 = 3 Then DebV13 When DisD14 = 3 Then DebV14 When DisD15 = 3 Then DebV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_150);
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_140);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
FIm;
senao
Inicio
@ Quando tiver débitos - a pagar @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisC02 = 32 Then CreVl2 When DisC03 = 32 Then CreVl3 When DisC04 = 32 Then CreVl4 When DisC05 = 32 Then CreVl5";
aSql = aSql + " When DisC06 = 32 Then CreVl6 When DisC11 = 32 Then CreV11 When DisC12 = 32 Then CreV12 When DisC13 = 32 Then CreV13";
aSql = aSql + " When DisC14 = 32 Then CreV14 When DisC15 = 32 Then CreV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_060);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
@ Quando tiver créditos @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisD02 = 33 Then DebVl2 When DisD03 = 33 Then DebVl3 When DisD04 = 33 Then DebVl4 When DisD05 = 33 Then DebVl5";
aSql = aSql + " When DisD06 = 33 Then DebVl6 When DisD07 = 33 Then DebVl7 When DisD11 = 33 Then DebV11 When DisD12 = 33 Then DebV12";
aSql = aSql + " When DisD13 = 33 Then DebV13 When DisD14 = 33 Then DebV14 When DisD15 = 33 Then DebV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_020);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
Fim;
@ creditos recebidos outros contribuintes @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisC02 = 19 Then CreVl2 When DisC03 = 19 Then CreVl3 When DisC04 = 19 Then CreVl4 When DisC05 = 19 Then CreVl5";
aSql = aSql + " When DisC06 = 19 Then CreVl6 When DisC11 = 19 Then CreV11 When DisC12 = 19 Then CreV12 When DisC13 = 19 Then CreV13";
aSql = aSql + " When DisC14 = 19 Then CreV14 When DisC15 = 19 Then CreV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIte30_070);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
fim;
@ ----ICMS s/ imobilizado---- @
SQL_Criar(Cur_E661Res);
aSql = "Select Case When DisC02 = 22 Then CreVl2 When DisC03 = 22 Then CreVl3 When DisC04 = 22 Then CreVl4 When DisC05 = 22 Then CreVl5";
aSql = aSql + " When DisC06 = 22 Then CreVl6 When DisC11 = 22 Then CreV11 When DisC12 = 22 Then CreV12 When DisC13 = 22 Then CreV13";
aSql = aSql + " When DisC14 = 22 Then CreV14 When DisC15 = 22 Then CreV15 End CreVlr From E661Res Where CodEmp = :VCodEmp";
aSql = aSql + " And CodFil = :VCodFil And CodImp = :VCodImp And DatApi = :VDatGer";
SQL_DefinirComando(Cur_E661Res,aSql);
SQL_DefinirInteiro(Cur_E661Res, "VCodEmp", VCodEmp);
SQL_DefinirInteiro(Cur_E661Res, "VCodFil", VCodFil);
SQL_DefinirAlfa(Cur_E661Res, "VCodImp", VCodImp);
SQL_DefinirData(Cur_E661Res, "VDatGer", VDatGer);
SQL_AbrirCursor(Cur_E661Res);
VVlrIcm_Imob = 0;
Se(SQL_EOF(Cur_E661Res) = 0)
Inicio
VOper = "A";
SQL_RetornarFlutuante(Cur_E661Res, "CREVLR", VVlrIcm_Imob);
Fim;
SQL_FecharCursor(Cur_E661Res);
SQL_Destruir(Cur_E661Res);
se (VvlrIcm_Imob > 0)
VVlrIte26_030 = Vvlrite26_030 + Vvlricm_imob;
@ Zera o registro 25 - item 70 @
VVlrIte25_070 = 0;
@ Insere registros no quadro 46 - DCIP @
@InsereRegistro46(Numero pNumSeq, Numero pCodEmp, Numero pCodFil, Numero pDatCmp, Alfa pCodImp, Numero pRegEsp, Numero pNumOri, Numero pVlrCre);@
Se(vRegSel = 0)
Inicio
Cur_DCIP.SQL "Select * From Usu_TDCIP Where Usu_CodEmp = :vCodEmp And Usu_CodFil = :vCodFil And Usu_CodImp = :vCodImp And Usu_DatApi = :vDatGer";
Cur_DCIP.AbrirCursor();
nSeq = 1;
Enquanto(Cur_DCIP.Achou)
Inicio
InsereRegistro46(nSeq, vCodEmp, vCodFil, vDatGer, vCodImp, Cur_DCIP.Usu_NumDci, Cur_DCIP.USU_CodOri, Cur_DCIP.USU_VlrDci);
nSeq++;
Cur_DCIP.Proximo();
Fim; @ Enquanto(Cur_DCIP.Achou) @
Cur_DCIP.FecharCursor();
Fim;
Se ((vRegSel = 33) e (VApuCon = 3))
vOper = 'E'; @ Excluir o registro de pagamento gerado @
@ Geração do item 060, quadro 11 @
dDatUlt = VDatGer;
UltimoDia(dDatUlt);
Se (vCodFil <> 1)
Inicio
Cur_ICMSST.SQL"Select E660Nfc.VlrBri From E660Nfc Where 1=2 \
Union \
Select Sum(e660nfv.VlrBsi) \
from e660nfv, e085cli, e070fil \
where e660nfv.codcli = e085cli.codcli \
and e660nfv.codemp = e070fil.codemp \
and e660nfv.codfil = e070fil.codfil \
and e085cli.sigufs = e070fil.sigufs \
and e660nfv.datsai>= :VDatGer \
and e660nfv.datsai<= :dDatUlt \
and e660nfv.codemp = :vCodEmp \
and e660nfv.codfil = :vCodFil \
and e085cli.sigufs<> e070fil.sigufs \
Union \
Select Sum(e660nfc.VlrBri) From e660nfc \
where e660nfc.codemp = :vCodEmp \
and e660nfc.codfil = :vCodFil \
and e660nfc.datent>= :vDatGer \
and e660nfc.datent<= :dDatUlt";
fim;
senao
Inicio
Cur_ICMSST.SQL"Select E660Nfc.VlrBri From E660Nfc Where 1=2 \
Union \
Select Sum(e660nfv.VlrBsi) \
from e660nfv, e085cli, e070fil \
where e660nfv.codcli = e085cli.codcli \
and e660nfv.codemp = e070fil.codemp \
and e660nfv.codfil = e070fil.codfil \
and e085cli.sigufs = e070fil.sigufs \
and e660nfv.datsai>= :VDatGer \
and e660nfv.datsai<= :dDatUlt \
and e660nfv.codemp = :vCodEmp \
and e085cli.sigufs<> e070fil.sigufs \
Union \
Select Sum(e660nfc.VlrBri) From e660nfc \
where e660nfc.codemp = :vCodEmp \
and e660nfc.datent>= :vDatGer \
and e660nfc.datent<= :dDatUlt";
fim;
Cur_ICMSST.AbrirCursor();
Enquanto(Cur_ICMSST.Achou)
Inicio
VVlrIte32_060 = VVlrIte32_060 + Cur_ICMSST.VlrBri;
Cur_ICMSST.Proximo();
Fim;
Cur_ICMSST.FecharCursor();
se (vCodFil = 1)
Inicio
aCodImp = "ICT";
Gera_Reg_33();
se (nVlrDev > 0)
VVlrIte32_070 = nVlrDev;
FIm;
Se ((vRegSel = 33) e (VApuCon <> 3)) @ Filial consolidadora @
Inicio
aCodImp = vCodImp;
Gera_Reg_33();
se (nVlrDev > 0)
InsereRegistro33(nOriPgt, vCodEmp, vCodFil, vDatGer, vCodImp, nCodDrf, nClaVen, dDatVct, nVlrDev, 0);
aCodImp = "ICT";
Gera_Reg_33();
se (nVlrDev > 0)
InsereRegistro33(nOriPgt, vCodEmp, vCodFil, vDatGer, vCodImp, nCodDrf, nClaVen, dDatVct, nVlrDev, 0);
fim;
@--- funcoes ---@
Funcao Gera_Reg_33();
Inicio
Cur_E661CCI.SQL"Select VlrDev, DatVct From E661CCI Where CodEmp = :vCodEmp And CodFil = :vCodFil And CodImp = :aCodImp And DatApi = :vDatGer";
Cur_E661CCI.AbrirCursor();
Se(Cur_E661CCI.Achou)
Inicio
nVlrDev = Cur_E661CCI.VlrDev;
dDatVct = Cur_E661CCI.DatVct;
FIm;
senao
nVlrDev = 0;
Cur_E661CCI.FecharCursor();
se (nvlrDev > 0)
Inicio
VOper = "A";
Cur_E051Gui.Sql "Select E051Gui.CodDrf, E051Gui.ClaVen, E051Gui.OriPgt \
from E051Gui,E055Par \
where E055Par.CodEmp=:vCodEmp \
and E055Par.CodFil=:vCodFil \
and E055Par.CodImp=:aCodImp \
and E051Gui.CodEmp=E055Par.CodEmp \
and E051GUi.CodGri=E055Par.CodGri";
Cur_E051Gui.AbrirCursor();
Se (Cur_E051Gui.Achou)
Inicio
nCodDrf = Cur_E051Gui.CodDrf;
nClaVen = Cur_E051Gui.ClaVen;
nOriPgt = Cur_E051Gui.OriPgt;
fim;
senao
Inicio
nCodDrf = 0;
nClaVen = 0;
nOriPgt = 0;
fim;
Cur_E051Gui.FecharCursor();
FIm;
Fim;