Nota Fiscal Eletrônica – Um caso real – Parte 2a

 

Após apresentar o middleware que criamos para integrar ERPs com NF-e (Nota Fiscal Eletrônica – Um caso real) recebi alguns e-mails pedindo ajuda na integração. De uma maneira geral a integração é simples, mas para os que haviam pedido ajuda lhes enviei uma classe de integração criada no Delphi, o que reduz ainda mais a curva de integração entre o nosso middleware e o ERP.

A classe que será apresentada é utilizada pelos nossos ERPs para fazer a emissão de NF-e via middleware. Embora o arquivo da classe seja grande, ela é bem simples e auto-explicativa. Mas caso exista alguma dúvida, por favor, nos comunique.

Na listagem abaixo é apresentado a declaração da classe TCASSICNFe e das constantes PathNFeIn e PathNFeOut. Estas duas constantes informam a classes TCASSICNFe onde colocar o arquivo de solicitação que será consumido pelo middleware (PathNFeIn) e onde o middleware irá colocar a reposta da solicitação feita (PathNFeOut).

Na mesma listagem é apresentado o construtor da classe (Create), o método que buscará o ID do município que será usado na geração da NF-e (MunicID) e o método que retorna a descrição do status da solicitação feita ao middleware (StatusNFe).

Observação:

O  “Anexo II” do layout de integração contém a DDL da tabela Munic e os Insert de todos os municípios, com seus respectivos IDs e UF.

 

unit UCASSICNFe;

Interface

uses

  SysUtils, Dialogs, Forms, Windows, Controls, DB, SqlExpr;

type

  TCASSICNFe = class

  private

    FDataSet_Munic: TSQLQuery;

    FCNPJ: string;

    function MunicID(UF, Munic: string): string;

    function StatusNFe(Codigo: Integer): string;

    function MercuryMD(FilePath: string): Boolean;

  public

    constructor Create(CNPJ: string);

    function GerarNFe(DataSet_Munic, DataSet_DF, DataSet_DF_Item: TSQLQuery): Boolean;

    function ImprimirDANFE(ID_DF: string): Boolean;

    function CancelarNFe(ID_DF, Canc_Just: string): Boolean;

    function InutilizarNFe(NFe_Inicial, NFe_Final, Inut_Just: string): Boolean;

    function Enviar_eMailNFe(ID_DF, eMail: string): Boolean;

  end;

const

  // Endereço do arquivo de solicitação

  PathNFeIn = ''C:\Arquivos de Programas\CASSIC\Mercury-MD\In\'';

  // Endereço do arquivo de retorno do Mercury-MD

  PathNFeOut = ''C:\Arquivos de Programas\CASSIC\Mercury-MD\Out\''; 

implementation

{$I-}

constructor TCASSICNFe.Create(CNPJ: string);

begin

  FCNPJ := CNPJ;

end;

// Método para localizar o ID do município - "Anexo II" do layout de integração com o Mercury-MD

function TCASSICNFe.MunicID(UF, Munic: string): string;

begin

  with (FDataSet_Munic as TSQLQuery) do

    begin

      Active := False;

      SQL.Clear;

      SQL.Add(''select * from Munic'');

      SQL.Add(''where Cidade = ''''''+Munic+'''''''');

      SQL.Add(''and UF = ''''''+UF+'''''''');

      Active := True;

      if ( RecordCount = 0 ) then Result := ''0''

      else Result := FieldByName(''ID'').AsString;

    end;

end;

// Método que retorna a descrição do status da solicitação feita ao Mercury-MD

function TCASSICNFe.StatusNFe(Codigo: Integer): string;

begin

  case Codigo of

    -1: Result := ''Status não inicializado'';

    0: Result := ''Não criado XML'';

    1: Result := ''Criado XML'';

    2: Result := ''Não assinado'';

    3: Result := ''Assinado'';

    4: Result := ''Não validado'';

    5: Result := ''Validado'';

    6: Result := ''Lote não criado'';

    7: Result := ''Lote criado'';

    8: Result := ''Lote não enviado'';

    9: Result := ''Lote enviado'';

    10: Result := ''Lote não aceito'';

    11: Result := ''Lote aceita'';

    12: Result := ''Consulta não feita'';

    13: Result := ''Consulta feita'';

    14: Result := ''NF não aceita'';

    15: Result := ''NF aceita'';

    16: Result := ''NF aceita: Arquivo XML do e-mail não criado'';

    17: Result := ''NF aceita: Arquivo XML do e-mail criado'';

    18: Result := ''NF aceita: e-mail não enviado'';

    19: Result := ''NF aceita: e-mail enviado'';

    100: Result := ''Não criado XML'';

    101: Result := ''Criado XML'';

    102: Result := ''Não assinado'';

    103: Result := ''Assinado'';

    108: Result := ''Não enviado'';

    109: Result := ''Enviado'';

    114: Result := ''Cancelamento não aceito'';

    115: Result := ''Cancelamento aceito'';

    200: Result := ''Não criado XML'';

    201: Result := ''Criado XML'';

    202: Result := ''Não assinado'';

    203: Result := ''Assinado'';

    208: Result := ''Não enviado'';

    209: Result := ''Enviado'';

    214: Result := ''Inutilização não aceita'';

    215: Result := ''Inutilização aceita'';

    else Result := ''Status não esperado'';

  end;

end;

 

Artigo escrito por http://www.cassic.com.br/