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/ |