Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi ile e-Fatura Entegrasyon
#1
Merhaba arkadaşlar Delphi ile e-Fatura entegrasyonu hakkında bilgilerini ve kodlamalarını paylaşabilecek arkadaşlarımız var mıdır. Stok, Cari, Fatura kısımlarını kodladım. Online ve mobile destekli. Fakat e-Fatura kısmında takıldım. Arkadaşım olan firmanın e-Arsiv Portal giriş yetkileri var. Kamu Sertifikasyon Merkezinde bir örnek göndermiş ama üyelik onay sürecindeyim henüz bakamadım. (https://yazilim.kamusm.gov.tr/?q=tr/node/14/surum). Şimdiden teşekkür eder yardımlarınızı beklerim.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla
#2
(13-06-2020, Saat: 15:01)guverdik Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar Delphi ile e-Fatura entegrasyonu hakkında bilgilerini ve kodlamalarını paylaşabilecek arkadaşlarımız var mıdır. Stok, Cari, Fatura kısımlarını kodladım. Online ve mobile destekli. Fakat e-Fatura kısmında takıldım. Arkadaşım olan firmanın e-Arsiv Portal giriş yetkileri var. Kamu Sertifikasyon Merkezinde bir örnek göndermiş ama üyelik onay sürecindeyim henüz bakamadım. (https://yazilim.kamusm.gov.tr/?q=tr/node/14/surum). Şimdiden teşekkür eder yardımlarınızı beklerim.

Hocam merhaba,

Sorduğunuz soruyla ilgili hep yarım çözümler mevcut, bilenlerde malesef bu konuda bir makale şeklinde paylaşmıyorlar. Bu konu yakın zamanda özelde bana da soruldu, piyasadaki neredeyse en büyük ERP firmaları Delphi ile yazılmış olmasına rağmen çoğu entegratör firmanın diğer dillerde açık kaynak kod projeleri varken Delphi ile yok malesef.

Burada @mkysoft  paylaştığı bir çözüm var. Bu konuda iletişim problemi var diye düşünüyorum, yoksa birçok kişinin şuan ihtiyacı olan bir konu.

İyi çalışamlar.
Cevapla
#3
Star 
Bu başlığı not edelim.
Makale seviyesinde kod örnekleri ve cevap bekliyorum. Idea
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#4
Burada çıkacak çözümlerin, platform bağımsız hale dönüşmesine mani yok.

Delphi her platform ile konuşabilen bir yapı.

Gerekirse masa üzeri sunucu modülü yazar rest vb ile, o da maliyetli bulundu taa ki PHP yakasına taşır yine IOS / Android desteği bulunur.
(PHP örneğini crypto sign için yerel kütüphaneleri olduğundan verdim)


EKLEME :
Bu cevaptan önce bir yorum vardı ismini vermeyeyim mesajı görecektir, yazarı mesajını silmiş olduğu için bu mesaj havada kaldı. Silmeden önce cevap yazana bildirmesi daha etik olurdu. Flooding yapmış duruma düşmek istemem.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#5
(14-06-2020, Saat: 11:07)mrmarman Adlı Kullanıcıdan Alıntı: Burada çıkacak çözümlerin, platform bağımsız hale dönüşmesine mani yok.

Delphi her platform ile konuşabilen bir yapı.

Gerekirse masa üzeri sunucu modülü yazar rest vb ile, o da maliyetli bulundu taa ki PHP yakasına taşır yine IOS / Android desteği bulunur.
(PHP örneğini crypto sign için yerel kütüphaneleri olduğundan verdim)


EKLEME :
Bu cevaptan önce bir yorum vardı ismini vermeyeyim mesajı görecektir, yazarı mesajını silmiş olduğu için bu mesaj havada kaldı. Silmeden önce cevap yazana bildirmesi daha etik olurdu. Flooding yapmış duruma düşmek istemem.

Mesajın ne olduğu yada neden silindiğini merak ettim. Exclamation

@mrmarman bey'in dediği gibi platform bağımsız bir proje belkide çok satılabilir bir ürün olabilir. (Sanırım 7. ayda E-İrsaliye geçme zorunluğu başlıyor çok büyük bir ihtiyaç şu durumda)

Basit bir mantıkla bu işin çözülebileceğini düşünüyorum.
Client tarafında 
-Başlık Tablo ve Detay Tablo gönderilmesi (Bu kadar)

Server Tarafında;
-E-Fatura'yı işleyen ana omurganın olması
-Gelen faturalar'ı Gönderme / Listeleme
-Giden faturaları Gönderme / Listeleme
-Faturaları PDF / XML / XLSX olarak gönderme.
-Fatura iptali
-Mail gönderimi

Bu şekildeki basit bir yapı ile çok kolay çözülecektir. Diğer türlü her entegratör'ün API'si ile her yazılımcının ayrı ayrı uğraşıyor olması hem zaman hemde ücret olarak mümkün olmuyor. (Birçok ERP firması bile sadece birkaç entegratöre entegre olabiliyor, diğer türlü çok maliyetli oluyor)
Cevapla
#6
Merhaba,

E-Arşiv' i de unutmamalıyız. Sonrasında E-İrsaliye, vs yapılar da eklenmeli.

İyi çalışmalar dilerim.
Cevapla
#7
Delphi yazılmış e fatura oluşturma kodları mevcut aslında bir ara kullanmıştım. XML Dosyayı oluşturum entrator firma servisi göndermek şeklinde çalışılabilir.

https://github.com/isisedonusum
Cevapla
#8
(14-06-2020, Saat: 22:54)nguzeller Adlı Kullanıcıdan Alıntı: Delphi yazılmış e fatura oluşturma kodları mevcut aslında bir ara kullanmıştım. XML Dosyayı oluşturum entrator firma servisi göndermek şeklinde çalışılabilir.

https://github.com/isisedonusum

@nguzeller arkadaşımızın da bahsettiği @mkysoft un zannedersem kodladığı örneklerden giderek Delphi RIO ve SYDNEY için yeniden derleyip çalıştırdığım bir örneği paylaşmak istiyorum. Bir kaç saatimi aldı ama çalıştırabildim. Bazı noktalar varmış onları öğrendim. Öncelikle

Delphinin    C:\Program Files (x86)\Embarcadero\Studio\21.0\source\soap    yolundaki   Soap.SOAPHTTPTrans.pas  isimli dosyayı projenizin klasörüne kopyalayın. Buradan indireceğiniz projede de görebilirsiniz. Tek eksik yanı, isis bilişim galiba entegratör firma. O firmadan alınacak olan KULLANICI_ADI ve SIFRE. E-Fatura olayı şimdilik bu kadar. Arkadaşlarında bahsettiği gibi dahaE-IRSALIYE vs. var eğer bu işler için grub çalışması olursa severek  çalışmak isterim. Tüm kodlamaları da bu FORUMDA yayınlayalım.

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs,

 XMLDoc, XMLIntf, SOAPHttpClient, Types, InvokeRegistry, WinInet, Rio,
 Vcl.ComCtrls, Vcl.StdCtrls, TaxPayerQuery, EInvoiceEasy, Soap.SOAPHTTPTrans;

type
 TForm1 = class(TForm)
   PageControl1: TPageControl;
   TabSheet1: TTabSheet;
   TabSheet2: TTabSheet;
   TabSheet3: TTabSheet;
   TabSheet4: TTabSheet;
   txtVKN: TEdit;
   txtUser: TEdit;
   txtPass: TEdit;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label1: TLabel;
   txtETTN: TEdit;
   Button1: TButton;
   Button2: TButton;
   Label5: TLabel;
   Edit1: TEdit;
   Button3: TButton;
   Button4: TButton;
   Memo1: TMemo;
   OpenDialog1: TOpenDialog;
   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

const
 PR_cbc = 'cbc';
 NS_cbc = 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2';
 PR_cac = 'cac';
 NS_cac = 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2';

implementation

{$R *.dfm}

procedure ChangeNode(parent: IXMLNode; name: String; namespace: String; value: String);
var
 node: IXMLNode;
begin
 node := parent.ChildNodes.FindNode(name, namespace);
 if node = nil then
   exit;
 if value = '' then
 begin
   parent.ChildNodes.Remove(node);
   exit;
 end;
 node.Text := value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 doc: IXMLDocument;
 parent: IXMLNode;

 faturatipi: IXMLNode;
 musteri: IXMLNode;

 node: IXMLNode;
 new: IXMLNode;

 Uid: TGuid;
 ETTN: String;
begin
 doc := LoadXMLDocument('base.xml');

 parent := doc.DocumentElement;

 // ETTN
 CreateGuid(Uid);
 ETTN := GuidToString(Uid);
 ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);
 ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);
 ChangeNode(parent, 'UUID', NS_cbc, ETTN);
 // fatura no
 ChangeNode(parent, 'ID', NS_cbc, 'ISS2016000000001');

 // fatura tipi
 faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
 faturatipi.Text := 'SATIS';

 // müşteri
 musteri := parent.ChildNodes.FindNode('AccountingSupplierParty', NS_cac);

 // Fatura notu ekle
 new := doc.CreateElement(PR_cbc + ':Note', NS_cbc);
 new.Text := 'Fatura notu';
 new.Attributes['languageID'] := 'tr-TR';
 parent.ChildNodes.Insert(parent.ChildNodes.IndexOf(faturatipi) + 1, new);

 // Dosyaya kaydet
 doc.SaveToFile('sample.xml');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Service: IEasy;
 HTTPRIO1: THTTPRIO;

 Response: Contracts_ResponseType;
 Data: TByteDynArray;
 afile: file of byte;
 i: Integer;

begin
 if OpenDialog1.Execute() = false then
   exit;
 AssignFile(afile, OpenDialog1.FileName);
 Reset(afile);
 SetLength(Data, FileSize(afile));
 For i := 1 to FileSize(afile) do
   Read(afile, Data[i - 1]);
 CloseFile(afile);

 HTTPRIO1 := THTTPRIO.Create(Form1);
 HTTPRIO1.HTTPWebNode.UserName := '4660392430';
 HTTPRIO1.HTTPWebNode.Password := 'pass';

 Service := GetIEasy(false, 'http://erptestep.isisbilisim.com.tr/EInvoiceEasy.svc', HTTPRIO1);

 try
   Response := Service.SendInvoice('4660392430', '', '', Data);
   if Response.Status = OK then
   begin
     txtETTN.Text := Response.ETTN;
     ShowMessage(Response.ID);
     exit;
   end;
   ShowMessage(Response.GIBMessage);
 Except
   // özel entegratörden gelen hata mesajı
   on E: ERemotableException do
     MessageDlg(E.Message, mtError, [mbOk], 0);
   on E: Exception do
     MessageDlg(E.Message, mtError, [mbOk], 0);
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 Service: IEasy;
 HTTPRIO1: THTTPRIO;

 Response: ArrayOfstring;
 i: integer;
begin
 Memo1.Lines.Clear();

 HTTPRIO1 := THTTPRIO.Create(Form1);

 Service := GetIEasy(false, 'http://erptestep.isisbilisim.com.tr/EInvoiceEasy.svc', HTTPRIO1);
 try
   Response := Service.GetPostboxList(Edit1.Text);
   for i := Low(Response) to High(Response) do
   begin
     Memo1.Lines.Add(Response[i])
   end;
 Except
   // özel entegratörden gelen hata mesajı
   on E: ERemotableException do
     MessageDlg(E.Message, mtError, [mbOk], 0);
   on E: Exception do
     MessageDlg(E.Message, mtError, [mbOk], 0);
 end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 Service: ITaxPayerQuery;
 HTTPRIO1: THTTPRIO;

 Response: ArrayOfUser;
 Request: TaxPayerQuery.ArrayOfstring;
 i: integer;
begin
 Memo1.Lines.Clear();

 HTTPRIO1 := THTTPRIO.Create(Form1);
// HTTPRIO1.HTTPWebNode.OnBeforePost := HTTPRIOHTTPWebNode1BeforePost;

 Service := GetITaxPayerQuery(false,
   'http://musteritestws.isisbilisim.com.tr/services/TaxPayerQuery.svc', HTTPRIO1);
 try
   Response := Service.GetActiveList();
   Memo1.Lines.Add(Format('Bulunan kayıt sayısı: %d', [Length(Response)]));
   for i := Low(Response) to High(Response) do
   begin
     Memo1.Lines.Add(Response[i].Identifier + ' ' + Response[i].Alias + ' ' + Response[i].Title)
   end;
 Except
   // özel entegratörden gelen hata mesajı
   on E: ERemotableException do
     MessageDlg(E.Message, mtError, [mbOk], 0);
   on E: Exception do
     MessageDlg(E.Message, mtError, [mbOk], 0);
 end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if Application.MessageBox('Programdan çıkmak istiyormusunuz.', 'Programdan Çıkış', mb_YesNo) = IdYes
 then
 begin
   Halt;
 end
 else
   Abort;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = VK_ESCAPE then
   Close;
end;

procedure TForm1.HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
const
 INTERNET_OPTION_HTTP_DECODING = 65;
 contentEncodingHeader = 'Accept-Encoding: gzip, deflate';
var
 Flag: LongBool;
begin
 Flag := True;
 HttpAddRequestHeaders(Data, PChar(contentEncodingHeader), Length(contentEncodingHeader), HTTP_ADDREQ_FLAG_ADD);
 InternetSetOption(Data, INTERNET_OPTION_HTTP_DECODING, PChar(@Flag), SizeOf(Flag));
end;

end.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla
#9
isis bilişim ile çalışmak zorunda değilsin önemli konu gönderilecek XML dosyasını oluşturmak, daha sonra çalıştığın firma servisleri üzerinden oluşturduğun dosyayı göndermek. aşağıdaki işlem ile dosyayı oluşturabilirsin.

procedure TForm1.Button1Click(Sender: TObject);
var
 doc: IXMLDocument;
 parent: IXMLNode;
 
 faturatipi: IXMLNode;
 musteri: IXMLNode;
 
 node: IXMLNode;
 new: IXMLNode;
 
 Uid: TGuid;
 ETTN: String;
begin
 doc := LoadXMLDocument('base.xml');
 
 parent := doc.DocumentElement;
 
 // ETTN
 CreateGuid(Uid);
 ETTN := GuidToString(Uid);
 ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);
 ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);
 ChangeNode(parent, 'UUID', NS_cbc, ETTN);
 // fatura no
 ChangeNode(parent, 'ID', NS_cbc, 'ISS2016000000001');
 
 // fatura tipi
 faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
 faturatipi.Text := 'SATIS';
 
 // müşteri
 musteri := parent.ChildNodes.FindNode('AccountingSupplierParty', NS_cac);
 
 // Fatura notu ekle
 new := doc.CreateElement(PR_cbc + ':Note', NS_cbc);
 new.Text := 'Fatura notu';
 new.Attributes['languageID'] := 'tr-TR';
 parent.ChildNodes.Insert(parent.ChildNodes.IndexOf(faturatipi) + 1, new);
 
 // Dosyaya kaydet
 doc.SaveToFile('sample.xml');
end;
Cevapla
#10
(14-06-2020, Saat: 23:39)nguzeller Adlı Kullanıcıdan Alıntı: isis bilişim ile çalışmak zorunda değilsin önemli konu gönderilecek XML dosyasını oluşturmak, daha sonra çalıştığın firma servisleri üzerinden oluşturduğun dosyayı göndermek. aşağıdaki işlem ile dosyayı oluşturabilirsin.

procedure TForm1.Button1Click(Sender: TObject);
var
 doc: IXMLDocument;
 parent: IXMLNode;
 
 faturatipi: IXMLNode;
 musteri: IXMLNode;
 
 node: IXMLNode;
 new: IXMLNode;
 
 Uid: TGuid;
 ETTN: String;
begin
 doc := LoadXMLDocument('base.xml');
 
 parent := doc.DocumentElement;
 
 // ETTN
 CreateGuid(Uid);
 ETTN := GuidToString(Uid);
 ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);
 ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);
 ChangeNode(parent, 'UUID', NS_cbc, ETTN);
 // fatura no
 ChangeNode(parent, 'ID', NS_cbc, 'ISS2016000000001');
 
 // fatura tipi
 faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
 faturatipi.Text := 'SATIS';
 
 // müşteri
 musteri := parent.ChildNodes.FindNode('AccountingSupplierParty', NS_cac);
 
 // Fatura notu ekle
 new := doc.CreateElement(PR_cbc + ':Note', NS_cbc);
 new.Text := 'Fatura notu';
 new.Attributes['languageID'] := 'tr-TR';
 parent.ChildNodes.Insert(parent.ChildNodes.IndexOf(faturatipi) + 1, new);
 
 // Dosyaya kaydet
 doc.SaveToFile('sample.xml');
end;

Entegratör ŞART anladığım kadarı ile O zaman KİM'le çalışalım. Çalıştığımız bir firma da yok. Bu işler sırf arkadaşıma yazdığım proje yüzünden oldu, pişman değilim. Ama sonuna kadar gitmek istiyorum. Var ise tavsiyeleriniz, öğrenmek isteriz.
Teknik Öğretmen
Bilgisayar Formatörü
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ENTEGRATOR ile E-FATURA (elektronik dönüşüm) UYGULAMASI guverdik 7 383 10-07-2020, Saat: 10:17
Son Yorum: guverdik
  Delphi'de RTF Editor boreas 4 174 07-07-2020, Saat: 23:08
Son Yorum: boreas
  Delphi Socket io KarahanMesut 2 143 07-07-2020, Saat: 14:15
Son Yorum: Halil Han Badem
  Delphi Community Edition free info@guzelceker.com 1 184 29-06-2020, Saat: 11:13
Son Yorum: Fesih ARSLAN
  Delphi yi Bir ust surume guncelleme TheEAK 9 390 26-06-2020, Saat: 18:49
Son Yorum: nguzeller



Konuyu Okuyanlar: 2 Ziyaretçi