orochasamuel / fiscalbr-net

Para facilitar seu dia a dia como desenvolvedor \o/
MIT License
91 stars 48 forks source link

[BUG] - dll nuget parece incorreta. #85

Closed hbdbim closed 12 months ago

hbdbim commented 1 year ago

Estou utilizando a dll do nuget.

Esta dando null reference no metodo GetAttribute da classe MetodosAuxiliares.

Ao abrir a dll e olhar o metodo esta da seguinte forma private static T GetAttribute<T>(this Enum value) where T : Attribute { return (T)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(T), inherit: false)[0]; }

Enquanto o código não compilado esta assim: private static T GetAttribute<T>(this Enum value) where T : Attribute { var type = value.GetType(); var memberInfo = type.GetMember(value.ToString()); var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false); return (T)attributes[0]; }

O codigo não compitalado esta funcionando.

Suspeito que tenha algo errado com a publicação.

orochasamuel commented 1 year ago

@hbdbim

Esse método não sofreu nenhuma alteração desde sua implementação inicial em 15 de agosto de 2017 (na época a lib tinha outro nome SPED.NET).

Qual Registro você está tentando gerar?

É EFD Contribuições OU EFD Fiscal?

Acredito que o problema não seja no método de "extração" dos valores enum, caso contrário já teríamos uma chuva de reclamações de vários outros devs.

Vida longa e próspera 🖖

EDIT @marcianobandeira @marcosgerene @PGama-Rodrigo @adrianotrentim @ebitencourt @ThalyaAutocom

Alguém passando por isto?

@hbdbim qual sua versão do .net?

marcosgerene commented 1 year ago

Baixei ontem o nuget em um projeto limpo para adicionar o bloco H em um SPED. Fiz a leitura, manutenção, recalculo do Bloco9 e escrevi o arquivo modificado sem problemas.

hbdbim commented 1 year ago

Descobri a causa do erro. Eu nao estou preenchendo o campo IndDest do bloco C500 e na ultima versão ele deixou de ser nullable. Mas acho que da pra tentar fazer alguma melhoria para apontar melhor o erro.

Faz um tratamento para apontar que o campo nao foi preenchido assim que é feito para os outros campos obrigatorios.

orochasamuel commented 1 year ago

@hbdbim se é ENUM e pode ser NULO o certo é incluir um "NONE" na lista de enums.

Atualmente o IndDest do C500 não tem. Vide abaixo: image

Quando puder ser nulo eu incluo NONE como primeira opção. image

A primeira implementação foi citada na issue https://github.com/orochasamuel/fiscalbr-net/issues/37.

orochasamuel commented 1 year ago

@hbdbim fiz a alteração e no próximo commit já estará corrigido.

Inclui o ENUM em branco ("") pois nas operações de ENTRADA esse campo não deve ser informado.

EDIT @hbdbim suas operação no C500 são de saída, certo?

Para saída esse campo de estar informado.

O jeito é incluir validações dentro de cada registro e no momento da geração o DEV ir coletando essas validações de layout. image PS: Para ser mais explicito a tipagem do retorno teria que ser string para facilitar o entendimento do erro. Esse tipo de implementação que vá alterar em larga escala a biblioteca eu prefiro abrir uma discussão e coletar opiniões da comunidade.

A lib já faz validações estruturais do arquivo na classe "EscreverCamposSped".

ThalyaAutocom commented 1 year ago

@hbdbim fiz a alteração e no próximo commit já estará corrigido.

Inclui o ENUM em branco ("") pois nas operações de ENTRADA esse campo não deve ser informado.

EDIT @hbdbim suas operação no C500 são de saída, certo?

Para saída esse campo de estar informado.

O jeito é incluir validações dentro de cada registro e no momento da geração o DEV ir coletando essas validações de layout. image PS: Para ser mais explicito a tipagem do retorno teria que ser string para facilitar o entendimento do erro. Esse tipo de implementação que vá alterar em larga escala a biblioteca eu prefiro abrir uma discussão e coletar opiniões da comunidade.

A lib já faz validações estruturais do arquivo na classe "EscreverCamposSped".

Boa tarde @orochasamuel. Você já gerou o pacote nuget com essa alteração? Instalei a versão mais atual no meu gerador, porém o enum "NONE" do registro C500 não aparece como opção para seleção.

orochasamuel commented 1 year ago

@ThalyaAutocom já sim.

Qual propriedade você está tentando popular?

EDIT Acabei de criar um projeto WinForms com .net 6.0 e consegui usar o "NONE" como valor para os enums:


            var efdC500 = new FiscalBr.EFDFiscal.BlocoC.RegistroC500();

            efdC500.FinDoce = FiscalBr.Common.IndCodFinDoce.None;
            efdC500.IndDest = FiscalBr.Common.IndCodDestAcessante.None;

PS: Usei a versão 17.0.1

Experimente desinstalar o pacote e instale novamente na última versão. Se ainda assim não funcionar é provável que seja o cache do Nuget, nesse caso deverá ser limpo antes de instalar novamente.

ThalyaAutocom commented 1 year ago

@orochasamuel seria o efdC500.IndDest mesmo. Vou reinstalar então, limpar o cache e tentar novamente. Mais tarde te dou um retorno.

EDIT:

@orochasamuel era o cache mesmo. Agora funcionou direitinho. Valeuuu!!

orochasamuel commented 12 months ago

Opa!!

Passando para avisar que os novos pacotes Nuget já estão disponíveis. o/

Vida longa e próspera 🖖