Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ENTEGRATOR ile E-FATURA (elektronik dönüşüm) UYGULAMASI
#1
Entegratör (Firma ve Devlet arasındaki iş/işlemleri düzenleyen) firmalar https://ebelge.gib.gov.tr/efaturaozelent...stesi.html adresinde yayınlanmaktadır. Yazılımcı ile GİB arasındaki FİRMA dır. Test hesap ve portal ları ile manuel olarak E-Fatura vs olaylarını inceleyebilirsiniz. Kodlama aşamasında oldukça ÖNEMLİ bir yeri vardır. Bu makalede Adana Hızlı Bilişim Teknolojileri.A.Ş.’ne ait https://www.hizliteknoloji.com.tr/Home/Referans ALT YAPI larını kullanarak uygulamamızı gerçekleştireceğiz. Kısaca bundan sonra adı ENTEGRATÖR olarak geçecektir. Uygulamamız iki ana kısımdan oluşacaktır. GİDEN ve GELEN faturalar. Entegratörün Web servislerini kullanacağız
HizliService.pas               : Entegratör servisi için kullanılan prosüdür ve fonksiyonları barındıran DELPHI dosyası.
Kullanıcı Adı      hizli
Şifre                      rWBDkoA6
Test Vergi No    4620553774 (Vergi No kısaca VKN diye söyleniyor)
Mail                      defaultgb@hizlibilisimteknolojileri.net (Yazılım sahibinin mail adresi)
Fatura No yapısı: Özel bir yapısı vardır. On altı karakterli olmalıdır. Örnek fatura no PRM2020000000017. ÖN EK                üç karakterli olmalıdır (PRM gibi). Sonra dört karakterli 2020 YIL ile devam eder. Kalan 9 karakter ise fatura SIRA NO dur. Bu sıra no veritabanı tarafından verilmeli ve benzersiz olmalıdır.
HTTPRIO1 Bileşeni: Entegratöre gönderilen XML yapılarını yönetir. Gelen CEVAP bilgisini de bu bileşen yönetir.
VirtualTable1 Bileşeni: Gelen veya Giden Faturaların SORGU sonuçları için kullanılır. Tipleri aşağıdadır. UniDAC

image-2-1024x647.png

DBGrid Bileşeni: VirtualTable ile alınan bilgileri göstermek için kullanılır. Uygulamanın TASARIM görüntüsü.

image-3.png
image-4.png

Kodlarımızın tamamı aşağıdadır.

unit Unit1;



interface



uses

 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ShellApi, Vcl.ComCtrls,

 Data.DB, MemDS, VirtualTable, Vcl.Grids, Vcl.DBGrids, Vcl.Menus,



 Soap.Rio, Soap.SOAPHTTPClient, Soap.InvokeRegistry, System.Net.URLClient, HizliService, XSBuiltIns;



type

 TForm1 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Edit1: TEdit;

   Label3: TLabel;

   Edit2: TEdit;

   Label4: TLabel;

   Edit3: TEdit;

   HTTPRIO1: THTTPRIO;

   MemoLog: TMemo;

   Panel2: TPanel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   ComboBox1: TComboBox;

   ComboBox2: TComboBox;

   ComboBox3: TComboBox;

   Panel3: TPanel;

   ComboBox4: TComboBox;

   DateTimePicker1: TDateTimePicker;

   DateTimePicker2: TDateTimePicker;

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Button1: TButton;

   Button3: TButton;

   Button4: TButton;

   Label8: TLabel;

   Button2: TButton;

   VirtualTable1: TVirtualTable;

   VirtualTable1AppType: TStringField;

   VirtualTable1DocumentCurrency: TStringField;

   VirtualTable1DocumentId: TStringField;

   VirtualTable1DocumentTypeCode: TStringField;

   VirtualTable1EnvelopeExp: TStringField;

   VirtualTable1EnvelopeStatus: TStringField;

   VirtualTable1EnvelopeUUID: TStringField;

   VirtualTable1IsAccount: TBooleanField;

   VirtualTable1IsArchive: TBooleanField;

   VirtualTable1IsInternetSale: TBooleanField;

   VirtualTable1IsPrinted: TBooleanField;

   VirtualTable1IsRead: TBooleanField;

   VirtualTable1IsTransferred: TBooleanField;

   VirtualTable1LocalReferenceId: TStringField;

   VirtualTable1Message: TStringField;

   VirtualTable1PayableAmount: TStringField;

   VirtualTable1ProfileId: TStringField;

   VirtualTable1SendType: TStringField;

   VirtualTable1Status: TStringField;

   VirtualTable1StatusExp: TStringField;

   VirtualTable1TargetAlias: TStringField;

   VirtualTable1TargetIdentifier: TStringField;

   VirtualTable1TargetTitle: TStringField;

   VirtualTable1TaxTotal: TStringField;

   VirtualTable1UUID: TStringField;

   VirtualTable1CancelDate: TDateTimeField;

   VirtualTable1CreateDate: TDateTimeField;

   VirtualTable1IssueDate: TDateTimeField;

   DataSource1: TDataSource;

   DBGrid1: TDBGrid;

   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

   procedure HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

   procedure LogEkle(Str1: String);

   procedure HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

   procedure FormShow(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);



 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentList2;

 AppType, I: Integer;

 StartDate: TXSDateTime;

 EndDate: TXSDateTime;

 TarihTipi: String;



begin

 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 if RadioButton1.Checked then

   TarihTipi := 'CreatedDate'

 else if RadioButton2.Checked then

   TarihTipi := 'IssueDate';



 StartDate := TXSDateTime.Create;

 EndDate := TXSDateTime.Create;

 StartDate.AsDateTime := DateTimePicker1.DateTime;

 EndDate.AsDateTime := DateTimePicker2.DateTime;



 Cevap := Servis.GetDocumentList(ComboBox4.ItemIndex + 1, TarihTipi, StartDate, EndDate, False, False,

   False, 'ALL');



 VirtualTable1.Close;

 VirtualTable1.Clear;

 VirtualTable1.Open;

 I := 0;



 TRY

   While length(Cevap.documents[I].DocumentId) <> 0 do

   begin

     VirtualTable1.Append;

     VirtualTable1AppType.AsInteger := Cevap.documents[I].AppType;

     // VirtualTable1CancelDate.AsDateTime := Cevap.documents[I].CancelDate.AsDateTime;

     VirtualTable1CreateDate.AsDateTime := Cevap.documents[I].CreatedDate.AsDateTime;

     VirtualTable1DocumentCurrency.AsString := Cevap.documents[I].DocumentCurrencyCode;

     VirtualTable1DocumentId.AsString := Cevap.documents[I].DocumentId;

     VirtualTable1DocumentTypeCode.AsString := Cevap.documents[I].DocumentTypeCode;

     VirtualTable1EnvelopeExp.AsString := Cevap.documents[I].EnvelopeExp;

     VirtualTable1EnvelopeStatus.AsInteger := Cevap.documents[I].EnvelopeStatus;

     VirtualTable1EnvelopeUUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1IsAccount.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsArchive.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsInternetSale.AsBoolean := Cevap.documents[I].IsInternetSale;

     VirtualTable1IsPrinted.AsBoolean := Cevap.documents[I].IsPrinted;

     VirtualTable1IsRead.AsBoolean := Cevap.documents[I].IsRead;

     VirtualTable1IsTransferred.AsBoolean := Cevap.documents[I].IsTransferred;

     VirtualTable1IssueDate.AsDateTime := Cevap.documents[I].IssueDate.AsDate;

     VirtualTable1LocalReferenceId.AsString := Cevap.documents[I].LocalReferenceId;

     VirtualTable1Message.AsString := Cevap.documents[I].Messsage;

     VirtualTable1ProfileId.AsString := Cevap.documents[I].ProfileID;

     VirtualTable1SendType.AsString := Cevap.documents[I].SendType;

     VirtualTable1Status.AsInteger := Cevap.documents[I].Status;

     VirtualTable1TargetAlias.AsString := Cevap.documents[I].TargetAlias;

     VirtualTable1TargetIdentifier.AsString := Cevap.documents[I].TargetIdentifier;

     VirtualTable1TargetTitle.AsString := Cevap.documents[I].TargetTitle;

     VirtualTable1PayableAmount.AsString := Cevap.documents[I].PayableAmount.DecimalString;

     VirtualTable1TaxTotal.AsString := Cevap.documents[I].TaxTotal.DecimalString;

     VirtualTable1UUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1.Post;

     Inc(I);

   end;

 EXCEPT

 END;

 VirtualTable1.Cancel;

 VirtualTable1.First;



end;



procedure TForm1.Button2Click(Sender: TObject);

var

 Servis: IHizliService;

 Giris: ArrayOfInputInvoiceModel;

 Cevap: ArrayOfOutputInvoiceModel;

 Sayac: Integer;

 Irsaliye: ArrayOfDespatchs;

 FaturaKalem: ArrayOfInvoiceLine;

 KalemVergi: ArrayOfLineTax;

 LineExtensionAmount: TXSDecimal;

 AllowanceTotalAmount: TXSDecimal;

 TaxInclusiveAmount: TXSDecimal;

 PayableAmount: TXSDecimal;

 CalculationRate: TXSDecimal;

 Quantity_Amount: TXSDecimal;

 Price_Amount: TXSDecimal;

 Allowance_Percent: TXSDecimal;

 Allowance_Amount: TXSDecimal;

 Price_Total: TXSDecimal;

 Tax_Base: TXSDecimal;

 Tax_Perc: TXSDecimal;

 Tax_Amnt: TXSDecimal;

 AppType, I: Integer;

 GUIDList: ArrayOfstring;

 Uid: TGuid;

 ETTN: String;



begin



 try



   MemoLog.Lines.Clear;



   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

   Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



   SetLength(Giris, 1);

   Giris[0] := InputInvoiceModel2.Create;



   if ComboBox1.ItemIndex = 0 then

     Giris[0].AppType := 1 // 1 efatura

   else

     Giris[0].AppType := 3; // 3 earşivfatura



   Giris[0].DestinationIdentifier := '4620553774';

   Giris[0].DestinationUrn := 'urn:mail:' + 'mehmetguverdik@gmail.com';

   Giris[0].SourceUrn := 'urn:mail:' + 'defaultgb@hizlibilisimteknolojileri.net';

   Giris[0].IsDraft := False;

   Giris[0].IsDraftSend := False;

   Giris[0].LocalId := '';

   Giris[0].UpdateDocument := False;

   Giris[0].InvoiceModel := InvoiceModel2.Create;

   Giris[0].InvoiceModel.invoiceheader := InvoiceHeader2.Create;



   CreateGuid(Uid);

   ETTN := GuidToString(Uid);

   ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);

   ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);

   Giris[0].InvoiceModel.invoiceheader.UUID := ETTN;



   Giris[0].InvoiceModel.invoiceheader.Invoice_ID := 'PRM' + '2020' + FormatFloat('000000000', random(1000));

   Giris[0].InvoiceModel.invoiceheader.IssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.IssueTime := FormatDateTime('yyyy-mm-dd hh:mm:ss',

     DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.ProfileID := ComboBox2.Text;

   Giris[0].InvoiceModel.invoiceheader.InvoiceTypeCode := ComboBox3.Text;

   Giris[0].InvoiceModel.invoiceheader.DocumentCurrencyCode := 'TRY';



   // **** FATURA ALT TOPLAM  ******************

   LineExtensionAmount := TXSDecimal.Create;

   LineExtensionAmount.AsBcd := 5169.49; // Tutar



   AllowanceTotalAmount := TXSDecimal.Create;

   AllowanceTotalAmount.AsBcd := 2203.39; // İskonto toplam



   TaxInclusiveAmount := TXSDecimal.Create;

   TaxInclusiveAmount.AsBcd := 5169.49; // Vergi Dahil Tutar



   PayableAmount := TXSDecimal.Create;

   PayableAmount.AsBcd := 3500; // Ödenecek tutar

   // ******************************************************************************************



   CalculationRate := TXSDecimal.Create;

   CalculationRate.AsBcd := 1; // kur TL için çarpan..



   Giris[0].InvoiceModel.invoiceheader.LineExtensionAmount := LineExtensionAmount; // Tutar

   Giris[0].InvoiceModel.invoiceheader.AllowanceTotalAmount := AllowanceTotalAmount; // iskonto toplamı

   Giris[0].InvoiceModel.invoiceheader.TaxInclusiveAmount := TaxInclusiveAmount; // vergi dahil tutar

   Giris[0].InvoiceModel.invoiceheader.PayableAmount := PayableAmount; // Ödenecek tutar

   Giris[0].InvoiceModel.invoiceheader.CalculationRate := CalculationRate; // döviz kuru

   Giris[0].InvoiceModel.invoiceheader.Note := 'Fatura AÇIKLAMA Bilgisi';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceId := 'İrsaliye No 001';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceDate :=

     FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime); // İrsaliye Tarih..

   Giris[0].InvoiceModel.customer := Customer2.Create;

   Giris[0].InvoiceModel.customer.IdentificationID := '4620553774'; // Vergi No = VKN ..

   Giris[0].InvoiceModel.customer.PartyName := 'Firma Adı MEHMET GÜVERDİK';

   Giris[0].InvoiceModel.customer.TaxSchemeName := 'Vergi Daire SEYHAN';

   Giris[0].InvoiceModel.customer.CountryName := 'Ülke TÜRKİYE';

   Giris[0].InvoiceModel.customer.CityName := 'ADANA';

   Giris[0].InvoiceModel.customer.CitySubdivisionName := 'SEYHAN';

   Giris[0].InvoiceModel.customer.StreetName := 'Adres SEYHAN - ADANA';

   Giris[0].InvoiceModel.customer.ElectronicMail := 'mehmetguverdik@gmail.com';

   Giris[0].InvoiceModel.customer.WebsiteURI := 'www.guverdik.com';

   Giris[0].InvoiceModel.customer.Telefax := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Telephone := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Person_FirstName := 'MEHMET';

   Giris[0].InvoiceModel.customer.Person_FamilyName := 'GÜVERDİK';



   SetLength(Irsaliye, 1);

   Irsaliye[0] := Despatchs.Create;

   Irsaliye[0].DespatchDocumentID := 'İrsaliye No 001'; // İrsaliye Tarih..

   Irsaliye[0].DespatchDocumentIssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.Despatchs := Irsaliye;



   // ****  FATURA KALEMLERİ  *********************************************

   SetLength(FaturaKalem, 2); // Fatura Kalemi 2 ADET olduğu için ..



   // *******************************************************************************************************

   // 1.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2966.102; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 1264.24; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 2008.20; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2966.102 - 1264.24; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 306.34; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[0] := InvoiceLine.Create;

   FaturaKalem[0].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[0].Item_Name := 'FLOPPY DISK';

   FaturaKalem[0].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[0].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[0].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[0].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[0].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[0].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[0].lineTaxes := KalemVergi;

   // 1.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   // *******************************************************************************************************

   // 2.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2203.39; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 939.15; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 1491.80; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2203.39 - 939.15; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 227.56; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[1] := InvoiceLine.Create;

   FaturaKalem[1].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[1].Item_Name := 'HARD DISK';

   FaturaKalem[1].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[1].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[1].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[1].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[1].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[1].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[1].lineTaxes := KalemVergi;

   // 2.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   Giris[0].InvoiceModel.invoiceLines := FaturaKalem;

   Cevap := Servis.SendInvoiceModel(Giris);

   ShowMessage(Cevap[0].Message_);



   AppType := 3; // e Arşiv ..

   SetLength(GUIDList, 1);

   GUIDList[0] := ETTN; // '00AA0586-5437-48DF-941C-D6DECCBDC8EE';



 finally

   for Sayac := 0 to length(Giris) - 1 do

     Giris[Sayac].Free;

   for Sayac := 0 to length(Cevap) - 1 do

     Cevap[Sayac].Free;

 end;



end;



procedure TForm1.Button3Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'PDF', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.Button4Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'XML', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_ESCAPE then

   Close;

end;



procedure TForm1.FormShow(Sender: TObject);

begin

 DateTimePicker1.Date := Now - 5;

 DateTimePicker2.Date := Now;

end;



procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

var

 Str: string;

 Sl: TStringList;

begin

 Sl := TStringList.Create;

 try

   SOAPResponse.Seek(0, soFromBeginning);

   Sl.LoadFromStream(SOAPResponse);

   Str := Sl.Text;

 finally

   FreeAndNil(Sl);

 end;

 LogEkle('CEVAP OLARAK GELEN XML KODLARI' + #13#10#13#10 + Str + #13#10);

end;



procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

var

 StrList1: TStringList;

begin

 inherited;

 StrList1 := TStringList.Create;

 try

   SOAPRequest.Position := 0;

   StrList1.LoadFromStream(SOAPRequest);

   LogEkle('GÖNDERİLECEK XML KODLARI' + #13#10#13#10 + StringReplace(StrList1.Text, '><', '>' + #13#10 + '<',

     [rfReplaceAll]) + #13#10);

 finally

   StrList1.Free;

 end;

end;



procedure TForm1.LogEkle(Str1: String);

begin

 MemoLog.Lines.Add(FormatDateTime('hh:nn:ss', Now) + ' ' + Str1);

end;


end.

Test Portal adres : http://portaltest.hizliteknoloji.com.tr/...ting/login yukarıdaki kullanıcı adı ve şifre girilir.

image-5.png

image-6.png
PDF Göster butonu ile alınan ekran görüntüsü.

image-7-1024x781.png
XML İndir butonu ile alınan ekran görüntüsü

HizliService.pas dosyasını ve EXE dosyasını indirin.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla
#2
(08-07-2020, Saat: 11:22)guverdik Adlı Kullanıcıdan Alıntı:
Entegratör (Firma ve Devlet arasındaki iş/işlemleri düzenleyen) firmalar https://ebelge.gib.gov.tr/efaturaozelent...stesi.html adresinde yayınlanmaktadır. Yazılımcı ile GİB arasındaki FİRMA dır. Test hesap ve portal ları ile manuel olarak E-Fatura vs olaylarını inceleyebilirsiniz. Kodlama aşamasında oldukça ÖNEMLİ bir yeri vardır. Bu makalede Adana Hızlı Bilişim Teknolojileri.A.Ş.’ne ait https://www.hizliteknoloji.com.tr/Home/Referans ALT YAPI larını kullanarak uygulamamızı gerçekleştireceğiz. Kısaca bundan sonra adı ENTEGRATÖR olarak geçecektir. Uygulamamız iki ana kısımdan oluşacaktır. GİDEN ve GELEN faturalar. Entegratörün Web servislerini kullanacağız
HizliService.pas               : Entegratör servisi için kullanılan prosüdür ve fonksiyonları barındıran DELPHI dosyası.
Kullanıcı Adı      hizli
Şifre                      rWBDkoA6
Test Vergi No    4620553774 (Vergi No kısaca VKN diye söyleniyor)
Mail                      defaultgb@hizlibilisimteknolojileri.net (Yazılım sahibinin mail adresi)
Fatura No yapısı: Özel bir yapısı vardır. On altı karakterli olmalıdır. Örnek fatura no PRM2020000000017. ÖN EK                üç karakterli olmalıdır (PRM gibi). Sonra dört karakterli 2020 YIL ile devam eder. Kalan 9 karakter ise fatura SIRA NO dur. Bu sıra no veritabanı tarafından verilmeli ve benzersiz olmalıdır.
HTTPRIO1 Bileşeni: Entegratöre gönderilen XML yapılarını yönetir. Gelen CEVAP bilgisini de bu bileşen yönetir.
VirtualTable1 Bileşeni: Gelen veya Giden Faturaların SORGU sonuçları için kullanılır. Tipleri aşağıdadır. UniDAC

image-2-1024x647.png

DBGrid Bileşeni: VirtualTable ile alınan bilgileri göstermek için kullanılır. Uygulamanın TASARIM görüntüsü.

image-3.png
image-4.png

Kodlarımızın tamamı aşağıdadır.

unit Unit1;



interface



uses

 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ShellApi, Vcl.ComCtrls,

 Data.DB, MemDS, VirtualTable, Vcl.Grids, Vcl.DBGrids, Vcl.Menus,



 Soap.Rio, Soap.SOAPHTTPClient, Soap.InvokeRegistry, System.Net.URLClient, HizliService, XSBuiltIns;



type

 TForm1 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Edit1: TEdit;

   Label3: TLabel;

   Edit2: TEdit;

   Label4: TLabel;

   Edit3: TEdit;

   HTTPRIO1: THTTPRIO;

   MemoLog: TMemo;

   Panel2: TPanel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   ComboBox1: TComboBox;

   ComboBox2: TComboBox;

   ComboBox3: TComboBox;

   Panel3: TPanel;

   ComboBox4: TComboBox;

   DateTimePicker1: TDateTimePicker;

   DateTimePicker2: TDateTimePicker;

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Button1: TButton;

   Button3: TButton;

   Button4: TButton;

   Label8: TLabel;

   Button2: TButton;

   VirtualTable1: TVirtualTable;

   VirtualTable1AppType: TStringField;

   VirtualTable1DocumentCurrency: TStringField;

   VirtualTable1DocumentId: TStringField;

   VirtualTable1DocumentTypeCode: TStringField;

   VirtualTable1EnvelopeExp: TStringField;

   VirtualTable1EnvelopeStatus: TStringField;

   VirtualTable1EnvelopeUUID: TStringField;

   VirtualTable1IsAccount: TBooleanField;

   VirtualTable1IsArchive: TBooleanField;

   VirtualTable1IsInternetSale: TBooleanField;

   VirtualTable1IsPrinted: TBooleanField;

   VirtualTable1IsRead: TBooleanField;

   VirtualTable1IsTransferred: TBooleanField;

   VirtualTable1LocalReferenceId: TStringField;

   VirtualTable1Message: TStringField;

   VirtualTable1PayableAmount: TStringField;

   VirtualTable1ProfileId: TStringField;

   VirtualTable1SendType: TStringField;

   VirtualTable1Status: TStringField;

   VirtualTable1StatusExp: TStringField;

   VirtualTable1TargetAlias: TStringField;

   VirtualTable1TargetIdentifier: TStringField;

   VirtualTable1TargetTitle: TStringField;

   VirtualTable1TaxTotal: TStringField;

   VirtualTable1UUID: TStringField;

   VirtualTable1CancelDate: TDateTimeField;

   VirtualTable1CreateDate: TDateTimeField;

   VirtualTable1IssueDate: TDateTimeField;

   DataSource1: TDataSource;

   DBGrid1: TDBGrid;

   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

   procedure HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

   procedure LogEkle(Str1: String);

   procedure HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

   procedure FormShow(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);



 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentList2;

 AppType, I: Integer;

 StartDate: TXSDateTime;

 EndDate: TXSDateTime;

 TarihTipi: String;



begin

 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 if RadioButton1.Checked then

   TarihTipi := 'CreatedDate'

 else if RadioButton2.Checked then

   TarihTipi := 'IssueDate';



 StartDate := TXSDateTime.Create;

 EndDate := TXSDateTime.Create;

 StartDate.AsDateTime := DateTimePicker1.DateTime;

 EndDate.AsDateTime := DateTimePicker2.DateTime;



 Cevap := Servis.GetDocumentList(ComboBox4.ItemIndex + 1, TarihTipi, StartDate, EndDate, False, False,

   False, 'ALL');



 VirtualTable1.Close;

 VirtualTable1.Clear;

 VirtualTable1.Open;

 I := 0;



 TRY

   While length(Cevap.documents[I].DocumentId) <> 0 do

   begin

     VirtualTable1.Append;

     VirtualTable1AppType.AsInteger := Cevap.documents[I].AppType;

     // VirtualTable1CancelDate.AsDateTime := Cevap.documents[I].CancelDate.AsDateTime;

     VirtualTable1CreateDate.AsDateTime := Cevap.documents[I].CreatedDate.AsDateTime;

     VirtualTable1DocumentCurrency.AsString := Cevap.documents[I].DocumentCurrencyCode;

     VirtualTable1DocumentId.AsString := Cevap.documents[I].DocumentId;

     VirtualTable1DocumentTypeCode.AsString := Cevap.documents[I].DocumentTypeCode;

     VirtualTable1EnvelopeExp.AsString := Cevap.documents[I].EnvelopeExp;

     VirtualTable1EnvelopeStatus.AsInteger := Cevap.documents[I].EnvelopeStatus;

     VirtualTable1EnvelopeUUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1IsAccount.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsArchive.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsInternetSale.AsBoolean := Cevap.documents[I].IsInternetSale;

     VirtualTable1IsPrinted.AsBoolean := Cevap.documents[I].IsPrinted;

     VirtualTable1IsRead.AsBoolean := Cevap.documents[I].IsRead;

     VirtualTable1IsTransferred.AsBoolean := Cevap.documents[I].IsTransferred;

     VirtualTable1IssueDate.AsDateTime := Cevap.documents[I].IssueDate.AsDate;

     VirtualTable1LocalReferenceId.AsString := Cevap.documents[I].LocalReferenceId;

     VirtualTable1Message.AsString := Cevap.documents[I].Messsage;

     VirtualTable1ProfileId.AsString := Cevap.documents[I].ProfileID;

     VirtualTable1SendType.AsString := Cevap.documents[I].SendType;

     VirtualTable1Status.AsInteger := Cevap.documents[I].Status;

     VirtualTable1TargetAlias.AsString := Cevap.documents[I].TargetAlias;

     VirtualTable1TargetIdentifier.AsString := Cevap.documents[I].TargetIdentifier;

     VirtualTable1TargetTitle.AsString := Cevap.documents[I].TargetTitle;

     VirtualTable1PayableAmount.AsString := Cevap.documents[I].PayableAmount.DecimalString;

     VirtualTable1TaxTotal.AsString := Cevap.documents[I].TaxTotal.DecimalString;

     VirtualTable1UUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1.Post;

     Inc(I);

   end;

 EXCEPT

 END;

 VirtualTable1.Cancel;

 VirtualTable1.First;



end;



procedure TForm1.Button2Click(Sender: TObject);

var

 Servis: IHizliService;

 Giris: ArrayOfInputInvoiceModel;

 Cevap: ArrayOfOutputInvoiceModel;

 Sayac: Integer;

 Irsaliye: ArrayOfDespatchs;

 FaturaKalem: ArrayOfInvoiceLine;

 KalemVergi: ArrayOfLineTax;

 LineExtensionAmount: TXSDecimal;

 AllowanceTotalAmount: TXSDecimal;

 TaxInclusiveAmount: TXSDecimal;

 PayableAmount: TXSDecimal;

 CalculationRate: TXSDecimal;

 Quantity_Amount: TXSDecimal;

 Price_Amount: TXSDecimal;

 Allowance_Percent: TXSDecimal;

 Allowance_Amount: TXSDecimal;

 Price_Total: TXSDecimal;

 Tax_Base: TXSDecimal;

 Tax_Perc: TXSDecimal;

 Tax_Amnt: TXSDecimal;

 AppType, I: Integer;

 GUIDList: ArrayOfstring;

 Uid: TGuid;

 ETTN: String;



begin



 try



   MemoLog.Lines.Clear;



   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

   Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



   SetLength(Giris, 1);

   Giris[0] := InputInvoiceModel2.Create;



   if ComboBox1.ItemIndex = 0 then

     Giris[0].AppType := 1 // 1 efatura

   else

     Giris[0].AppType := 3; // 3 earşivfatura



   Giris[0].DestinationIdentifier := '4620553774';

   Giris[0].DestinationUrn := 'urn:mail:' + 'mehmetguverdik@gmail.com';

   Giris[0].SourceUrn := 'urn:mail:' + 'defaultgb@hizlibilisimteknolojileri.net';

   Giris[0].IsDraft := False;

   Giris[0].IsDraftSend := False;

   Giris[0].LocalId := '';

   Giris[0].UpdateDocument := False;

   Giris[0].InvoiceModel := InvoiceModel2.Create;

   Giris[0].InvoiceModel.invoiceheader := InvoiceHeader2.Create;



   CreateGuid(Uid);

   ETTN := GuidToString(Uid);

   ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);

   ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);

   Giris[0].InvoiceModel.invoiceheader.UUID := ETTN;



   Giris[0].InvoiceModel.invoiceheader.Invoice_ID := 'PRM' + '2020' + FormatFloat('000000000', random(1000));

   Giris[0].InvoiceModel.invoiceheader.IssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.IssueTime := FormatDateTime('yyyy-mm-dd hh:mm:ss',

     DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.ProfileID := ComboBox2.Text;

   Giris[0].InvoiceModel.invoiceheader.InvoiceTypeCode := ComboBox3.Text;

   Giris[0].InvoiceModel.invoiceheader.DocumentCurrencyCode := 'TRY';



   // **** FATURA ALT TOPLAM  ******************

   LineExtensionAmount := TXSDecimal.Create;

   LineExtensionAmount.AsBcd := 5169.49; // Tutar



   AllowanceTotalAmount := TXSDecimal.Create;

   AllowanceTotalAmount.AsBcd := 2203.39; // İskonto toplam



   TaxInclusiveAmount := TXSDecimal.Create;

   TaxInclusiveAmount.AsBcd := 5169.49; // Vergi Dahil Tutar



   PayableAmount := TXSDecimal.Create;

   PayableAmount.AsBcd := 3500; // Ödenecek tutar

   // ******************************************************************************************



   CalculationRate := TXSDecimal.Create;

   CalculationRate.AsBcd := 1; // kur TL için çarpan..



   Giris[0].InvoiceModel.invoiceheader.LineExtensionAmount := LineExtensionAmount; // Tutar

   Giris[0].InvoiceModel.invoiceheader.AllowanceTotalAmount := AllowanceTotalAmount; // iskonto toplamı

   Giris[0].InvoiceModel.invoiceheader.TaxInclusiveAmount := TaxInclusiveAmount; // vergi dahil tutar

   Giris[0].InvoiceModel.invoiceheader.PayableAmount := PayableAmount; // Ödenecek tutar

   Giris[0].InvoiceModel.invoiceheader.CalculationRate := CalculationRate; // döviz kuru

   Giris[0].InvoiceModel.invoiceheader.Note := 'Fatura AÇIKLAMA Bilgisi';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceId := 'İrsaliye No 001';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceDate :=

     FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime); // İrsaliye Tarih..

   Giris[0].InvoiceModel.customer := Customer2.Create;

   Giris[0].InvoiceModel.customer.IdentificationID := '4620553774'; // Vergi No = VKN ..

   Giris[0].InvoiceModel.customer.PartyName := 'Firma Adı MEHMET GÜVERDİK';

   Giris[0].InvoiceModel.customer.TaxSchemeName := 'Vergi Daire SEYHAN';

   Giris[0].InvoiceModel.customer.CountryName := 'Ülke TÜRKİYE';

   Giris[0].InvoiceModel.customer.CityName := 'ADANA';

   Giris[0].InvoiceModel.customer.CitySubdivisionName := 'SEYHAN';

   Giris[0].InvoiceModel.customer.StreetName := 'Adres SEYHAN - ADANA';

   Giris[0].InvoiceModel.customer.ElectronicMail := 'mehmetguverdik@gmail.com';

   Giris[0].InvoiceModel.customer.WebsiteURI := 'www.guverdik.com';

   Giris[0].InvoiceModel.customer.Telefax := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Telephone := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Person_FirstName := 'MEHMET';

   Giris[0].InvoiceModel.customer.Person_FamilyName := 'GÜVERDİK';



   SetLength(Irsaliye, 1);

   Irsaliye[0] := Despatchs.Create;

   Irsaliye[0].DespatchDocumentID := 'İrsaliye No 001'; // İrsaliye Tarih..

   Irsaliye[0].DespatchDocumentIssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.Despatchs := Irsaliye;



   // ****  FATURA KALEMLERİ  *********************************************

   SetLength(FaturaKalem, 2); // Fatura Kalemi 2 ADET olduğu için ..



   // *******************************************************************************************************

   // 1.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2966.102; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 1264.24; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 2008.20; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2966.102 - 1264.24; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 306.34; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[0] := InvoiceLine.Create;

   FaturaKalem[0].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[0].Item_Name := 'FLOPPY DISK';

   FaturaKalem[0].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[0].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[0].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[0].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[0].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[0].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[0].lineTaxes := KalemVergi;

   // 1.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   // *******************************************************************************************************

   // 2.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2203.39; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 939.15; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 1491.80; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2203.39 - 939.15; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 227.56; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[1] := InvoiceLine.Create;

   FaturaKalem[1].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[1].Item_Name := 'HARD DISK';

   FaturaKalem[1].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[1].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[1].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[1].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[1].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[1].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[1].lineTaxes := KalemVergi;

   // 2.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   Giris[0].InvoiceModel.invoiceLines := FaturaKalem;

   Cevap := Servis.SendInvoiceModel(Giris);

   ShowMessage(Cevap[0].Message_);



   AppType := 3; // e Arşiv ..

   SetLength(GUIDList, 1);

   GUIDList[0] := ETTN; // '00AA0586-5437-48DF-941C-D6DECCBDC8EE';



 finally

   for Sayac := 0 to length(Giris) - 1 do

     Giris[Sayac].Free;

   for Sayac := 0 to length(Cevap) - 1 do

     Cevap[Sayac].Free;

 end;



end;



procedure TForm1.Button3Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'PDF', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.Button4Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'XML', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_ESCAPE then

   Close;

end;



procedure TForm1.FormShow(Sender: TObject);

begin

 DateTimePicker1.Date := Now - 5;

 DateTimePicker2.Date := Now;

end;



procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

var

 Str: string;

 Sl: TStringList;

begin

 Sl := TStringList.Create;

 try

   SOAPResponse.Seek(0, soFromBeginning);

   Sl.LoadFromStream(SOAPResponse);

   Str := Sl.Text;

 finally

   FreeAndNil(Sl);

 end;

 LogEkle('CEVAP OLARAK GELEN XML KODLARI' + #13#10#13#10 + Str + #13#10);

end;



procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

var

 StrList1: TStringList;

begin

 inherited;

 StrList1 := TStringList.Create;

 try

   SOAPRequest.Position := 0;

   StrList1.LoadFromStream(SOAPRequest);

   LogEkle('GÖNDERİLECEK XML KODLARI' + #13#10#13#10 + StringReplace(StrList1.Text, '><', '>' + #13#10 + '<',

     [rfReplaceAll]) + #13#10);

 finally

   StrList1.Free;

 end;

end;



procedure TForm1.LogEkle(Str1: String);

begin

 MemoLog.Lines.Add(FormatDateTime('hh:nn:ss', Now) + ' ' + Str1);

end;


end.

Test Portal adres : http://portaltest.hizliteknoloji.com.tr/...ting/login yukarıdaki kullanıcı adı ve şifre girilir.

image-5.png

image-6.png
PDF Göster butonu ile alınan ekran görüntüsü.

image-7-1024x781.png
XML İndir butonu ile alınan ekran görüntüsü

HizliService.pas dosyasını ve EXE indirin.


Paylaşımınız için çok teşekkür ederim.
Çok yakında benimde kullanmam gerekecek.
Elinize emeğinize sağlık.
Mükemmel, Mümkünün Düşmanıdır 
Cevapla
#3
Merhaba,

Elinize sağlık @guverdik. E-Dönüşüm işlerine başlayacak arkadaşlar için güzel bir kaynak olmuş.

Bu tür çalışmaların artması dileğiyle...
Cevapla
#4
@guverdik hocam ellerinize sağlık.
Cevapla
#5
Katkılarınızdan dolayı teşekkür ederim @guverdik hocam.
Öğretmenlik mesleğinin en güzel yanını (öğretmek) her zanan hissetiriyorsunuz.
Cevapla
#6
(08-07-2020, Saat: 22:30)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Katkılarınızdan dolayı teşekkür ederim @guverdik hocam.
Öğretmenlik mesleğinin en güzel yanını (öğretmek) her zanan hissetiriyorsunuz.

Hepinize ben de teşekkür ederim. Bu ortamı ben de OKUL olarak görüyorum. Aynı zamanda bir çok bilgi öğrendim, daha da öğrenmek isterim. Kolay gelsin kıymetli arkadaşlarım.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla
#7
[quote pid='38771' dateline='1594280199']
Hepinize ben de teşekkür ederim. Bu ortamı ben de OKUL olarak görüyorum. Aynı zamanda bir çok bilgi öğrendim, daha da öğrenmek isterim. Kolay gelsin kıymetli arkadaşlarım.
[/quote]

@guverdik hocam... Bu kodlarda kendi kodlarımdan bazı parçalar görüyorum. Gördüm mutlu oldum. Ellerinize sağlık. Bu programın e-fatura göndermeyen sadece bağlantı kuran ilk versiyonunu Hızlı Teknoloji için ben yazmıştım. Hızlı Teknoloji Adana'mızın gayretli ÖZEL ENTEGRATÖR firmalarından biridir. Gönül rahatlığıyla çalışabilirsiniz.
WWW
Cevapla
#8
(10-07-2020, Saat: 10:08)csunguray Adlı Kullanıcıdan Alıntı: [quote pid='38771' dateline='1594280199']
Hepinize ben de teşekkür ederim. Bu ortamı ben de OKUL olarak görüyorum. Aynı zamanda bir çok bilgi öğrendim, daha da öğrenmek isterim. Kolay gelsin kıymetli arkadaşlarım.

@guverdik hocam... Bu kodlarda kendi kodlarımdan bazı parçalar görüyorum. Gördüm mutlu oldum. Ellerinize sağlık. Bu programın e-fatura göndermeyen sadece bağlantı kuran ilk versiyonunu Hızlı Teknoloji için ben yazmıştım. Hızlı Teknoloji Adana'mızın gayretli ÖZEL ENTEGRATÖR firmalarından biridir. Gönül rahatlığıyla çalışabilirsiniz.
[/quote]

Senin de ellerine sağlık @csunguray. "At ekmeği Denize BALIK bilmez se, HALIK bilir"   Shy
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla
#9
(08-07-2020, Saat: 11:22)guverdik Adlı Kullanıcıdan Alıntı:
Entegratör (Firma ve Devlet arasındaki iş/işlemleri düzenleyen) firmalar https://ebelge.gib.gov.tr/efaturaozelent...stesi.html adresinde yayınlanmaktadır. Yazılımcı ile GİB arasındaki FİRMA dır. Test hesap ve portal ları ile manuel olarak E-Fatura vs olaylarını inceleyebilirsiniz. Kodlama aşamasında oldukça ÖNEMLİ bir yeri vardır. Bu makalede Adana Hızlı Bilişim Teknolojileri.A.Ş.’ne ait https://www.hizliteknoloji.com.tr/Home/Referans ALT YAPI larını kullanarak uygulamamızı gerçekleştireceğiz. Kısaca bundan sonra adı ENTEGRATÖR olarak geçecektir. Uygulamamız iki ana kısımdan oluşacaktır. GİDEN ve GELEN faturalar. Entegratörün Web servislerini kullanacağız
HizliService.pas               : Entegratör servisi için kullanılan prosüdür ve fonksiyonları barındıran DELPHI dosyası.
Kullanıcı Adı      hizli
Şifre                      rWBDkoA6
Test Vergi No    4620553774 (Vergi No kısaca VKN diye söyleniyor)
Mail                      defaultgb@hizlibilisimteknolojileri.net (Yazılım sahibinin mail adresi)
Fatura No yapısı: Özel bir yapısı vardır. On altı karakterli olmalıdır. Örnek fatura no PRM2020000000017. ÖN EK                üç karakterli olmalıdır (PRM gibi). Sonra dört karakterli 2020 YIL ile devam eder. Kalan 9 karakter ise fatura SIRA NO dur. Bu sıra no veritabanı tarafından verilmeli ve benzersiz olmalıdır.
HTTPRIO1 Bileşeni: Entegratöre gönderilen XML yapılarını yönetir. Gelen CEVAP bilgisini de bu bileşen yönetir.
VirtualTable1 Bileşeni: Gelen veya Giden Faturaların SORGU sonuçları için kullanılır. Tipleri aşağıdadır. UniDAC

image-2-1024x647.png

DBGrid Bileşeni: VirtualTable ile alınan bilgileri göstermek için kullanılır. Uygulamanın TASARIM görüntüsü.

image-3.png
image-4.png

Kodlarımızın tamamı aşağıdadır.

unit Unit1;



interface



uses

 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ShellApi, Vcl.ComCtrls,

 Data.DB, MemDS, VirtualTable, Vcl.Grids, Vcl.DBGrids, Vcl.Menus,



 Soap.Rio, Soap.SOAPHTTPClient, Soap.InvokeRegistry, System.Net.URLClient, HizliService, XSBuiltIns;



type

 TForm1 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Edit1: TEdit;

   Label3: TLabel;

   Edit2: TEdit;

   Label4: TLabel;

   Edit3: TEdit;

   HTTPRIO1: THTTPRIO;

   MemoLog: TMemo;

   Panel2: TPanel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   ComboBox1: TComboBox;

   ComboBox2: TComboBox;

   ComboBox3: TComboBox;

   Panel3: TPanel;

   ComboBox4: TComboBox;

   DateTimePicker1: TDateTimePicker;

   DateTimePicker2: TDateTimePicker;

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Button1: TButton;

   Button3: TButton;

   Button4: TButton;

   Label8: TLabel;

   Button2: TButton;

   VirtualTable1: TVirtualTable;

   VirtualTable1AppType: TStringField;

   VirtualTable1DocumentCurrency: TStringField;

   VirtualTable1DocumentId: TStringField;

   VirtualTable1DocumentTypeCode: TStringField;

   VirtualTable1EnvelopeExp: TStringField;

   VirtualTable1EnvelopeStatus: TStringField;

   VirtualTable1EnvelopeUUID: TStringField;

   VirtualTable1IsAccount: TBooleanField;

   VirtualTable1IsArchive: TBooleanField;

   VirtualTable1IsInternetSale: TBooleanField;

   VirtualTable1IsPrinted: TBooleanField;

   VirtualTable1IsRead: TBooleanField;

   VirtualTable1IsTransferred: TBooleanField;

   VirtualTable1LocalReferenceId: TStringField;

   VirtualTable1Message: TStringField;

   VirtualTable1PayableAmount: TStringField;

   VirtualTable1ProfileId: TStringField;

   VirtualTable1SendType: TStringField;

   VirtualTable1Status: TStringField;

   VirtualTable1StatusExp: TStringField;

   VirtualTable1TargetAlias: TStringField;

   VirtualTable1TargetIdentifier: TStringField;

   VirtualTable1TargetTitle: TStringField;

   VirtualTable1TaxTotal: TStringField;

   VirtualTable1UUID: TStringField;

   VirtualTable1CancelDate: TDateTimeField;

   VirtualTable1CreateDate: TDateTimeField;

   VirtualTable1IssueDate: TDateTimeField;

   DataSource1: TDataSource;

   DBGrid1: TDBGrid;

   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

   procedure HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

   procedure LogEkle(Str1: String);

   procedure HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

   procedure FormShow(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);



 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentList2;

 AppType, I: Integer;

 StartDate: TXSDateTime;

 EndDate: TXSDateTime;

 TarihTipi: String;



begin

 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 if RadioButton1.Checked then

   TarihTipi := 'CreatedDate'

 else if RadioButton2.Checked then

   TarihTipi := 'IssueDate';



 StartDate := TXSDateTime.Create;

 EndDate := TXSDateTime.Create;

 StartDate.AsDateTime := DateTimePicker1.DateTime;

 EndDate.AsDateTime := DateTimePicker2.DateTime;



 Cevap := Servis.GetDocumentList(ComboBox4.ItemIndex + 1, TarihTipi, StartDate, EndDate, False, False,

   False, 'ALL');



 VirtualTable1.Close;

 VirtualTable1.Clear;

 VirtualTable1.Open;

 I := 0;



 TRY

   While length(Cevap.documents[I].DocumentId) <> 0 do

   begin

     VirtualTable1.Append;

     VirtualTable1AppType.AsInteger := Cevap.documents[I].AppType;

     // VirtualTable1CancelDate.AsDateTime := Cevap.documents[I].CancelDate.AsDateTime;

     VirtualTable1CreateDate.AsDateTime := Cevap.documents[I].CreatedDate.AsDateTime;

     VirtualTable1DocumentCurrency.AsString := Cevap.documents[I].DocumentCurrencyCode;

     VirtualTable1DocumentId.AsString := Cevap.documents[I].DocumentId;

     VirtualTable1DocumentTypeCode.AsString := Cevap.documents[I].DocumentTypeCode;

     VirtualTable1EnvelopeExp.AsString := Cevap.documents[I].EnvelopeExp;

     VirtualTable1EnvelopeStatus.AsInteger := Cevap.documents[I].EnvelopeStatus;

     VirtualTable1EnvelopeUUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1IsAccount.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsArchive.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsInternetSale.AsBoolean := Cevap.documents[I].IsInternetSale;

     VirtualTable1IsPrinted.AsBoolean := Cevap.documents[I].IsPrinted;

     VirtualTable1IsRead.AsBoolean := Cevap.documents[I].IsRead;

     VirtualTable1IsTransferred.AsBoolean := Cevap.documents[I].IsTransferred;

     VirtualTable1IssueDate.AsDateTime := Cevap.documents[I].IssueDate.AsDate;

     VirtualTable1LocalReferenceId.AsString := Cevap.documents[I].LocalReferenceId;

     VirtualTable1Message.AsString := Cevap.documents[I].Messsage;

     VirtualTable1ProfileId.AsString := Cevap.documents[I].ProfileID;

     VirtualTable1SendType.AsString := Cevap.documents[I].SendType;

     VirtualTable1Status.AsInteger := Cevap.documents[I].Status;

     VirtualTable1TargetAlias.AsString := Cevap.documents[I].TargetAlias;

     VirtualTable1TargetIdentifier.AsString := Cevap.documents[I].TargetIdentifier;

     VirtualTable1TargetTitle.AsString := Cevap.documents[I].TargetTitle;

     VirtualTable1PayableAmount.AsString := Cevap.documents[I].PayableAmount.DecimalString;

     VirtualTable1TaxTotal.AsString := Cevap.documents[I].TaxTotal.DecimalString;

     VirtualTable1UUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1.Post;

     Inc(I);

   end;

 EXCEPT

 END;

 VirtualTable1.Cancel;

 VirtualTable1.First;



end;



procedure TForm1.Button2Click(Sender: TObject);

var

 Servis: IHizliService;

 Giris: ArrayOfInputInvoiceModel;

 Cevap: ArrayOfOutputInvoiceModel;

 Sayac: Integer;

 Irsaliye: ArrayOfDespatchs;

 FaturaKalem: ArrayOfInvoiceLine;

 KalemVergi: ArrayOfLineTax;

 LineExtensionAmount: TXSDecimal;

 AllowanceTotalAmount: TXSDecimal;

 TaxInclusiveAmount: TXSDecimal;

 PayableAmount: TXSDecimal;

 CalculationRate: TXSDecimal;

 Quantity_Amount: TXSDecimal;

 Price_Amount: TXSDecimal;

 Allowance_Percent: TXSDecimal;

 Allowance_Amount: TXSDecimal;

 Price_Total: TXSDecimal;

 Tax_Base: TXSDecimal;

 Tax_Perc: TXSDecimal;

 Tax_Amnt: TXSDecimal;

 AppType, I: Integer;

 GUIDList: ArrayOfstring;

 Uid: TGuid;

 ETTN: String;



begin



 try



   MemoLog.Lines.Clear;



   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

   Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



   SetLength(Giris, 1);

   Giris[0] := InputInvoiceModel2.Create;



   if ComboBox1.ItemIndex = 0 then

     Giris[0].AppType := 1 // 1 efatura

   else

     Giris[0].AppType := 3; // 3 earşivfatura



   Giris[0].DestinationIdentifier := '4620553774';

   Giris[0].DestinationUrn := 'urn:mail:' + 'mehmetguverdik@gmail.com';

   Giris[0].SourceUrn := 'urn:mail:' + 'defaultgb@hizlibilisimteknolojileri.net';

   Giris[0].IsDraft := False;

   Giris[0].IsDraftSend := False;

   Giris[0].LocalId := '';

   Giris[0].UpdateDocument := False;

   Giris[0].InvoiceModel := InvoiceModel2.Create;

   Giris[0].InvoiceModel.invoiceheader := InvoiceHeader2.Create;



   CreateGuid(Uid);

   ETTN := GuidToString(Uid);

   ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);

   ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);

   Giris[0].InvoiceModel.invoiceheader.UUID := ETTN;



   Giris[0].InvoiceModel.invoiceheader.Invoice_ID := 'PRM' + '2020' + FormatFloat('000000000', random(1000));

   Giris[0].InvoiceModel.invoiceheader.IssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.IssueTime := FormatDateTime('yyyy-mm-dd hh:mm:ss',

     DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.ProfileID := ComboBox2.Text;

   Giris[0].InvoiceModel.invoiceheader.InvoiceTypeCode := ComboBox3.Text;

   Giris[0].InvoiceModel.invoiceheader.DocumentCurrencyCode := 'TRY';



   // **** FATURA ALT TOPLAM  ******************

   LineExtensionAmount := TXSDecimal.Create;

   LineExtensionAmount.AsBcd := 5169.49; // Tutar



   AllowanceTotalAmount := TXSDecimal.Create;

   AllowanceTotalAmount.AsBcd := 2203.39; // İskonto toplam



   TaxInclusiveAmount := TXSDecimal.Create;

   TaxInclusiveAmount.AsBcd := 5169.49; // Vergi Dahil Tutar



   PayableAmount := TXSDecimal.Create;

   PayableAmount.AsBcd := 3500; // Ödenecek tutar

   // ******************************************************************************************



   CalculationRate := TXSDecimal.Create;

   CalculationRate.AsBcd := 1; // kur TL için çarpan..



   Giris[0].InvoiceModel.invoiceheader.LineExtensionAmount := LineExtensionAmount; // Tutar

   Giris[0].InvoiceModel.invoiceheader.AllowanceTotalAmount := AllowanceTotalAmount; // iskonto toplamı

   Giris[0].InvoiceModel.invoiceheader.TaxInclusiveAmount := TaxInclusiveAmount; // vergi dahil tutar

   Giris[0].InvoiceModel.invoiceheader.PayableAmount := PayableAmount; // Ödenecek tutar

   Giris[0].InvoiceModel.invoiceheader.CalculationRate := CalculationRate; // döviz kuru

   Giris[0].InvoiceModel.invoiceheader.Note := 'Fatura AÇIKLAMA Bilgisi';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceId := 'İrsaliye No 001';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceDate :=

     FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime); // İrsaliye Tarih..

   Giris[0].InvoiceModel.customer := Customer2.Create;

   Giris[0].InvoiceModel.customer.IdentificationID := '4620553774'; // Vergi No = VKN ..

   Giris[0].InvoiceModel.customer.PartyName := 'Firma Adı MEHMET GÜVERDİK';

   Giris[0].InvoiceModel.customer.TaxSchemeName := 'Vergi Daire SEYHAN';

   Giris[0].InvoiceModel.customer.CountryName := 'Ülke TÜRKİYE';

   Giris[0].InvoiceModel.customer.CityName := 'ADANA';

   Giris[0].InvoiceModel.customer.CitySubdivisionName := 'SEYHAN';

   Giris[0].InvoiceModel.customer.StreetName := 'Adres SEYHAN - ADANA';

   Giris[0].InvoiceModel.customer.ElectronicMail := 'mehmetguverdik@gmail.com';

   Giris[0].InvoiceModel.customer.WebsiteURI := 'www.guverdik.com';

   Giris[0].InvoiceModel.customer.Telefax := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Telephone := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Person_FirstName := 'MEHMET';

   Giris[0].InvoiceModel.customer.Person_FamilyName := 'GÜVERDİK';



   SetLength(Irsaliye, 1);

   Irsaliye[0] := Despatchs.Create;

   Irsaliye[0].DespatchDocumentID := 'İrsaliye No 001'; // İrsaliye Tarih..

   Irsaliye[0].DespatchDocumentIssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.Despatchs := Irsaliye;



   // ****  FATURA KALEMLERİ  *********************************************

   SetLength(FaturaKalem, 2); // Fatura Kalemi 2 ADET olduğu için ..



   // *******************************************************************************************************

   // 1.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2966.102; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 1264.24; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 2008.20; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2966.102 - 1264.24; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 306.34; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[0] := InvoiceLine.Create;

   FaturaKalem[0].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[0].Item_Name := 'FLOPPY DISK';

   FaturaKalem[0].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[0].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[0].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[0].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[0].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[0].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[0].lineTaxes := KalemVergi;

   // 1.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   // *******************************************************************************************************

   // 2.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2203.39; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 939.15; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 1491.80; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2203.39 - 939.15; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 227.56; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[1] := InvoiceLine.Create;

   FaturaKalem[1].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[1].Item_Name := 'HARD DISK';

   FaturaKalem[1].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[1].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[1].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[1].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[1].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[1].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[1].lineTaxes := KalemVergi;

   // 2.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   Giris[0].InvoiceModel.invoiceLines := FaturaKalem;

   Cevap := Servis.SendInvoiceModel(Giris);

   ShowMessage(Cevap[0].Message_);



   AppType := 3; // e Arşiv ..

   SetLength(GUIDList, 1);

   GUIDList[0] := ETTN; // '00AA0586-5437-48DF-941C-D6DECCBDC8EE';



 finally

   for Sayac := 0 to length(Giris) - 1 do

     Giris[Sayac].Free;

   for Sayac := 0 to length(Cevap) - 1 do

     Cevap[Sayac].Free;

 end;



end;



procedure TForm1.Button3Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'PDF', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.Button4Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'XML', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_ESCAPE then

   Close;

end;



procedure TForm1.FormShow(Sender: TObject);

begin

 DateTimePicker1.Date := Now - 5;

 DateTimePicker2.Date := Now;

end;



procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

var

 Str: string;

 Sl: TStringList;

begin

 Sl := TStringList.Create;

 try

   SOAPResponse.Seek(0, soFromBeginning);

   Sl.LoadFromStream(SOAPResponse);

   Str := Sl.Text;

 finally

   FreeAndNil(Sl);

 end;

 LogEkle('CEVAP OLARAK GELEN XML KODLARI' + #13#10#13#10 + Str + #13#10);

end;



procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

var

 StrList1: TStringList;

begin

 inherited;

 StrList1 := TStringList.Create;

 try

   SOAPRequest.Position := 0;

   StrList1.LoadFromStream(SOAPRequest);

   LogEkle('GÖNDERİLECEK XML KODLARI' + #13#10#13#10 + StringReplace(StrList1.Text, '><', '>' + #13#10 + '<',

     [rfReplaceAll]) + #13#10);

 finally

   StrList1.Free;

 end;

end;



procedure TForm1.LogEkle(Str1: String);

begin

 MemoLog.Lines.Add(FormatDateTime('hh:nn:ss', Now) + ' ' + Str1);

end;


end.

Test Portal adres : http://portaltest.hizliteknoloji.com.tr/...ting/login yukarıdaki kullanıcı adı ve şifre girilir.

image-5.png

image-6.png
PDF Göster butonu ile alınan ekran görüntüsü.

image-7-1024x781.png
XML İndir butonu ile alınan ekran görüntüsü

HizliService.pas dosyasını ve EXE indirin.

merhaba hocam;
öncelikle yaptığınız değerli çalıma için çok teşekkür ederim.
HizliService.pas dosyasını ve EXE dosyasını tekrar yükleyebilirmisiniz. dosyaları indiremiyoruz.
WWW
Cevapla
#10
(23-11-2020, Saat: 08:34)akuyumcu63 Adlı Kullanıcıdan Alıntı:
(08-07-2020, Saat: 11:22)guverdik Adlı Kullanıcıdan Alıntı:
Entegratör (Firma ve Devlet arasındaki iş/işlemleri düzenleyen) firmalar https://ebelge.gib.gov.tr/efaturaozelent...stesi.html adresinde yayınlanmaktadır. Yazılımcı ile GİB arasındaki FİRMA dır. Test hesap ve portal ları ile manuel olarak E-Fatura vs olaylarını inceleyebilirsiniz. Kodlama aşamasında oldukça ÖNEMLİ bir yeri vardır. Bu makalede Adana Hızlı Bilişim Teknolojileri.A.Ş.’ne ait https://www.hizliteknoloji.com.tr/Home/Referans ALT YAPI larını kullanarak uygulamamızı gerçekleştireceğiz. Kısaca bundan sonra adı ENTEGRATÖR olarak geçecektir. Uygulamamız iki ana kısımdan oluşacaktır. GİDEN ve GELEN faturalar. Entegratörün Web servislerini kullanacağız
HizliService.pas               : Entegratör servisi için kullanılan prosüdür ve fonksiyonları barındıran DELPHI dosyası.
Kullanıcı Adı      hizli
Şifre                      rWBDkoA6
Test Vergi No    4620553774 (Vergi No kısaca VKN diye söyleniyor)
Mail                      defaultgb@hizlibilisimteknolojileri.net (Yazılım sahibinin mail adresi)
Fatura No yapısı: Özel bir yapısı vardır. On altı karakterli olmalıdır. Örnek fatura no PRM2020000000017. ÖN EK                üç karakterli olmalıdır (PRM gibi). Sonra dört karakterli 2020 YIL ile devam eder. Kalan 9 karakter ise fatura SIRA NO dur. Bu sıra no veritabanı tarafından verilmeli ve benzersiz olmalıdır.
HTTPRIO1 Bileşeni: Entegratöre gönderilen XML yapılarını yönetir. Gelen CEVAP bilgisini de bu bileşen yönetir.
VirtualTable1 Bileşeni: Gelen veya Giden Faturaların SORGU sonuçları için kullanılır. Tipleri aşağıdadır. UniDAC

image-2-1024x647.png

DBGrid Bileşeni: VirtualTable ile alınan bilgileri göstermek için kullanılır. Uygulamanın TASARIM görüntüsü.

image-3.png
image-4.png

Kodlarımızın tamamı aşağıdadır.

unit Unit1;



interface



uses

 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ShellApi, Vcl.ComCtrls,

 Data.DB, MemDS, VirtualTable, Vcl.Grids, Vcl.DBGrids, Vcl.Menus,



 Soap.Rio, Soap.SOAPHTTPClient, Soap.InvokeRegistry, System.Net.URLClient, HizliService, XSBuiltIns;



type

 TForm1 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Edit1: TEdit;

   Label3: TLabel;

   Edit2: TEdit;

   Label4: TLabel;

   Edit3: TEdit;

   HTTPRIO1: THTTPRIO;

   MemoLog: TMemo;

   Panel2: TPanel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   ComboBox1: TComboBox;

   ComboBox2: TComboBox;

   ComboBox3: TComboBox;

   Panel3: TPanel;

   ComboBox4: TComboBox;

   DateTimePicker1: TDateTimePicker;

   DateTimePicker2: TDateTimePicker;

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Button1: TButton;

   Button3: TButton;

   Button4: TButton;

   Label8: TLabel;

   Button2: TButton;

   VirtualTable1: TVirtualTable;

   VirtualTable1AppType: TStringField;

   VirtualTable1DocumentCurrency: TStringField;

   VirtualTable1DocumentId: TStringField;

   VirtualTable1DocumentTypeCode: TStringField;

   VirtualTable1EnvelopeExp: TStringField;

   VirtualTable1EnvelopeStatus: TStringField;

   VirtualTable1EnvelopeUUID: TStringField;

   VirtualTable1IsAccount: TBooleanField;

   VirtualTable1IsArchive: TBooleanField;

   VirtualTable1IsInternetSale: TBooleanField;

   VirtualTable1IsPrinted: TBooleanField;

   VirtualTable1IsRead: TBooleanField;

   VirtualTable1IsTransferred: TBooleanField;

   VirtualTable1LocalReferenceId: TStringField;

   VirtualTable1Message: TStringField;

   VirtualTable1PayableAmount: TStringField;

   VirtualTable1ProfileId: TStringField;

   VirtualTable1SendType: TStringField;

   VirtualTable1Status: TStringField;

   VirtualTable1StatusExp: TStringField;

   VirtualTable1TargetAlias: TStringField;

   VirtualTable1TargetIdentifier: TStringField;

   VirtualTable1TargetTitle: TStringField;

   VirtualTable1TaxTotal: TStringField;

   VirtualTable1UUID: TStringField;

   VirtualTable1CancelDate: TDateTimeField;

   VirtualTable1CreateDate: TDateTimeField;

   VirtualTable1IssueDate: TDateTimeField;

   DataSource1: TDataSource;

   DBGrid1: TDBGrid;

   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

   procedure HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

   procedure LogEkle(Str1: String);

   procedure HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

   procedure FormShow(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);



 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentList2;

 AppType, I: Integer;

 StartDate: TXSDateTime;

 EndDate: TXSDateTime;

 TarihTipi: String;



begin

 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 if RadioButton1.Checked then

   TarihTipi := 'CreatedDate'

 else if RadioButton2.Checked then

   TarihTipi := 'IssueDate';



 StartDate := TXSDateTime.Create;

 EndDate := TXSDateTime.Create;

 StartDate.AsDateTime := DateTimePicker1.DateTime;

 EndDate.AsDateTime := DateTimePicker2.DateTime;



 Cevap := Servis.GetDocumentList(ComboBox4.ItemIndex + 1, TarihTipi, StartDate, EndDate, False, False,

   False, 'ALL');



 VirtualTable1.Close;

 VirtualTable1.Clear;

 VirtualTable1.Open;

 I := 0;



 TRY

   While length(Cevap.documents[I].DocumentId) <> 0 do

   begin

     VirtualTable1.Append;

     VirtualTable1AppType.AsInteger := Cevap.documents[I].AppType;

     // VirtualTable1CancelDate.AsDateTime := Cevap.documents[I].CancelDate.AsDateTime;

     VirtualTable1CreateDate.AsDateTime := Cevap.documents[I].CreatedDate.AsDateTime;

     VirtualTable1DocumentCurrency.AsString := Cevap.documents[I].DocumentCurrencyCode;

     VirtualTable1DocumentId.AsString := Cevap.documents[I].DocumentId;

     VirtualTable1DocumentTypeCode.AsString := Cevap.documents[I].DocumentTypeCode;

     VirtualTable1EnvelopeExp.AsString := Cevap.documents[I].EnvelopeExp;

     VirtualTable1EnvelopeStatus.AsInteger := Cevap.documents[I].EnvelopeStatus;

     VirtualTable1EnvelopeUUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1IsAccount.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsArchive.AsBoolean := Cevap.documents[I].IsAccount;

     VirtualTable1IsInternetSale.AsBoolean := Cevap.documents[I].IsInternetSale;

     VirtualTable1IsPrinted.AsBoolean := Cevap.documents[I].IsPrinted;

     VirtualTable1IsRead.AsBoolean := Cevap.documents[I].IsRead;

     VirtualTable1IsTransferred.AsBoolean := Cevap.documents[I].IsTransferred;

     VirtualTable1IssueDate.AsDateTime := Cevap.documents[I].IssueDate.AsDate;

     VirtualTable1LocalReferenceId.AsString := Cevap.documents[I].LocalReferenceId;

     VirtualTable1Message.AsString := Cevap.documents[I].Messsage;

     VirtualTable1ProfileId.AsString := Cevap.documents[I].ProfileID;

     VirtualTable1SendType.AsString := Cevap.documents[I].SendType;

     VirtualTable1Status.AsInteger := Cevap.documents[I].Status;

     VirtualTable1TargetAlias.AsString := Cevap.documents[I].TargetAlias;

     VirtualTable1TargetIdentifier.AsString := Cevap.documents[I].TargetIdentifier;

     VirtualTable1TargetTitle.AsString := Cevap.documents[I].TargetTitle;

     VirtualTable1PayableAmount.AsString := Cevap.documents[I].PayableAmount.DecimalString;

     VirtualTable1TaxTotal.AsString := Cevap.documents[I].TaxTotal.DecimalString;

     VirtualTable1UUID.AsString := Cevap.documents[I].UUID;

     VirtualTable1.Post;

     Inc(I);

   end;

 EXCEPT

 END;

 VirtualTable1.Cancel;

 VirtualTable1.First;



end;



procedure TForm1.Button2Click(Sender: TObject);

var

 Servis: IHizliService;

 Giris: ArrayOfInputInvoiceModel;

 Cevap: ArrayOfOutputInvoiceModel;

 Sayac: Integer;

 Irsaliye: ArrayOfDespatchs;

 FaturaKalem: ArrayOfInvoiceLine;

 KalemVergi: ArrayOfLineTax;

 LineExtensionAmount: TXSDecimal;

 AllowanceTotalAmount: TXSDecimal;

 TaxInclusiveAmount: TXSDecimal;

 PayableAmount: TXSDecimal;

 CalculationRate: TXSDecimal;

 Quantity_Amount: TXSDecimal;

 Price_Amount: TXSDecimal;

 Allowance_Percent: TXSDecimal;

 Allowance_Amount: TXSDecimal;

 Price_Total: TXSDecimal;

 Tax_Base: TXSDecimal;

 Tax_Perc: TXSDecimal;

 Tax_Amnt: TXSDecimal;

 AppType, I: Integer;

 GUIDList: ArrayOfstring;

 Uid: TGuid;

 ETTN: String;



begin



 try



   MemoLog.Lines.Clear;



   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

   Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



   SetLength(Giris, 1);

   Giris[0] := InputInvoiceModel2.Create;



   if ComboBox1.ItemIndex = 0 then

     Giris[0].AppType := 1 // 1 efatura

   else

     Giris[0].AppType := 3; // 3 earşivfatura



   Giris[0].DestinationIdentifier := '4620553774';

   Giris[0].DestinationUrn := 'urn:mail:' + 'mehmetguverdik@gmail.com';

   Giris[0].SourceUrn := 'urn:mail:' + 'defaultgb@hizlibilisimteknolojileri.net';

   Giris[0].IsDraft := False;

   Giris[0].IsDraftSend := False;

   Giris[0].LocalId := '';

   Giris[0].UpdateDocument := False;

   Giris[0].InvoiceModel := InvoiceModel2.Create;

   Giris[0].InvoiceModel.invoiceheader := InvoiceHeader2.Create;



   CreateGuid(Uid);

   ETTN := GuidToString(Uid);

   ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);

   ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);

   Giris[0].InvoiceModel.invoiceheader.UUID := ETTN;



   Giris[0].InvoiceModel.invoiceheader.Invoice_ID := 'PRM' + '2020' + FormatFloat('000000000', random(1000));

   Giris[0].InvoiceModel.invoiceheader.IssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.IssueTime := FormatDateTime('yyyy-mm-dd hh:mm:ss',

     DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.invoiceheader.ProfileID := ComboBox2.Text;

   Giris[0].InvoiceModel.invoiceheader.InvoiceTypeCode := ComboBox3.Text;

   Giris[0].InvoiceModel.invoiceheader.DocumentCurrencyCode := 'TRY';



   // **** FATURA ALT TOPLAM  ******************

   LineExtensionAmount := TXSDecimal.Create;

   LineExtensionAmount.AsBcd := 5169.49; // Tutar



   AllowanceTotalAmount := TXSDecimal.Create;

   AllowanceTotalAmount.AsBcd := 2203.39; // İskonto toplam



   TaxInclusiveAmount := TXSDecimal.Create;

   TaxInclusiveAmount.AsBcd := 5169.49; // Vergi Dahil Tutar



   PayableAmount := TXSDecimal.Create;

   PayableAmount.AsBcd := 3500; // Ödenecek tutar

   // ******************************************************************************************



   CalculationRate := TXSDecimal.Create;

   CalculationRate.AsBcd := 1; // kur TL için çarpan..



   Giris[0].InvoiceModel.invoiceheader.LineExtensionAmount := LineExtensionAmount; // Tutar

   Giris[0].InvoiceModel.invoiceheader.AllowanceTotalAmount := AllowanceTotalAmount; // iskonto toplamı

   Giris[0].InvoiceModel.invoiceheader.TaxInclusiveAmount := TaxInclusiveAmount; // vergi dahil tutar

   Giris[0].InvoiceModel.invoiceheader.PayableAmount := PayableAmount; // Ödenecek tutar

   Giris[0].InvoiceModel.invoiceheader.CalculationRate := CalculationRate; // döviz kuru

   Giris[0].InvoiceModel.invoiceheader.Note := 'Fatura AÇIKLAMA Bilgisi';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceId := 'İrsaliye No 001';

   Giris[0].InvoiceModel.invoiceheader.OrderReferenceDate :=

     FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime); // İrsaliye Tarih..

   Giris[0].InvoiceModel.customer := Customer2.Create;

   Giris[0].InvoiceModel.customer.IdentificationID := '4620553774'; // Vergi No = VKN ..

   Giris[0].InvoiceModel.customer.PartyName := 'Firma Adı MEHMET GÜVERDİK';

   Giris[0].InvoiceModel.customer.TaxSchemeName := 'Vergi Daire SEYHAN';

   Giris[0].InvoiceModel.customer.CountryName := 'Ülke TÜRKİYE';

   Giris[0].InvoiceModel.customer.CityName := 'ADANA';

   Giris[0].InvoiceModel.customer.CitySubdivisionName := 'SEYHAN';

   Giris[0].InvoiceModel.customer.StreetName := 'Adres SEYHAN - ADANA';

   Giris[0].InvoiceModel.customer.ElectronicMail := 'mehmetguverdik@gmail.com';

   Giris[0].InvoiceModel.customer.WebsiteURI := 'www.guverdik.com';

   Giris[0].InvoiceModel.customer.Telefax := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Telephone := '+90 5XX XXX XX XX';

   Giris[0].InvoiceModel.customer.Person_FirstName := 'MEHMET';

   Giris[0].InvoiceModel.customer.Person_FamilyName := 'GÜVERDİK';



   SetLength(Irsaliye, 1);

   Irsaliye[0] := Despatchs.Create;

   Irsaliye[0].DespatchDocumentID := 'İrsaliye No 001'; // İrsaliye Tarih..

   Irsaliye[0].DespatchDocumentIssueDate := FormatDateTime('yyyy-mm-dd', DateTimePicker1.DateTime);

   Giris[0].InvoiceModel.Despatchs := Irsaliye;



   // ****  FATURA KALEMLERİ  *********************************************

   SetLength(FaturaKalem, 2); // Fatura Kalemi 2 ADET olduğu için ..



   // *******************************************************************************************************

   // 1.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2966.102; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 1264.24; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 2008.20; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2966.102 - 1264.24; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 306.34; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[0] := InvoiceLine.Create;

   FaturaKalem[0].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[0].Item_Name := 'FLOPPY DISK';

   FaturaKalem[0].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[0].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[0].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[0].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[0].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[0].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[0].lineTaxes := KalemVergi;

   // 1.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   // *******************************************************************************************************

   // 2.SATIR FATURA KALEMİ  ***********

   Quantity_Amount := TXSDecimal.Create;

   Quantity_Amount.AsBcd := 1; // MIKTAR ..

   Price_Amount := TXSDecimal.Create;

   Price_Amount.AsBcd := 2203.39; // TUTAR ..

   Allowance_Percent := TXSDecimal.Create;

   Allowance_Percent.AsBcd := 42.62; // İSKONTO YUZDE ..

   Allowance_Amount := TXSDecimal.Create;

   Allowance_Amount.AsBcd := 939.15; // ISKONTO TUTAR ..

   Price_Total := TXSDecimal.Create;

   Price_Total.AsBcd := 1491.80; // TOPLAM ..



   Tax_Base := TXSDecimal.Create;

   Tax_Base.AsBcd := 2203.39 - 939.15; // TUTAR - ISKONTO_TUTAR ..

   Tax_Perc := TXSDecimal.Create;

   Tax_Perc.AsBcd := 18; // KDV YUZDE ..

   Tax_Amnt := TXSDecimal.Create;

   Tax_Amnt.AsBcd := 227.56; // KDV TUTAR ..

   SetLength(KalemVergi, 1); // Satırda ikinci bir VERGI varsa. O Zaman 2 ..

   KalemVergi[0] := LineTax.Create;

   KalemVergi[0].Tax_Code := '0015'; // VERGI KODU, 2. Vergi ÖRNEK ÖTV = 9015 ..

   KalemVergi[0].Tax_Name := 'KDV'; // VERGI ADI ..

   KalemVergi[0].Tax_Base := Tax_Base; // VERGI MATRAH ..

   KalemVergi[0].Tax_Perc := Tax_Perc; // VERGI ORAN ..

   KalemVergi[0].Tax_Amnt := Tax_Amnt; // VERGI TUTAR ..

   KalemVergi[0].Tax_Exem_Code := ''; // istisna kodu KDV TUTARI  0 ise doldurulmaz

   KalemVergi[0].Tax_Exem := ''; // istisna açıklması KDV TUTARI  0 ise doldurulmalı



   FaturaKalem[1] := InvoiceLine.Create;

   FaturaKalem[1].ID := 1; // FATURA KALEM SATIR NO ..

   FaturaKalem[1].Item_Name := 'HARD DISK';

   FaturaKalem[1].Quantity_Amount := Quantity_Amount; // miktar

   FaturaKalem[1].Price_Amount := Price_Amount; // fiyat

   FaturaKalem[1].Quantity_Unit_User := 'C62'; // birim  AC62 = ADET ..

   FaturaKalem[1].Allowance_Percent := Allowance_Percent; // iskonto oranı

   FaturaKalem[1].Allowance_Amount := Allowance_Amount; // iskonto tutarı

   FaturaKalem[1].Price_Total := Price_Total; // toplam tutar

   FaturaKalem[1].lineTaxes := KalemVergi;

   // 2.SATIR FATURA KALEMİ SONU ***********

   // *******************************************************************************************************



   Giris[0].InvoiceModel.invoiceLines := FaturaKalem;

   Cevap := Servis.SendInvoiceModel(Giris);

   ShowMessage(Cevap[0].Message_);



   AppType := 3; // e Arşiv ..

   SetLength(GUIDList, 1);

   GUIDList[0] := ETTN; // '00AA0586-5437-48DF-941C-D6DECCBDC8EE';



 finally

   for Sayac := 0 to length(Giris) - 1 do

     Giris[Sayac].Free;

   for Sayac := 0 to length(Cevap) - 1 do

     Cevap[Sayac].Free;

 end;



end;



procedure TForm1.Button3Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'PDF', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'PDF'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.Button4Click(Sender: TObject);

var

 Servis: IHizliService;

 Cevap: DocumentContent2;

 ETTN: String;

 dosyayaz: TFileStream;

begin



 MemoLog.Lines.Clear;



 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := Edit2.Text;

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Edit3.Text;

 Servis := GetIHizliService(False, Edit1.Text, HTTPRIO1);



 ETTN := VirtualTable1UUID.AsString;

 Cevap := Servis.GetDocumentFile(ComboBox4.ItemIndex + 1, ETTN, 'XML', False);



 if Cevap.IsSucceeded then

 begin

   dosyayaz := TFileStream.Create(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML', fmCreate);

   dosyayaz.Write(Cevap.DocumentFile, length(Cevap.DocumentFile));

   dosyayaz.Free;

   ShellExecute(Handle, 'open', PWideChar(ExtractFilePath(Application.ExeName) + ETTN + '.' + 'XML'), nil,

     nil, SW_SHOWNORMAL);

 end else begin

   ShowMessage('Baaşrısız');

 end;



end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_ESCAPE then

   Close;

end;



procedure TForm1.FormShow(Sender: TObject);

begin

 DateTimePicker1.Date := Now - 5;

 DateTimePicker2.Date := Now;

end;



procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);

var

 Str: string;

 Sl: TStringList;

begin

 Sl := TStringList.Create;

 try

   SOAPResponse.Seek(0, soFromBeginning);

   Sl.LoadFromStream(SOAPResponse);

   Str := Sl.Text;

 finally

   FreeAndNil(Sl);

 end;

 LogEkle('CEVAP OLARAK GELEN XML KODLARI' + #13#10#13#10 + Str + #13#10);

end;



procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);

var

 StrList1: TStringList;

begin

 inherited;

 StrList1 := TStringList.Create;

 try

   SOAPRequest.Position := 0;

   StrList1.LoadFromStream(SOAPRequest);

   LogEkle('GÖNDERİLECEK XML KODLARI' + #13#10#13#10 + StringReplace(StrList1.Text, '><', '>' + #13#10 + '<',

     [rfReplaceAll]) + #13#10);

 finally

   StrList1.Free;

 end;

end;



procedure TForm1.LogEkle(Str1: String);

begin

 MemoLog.Lines.Add(FormatDateTime('hh:nn:ss', Now) + ' ' + Str1);

end;


end.

Test Portal adres : http://portaltest.hizliteknoloji.com.tr/...ting/login yukarıdaki kullanıcı adı ve şifre girilir.

image-5.png

image-6.png
PDF Göster butonu ile alınan ekran görüntüsü.

image-7-1024x781.png
XML İndir butonu ile alınan ekran görüntüsü

HizliService.pas dosyasını ve EXE indirin.

merhaba hocam;
öncelikle yaptığınız değerli çalıma için çok teşekkür ederim.
HizliService.pas dosyasını ve EXE dosyasını tekrar yükleyebilirmisiniz. dosyaları indiremiyoruz.



Güncellendi. Kolay gelsin.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Multi Device uygulaması ile WEB SİTE'sinin html içerik bilgisini almak guverdik 0 159 24-04-2021, Saat: 11:59
Son Yorum: guverdik
  eFatura Entegratör Firmaları MuhammedYasir 6 768 05-04-2021, Saat: 21:41
Son Yorum: MuhammedYasir
  Fastreport e-fatura dizaynı yapmak btnClick 4 1.408 16-10-2020, Saat: 14:12
Son Yorum: delphicim
  Delphi ile e-Fatura Entegrasyon guverdik 37 11.068 29-06-2020, Saat: 21:04
Son Yorum: engerex
  Microsoft Outlook Takvim Uygulaması itsmylife38 2 1.337 05-12-2019, Saat: 16:08
Son Yorum: itsmylife38



Konuyu Okuyanlar: 1 Ziyaretçi