Fórum Consulta CNPJ #409304
10/11/2011
0
unit UnitCNPJ;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, OleCtrls, SHDocVw, ComCtrls, MSHTML, ActiveX;
type
TObjectProcedure = procedure of object;
TEventObject = class(TInterfacedObject, IDispatch)
private
FOnEvent: TObjectProcedure;
protected
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
public
constructor Create(const OnEvent: TObjectProcedure);
property OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
end;
TfConsultaRF = class(TForm)
Panel1: TPanel;
Edit_url: TEdit;
BitBtn_Preencher: TBitBtn;
BitBtn_Dados: TBitBtn;
Edit_CNPJ: TEdit;
PageControl: TPageControl;
TabSheet_Receita: TTabSheet;
Panel_Cadastro: TPanel;
Panel4: TPanel;
WebBrowser: TWebBrowser;
Label2: TLabel;
BitBtn_Home: TBitBtn;
Label1: TLabel;
BitBtn_Codigo: TBitBtn;
Edit_Nome: TEdit;
Label3: TLabel;
Edit_Inscricao: TEdit;
Edit_Endereco: TEdit;
Edit_Numero: TEdit;
Edit_Complemento: TEdit;
Edit_Cep: TEdit;
Edit_Bairro: TEdit;
Edit_Minicipio: TEdit;
Edit_UF: TEdit;
Edit_Img: TEdit;
Label4: TLabel;
Label5: TLabel;
Label_end: TLabel;
Label6: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label7: TLabel;
Label11: TLabel;
Panel_Carregando: TPanel;
Shape1: TShape;
Label12: TLabel;
Panel2: TPanel;
btOK: TBitBtn;
pcDados: TPageControl;
TabSheet1: TTabSheet;
Memo_Codigo: TMemo;
TabSheet2: TTabSheet;
Memo_Dados: TMemo;
procedure WebBrowserBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure BitBtn_PreencherClick(Sender: TObject);
procedure BitBtn_HomeClick(Sender: TObject);
procedure BitBtn_DadosClick(Sender: TObject);
procedure BitBtn_CodigoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btOKClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fConsultaRF: TfConsultaRF;
htmlDoc : IHTMLDocument2;
implementation
uses UnitCadFornecedor, UnitFornecedor;
{$R *.dfm}
{ TEventObject }
constructor TEventObject.Create(const OnEvent: TObjectProcedure);
begin
inherited Create;
FOnEvent := OnEvent;
end;
function TEventObject.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL;
end;
function TEventObject.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
Result := E_NOTIMPL;
end;
function TEventObject.GetTypeInfoCount(out Count: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TEventObject.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
begin
if (DispID = DISPID_VALUE) then
begin
if Assigned(FOnEvent) then FOnEvent;
Result := S_OK;
end
else Result := E_NOTIMPL;
end;
// -----------------------------------------------------
procedure TfConsultaRF.WebBrowserBeforeNavigate2(
Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName,
PostData, Headers: OleVariant; var Cancel: WordBool);
begin
htmlDoc := nil;
Panel_Carregando.Visible := True;
end;
procedure TfConsultaRF.WebBrowserDocumentComplete(
Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if Assigned(WebBrowser.Document) then
begin
htmlDoc := WebBrowser.Document as IHTMLDocument2;
// htmlDoc.onmouseover := (TEventObject.Create(Document_OnMouseOver) as IDispatch);
// htmlDoc.onclick := (TEventObject.Create(Document_OnClick) as IDispatch);
end;
Panel_Carregando.Visible := False;
Edit_url.text := url;
If pos(Cnpjreva_Solicitacao2.asp,url) > 0 Then
If (Edit_Img.Text <> ) then
BitBtn_Preencher.Click;
If pos(Cnpjreva_Comprovante.asp,url) > 0 Then
BitBtn_Dados.Click;
If pos(Cnpjreva_Comprovante.asp,url) > 0 then
fConsultaRF.Height := 304
else
begin
fConsultaRF.Height := 640;
Edit_CNPJ.SetFocus;
end;
BitBtn_Codigo.Click;
end;
procedure TfConsultaRF.BitBtn_PreencherClick(
Sender: TObject);
var
i, j: Integer;
FormItem: Variant;
// Botao : Variant;
//sHtml : HTMLElement;
begin
if VarIsNull(WebBrowser.OleObject.Document) or
VarisEmpty(WebBrowser.OleObject.Document) then
exit;
//count forms on document
for i := 0 to WebBrowser.OleObject.Document.Forms.Length -1 do
begin
FormItem := WebBrowser.OleObject.Document.Forms.Item(I);
try
for j := 0 to FormItem.Length-1 do
begin
Memo_Dados.lines.add(FormItem.Item(j).Name+ >> +FormItem.Item(j).Value);
if (FormItem.Item(j).Name = cnpj) then
FormItem.Item(j).Value := Edit_CNPJ.Text;
if (FormItem.Item(j).Name = idLetra) then
FormItem.Item(j).Value := Edit_Img.Text;
if (FormItem.Item(j).Name = submit1) then
FormItem.Item(j).Click;
end;
Finally
Edit_Img.Clear;
End;
end;
end;
procedure TfConsultaRF.BitBtn_HomeClick(
Sender: TObject);
begin
WebBrowser.Navigate(http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp);
WebBrowser.Align := alNone;
WebBrowser.Height := 90;
WebBrowser.Width := 200;
end;
procedure TfConsultaRF.BitBtn_DadosClick(
Sender: TObject);
Var
i, y : Integer;
begin
TRY
Memo_Dados.lines.Text := WebBrowser.OleObject.Document.documentElement.innerText;
For i := 0 To Memo_Dados.lines.Count-1 Do
Begin
For y := 0 To ComponentCount - 1 Do
If Components[y] is TEdit Then
If (Trim((Components[y] as TEdit).Hint)<>) And ((Components[y] as TEdit).Hint = Trim(Memo_Dados.Lines[i])) Then
(Components[y] as TEdit).Text := Trim(Memo_Dados.Lines[i+1]);
End;
FINALLY
WITH FormFornecedor DO
begin
sqlFornecedoresNome.AsString := Edit_Nome.Text;
sqlFornecedoresRazaoSocial.AsString := Edit_Nome.Text;
sqlFornecedoresCNPJ.AsString := Edit_Inscricao.Text;
sqlFornecedoresCEP.AsString := Edit_CEP.Text;
sqlFornecedoresEndereco.AsString := Edit_Endereco.Text;
sqlFornecedoresNumero.AsString := Edit_Numero.Text;
sqlFornecedoresBairro.AsString := Edit_Bairro.Text;
sqlFornecedoresComplemento.AsString := Edit_Complemento.Text;
sqlFornecedoresUF.AsString := Edit_UF.Text;
sqlFornecedoresCidade.AsString := Edit_Minicipio.Text;
end;
btOK.Click;
END;
end;
procedure TfConsultaRF.BitBtn_CodigoClick(
Sender: TObject);
var
Html : IHTMLElement;
Begin
If Assigned(WebBrowser.Document) then
Begin
Html := (WebBrowser.Document As IHTMLDocument2).body;
While Html.parentElement <> Nil do
Html := Html.parentElement;
Memo_Codigo.Text := Html.outerHTML;
End;
End;
procedure TfConsultaRF.FormCreate(Sender: TObject);
begin
fConsultaRF.Height := 304;
end;
procedure TfConsultaRF.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
fConsultaRF := NIL;
end;
procedure TfConsultaRF.btOKClick(Sender: TObject);
begin
fConsultaRF.Close;
end;
end.
Paulo Andrade
Curtir tópico
+ 0Posts
11/11/2011
Leonardo Xavier
Gostei + 0
12/11/2011
Paulo Andrade
Qual ferramenta de desenvolvimento você esta utilizando?
Gostei + 0
02/04/2013
Fernando Santos
function DownloadFile(SourceFile, DestFile: string): Boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
try
hURL := InternetOpenURL(hSession,PChar(SourceFile),nil,0,0,0);
try
AssignFile(f, DestFile);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer,SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result := True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end;
end;E depois pode carregar por exemplo em Timage.
Também tenho outra dica para você.
Eu criei um DLL em Delphi que você pode fazer todo o procedimento com estas simples linhas de código.
type
TEmpresa = Record
Tipo: ShortString;
Abertua: ShortString;
RazaoSocial: ShortString;
Endereco: ShortString;
Numero: ShortString;
Complemento: ShortString;
CEP: ShortString;
Bairro: ShortString;
Cidade: ShortString;
UF: ShortString;
Situacao: ShortString;
End;
function ConsultarCNPJ(CNPJ: ShortString): TEmpresa; stdcall;
implementation
function ConsultarCNPJ(CNPJ: ShortString): TEmpresa; stdcall; external 'CnpjDll.dll';
procedure TF_Principal.ButBuscarClick(Sender: TObject);
var
CNPJ: ShortString;
Empresa: TEmpresa;
begin
CNPJ:= EditCNPJ.Text;
Empresa:= ConsultarCNPJ(CNPJ);
EditTipo.Text:= Empresa.Tipo;
EditAbertura.Text:= Empresa.Abertua;
EditRazaoSocial.Text:= Empresa.RazaoSocial;
EditEndereco.Text:= Empresa.Endereco;
EditNumero.Text:= Empresa.Numero;
EditComplemento.Text:= Empresa.Complemento;
EditCEP.Text:= Empresa.CEP;
EditBairro.Text:= Empresa.Bairro;
EditCidade.Text:= Empresa.Cidade;
EditUF.Text:= Empresa.UF;
EditSituacao.Text:= Empresa.Situacao;
end;A DLL utiliza indy que só carrega o necessário. Exemplo quando você faz isso pelo TWebBrowser do Delphi ele vai carregar imagens desnecessárias, css, javascript etc.. já pelo indy isso só acontece-se com o que você determina, e de resultado fica uma consulta mais rápida.
Para baixar a DLL com um exemplo com o código fonte em delphi veja aqui
[url]http://fsist.blogspot.com.br/2013/03/dll-consultar-cnpj-direto-da-receita.html[/url]
Gostei + 0
21/05/2013
Paulo Andrade
Solução perfeita.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)