Subapuração
- Criar os impostos do tipo 2-ICMS para a apuração normal (Exemplo: ICM), café conilon (Exemplo: ICO) e café arábica (Exemplo: ICA);
- Configurar cada imposto na base imposto liga filial;
- 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.