Online E-Vergi Sorgulama? [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Online E-Vergi Sorgulama? [Çözüldü]

Mesaj gönderen xozcanx »

Merhaba;
Web Sayfasındaki alanlara veri gönderiyorum fakat Combobox seçiminde takıldım.
e-Vergi Levhası Sorgulama sayfasındaki
Sorgulayan Kişi TC Kimlik No alanına

Kod: Tümünü seç

WebBrowser1.OleObject.Document.GetElementByID('ortakSorgulayanTckno').Value   :='12345678911';
şeklinde veri gönderiyorum
Vergi dairesinin bulunduğu il için de (Örnek İstanbul)

Kod: Tümünü seç

WebBrowser1.OleObject.Document.GetElementByID('ortakDenemeIl3').value :='034';
değerini gönderiyorum Combobox ta İSTANBUL yazıyor ama normal bir seçim yapmış gibi gözükmediği için Vergi daireleri görüntülenmiyor.
Normal bir seçimi nasıl yaptırabilrim.
En son xozcanx tarafından 02 Ara 2014 03:37 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Online E-Vergi Sorgulama?

Mesaj gönderen SimaWB »

O combobox'ın onchange olayında fonksiyon var. Dolayısıyla değer girdikten sonra onchange olayını tetiklemen lazım
There's no place like 127.0.0.1
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Online E-Vergi Sorgulama?

Mesaj gönderen xozcanx »

SimaWB yazdı:O combobox'ın onchange olayında fonksiyon var. Dolayısıyla değer girdikten sonra onchange olayını tetiklemen lazım
Hocam vakit ayırıp cevap verdiğiniz için teşekkürler. Doğru kriterleri girip araştırmak gerekiyor, tekrar detaylı araştırınca Forumda konuya yer verildiğini gördüm.
Arama Kriteri olarak "webbrowser combobox tetikleme"
Burada @vkamadan çözümü paylaşmış.

İyi Çalışmalar.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Online E-Vergi Sorgulama?

Mesaj gönderen xozcanx »

SimaWB yazdı:O combobox'ın onchange olayında fonksiyon var. Dolayısıyla değer girdikten sonra onchange olayını tetiklemen lazım
Hocam kızacak belki ama :? emin olun araştırmadan yazmıyorum. bu sayfa ile ilgili olarak herşey tamam ama sorgulama kısmında kaldım.

Resim

sorgula adrı resme tıklama olayını yapamadım. Resimde de görüldüğü gibi id'si belli fakat, burada da bir fonksiyon var sanırım ama tetikleme olayını çözemedim.

vaktiniz dahilinde bu konuda açıklayıcı bir şekilde yarıdımcı olabilirseniz memnun olurum. sayfadaki fonksiyona nasıl ulaşabildiğimize dair. Benim için önemli olan sorgulama koduna ulaşmak değil mantığını kavramak, kimsenin açıklama yapma zorunluğu yok dediğim gibi vakti olanlar için.

Teşekkürler.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: Online E-Vergi Sorgulama? [Çözülmedi]

Mesaj gönderen eren2000 »

Değeri verdikten sonra
yani .value='....' dedikten sonra

Kod: Tümünü seç

Keybd_Event(VK_RETURN,   1, 0, 0);
bundan sonra da
.setfocus ile başka bir elemente konumlan sanırım olur.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Online E-Vergi Sorgulama? [Çözülmedi]

Mesaj gönderen xozcanx »

İlginize Teşekkürler ama malesef sonuç alamadım :(
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Online E-Vergi Sorgulama? [Çözülmedi]

Mesaj gönderen sabanakman »

İyi günler. Aslında meseleyi ele alınca öncelikle bazı maddeleri çözme gereği görünüyor.
-ComboBox içindeki listedeki isimlere karşılık gelen değerleri elde etmek ve javascript kodlarını çalıştırmak gerekiyor ama sıralama aşağıdaki şekilde olmalı.

1-Ekrandaki bilgi girişi yapılan bileşenleri doldurmak
2-Önce il isminden değeri elde etmek,
3-Seçilen ile göre ilçeler ComboBox listesini doldurmak ve bu dolumdan sonra ilgili vergidairesini yine isminden değerini elde ederek seçmek. Burada il seçiminden sonra dolum işlemini fillVDCombo('ortakDenemeIl3', 'ortakVdAdi') javascripti çalıştırılarak yapıldığı için bu scripti çalıştırmak gerekmektedir.
4-Bilgiler doldurulduktan sonra girdiDenetleSorgu() isimli javascriptini çalıştırmakla işlem tamamlanacaktır.

Kod: Tümünü seç

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
  OleCtrls, SHDocVw, MSHTML;//<--

.....

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    WB: TWebBrowser;
    Panel2: TPanel;
    btnGir: TBitBtn;
    procedure btnGirClick(Sender: TObject);
    procedure WBDocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
  private
    { Private declarations }
    SayfaAcildi:Boolean;
    procedure SayfaAcBekle(const Adresi:String;const ZamanAsimi:Cardinal=5000);
    procedure SayfaDoldurSorgula(const document: IHTMLDocument2;const il,ilce:String);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnGirClick(Sender: TObject);
begin
  SayfaAcBekle('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
  SayfaDoldurSorgula(WB.Document as IHTMLDocument2, 'ANTALYA', 'MURATPAŞA VD');
end;

procedure TForm1.SayfaAcBekle(const Adresi:String;const ZamanAsimi:Cardinal);
{$J+}
const Bitir:Boolean=False;
{$J-}
var OAn, AraSure, Sure:Cardinal;
begin
  SayfaAcildi:=False;
  WB.Navigate('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
  AraSure:=GetTickCount;
  Sure:=AraSure+ZamanAsimi;
  repeat
    OAn:=GetTickCount;
    if (OAn>(AraSure+450)) then begin
      AraSure:=OAn;
      Application.ProcessMessages;
      Bitir:=Sure<OAn;
    end;
  until SayfaAcildi or (WB.ReadyState>=READYSTATE_COMPLETE) or {not WB.Busy or{} Bitir;
  Bitir:=False;
end;

procedure TForm1.SayfaDoldurSorgula(const document: IHTMLDocument2;const il,ilce:String);
const _name='name';
var forms: IHTMLElementCollection;

 function Eleman(Ozellik,Adi:String):IHTMLElement;
 var i,j:Integer; xForm:IHTMLFormElement; elm:IHTMLElement;
 begin
   if Ozellik='' then Ozellik:=_name;
   Result:=nil;
   i:=0;
   while not Assigned(Result) and (i<=forms.length) do begin
     xForm:=forms.item(i,'') as IHTMLFormElement;
     if Assigned(xForm) then begin
       j:=0;
       while not Assigned(Result) and (j<=xForm.length) do begin
         elm:=xForm.item(j,'') as IHTMLElement;
         if Assigned(elm) then begin
           if Adi=elm.getAttribute(Ozellik,0) then
            Result:=elm;
         end;
         Inc(j);
       end;
     end;
     Inc(i);
   end;
 end;

 function cmbDegerOku(const il_ilce:IHTMLSelectElement;const DegerAdi:String):String;
 var i:Integer;
 begin
   Result:='';i:=0;
   while (Result='') and (i<il_ilce.length) do begin
     with (il_ilce.item(i,i) as IHTMLOptionElement) do
      if DegerAdi=VarToStr(text) then Result:=value;
     Inc(i);
   end;
 end;

var
  theForm: IHTMLFormElement;
  SelectElement:IHTMLSelectElement;
  HTMLWindow: IHTMLWindow2;

begin
  HTMLWindow := document.parentWindow;
  forms := document.Forms as IHTMLElementCollection;
  theForm := forms.Item(0,'') as IHTMLFormElement;

  SelectElement:=(Eleman(_name, 'ortakDenemeIl3') as IHTMLSelectElement);
  SelectElement.value := cmbDegerOku(SelectElement, il); //şehri seç
  HTMLWindow.execScript('fillVDCombo(''ortakDenemeIl3'', ''ortakVdAdi'')', 'JavaScript');//ilçelerin doldurulması

  (Eleman(_name,'ortakSorgulayanTckno') as IHTMLInputElement).value:='12345678901';//soran tcno
  //(Eleman(_name,'ortakSorgulananVergiNo') as IHTMLInputElement).value:='9876543210';//sorgulanan vergino
  (Eleman(_name,'ortakSorgulananTckno') as IHTMLInputElement).value:='12345678901';//sorgulanan tcno

  SelectElement:=(Eleman(_name,'ortakVdAdi') as IHTMLSelectElement);
  SelectElement.value := cmbDegerOku(SelectElement, ilce);//ilçeyi seç

  HTMLWindow.execScript('girdiDenetleSorgu()', 'JavaScript');//sorgula
end;

procedure TForm1.WBDocumentComplete(ASender: TObject;
  const pDisp: IDispatch; const URL: OleVariant);
begin
  SayfaAcildi:=True;
end;
Burada butona tıklandığı zaman çağrılan aşağıdaki şekilde iki prosedür bulunmaktadır ve ne işe yaradıkları isimlerinden belli olmaktadır. SayfaAcBekle prosedürü ile ilgili sorgulama sayfası açılır ve ekrana gelmesi tamamlanır.

Kod: Tümünü seç

SayfaAcBekle('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
SayfaDoldurSorgula(WB.Document as IHTMLDocument2, 'ANTALYA', 'MURATPAŞA VD');
SayfaDoldurSorgula prosedürü ise aldığı 'ANTALYA', 'MURATPAŞA VD' değerlerine göre sayfadan seçim yaparak sorgulamayı tamamlamaktadır. Burada önemli olan nokta isimlerin, seçenek listesinde yazanla birebir aynı olması gerekmektedir. Buna dikkat edilirse pek sorun çıkmayacaktır. Bir de SayfaDoldurSorgula prosedüründe diğer bilgileri de parametre olarak gönderebilirdik ama ComoBox değerlerini isimlerinden elde etmeye vurgu yapmak açısından diğer bilgileri parametre olarak kullanmadım. Eğer isterseniz diğer bilgileri de parametre olarak ekleyebilirsiniz. İyi çalışmalar.
En son sabanakman tarafından 03 Ara 2014 11:13 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Online E-Vergi Sorgulama? [Çözülmedi]

Mesaj gönderen xozcanx »

Hocam Elinize Sağlık Çok Güzel Bir Çalışma olmuş.. özellikle açıklayıcı olması çok güzel.

Kullanmak isteyenler için Küçük bir hatırlatma, Uses Satırına "MSHTML" yi eklemeyi unutmasınlar.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Online E-Vergi Sorgulama? [Çözülmedi]

Mesaj gönderen sabanakman »

xozcanx yazdı:...Uses Satırına "MSHTML" yi eklemeyi unutmasınlar.
Hemen düzeltmekte fayda var :D . Benzer problemle karşılaşanlar için açıklayıcı olmakta fayda var. Zaten bu tür çalışmaları yaparken kendimize de çok faydası oluyor :mrgreen:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla