Nota Fiscal Eletrônica – Um caso real – Parte 2a
Como minimizar o trabalho de manutenção dos ERPs para integrá-los a NF-e?
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/ |
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo