Post: Gerando e Enviando NF-e

Alessandro Medeiros

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

Cada semana não pode parar a nossa série aqui no blog de boas práticas de arquivos fiscais com ACBr, e hoje estarei mostrando como gerar e enviar a NF-e.

Depois de muito conteúdo e muito código chegamos o que muito de vocês estavam esperando. 

Baseado mais ou menos no que já fizemos na classe que faz o Invoker.

...
   TModelFiscalNFeInvoker.New
      .Add(TModelFiscalNFeCommandGeral.New(Self))
      .Add(TModelFiscalNFeCommandIde.New(Self))
      .Add(TModelFiscalNFeCommandEmit.New(Self))
      .Add(TModelFiscalNFeCommandDest.New(Self))
      .Add(TModelFiscalNFeCommandProd.New(Self))
      .Add(TModelFiscalNFeCommandTotal.New(self))
      .Add(TModelFiscalNFeCommandTransp.New(Self))
      .Add(TModelFiscalNfeCommandTranspVol.New(Self))
      .Add(TModelFiscalNfeCommandCobrFat.New(Self))
      .Add(TModelFiscalNfeCommandCobrDup.New(Self))
      .Add(TModelFiscalNfeCommandInfAdic.New(Self))
      .Add(TModelFiscalNfeCommandInfAdicObsComp.New(Self))
      .Add(TModelFiscalNfeCommandInfAdicObsFisco.New(Self))
      .Add(TModelFiscalNfeCommandExporta.New(Self))
      .Add(TModelFiscalNfeCommandCompra.New(Self))
      .Add(TModelFiscalNfeCommandPagamento.New(Self))
      .Add(TModelFiscalNfeCommandGerarNFe.New(Self))
   .Execute;
...

E vamos fazer um teste, vamos pegar a classe TModelFiscalNFe, e na view iremos no evento OnClick do nosso botão.

...
procedure TForm2.Button1Click(Sender: TObject);
begin
   TModelFiscalNFe.New.Gerar;
end;
...

Pela lógica ao executar esse comando irá bater no método Gerar, mostrado no código anterior.

Dessa forma ao executarmos o nosso projeto ele irá passar pelo Invoker e logo em seguida irá passar em cada comando que criamos.

Agora está pronto a ação de gerar a nota fiscal.

Mas vamos dizer que depois de gerar a nota fiscal é preciso enviar a NF-e?

Então para que possamos enviar é necessário criar mais um comando para enviar a NF-e.

Type
   TModelFiscalNfeCommandEnviarNFe = class(TInterfacedObject, iCommand)
   private
      FParent : iModelFiscalNfe;
   public
      constructor Create(Parent : iModelFiscalNfe);
      destructor Destroy; override;
      class function New(Parent : iModelFiscalNfe) : iCommand;
      function Execute : iCommand;
   end;

implementation

uses
   pcnConversaoNFe, pcnConversao;

{ TModelFiscalNfeCommandEnviarNFe }

constructor TModelFiscalNfeCommandEnviarNFe.Create(Parent : iModelFiscalNfe);
begin
   FParent := Parent;
end;

destructor TModelFiscalNfeCommandEnviarNFe.Destroy;
begin
   inherited;
end;

function TModelFiscalNfeCommandEnviarNFe.Execute: iCommand;
begin
   Result := Self;
   FParent.Component._this.Enviar(1, True);
end;

class function TModelFiscalNfeCommandEnviarNFe.New(Parent : iModelFiscalNfe) : iCommand;
begin
   Result := Self.Create(Parent);
end;

Observe que no comando de EnviarNFe no método Execute chamamos o Enviar, nele passamos o Lote e passamos True para imprimir a nota.

Observe a imagem acima de como é os paramentos que é solicitado pelo método Enviar.

Aí vamos pegar esse comando que acabamos de criar de adicionar no nosso Invoker, logo após do comando de gerar nota.

...
   TModelFiscalNFeInvoker.New
      .Add(TModelFiscalNFeCommandGeral.New(Self))
      .Add(TModelFiscalNFeCommandIde.New(Self))
      .Add(TModelFiscalNFeCommandEmit.New(Self))
      .Add(TModelFiscalNFeCommandDest.New(Self))
      .Add(TModelFiscalNFeCommandProd.New(Self))
      .Add(TModelFiscalNFeCommandTotal.New(self))
      .Add(TModelFiscalNFeCommandTransp.New(Self))
      .Add(TModelFiscalNfeCommandTranspVol.New(Self))
      .Add(TModelFiscalNfeCommandCobrFat.New(Self))
      .Add(TModelFiscalNfeCommandCobrDup.New(Self))
      .Add(TModelFiscalNfeCommandInfAdic.New(Self))
      .Add(TModelFiscalNfeCommandInfAdicObsComp.New(Self))
      .Add(TModelFiscalNfeCommandInfAdicObsFisco.New(Self))
      .Add(TModelFiscalNfeCommandExporta.New(Self))
      .Add(TModelFiscalNfeCommandCompra.New(Self))
      .Add(TModelFiscalNfeCommandPagamento.New(Self))
      .Add(TModelFiscalNfeCommandGerarNFe.New(Self))
      .Add(TModelFiscalNfeCommandEnviarNFe.New(Self))
   .Execute;
...

Após executar nosso projeto…

Nossa nota é gerada e impressa com os dados já preenchidos, e claro em ambiente de homologação.

Viu agora estamos gerando a nota e imprimindo perfeitamente, tudo seguindo os padrões de boas práticas, tudo nos seus devidos lugares.

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





Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre Gerando e Enviando NF-e, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao Gerando e Enviando NF-e, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
Gostou?
Compartilhe:

Embarque no foguete com milhares de devs para aprender desenvolvimento, evoluir de forma contínua e se manter relevante no mercado.

Sobre
Dúvidas
Cadastre-se em nossa lista

Para ter acesso em primeira mão, a tudo que acontece na Academia do Código, basta se cadastrar em nossa lista

Grupo Thulio Bittencourt | Academia do Código

#FaçaPartedaHistória

Copyright © 2022 – Todos os direitos reservados