Closed hbdbim closed 12 months 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?
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.
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.
@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:
Quando puder ser nulo eu incluo NONE como primeira opção.
A primeira implementação foi citada na issue https://github.com/orochasamuel/fiscalbr-net/issues/37.
@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.
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".
@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.
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.
@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.
@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!!
Opa!!
Passando para avisar que os novos pacotes Nuget já estão disponíveis. o/
Vida longa e próspera 🖖
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.