Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3477 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Colegas,

 

precisei fazer uma cópia de uma instância de um TNFe e percebi que o método Assign não estava implementado. Deu um trabalhão (principalmente pro notepad++ que teve que executar vários regexes rs), mas eu implementei. Estou anexando aqui os arquivos alterados. Ainda pretendo implementar isso no TCTe futuramente.

 

Seguem algumas observações importantes:

  • A implementação das coleções (TCollection e TCollectionItem) estava com duas coisas estranhas que eu corrigi para ficar formalmente mais correto:
    • O constructor do TCollectionItem não estava definido como um override do constructor base e não tinha parâmetros, de maneira que o item não tinha ciência de qual TCollection era seu Owner/Parent. Eu redefini os constructors como overrides, com o parâmetro Collection e chamando inherited no começo.
    • A função Add da classe pai (TCollection) chamava o método create na instância já criada do TCollectionItem (Result.create;). Acho que isso foi a maneira que se encontrou de contornar os problemas decorrentes do equívoco acima.
  • Eu usei os seguintes regexes nas propriedades published das classes para transformar a declaração da propriedade em uma cópia do seu valor:
    • 'property ([\w]+): (Integer|String|TDateTime|Currency|Double|Tpcn).*write.*;' para '\1 := nomeclasse\(Source\)\.\1;'
    • 'property ([\w]+): T.*;' para '\1.Assign\(nomeclasse\(Source\)\.\1\);'
  • Como só precisa copiar as propriedades published, eu imaginei que isso poderia ser implementado de uma maneira mais simples por meio de RTTI. Mas como a própria Borland nunca fez nada do tipo, eu achei que seria muita ousadia minha. Além disso, eu não faço ideia de como funciona o RTTI no Lazarus/FPC. Preferi ser cauteloso e fazer a implementação no braço.
  • Essas alterações trazem a necessidade de ser ter um cuidado ao alterar as classes da TNFe para fazer as alterações relevantes nos métodos Assign. Mas como as propriedades dessa classe só vão mudar quando a receita mudar o leiaute de novo, acho que isso não vai ser um trabalho muito árduo. E mesmo que por descuido sejam feitas alterações nas propriedades que se esqueça de fazer nos Assign's, o svn diff é nosso amigo.

pcnNFe.pas

pcnProcNFe.pas

pcnSignature.pas

  • 1 mês depois ...
  • Este tópico foi criado há 3477 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.