Delphi Conference Brasil – Resumo

Delphi, Notícias fevereiro 25th, 2010

Terminou agora há pouco a “Delphi Conference Brasil’ que foi transmitida via “live meeting” com apresentações muito interessantes; para quem não conhece e também para quem conhece mas pretende se atualizar ou e aprimorar conhecimento com novas técnicas e recursos.

  • Touch e Gestures” no Delphi (Andreano Lanusse da Embarcadero). O Delphi 2010 oferece agora suporte completo para a criação de aplicações baseadas e “toques” ou e “gestos” (aplicações estilo Iphone por exemplo).
  • “DataSnap” com exemplos (usando webservices,comparação SOAP e REST apresentado por Rodrigo Leonhardt Silva da Polishop). DataSnap com REST é uma nova tecnologia disponível no Delphi que permite acessar dados de um servidor usando JSON (JavaScript Object Notation), dispensa o uso do XML para troca de informação entre aplicações e é muito rápido e fácil de implementar no novo DataSnap do Delphi.
  • Uma apresentação do “ressuscitado” e agora muito melhor “Intraweb” e com boas perspectivas para o futuro (por Jackson Gomes da Atozed). Quem usa o Intraweb e está com idéia de refazer tudo, não deixe de conferir essa nova versão, com os novos “eventos” em AJAX ficou bem mais interessante. O Jackson nos disse que estão trabalhando numa nova versão onde estarão disponibilizando recursos para utilização de frameworks como: JQuery, YUI, Dojo, etc.
  • Boas Práticas OOP (com exemplos focados no Delphi Prism) por Adilson Jr da TDS; nessa apresentação o Adilson dá uma verdadeira aula de como trabalhar com objetos distribuídos.
  • Testes para desenvolvedor Delphi; onde o palestrante Daniel Width; deu uma visão geral dos motivos para aplicação de testes e recursos e softwares disponíveis para testes com o Delphi, exemplificando o uso do Dunit, um plugin para o Firefox algumas opções free e outras comerciais.
  • E, por ultimo, uma excelente apresentação (muito completa) de recursos do Rave Reports por Alan Glei, onde com muita paciência ele demonstrou recursos interessantes e indispensáveis para organizar e estruturar os seus relatórios com Rave;

Clique para continuar lendo “Delphi Conference Brasil – Resumo”

Tags: , , , , ,

Delphi 2010 x Firebird

Delphi, Novidades agosto 25th, 2009

Agora é realidade!. O Delphi/Rad Studio versão 2010 disponibiliza o suporte nativo para o Firebird 1.5 -> 2.1. Com isso a Embarcadero atende uma antiga solicitação dos desenvolvedores (principalmente no Brasil) que usam esse excelente banco de dados. Saiba mais…

Tags:

ACBrNFe – Componente OpenSource p/Nota Fiscal Eletrônica

Código-Fonte, Delphi, Open Source, Programação abril 22nd, 2009

Mais componente (gratuíto) para: gerar, transmitir e obter respostas do WebService da SEfAZ; o componente é disponibilizado em duas versões: ACBr_NFe_CAPICOM e ACBr_NFe_OpenSSL.

A ACBr_NFE_CAPICOM; usa as DLL da Capicom da Microsoft (para conexão) e MSXML (para assinatura e validação do XML da NFe). Limitada para uso com Delphi e Windows. Pode ser usada com certificados tipo A1 ou A3.

Clique para continuar lendo “ACBrNFe – Componente OpenSource p/Nota Fiscal Eletrônica”

Tags: , ,

Consulta CEP com Webbroker e JavaScript

Código-Fonte, Delphi, JavaScript, Novidades, Sem categoria dezembro 24th, 2008

Uma das funções mais interessantes hoje em qualquer tipo de cadastro que contenha endereço postal é a busca pelo CEP, para obter o endereço, bairro, cidade e estado; muitos desenvolvedores mantém uma base de dados do CEP local (em cada cliente) para que possa ser usada pela aplicação durante a edição dos endereços no cadastro.

O “buscarcep.com.br” é um WebService de consulta de CEP gratuíto e foi usado nesse exemplo. Esse serviço pode facilitar a vida de muita gente, já que usando o serviço, não mais será necessário manter uma base de dados do CEP local (em cada cliente).

Abaixo dou um exemplo de como implementar isso em uma aplicação WEB usando Delphi Webbroker e Javascript (para dar um toque Web 2.0 na aplicação).

Clique para continuar lendo “Consulta CEP com Webbroker e JavaScript”

Tags: , , ,

Armazenando os dados do Certificado Digital Selecionado

Código-Fonte, Delphi dezembro 22nd, 2008

Sempre que necessário assinar ou enviar dados para o serviço da NF-e; é necessário informar o nome do certificado digital; é interessante, então, armazenar esses dados de forma que sempre que houver necessidade de usar o certificado vc possa informar os dados armazenados evitando assim que tenha que selecionar o mesmo à cada comando;

Como fazer isso então? A primeira coisa a fazer é inserir uma opção de seleção do certificado na sua aplicação e nela, um evento onde após a seleção do certificado onde vc. guarda em um arquivo esses dados; veja abaixo o código que permite armazenar os dados do certificado (usando recursos da NFe_UTIL.dll):

Ex.01: Salvando dados do Certificado Digital Selecionado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var Util:NFe_Util_Interface;
    i:integer;
    F: TextFile;
begin
  Util := CoUtil.Create;
  Try
  nomeCertificado := '';
  i:= Util.PegaNomeCertificado(nomeCertificado, msg);
 
  if i > 1 then
      MessageDlg( 'Ocorreu uma falha no acesso ao repositório de certificados digitais...'+#13+#13+msg, mtInformation, [mbOk], 0)
  else
      begin
        AssignFile(F, 'CertificadoDigital.res');
        Rewrite(F);
        Write(F,nomeCertificado);
        CloseFile(F);
      end;
  finally
     Util := nil;
  end;

Ex.02 Recuperando dados do certificado digital selecionado

1
2
3
4
5
6
7
8
9
10
11
var F: TextFile;
    nomecertificado: string;
begin
  if FileExists('CertificadoDigital.res') then
  begin
     AssignFile(F, 'CertificadoDigital.res');
     Reset(F);
     Readln(F,nomecertificado); // a variável nomecertificado vai receber os dados armazenados.
     CloseFile(F);
  end;
end;

Com isso, problema resolvido, após ler os dados do certificado na variável “nomecertificado” vc pode passar essa informação, por exemplo, para assinar o XML como abaixo (o exemplo usa uma função da NFE_UTIL.dll):

          i:= Util.Assinar(xmlNaoAssinado, 'infNFe', nomecertificado, 
               xmlAssinado, mensagem);
          // a variável "nomercertificado" já contendo os dados do certificado 
          // conforme obtido no exemplo 02.

Tags: ,

Code Rage III em Dezembro/2008

Banco de Dados, Código-Fonte, Delphi, Notícias novembro 24th, 2008

http://conferences.codegear.com/coderage08

http://conferences.codegear.com/coderage08

Entre os dias 1 e 5 de Dezembro próximo, aconteçe uma conferência virtual 100% técnica sobre programação e técnicas de banco de dados; hospedada pela Codegear Developer Network em conjunto com a Codegear Education Services. São mais de 100 horas de pura informação e tecnologia dividido em aprox 80 sessões; ministradas por experts em cada assunto. Você ainda poderá trocar informações diretas via chat com outros desenvolvedores. Com tradução para o nosso idioma.

Quem se interessar pode fazer a inscrição no site da CodeGear. Leia mais…

Tags: ,

Lendo o XML com o TXMLDocument

Código-Fonte, Delphi outubro 20th, 2008

Algumas pessoas têm me procurado com muitas dúvidas sobre gerar um arquivo XML; mas, ultimamente, principalmente, como fazer para ler os dados de um XML. Já mostrei como fazer isso usando o utilitário que acompanha o Delphi “XML Mapper”; o qual uso muito (veja o post) quando preciso integrar um arquivo XML com meu sistema de forma definitiva.

Outra forma de executar a leitura parcial ou total de um arquivo XML é usando o componente TXMLDocument; com ele vc. pode buscar facilmente a informação que vc precisa dentro do arquivo; no código exemplo, que disponibilizo abaixo: vamos ler os itens do arquivo exemplo gerado no post “Dados XML como começar” (poderia ser usado para ler os itens da sua NF-e com pequenos ajustes):

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
procedure TForm1.Button32Click(Sender: TObject);
var vXMLDoc: TXMLDocument;
    NodePai,NodeSec,NodeTmp: IXMLNode;
    nome, codigo: WideString;
begin
  // Cria a variável baseada no TXMLDocument
  vXMLDoc := TXMLDocument.Create(self);
 
  // Le conteúdo do arquivo XML informado 
  vXMLDoc.LoadFromFile('EnviNFe.xml');
  // Poderia ser uma URL como abaixo:
  //vXMLDoc.FileName := 'http://www.caiooliveira.com.br/?feed=rss2';
  //vXMLDoc.Active := True;
 
  // Vou colocar os dados no memo apenas como exemplo
  Memo.lines.Add( '-------------------------------------------------');
  Memo.lines.Add( 'Vamos inserir num campo memo (apenas para ver o resultado do teste');
  Memo.lines.Add( VXMLDoc.XML.Text +#13+#13 );
 
  // Aqui eu peço para encontrar a primeira ocorrencia da Tag <det>>
  NodePai := vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('det');
  // Esse nó vai ser usado no LOOP
  NodeSec := NodePai;
  // Posiciona o primeiro elemento encontrado
  NodeSec.ChildNodes.First;
  repeat
    // referencia a tag <prod> dentro de <det>
    NodeTmp  := NodeSec.ChildNodes['prod'];
    // da pra ver que é um XML resumido da NFe (so temos uma tag <prod> para cada <det> então não precisaria da linha abaixo
    // agora se tivéssemos mais de uma seria o caso de posicionar também na primeira ocorrencia.
    NodeTmp.ChildNodes.First;
    repeat
      // pega os dados que vc quiser dentro da tag <prod>
      nome := NodeTmp.ChildNodes['cProd'].text;     // posso ler assim
      codigo := NodeTmp.ChildValues['cEan'];        // ou assim
 
      // vamos inserir no Memo os dados
      Memo4.Lines.Add('-----------------------------------------------');
      Memo4.Lines.Add( nome+' ---- '+codigo );
 
      // vai para a proxima ocorrência </prod><prod> (se houvesse)
      NodeTmp := NodeTmp.NextSibling;
    until NodeTmp = nil;
    // vai para a proxima ocorrência <det>
    NodeSec := NodeSec.NextSibling;
  until NodeSec = nil;
end;
</det></prod></det></prod></det></prod></det>

Tags: ,

Dados x XML, como começar? (segunda parte)

Código-Fonte, Delphi outubro 17th, 2008

Essa segunda parte do tópico “Dados x XML como começar” foi criada para atender à uma demanda de usuários que têm postado dúvida para gerar o LOOP para criar os itens no XML da NF-e e, acredito que com com esses dados em mãos vai ficar mais fácil para quem está iniciando agora; segue então, o código da versão anterior com o exemplo da implementação para gerar os itens:

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
50
51
52
53
54
55
56
57
58
59
60
procedure TfrmPrincipal.PnLerNfeClick(Sender: TObject);
var vXMLDoc: TXMLDocument;
    NodeNivelA, NodeNivelB, NodeNivelC, NodeNivelD: IXMLNode;
    nItens : integer;
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'] :=
            '1.10';
 
       // 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';
 
       // Exemplo Adiciona Itens
       For nItens := 1 to 2 do
       begin
         // adiciona tag <det> com attributo
         NodeNivelC := NodeNivelB.AddChild('det');
         NodeNivelB.ChildNodes.Last.Attributes['nitem'] := IntToStr(nItens);
 
         // adiciona tag <prod> à partir da tag <det>
         NodeNivelD := NodeNivelC.ChildNodes['prod'];
         NodeNivelD.AddChild('cProd').Nodevalue := IntToStr(nItens)+'121231111';
         NodeNivelD.AddChild('cEan').Nodevalue := '7891133005801';
         NodeNivelD.AddChild('xProd').Nodevalue := 'ABRACADEIRA C/PREGO FMX  6 BR - 580';
         NodeNivelD.AddChild('CFOP').Nodevalue := '5102';
         // .....
       end;
 
       //Memo4.Text := vXMLDoc.Encoding;
       vXMLDoc.SaveToFile('EnviNFe.xml');
       Memo4.Lines.LoadFromFile('EnviNFe.xml');
  end;
  finally
     vXMLDoc.Free;
  end;
end;
</det></prod></det>

Tags: ,

Delphi 7 x Intraweb x Apache 2.2

Delphi, Informação, Sem categoria outubro 3rd, 2008

Bom, após um experiência terrível migrando o meu ambiente de desenvolvimento do XP para o Windows Vista; devido à minha nova máquina,  onde fui forçado a atualizar a minha versão de desenvolvimento do Apache 1.3 para o Apache 2.x, pois, não consegui fazer o Apache 1.3 rodar com o Windows Vista.  Caso queira detalhes da instalação do Apache no Vista veja o artigo anterior.

Clique para continuar lendo “Delphi 7 x Intraweb x Apache 2.2″

Tags: , , ,

XML Mapper – parte I

Delphi, Ferramentas agosto 8th, 2008

xmlmapper_0.gif 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í!.

Clique para continuar lendo “XML Mapper – parte I”

Tags: , , ,