Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 4045 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 ...
  • Consultores
Postado

Boa noite

efetuei testes rápidos e a principio está ok!

Obrigado pela colaboração.

 

reporte caso algum problema

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 4045 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...