O erro mais comum dentro do SPED Fiscal é o ICMS_CST e CST_IPI dentro do Registro C170. A primeira coisa que precisa verificar é qual o CFOP da linha que está apresentando o erro para poder identificar se trata-se de movimento de entrada ou saída. Fazendo essa identificação conseguimos dar sequencia.
Temos dois cenários para analisar e dentro de cada um temos 3 opções de filtro de data.
Vamos começar pelo mais comum dos erros: Registro C170 com conteúdo do campo zero (0).
Imagens ilustrativas dos possíveis erros
O campo que vamos procurar são dois dentro do banco: ICMS_CST e CSOSN. Oriento sempre a trazer os dois campos para frente no comando para melhor visualização e conseguir se orientar e saber qual procedimento deve ser feito.
Comando para listar:
SET DATEFORMAT YMD
SELECT CSOSN, ICMS_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.CSOSN) = '2'
AND m.Data BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(3) = 'XXX'
UPDATE Movimento_Produto
SET CSOSN = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Data BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.CSOSN = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT CSOSN, ICMS_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.CSOSN) = '2'
AND m.Nota_Entrada_Emissao BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(3) = 'XXX'
UPDATE Movimento_Produto
SET CSOSN = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Nota_Entrada_Emissao BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.CSOSN = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT CSOSN, ICMS_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.CSOSN) = '2'
AND m.NotaEntradaRecebimento BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(3) = 'XXX'
UPDATE Movimento_Produto
SET CSOSN = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.NotaEntradaRecebimento BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.CSOSN = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT ICMS_CST, CSOSN, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.ICMS_CST) = '3'
AND m.Data BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(3) = 'YYY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET ICMS_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Data BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.ICMS_CST = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT ICMS_CST, CSOSN, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.ICMS_CST) = '3'
AND m.Nota_Entrada_Emissao BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(3) = 'YYY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET ICMS_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Nota_Entrada_Emissao BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.ICMS_CST = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT ICMS_CST, CSOSN, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE LEN(mp.ICMS_CST) = '3'
AND m.NotaEntradaRecebimento BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(3) = 'YYY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET ICMS_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.NotaEntradaRecebimento BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.ICMS_CST = @ERRADO
Outro erro muito comum no SPED Fiscal é referente ao IPI informado errado: Registro C170 com conteúdo inválido.
Imagens ilustrativas dos possíveis erros
O campo que vamos procurar dentro do banco é: IPI_CST.
Comando para listar:
SET DATEFORMAT YMD
SELECT IPI_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE IPI_CST = 'YY'
AND m.Data BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Esse comando é apenas para verificar se encontra os registros.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET IPI_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Data BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.IPI_CST = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT IPI_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE IPI_CST = 'YY'
AND m.Nota_Entrada_Emissao BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Esse comando é apenas para verificar se encontra os registros.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET IPI_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.Nota_Entrada_Emissao BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.IPI_CST = @ERRADO
Comando para listar:
SET DATEFORMAT YMD
SELECT IPI_CST, * FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE IPI_CST = 'YY'
AND m.NotaEntradaRecebimento BETWEEN 'AAAA-MM-DD' AND 'AAAA-MM-DD'
AND mp.Tipo = 'E'
Esse comando é apenas para verificar se encontra os registros.
_No filtro de data deve ser informado o primeiro dia que deseja consultar (Ex: Data inicial '2023-07-01' - Data do filtro '2023-07-01') e o dia seguinte do último dia (Ex: Data final '2023-07-31' - Data do filtro '2023-08-01'.
Comando para corrigir:
DECLARE @DATA_INICIAL DATE = 'AAAA-MM-DD'
, @DATA_FINAL DATE = 'AAAA-MM-DD'
, @ERRADO varchar(2) = 'YY'
, @CERTO varchar(2) = 'XX'
UPDATE Movimento_Produto
SET IPI_CST = @CERTO
FROM Movimento_Produto mp
JOIN Movimento m on m.Ide = mp.Movimento__Ide
WHERE m.NotaEntradaRecebimento BETWEEN @DATA_INICIAL AND @DATA_FINAL
AND mp.Tipo = 'E'
AND mp.IPI_CST = @ERRADO