Tratamento SPED Fiscal Resolução nº 0016/2014 - GSEFAZ
Para tratamento do SPED Fiscal na Resolução nº 0016/2014 é necessário cadastrar um imposto do tipo 2 - ICMS e vincular uma regra no identificador IMP-661CALIM02. Abaixo, segue os procedimentos que devem ser realizados:
Cadastro do imposto do tipo 2
- Crie os impostos do tipo 2 na tela Cadastro de Impostos (F051IMP) para a apuração normal (Exemplo: ICM) e Apuração Incentivada 1 (Exemplo: IC1).
- Configure cada imposto na base imposto liga filial na tela Configuração de Impostos para Filial (F055PPF).
- Crie dois dispositivos fiscais na tela Cadastro de Dispositivos Fiscais (F051DIS) para serem associados aos itens da nota fiscal de entrada ou saída referente ao incentivo. Este dispositivo deve ter a indicação da apuração do imposto (IC1).
Observação
Os dispositivos devem ter a indicação de apuração 3 no campo de Tipo de Apuração, para a formação do código para ser apresentado no registro C197 dos itens das notas fiscais.
- Associe os códigos dos dispositivos fiscais aos itens das notas fiscais referente que possuem o benefício. A associação dos dispositivos é realizada através do botão Disp. Fiscal das telas Notas Fiscais de Entrada (F660NFC) e Saídas (F660NFV).
Cadastro do identificador de regras
- Cadastre o identificador de regra IMP-661CALIM02 na tela Cadastro de Identificadores de Regras (F098REG) e associe uma regra semelhante à abaixo.
Definir Numero VFilCal;
Definir Alfa VCodImp;
Definir Data VDatIni;
Definir Data VDatFim;
Definir Alfa xCursor;
Definir Alfa xCurFrete;
Definir Alfa xSQL;
Definir Alfa xSQLFrete;
Definir Alfa xAlfa;
Definir Numero xNumero;
Definir Numero xICMEnt_ProdutoIcent;
Definir Numero xICMSai_ProdutoIcent;
Definir Numero xICMFrete;
Definir Numero xVlrTotal;
Definir Numero xVlrProdutoIcent;
/**** ENTRADAS ****/
xSQL = "SELECT SUM(E660INC.VLRICM) AS VLRICM " +
"FROM E660NFC, E660INC " +
"WHERE E660NFC.CODEMP = E660INC.CODEMP AND " +
"E660NFC.CODFIL = E660INC.CODFIL AND " +
"E660NFC.CODFOR = E660INC.CODFOR AND " +
"E660NFC.NUMNFI = E660INC.NUMNFI AND " +
"E660NFC.NUMNFF = E660INC.NUMNFF AND " +
"E660NFC.CODSNF = E660INC.CODSNF AND " +
"E660NFC.CODTNS = E660INC.CODTNS AND " +
"E660NFC.CODEMP = :PCODEMP AND " +
"E660NFC.CODFIL = :PCODFIL AND " +
"E660NFC.DATENT >= :PDATINI AND " +
"E660NFC.DATENT <= :PDATFIM AND " +
"E660INC.CODPRO = :PCODPRO";
SQL_Criar(xCursor);
SQL_DefinirComando(xCursor, xSQL);
/* Pruduto Icentivado, no exemplo é o produto 1101*/
SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);
SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);
SQL_DefinirData(xCursor, "PDATINI", VDatIni);
SQL_DefinirData(xCursor, "PDATFIM", VDatFim);
SQL_DefinirAlfa(xCursor, "PCODPRO", "1101");
SQL_AbrirCursor(xCursor);
se (SQL_EOF(xCursor) = 0)
inicio
SQL_RetornarFlutuante(xCursor , "VLRICM", xICMEnt_ProdutoIcent);
fim;
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
/**** ENTRADA DE FRETE COM RATEIO CONFORME NOTAS ASSOCIADAS AO CONHECIMENTO DE FRETE ****/
xSQL = "SELECT E660NFC.CODEMP, E660NFC.CODFIL, E660NFC.CODFOR, E660NFC.NUMNFI, E660NFC.CODSNF, E660NFC.VLRICM " +
"FROM E660NFC " +
"WHERE E660NFC.CODEMP = :PCODEMP AND " +
"E660NFC.CODFIL = :PCODFIL AND " +
"E660NFC.DATENT >= :PDATINI AND " +
"E660NFC.DATENT <= :PDATFIM AND " +
"(E660NFC.CODEDC = '08' OR E660NFC.CODEDC = '57')";
SQL_Criar(xCursor);
SQL_DefinirComando(xCursor, xSQL);
SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);
SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);
SQL_DefinirData(xCursor, "PDATINI", VDatIni);
SQL_DefinirData(xCursor, "PDATFIM", VDatFim);
SQL_AbrirCursor(xCursor);
enquanto (SQL_EOF(xCursor) = 0)
inicio
SQL_RetornarFlutuante(xCursor , "VLRICM", xICMFrete);
xSQLFrete = "SELECT SUM(E660INC.VLRCTB) AS VLRCTB " +
"FROM E660INC, E660LNC " +
"WHERE E660LNC.CODEMP = :PCODEMP AND " +
"E660LNC.CODFIL = :PCODFIL AND " +
"E660LNC.CODFOR = :PCODFOR AND " +
"E660LNC.NUMNFI = :PNUMNFI AND " +
"E660LNC.CODSNF = :PCODSNF AND " +
"E660LNC.EMPRLC = E660INC.CODEMP AND " +
"E660LNC.FILRLC = E660INC.CODFIL AND " +
"E660LNC.FORRLC = E660INC.CODFOR AND " +
"E660LNC.NFCRLC = E660INC.NUMNFI AND " +
"E660LNC.SNFRLC = E660INC.CODSNF AND " +
"E660LNC.INCRLC = E660INC.SEQIPC";
SQL_Criar(xCurFrete);
SQL_DefinirComando(xCurFrete, xSQLFrete);
SQL_RetornarInteiro(xCursor, "CODEMP", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODEMP", xNumero);
SQL_RetornarInteiro(xCursor, "CODFIL", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODFIL", xNumero);
SQL_RetornarInteiro(xCursor, "CODFOR", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODFOR", xNumero);
SQL_RetornarInteiro(xCursor, "NUMNFI", xNumero);
SQL_DefinirInteiro(xCurFrete, "PNUMNFI", xNumero);
SQL_RetornarAlfa(xCursor, "CODSNF", xAlfa);
SQL_DefinirAlfa(xCurFrete, "PCODSNF", xAlfa);
SQL_AbrirCursor(xCurFrete);
se (SQL_EOF(xCurFrete) = 0)
inicio
SQL_RetornarFlutuante(xCurFrete, "VLRCTB", xVlrTotal);
fim
SQL_FecharCursor(xCurFrete);
SQL_Destruir(xCurFrete);
xSQLFrete = "SELECT SUM(E660INC.VLRCTB) AS VLRCTB " +
"FROM E660INC, E660LNC " +
"WHERE E660LNC.CODEMP = :PCODEMP AND " +
"E660LNC.CODFIL = :PCODFIL AND " +
"E660LNC.CODFOR = :PCODFOR AND " +
"E660LNC.NUMNFI = :PNUMNFI AND " +
"E660LNC.CODSNF = :PCODSNF AND " +
"E660LNC.EMPRLC = E660INC.CODEMP AND " +
"E660LNC.FILRLC = E660INC.CODFIL AND " +
"E660LNC.FORRLC = E660INC.CODFOR AND " +
"E660LNC.NFCRLC = E660INC.NUMNFI AND " +
"E660LNC.SNFRLC = E660INC.CODSNF AND " +
"E660LNC.INCRLC = E660INC.SEQIPC AND " +
"E660INC.CODPRO = :PCODPRO";
SQL_Criar(xCurFrete);
SQL_DefinirComando(xCurFrete, xSQLFrete);
/* Pruduto Icentivado, no exemplo é o produto 1101*/
SQL_RetornarInteiro(xCursor, "CODEMP", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODEMP", xNumero);
SQL_RetornarInteiro(xCursor, "CODFIL", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODFIL", xNumero);
SQL_RetornarInteiro(xCursor, "CODFOR", xNumero);
SQL_DefinirInteiro(xCurFrete, "PCODFOR", xNumero);
SQL_RetornarInteiro(xCursor, "NUMNFI", xNumero);
SQL_DefinirInteiro(xCurFrete, "PNUMNFI", xNumero);
SQL_RetornarAlfa(xCursor, "CODSNF", xAlfa);
SQL_DefinirAlfa(xCurFrete, "PCODSNF", xAlfa);
SQL_DefinirAlfa(xCurFrete, "PCODPRO", "1101");
SQL_AbrirCursor(xCurFrete);
se (SQL_EOF(xCurFrete) = 0)
inicio
SQL_RetornarFlutuante(xCurFrete, "VLRCTB", xVlrProdutoIcent);
fim
SQL_FecharCursor(xCurFrete);
SQL_Destruir(xCurFrete);
xICMEnt_Conilon = xICMEnt_Conilon + (xICMFrete * (xVlrProdutoIcent / xVlrTotal));
SQL_Proximo(xCursor);
fim;
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
/**** SAÍDAS ****/
xSQL = "SELECT SUM(E660INV.VLRICM) AS VLRICM " +
"FROM E660NFV, E660INV " +
"WHERE E660NFV.CODEMP = E660INV.CODEMP AND " +
"E660NFV.CODFIL = E660INV.CODFIL AND " +
"E660NFV.CODCLI = E660INV.CODCLI AND " +
"E660NFV.NUMNFI = E660INV.NUMNFI AND " +
"E660NFV.NUMNFF = E660INV.NUMNFF AND " +
"E660NFV.CODSNF = E660INV.CODSNF AND " +
"E660NFV.CODTNS = E660INV.CODTNS AND " +
"E660NFV.CODEMP = :PCODEMP AND " +
"E660NFV.CODFIL = :PCODFIL AND " +
"E660NFV.DATEMI >= :PDATINI AND " +
"E660NFV.DATEMI <= :PDATFIM AND " +
"E660INV.CODPRO = :PCODPRO";
SQL_Criar(xCursor);
SQL_DefinirComando(xCursor, xSQL);
/* Pruduto Icentivado, no exemplo é o produto 1101*/
SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);
SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);
SQL_DefinirData(xCursor, "PDATINI", VDatIni);
SQL_DefinirData(xCursor, "PDATFIM", VDatFim);
SQL_DefinirAlfa(xCursor, "PCODPRO", "1101");
SQL_AbrirCursor(xCursor);
se (SQL_EOF(xCursor) = 0)
inicio
SQL_RetornarFlutuante(xCursor , "VLRICM", xICMSai_ProdutoIcent);
fim;
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
/* CÁLCULO */
se (VCodImp = "IC1")
inicio
/* Pruduto Icentivado, no exemplo é o produto 1101*/
VCreV01 = xICMEnt_ProdutoIcent;
VDebV01 = xICMSai_ProdutoIcent;
fim;
- Efetue a apuração dos impostos ICM, IC1.
Ao final todas as apurações e valores devem ser apresentados do arquivo do SPED Fiscal.
Nos registros C197 gerou no campo 8 o valor do ajuste, não ocorre erro na validação, mas se a informação for zerada, também não ocorrerá erros.
Para zerar, pode-se utilizar uma regra e vincular na declaração no registro C197.
Definir Numero IMPNVL_OUTROS;
Definir Alfa IMPACOD_AJ;
Se ((IMPAEVEREG = "REGISTRO") e (IMPAREG = "C197") e (IMPACOD_AJ = "AM53000001") )
Inicio
IMPNVL_OUTROS = 0;
Fim;