Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erro Registro C170 #37

Closed
ThalisonSantos opened this issue Jun 9, 2021 · 10 comments
Closed

Erro Registro C170 #37

ThalisonSantos opened this issue Jun 9, 2021 · 10 comments

Comments

@ThalisonSantos
Copy link

ao gerar o sped Fiscal no campo registroC170.IndApur que deveria passar 0 ou 1 ele passa para o arquivo a letra M

@orochasamuel
Copy link
Owner

Fala @ThalisonSantos tudo na paz?

Está usando a lib pelo Nuget ou DLL referenciada diretamente?

Vida longa e próspera. 🖖

@ThalisonSantos
Copy link
Author

@osamueloliveira a DLL referenciada diretamente

@PGama-Rodrigo
Copy link
Contributor

PGama-Rodrigo commented Feb 21, 2022

Olá @orochasamuel

\fiscalbr.net\src\FiscalBr.EFDFiscal\BlocoC.cs
Na classe RegistroC170, campo IndApur ([SpedCampos(19, "IND_APUR", "C", 1, 0, false, 2)])

Este campo, ao entrar no EscreverCampos, cai na última exceção e é escrito a substring de 1 caractere do ENumerador como string (O que resulta no 'M' para Mensal);

Apesar do campo estar correto no SpedCampos, e do campo estar como 'C' no guia prático do SPED Fiscal, os valores possíveis dentro da escrituração são 0 (Mensal) ou 1 (Decendial);

Imagino eu que o correto seria passar esse campo para string e deixar o sistema que está consumindo a DLL passar o valor correto para ele, assim evitaria erros;

Usando DLL Referenciada diretamente;

Grande trabalho no FiscalBr, parabéns!

@orochasamuel
Copy link
Owner

orochasamuel commented Feb 21, 2022

Fala @PGama-Rodrigo tudo na paz por aí?

Descobri o problema, esse campo estava mapeado com Nullable no enum. Na hora da lib verificar o IsEnum retornava false.

            [SpedCampos(19, "IND_APUR", "C", 1, 0, false, 2)]
            public IndPeriodoApuracaoIpi? IndApur { get; set; }

Corrigi removendo o ? e também criei um teste. Esse foi um erro de mapeamento meu alguns anos atrás, vou revisitar os mapeamentos e me certificar que não ficou mais nenhuma situação como esta.

A correção está no commit 68aafa2, em breve irei publicar no Nuget as últimas atualizações.

PS: Vou implementar uma verificação no caso dos enums pois a lib automaticamente seta para o primeiro item da lista, mesmo que não informado. Vou corrigir antes de publicar no Nuget.

EDIT
@ThalisonSantos desculpe a demora em corrigir este erro.

Vida longa e próspera 🖖

@PGama-Rodrigo
Copy link
Contributor

@orochasamuel Rapaz, entrei agora aqui pra escrever uma errata sobre o meu comentário quando vi sua resposta: Eu reparei que o IND_APUR do EFDContribuicoes estava diferente do campo IND_APUR no EFDFiscal;

Show de bola que foi arrumado! Agora só falta eu descobrir o motivo do bot lá ter reprovado o meu PR kkkkkkk

Abraço!

@orochasamuel
Copy link
Owner

@PGama-Rodrigo acredito que seja culpa do Travis, alguns testes automatizados não estão passando lá. Ainda tenho que descobrir porque, estou usando o XUnit para fazer os testes.

Vida longa e próspera 🖖

@orochasamuel
Copy link
Owner

orochasamuel commented Feb 24, 2022

@PGama-Rodrigo @ThalisonSantos

Fiz uma implementação no enum IndPeriodoApuracaoIpi e irei replicar para os demais Enums opcionais.

    /// <summary>
    ///     Indicador de período de apuração do IPI
    /// </summary>
    public enum IndPeriodoApuracaoIpi
    {
        [DefaultValue("")] None = 0,
        /// <summary>
        ///     Mensal
        /// </summary>
        [DefaultValue("0")] Mensal,

        /// <summary>
        ///     Decendial
        /// </summary>
        [DefaultValue("1")] Decendial
    }

O valor padrão de um enumerador sempre será o 0 (vide fonte abaixo), eu criei uma flag para None com DefaultValue em branco. Isso resolve o problema onde a lib escrevia o campo mesmo que o Enum não fosse usado ao popular a classe.

EDIT
PS: Essa flag só será usada nos enums não obrigatórios. Para os demais enums não será necessário criar essa flag.

Fonte: Microsoft

@nelsonasousa
Copy link

Fala @PGama-Rodrigo tudo na paz por aí?

Descobri o problema, esse campo estava mapeado com Nullable no enum. Na hora da lib verificar o IsEnum retornava false.

            [SpedCampos(19, "IND_APUR", "C", 1, 0, false, 2)]
            public IndPeriodoApuracaoIpi? IndApur { get; set; }

Corrigi removendo o ? e também criei um teste. Esse foi um erro de mapeamento meu alguns anos atrás, vou revisitar os mapeamentos e me certificar que não ficou mais nenhuma situação como esta.

A correção está no commit 68aafa2, em breve irei publicar no Nuget as últimas atualizações.

PS: Vou implementar uma verificação no caso dos enums pois a lib automaticamente seta para o primeiro item da lista, mesmo que não informado. Vou corrigir antes de publicar no Nuget.

EDIT @ThalisonSantos desculpe a demora em corrigir este erro.

Vida longa e próspera 🖖

Essa atualização já foi feita no Nuget?

@orochasamuel
Copy link
Owner

@nelsonasousa ainda não. Vou preparar uma atualização no Nuget nesta semana para "abarcar" todas as mudanças e retorno nesta issue assim que finalizar.

@orochasamuel
Copy link
Owner

Pacotes nuget atualizados o/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants