Closed ThalisonSantos closed 1 year ago
Fala @ThalisonSantos tudo na paz?
Está usando a lib pelo Nuget ou DLL referenciada diretamente?
Vida longa e próspera. 🖖
@osamueloliveira a DLL referenciada diretamente
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!
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 68aafa29641dd41d4a6ed52014dfef6070089fe4, 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 🖖
@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!
@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 🖖
@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
Fala @PGama-Rodrigo tudo na paz por aí?
Descobri o problema, esse campo estava mapeado com
Nullable
no enum. Na hora da lib verificar oIsEnum
retornavafalse
.[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?
@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.
Pacotes nuget atualizados o/
ao gerar o sped Fiscal no campo registroC170.IndApur que deveria passar 0 ou 1 ele passa para o arquivo a letra M