XML Mapper – parte I

Delphi, Ferramentas agosto 8th, 2008

O XML Mapper é um programa fornecido juntamente com a sua distribuição do DELPHI 6-7 em diante!. É um recurso pouco documentado, mas muito útil para quem trabalha com arquivos XML no Delphi e, na era da Nota Fiscal Eletrônica quem não entende XML pode estar em apuros nesse momento. Vou demonstrar aqui como usá-lo para facilitar o seu dia a dia com os XMLs que vêm por aí!. Leia mais… »

Tags: , , ,

Dados x XML, como começar?

Código-Fonte, Delphi julho 31st, 2008

Segue abaixo um exemplo, usando a classe TXMLDocument do Delphi, para gerar um arquivo XML; repare que o arquivo está incompleto, mas servirá como base para quem não sabe ainda por onde começar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure TfrmPrincipal.PnLerNfeClick(Sender: TObject);
var vXMLDoc: TXMLDocument;
    NodeNivelA, NodeNivelB: IXMLNode;
 
begin
 
  vXMLDoc := TXMLDocument.Create(self);
  Try
  With vXMLDoc do begin
       Active := True;
       Version := '1.0';
       Encoding := 'UTF-8';
       AddChild('NFe','http://www.portalfiscal.inf.br/nfe');
       DocumentElement.Attributes['xmlns:ds'] :=
       'http://www.w3.org/2000/09/xmldsig#';
       DocumentElement.Attributes['xmlns:xsi'] :=
       'http://www.w3.org/2001/XMLSchema-instance';
       DocumentElement.Attributes['xsi:schemaLocation'] :=
       'http://www.portalfiscal.inf.br/nfe/enviNFe_v1.12.xsd';
 
       // A - Dados da Nota Fiscal eletrônica
       NodeNivelA := DocumentElement;
       // Adiciona a Tag
       NodeNivelA.AddChild('infNFe');
       // Adiciona atributo "Id" da Tag anterior
       NodeNivelA.ChildNodes['infNFe'].Attributes['Id'] := 'NFe31232131232132131231221312312312';
       // Adiciona atributo "versao" da Tag anterior
       NodeNivelA.ChildNodes['infNFe'].Attributes['versao'] :=
            DM.ClientDSLoja.FieldByName('enviNFe').AsString;
 
       // B - Identificação da Nota Fiscal eletrônica
       NodeNivelB := NodeNivelA.ChildNodes['infNFe'];
       NodeNivelB.ChildNodes['ide'].AddChild('cUF').NodeValue := '51' ;
       NodeNivelB.ChildNodes['ide'].AddChild('cNF').NodeValue := '000001';
 
       vXMLDoc.SaveToFile('EnviNFe.xml');
 
  end;
  finally
     vXMLDoc.Free;
  end;
 
end;

Ps. Acrescente as units: XMLDoc, XMLIntf, xmldom.

Tags: , ,

Gerar o arquivo do Lote à partir da NFe assinada

Código-Fonte julho 23rd, 2008

Segue um exemplo de como gerar o arquivo do Lote para envio de uma única NFe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
procedure TFrmNfe.GeraArquivoLote
var F: TextFile
     antes: TTime;
     MeuXMLAssinado: pchar
     buf: string;
begin
 //registra horário inicio procedimento (opcional)
 antes := now;
 
 // Carregue o arquivo XML num Memo ou RichtEdit
 Memo1.Lines.LoadFromFile( arquivoXMLAssinado );
 MeuXMLAssinado := Pchar(MeuXMLAssinado);
 
 // Crie o novo arquivo (Ex. arquivoXMLEnviNFe = 0000000000001env-lot.xml)
 AssignFile(F, arquivoXMLEnviNFe);
 Rewrite(F);
 
 // adicione as namespaces
 Write(F, '<?xml version="1.0" encoding="UTF-8"?>' );
 Write(F, '<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe/enviNFe_v'+LaiouteVersao+'.xsd" versao="'+LaiouteVersao+'">' );
 Write(F, '<idLote>' + InttoStr(StrToInt(idLote)) + '</idLote>');
 
 // Nesse ponto vc está copiando o conteudo da tag "NFe" para o buffer
 //repetir essa parte do codigo quando quiser anexar varios arquivos...
 buf := copy(MeuXMLAssinado, pos('<NFe', MeuXMLAssinado), length(MeuXMLAssinado));
 
 Write(F, buf);
 
 Write(F, '</enviNFe>');
 
 CloseFile(F);
 
 // Le o arquivo do Lote gerado
 memo1.lines.LoadFromFile( diretorioxml+'\enviadas\'+idLote+'env-lot.xml');
 MeuXMLAssinado := pchar(memo1.Lines.Text);
 
 EnvioLoteNFe; // chamada funcao para envio arquivo (pode usar aqui a NFE_UTIL.DLL)
 
 // Salva dados resposta no DataSet
 SalvaDadosRecibo;    // Crie a função que vai salvar os dados do retorno no seu BD
 
 // Registre o Tempo de resposta como achar melhor (opcional)
 form1.Response.Lines.add(
 'Geração do Lote Concluída' + #13#10 +
 'Tempo Total (seg): ' + inttostr(SecondsBetween(antes, now)) + #13#10 +
 'Tempo Médio (seg): ' + formatfloat('0.00', SecondsBetween(antes, depois))
 );
 
end;

Tags:

Tabela de Municípios (IBGE)

Banco de Dados, Informação julho 4th, 2008

Recentemente publiquei na área de download desse blog o script para inserção da tabela de municípios no seu banco de dados; porêm durante o processo de implantação da NF-e; descobri que os códigos dos municipios, dessa tabela; embora tenha sido obtida no IBGE, não conferiam com os códigos da tabela de municípios divulgada pela SEFAZ (em formato XLS). Não me pergunte porque!.

Dessa forma fizemos os ajustes e, portanto, se você usou o script anterior; baixe agora na a atualização da tabela, também, disponibilizada na área de download do blog.

Tags: , , ,

Laioute NF-e versão 1.12 adiado!

Informação julho 2nd, 2008

Conforme publicado no Portal Nacional (http://www.nfe.fazenda.gov.br/portal/integracao.aspx); A SEFAZ adiou o uso da versão 1.12 do laioute da NF-e; então quem está tentando validar a NF-e com esse laioute não vai conseguir; o servidor aceita o lote, mas após a consulta do Lote você vai receber a instrução de rejeição indicando o erro 227 (problema na chave de acesso). Isso ocorre porque a chave de acesso teve uma pequena alteração. Mas, por enquanto concentre-se no laioute da NF-e do Manual de Integração 2.0.4 (não na errata!). Não vou nem comentar …..aiaiaiaiai.

Tags:

Incompetência ou Ditadura?

Política junho 21st, 2008

Estou indignado com nosso governo e, me refiro aos dois: Federal e Estadual. Governo Federal resume-se em Demagogia e Corrupção, mas não vou falar disso agora. Quero expressar no momento minha indignação com a forma como certas obrigações são impostas às Empresas e meu espanto, por não ver ninguém se pronunciando (gritando!!!!) de forma veemente para assumir uma oposição à certas imposições absurdas; sem planejamento e precaução. Leia mais… »

Tags:

CJV Código de Barras

Delphi maio 26th, 2008

CJV Barcode. Um componente free e eficiente para quem precisa incorporar impressão de código de barras em seus aplicativos Delphi (impressão do DANFE da NF-e, por exemplo), Asp ou PHP; compatível com o QuickReport. Esse componente foi criado pelo brasileiro Cirilo José Veloso. A instalação é simples; descompacte o arquivo .ZIP na pasta “lib” do Delphi e siga as instruções contidas no arquivo “leiame.txt”.

Visite o site do autor e conheça outros componentes interessantes para programadores: Delphi, Asp e PHP. Eu usei e recomendo.

Tags: , , , , ,

Normalização Base de Dados x Tabela Municípios IBGE

Banco de Dados abril 15th, 2008

  • Uma das exigências da SEFAZ para a implementação da NF-e é a utilização da tabela do IBGE para a informação dos municípios (Emitente/Destinatário). Infelizmente a tabela não é fornecida pelo IBGE ou pela SEFAZ em formato de dados (apenas em formato .DOC no site do IBGE); um dos trabalhos que tive foi preparar essa tabela para incluir no nosso banco de dados.Conforme prometi, segue informações para a normalização da tabela de municípios:
    Leia mais… »
  • Tags: , , , , , ,

    SEFAZ prorroga prazo dos Distribuidores em Geral para NF-e

    Notícias abril 4th, 2008

    UFA!!!. Bom o prazo já estava vencido (01/04) e, como já se sabia, A SEFAZ reconheçeu o problema; ninguém estava com o sistema 100% ajustado para a NF-e; exceto as empresas que já tinham ciência de que Abril/2008 seria a data limite; bem como: Distribuidoras de Combustíveis, Cigarros, etc…; conforme estava descrito no Portal Nacional.

    Leia mais… »

    Tags: ,

    Função para gerar Chave de Acesso NF-e

    Código-Fonte, Delphi abril 3rd, 2008

    Segue código fonte da função que escrevi em Delphi para gerar a chave de acesso da NF-e. Já atualizada conforme última versão definida na “Nota Técnica 2007/008”; repare que no Manual de Integração de 2008 a as instruções para gerar a chave de acesso estão desatualizadas, ou seja, por incrível que pareça a Nota divulgada em 2007 é mais recente que a informação do manual divulgado em 2008 e por ai vai….; mas, vamos ao que interessa. Leia mais… »

    Tags: , ,