Subapuração

  1. Criar os impostos do tipo 2-ICMS para a apuração normal (Exemplo: ICM), café conilon (Exemplo: ICO) e café arábica (Exemplo: ICA);

 

  1. Configurar cada imposto na base imposto liga filial;

 

  1. riar um código de dispositivo fiscal para ser associado ao item da nota fiscal de café Conilon e este dispositivo deve ter a indicação da apuração do imposto para o café conilon (ICO). Criar outro código de dispositivo fiscal para ser associado aos itens da nota fiscal de café Arábica e este dispositivo também deve ter a indicação da apuração do imposto para o café Arábica.

Observação

Estes dispositivos devem ter a indicação de apuração 1 e apuração 2 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.

 

Associar os códigos de dispositivos fiscais aos itens das notas fiscais referente aos cafés conilon e arábica.

Ativar o identificador de regras IMP-661CALIM02 e associar a regra abaixo.

Regra

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

Definir Numero xICMEnt_Arabica;

Definir Numero xICMSai_Conilon;

Definir Numero xICMSai_Arabica;

Definir Numero xICMFrete;

Definir Numero xVlrTotal;

Definir Numero xVlrConilon;

Definir Numero xVlrArabica;

/**** 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);

/* Café Conilon, no exemplo é o produto 4101*/

SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);

SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);

SQL_DefinirData(xCursor, "PDATINI", VDatIni);

SQL_DefinirData(xCursor, "PDATFIM", VDatFim);

SQL_DefinirAlfa(xCursor, "PCODPRO", "4101");

SQL_AbrirCursor(xCursor);

se (SQL_EOF(xCursor) = 0)

inicio

SQL_RetornarFlutuante(xCursor , "VLRICM", xICMEnt_Conilon);

fim;

SQL_FecharCursor(xCursor);

SQL_Destruir(xCursor);

SQL_Criar(xCursor);

SQL_DefinirComando(xCursor, xSQL);

/* Café Arábico, no exemplo é o produto 5201 */

SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);

SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);

SQL_DefinirData(xCursor, "PDATINI", VDatIni);

SQL_DefinirData(xCursor, "PDATFIM", VDatFim);

SQL_DefinirAlfa(xCursor, "PCODPRO", "5201");

SQL_AbrirCursor(xCursor);

se (SQL_EOF(xCursor) = 0)

inicio

SQL_RetornarFlutuante(xCursor , "VLRICM", xICMEnt_Arabica);

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

/* Café Conilon, no exemplo é o produto 4101 */

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", "4101");

SQL_AbrirCursor(xCurFrete);

se (SQL_EOF(xCurFrete) = 0)

inicio

SQL_RetornarFlutuante(xCurFrete, "VLRCTB", xVlrConilon);

fim

SQL_FecharCursor(xCurFrete);

SQL_Destruir(xCurFrete);

xICMEnt_Conilon = xICMEnt_Conilon + (xICMFrete * (xVlrConilon / xVlrTotal));

SQL_Criar(xCurFrete);

/* Café Arábico, no exemplo é o produto 5201 */

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_DefinirAlfa(xCurFrete, "PCODPRO", "5201");

SQL_AbrirCursor(xCurFrete);

se (SQL_EOF(xCurFrete) = 0)

inicio

SQL_RetornarFlutuante(xCurFrete, "VLRCTB", xVlrArabica);

fim

SQL_FecharCursor(xCurFrete);

SQL_Destruir(xCurFrete);

xICMEnt_Arabica = xICMEnt_Arabica + (xICMFrete * (xVlrArabica / 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);

/* Café Conilon, no exemplo é o produto 4101*/

SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);

SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);

SQL_DefinirData(xCursor, "PDATINI", VDatIni);

SQL_DefinirData(xCursor, "PDATFIM", VDatFim);

SQL_DefinirAlfa(xCursor, "PCODPRO", "4101");

SQL_AbrirCursor(xCursor);

se (SQL_EOF(xCursor) = 0)

inicio

SQL_RetornarFlutuante(xCursor , "VLRICM", xICMSai_Conilon);

fim;

SQL_FecharCursor(xCursor);

SQL_Destruir(xCursor);

SQL_Criar(xCursor);

SQL_DefinirComando(xCursor, xSQL);

/* Café Arábico, no exemplo é o produto 5201 */

SQL_DefinirInteiro(xCursor, "PCODEMP", CodEmp);

SQL_DefinirInteiro(xCursor, "PCODFIL", VFilCal);

SQL_DefinirData(xCursor, "PDATINI", VDatIni);

SQL_DefinirData(xCursor, "PDATFIM", VDatFim);

SQL_DefinirAlfa(xCursor, "PCODPRO", "5201");

SQL_AbrirCursor(xCursor);

se (SQL_EOF(xCursor) = 0)

inicio

SQL_RetornarFlutuante(xCursor , "VLRICM", xICMSai_Arabica);

fim;

SQL_FecharCursor(xCursor);

SQL_Destruir(xCursor);

/* CÁLCULO */

se (VCodImp = "ICM")

inicio

/* Apuração Normal */

VCreV01 = VCreV01 - (xICMEnt_Conilon + xICMEnt_Arabica);

VDebV01 = VDebV01 - (xICMSai_Conilon + xICMSai_Arabica);

fim;

senao se (VCodImp = "ICO")

inicio

/* Café Conilon, no exemplo é o produto 4101*/

VCreV01 = xICMEnt_Conilon;

VDebV01 = xICMSai_Conilon;

fim;

senao se (VCodImp = "ICA")

inicio

/* Café Arábico, no exemplo é o produto 5201 */

vCreV01 = xICMEnt_Arabica;

vDebV01 = xICMSai_Arabica;

fim;

Efetuar a apuração dos impostos ICM, ICA e ICO.

 

Por fim, todas as apurações e valores devem ser apresentados do arquivo do SPED Fiscal.

Este artigo ajudou você?