Fala ai Radizeiros e Radizeiras, tudo bem com vocês?

Seguido nossa série de boas práticas para geração de arquivos fiscais usando ACBr, observe o código abaixo,  estamos passando para a geração de comandos o Geral e o Ide, e no post anterior criamos o comando para o Emitente, então observe que foi adicionado esse comando.

...
TModelFiscalNFeInvoker.New
   .Add(TModelFiscalNFeCommandGeral.New(Self))
   .Add(TModelFiscalNFeCommandIde.New(Self))
   .Add(TModelFiscalNFeCommandEmit.New(Self))
.Execute;
...

Tudo isso dentro da nossa classe mãe, a classe da NF-e.

Olhando o Demo do ACBr iremos agora criar o comando para os Produtos.

É bem simples, você pode copiar a classe do Emitente e no método Execute alterar para as informações do Produto.

Primeiro vamos observar o código do ACBr, onde é tratado o Produto.

...
Produto := NotaF.NFe.Det.New;
Produto.Prod.nItem := 1; // Número sequencial, para cada item deve ser incrementado
Produto.Prod.cProd := '123456';
Produto.Prod.cEAN := '7896523206646';
Produto.Prod.xProd := 'TESTE DE PRODUTO';
Produto.Prod.NCM := '94051010'; // Tabela NCM disponível em http://www.receita.fazenda.gov.br/Aliquotas/DownloadArqTIPI.htm
Produto.Prod.EXTIPI := '';
Produto.Prod.CFOP := '5101';
Produto.Prod.uCom := 'UN';
Produto.Prod.qCom := 1;
Produto.Prod.vUnCom := 100;
Produto.Prod.vProd := 100;
Produto.Prod.cEANTrib := '7896523206646';
Produto.Prod.uTrib := 'UN';
Produto.Prod.qTrib := 1;
Produto.Prod.vUnTrib := 100;
Produto.Prod.vOutro := 0;
Produto.Prod.vFrete := 0;
Produto.Prod.vSeg := 0;
Produto.Prod.vDesc := 0;
Produto.Prod.CEST := '1111111';
Produto.infAdProd := 'Informacao Adicional do Produto';
...

O  Produto conforme o ACBr,  precisa chamar o ColectionItem.

Onde é adicionado um novo registro é na CollectionItem, nesta caso nós iremos precisar criar uma variável, mas não iremos criar dentro da nossa classe de comando.

O mesmo tratamento que fizemos lá no DataModule para a nota fiscal, iremos fazer para o produto.

Iremo na interface do nosso componente, onde iremos criar dois métodos, AddProduto e Produto.

iModelFiscalNFeCompoentes = interface
   ['{A652704B-022A-4467-B881-C791F95D62D8}']
   function _This : T;
   function AddNotaFiscal : NotaFiscal;
   function NotaFiscal : NotaFiscal;
   function AddProduto : TDetCollectionItem;
   function Produto : TDetCollectionItem;
end;

Esses métodos tem que está dentro do nosso DataModule pois é a classe que está implementando nossa interface, e criaremos uma variável FProduto do tipo TDetCollectionItem, dentro do método AddProduto iremos implementar a rotina que adiciona os produtos a nota fiscal.

...
function TdmACBrNFe.AddProduto: TDetCollectionItem;
begin
  FProduto := FNotaFiscal.NFe.Det.New;
  Result := FProduto;
end;
...
function TdmACBrNFe.Produto: TDetCollectionItem;
begin
   Result := FProduto;
end;
...

Desta forma todos os produtos que forem adicionados, serão incluídos a nota fiscal que está sendo trabalhada.

Quando o comando de produto for chamado iremos primeiro criar o produto, e preenchemos os dados dos produtos.

Essas informações dos produtos podem estar sendo adicionados lá na View, por exemplo, as informações vão sendo gravadas dentro do banco de dados, na hora de emitir a nota, pega essas informações lá do banco onde percorremos a tabela que está essas informações e  adicionamos para o comando de produto.

Vamos dizer que estamos lendo um pedido talvez, os produtos do pedido já estão gravados lá no banco, na hora de preencher o produto, iremos percorrer os dados do pedido ou de alguma tabela onde é armazenados os dados da NF-e que está sendo criada, e vai sendo adicionado para o comando de produto.

Por este motivo que temos logo no início do comando o AddProduto, estamos adicionando um produto novo.

Estamos a cada série evoluído nossas emissão de NFe usando as boas práticas.

Estamos praticamente com boa parte de uma emissão da NF-e pronta, nos próximos posts estaremos falando de como aplicar as regras fiscais para essas rotinas.

Viu como vamos melhorando todo nosso código para implementação do ACBrNFe, esse é apenas o primeiro post da nossa série de Boas práticas para geração de arquivos fiscais com ACBr, este post foi extraído de um dos meus treinamentos que ensino todas as técnicas de boas práticas com clean code para geração de arquivos fiscais.

Com as técnicas aplicadas nesse treinamento, alem de aprender a aplicar na criação e emissão da NF-e, você pode também aplicar facilmente para o SPED e o SINTEGRA, ou seja, o que é problema para você hoje, depois desse treinamento você irá enxergar como oportunidade.

CLIQUE AQUI PARA SABER MAIS SOBRE O TREINAMENTO BOAS PRÁTICAS PARA GERAÇÃO DE ARQUIVOS DISCAIS COM ACBr