Merhaba,
Ben entegratör firmanın UBL datasını örnek almıştım ve o datanın header kısmını kendi datama uygulamaya çalışmıştım. Fakat header kısmı ile ilgili yeteri bilgiye sahip olmadığım için sanırım hatalı tanımlamalar yaptığım için datayı yükleyemedim. Son anda sizin bana gönderdiğiniz örnekteki header kısmını olduğu gibi aldım ve datayı oluşturdum ve entegratör portalına hatasız bir şekilde UBL datayı yükleyebildim. Bu kısım biraz ezbere oldu ama işim çok acele olduğu için benim için önemli olan şu an için sonuca gitmekti. Tekrar teşekkürler yardımlarınız için.
E-Fatura için UBL data oluşturma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: E-Fatura için UBL data oluşturma
Yeni başlık açmayayım da burada sorayım, hem de teşekkür edeyim. UBL datasını yardımlarınızla oluşturdum. Fakat bazı bilgileri ini dosyadan okuyorum , firma bilgileri, adres vs. gibi.. Haliyle bunlar tr karakter içeriyor. XML içine atınca da karakter sorunu çıktı ortaya.. Nasıl çözerim?
Re: E-Fatura için UBL data oluşturma
Sorununuz karakter kodlamasindan kaynaklı. Ben gönderdiğim XML içinde encoding UTF8 olarak ayarladım ve Türkçe karakterleri sorunsuz olarak ekliyorum.varyemez yazdı: ↑08 Mar 2020 08:31 Yeni başlık açmayayım da burada sorayım, hem de teşekkür edeyim. UBL datasını yardımlarınızla oluşturdum. Fakat bazı bilgileri ini dosyadan okuyorum , firma bilgileri, adres vs. gibi.. Haliyle bunlar tr karakter içeriyor. XML içine atınca da karakter sorunu çıktı ortaya.. Nasıl çözerim?
Siz debug ile dosyadan okuduğunuz veriyi kontrol edin. Sizin ini dosyası kodlamasina bakın.
Unicode ANSI string farkı olabilir.
Bunları kontrol edin.
Ayrıca kod içinde dosyadan okuduğunuz bilgi yerine kod içine sabit Türkçe karakter ekleyerek deneyin sorunun dosyadan ini dosyasından olup olmadığını kontrol edersiniz.
PostgreSQL - Delphi - Linux
Re: E-Fatura için UBL data oluşturma
Merhaba,varyemez yazdı: ↑08 Mar 2020 08:31 Yeni başlık açmayayım da burada sorayım, hem de teşekkür edeyim. UBL datasını yardımlarınızla oluşturdum. Fakat bazı bilgileri ini dosyadan okuyorum , firma bilgileri, adres vs. gibi.. Haliyle bunlar tr karakter içeriyor. XML içine atınca da karakter sorunu çıktı ortaya.. Nasıl çözerim?
XML dosyası standart olarak UTF-8 kodlamaya sahiptir. Eğer XML dosyasını daha önce verilen XMLDoc nesnesi kullanarak üretiyor iseniz ihtimal INI dosyası içinden okuduğunuz karakterler bozuk olabilr. Bunu kontrol ettiniz mi?
Oluşturulan XML dosyasını Notepad++ gibi bir uygulama ile açıp UTF-8 formatında incelediğinizde karakter sorunu yok ise bu defa XML dosyasını web servise göndermeden önce okur iken UTF-8 kullanmayıp doğru kayıtlı karakterleri hafızaya bozuk okuyor olabilirsiniz.
Kullandığınız Delphi sürümü son sürümlerden birisi ise dosya okuma rutinlerinin nerede ise hepsi alternatif encoding kullanarak (Ansi, UTF-8 vb) dosya okumayı destekler. Delphi 7 standart Ansi formatında okur. Biraz ek kod yazarak yine UTF-8 formatında okuyabilirsiniz.
Kullandığınız Delphi sürümü ve sorunlu olduğuna inandığınız kodunuzu paylaşabilir misiniz?
Re: E-Fatura için UBL data oluşturma
delphi 10.3.3 community , win 10 kullanıyorum
Bu kısmı notepad ile yazıp dosya.ini şeklinde kaydettim (daha sonra veritabanından alınacak)
Aşağıdaki gibi de okuyup kullanıyorum değerlleri
zaten gerisi sizin kodlar....
Node3 := Node2.AddChild('cac:PartyName');
Node3.AddChild('cbc:Name').Text := bizimFirmaUnvani;
Node3 := Node2.AddChild('cac:PostalAddress');
Node3.AddChild('cbc:StreetName').Text := bizimAdres; //UZUN
Node3.AddChild('cbc:BuildingNumber').Text := bizimKapiNo; //1
Node3.AddChild('cbc:CitySubdivisionName').Text := bizimIlce; //PENDİK
Node3.AddChild('cbc:CityName').Text := bizimSehir; //İSTANBUL
Node3.AddChild('cbc:PostalZone').Text := bizimPostaKodu; //34123
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:IdentificationCode').Text := bizimUlkeKodu; //TR
Node4.AddChild('cbc:Name').Text := bizimUlke; //TÜRKİYE
Node3 := Node2.AddChild('cac:PartyTaxScheme');
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := bizimVergiDairesi;
***********************************
oluşan xml i notepad ile açtığımda görüntü böyle: Notepad++ ile bakmadım
Bu kısmı notepad ile yazıp dosya.ini şeklinde kaydettim (daha sonra veritabanından alınacak)
Kod: Tümünü seç
[FIRMAMIZ]
bizimWebSitesi=www.itstools.biz.tr
bizimVergiNo=33333333
bizimMukellefTipi=TCKN
bizimTicaretSicilNo=333
bizimMersisNo=11111
bizimFirmaUnvani=BALIKLI ECZANESİ
bizimAdres=Küçükbalıklı Mah. Ali Galip Yaldız cad.
bizimKapiNo=123
bizimIlce=xxxx
bizimSehir=bbbbb
bizimPostaKodu=16250
bizimUlkeKodu=TR
bizimUlke=TÜRKİYE
bizimVergiDairesi=ULUDAĞ VD
bizimTel=0 224 xxxxx
bizimFax=0 224 xxxxx
bizimEPostaAdresi=aaaa@gmail.com
Kod: Tümünü seç
procedure TFaturaUBL.FormActivate(Sender: TObject);
VAR
ini:TCustomIniFile;
begin
ini:=TIniFile.Create(extractfilepath(Application.ExeName)+'\efatura.ini');
bizimWebSitesi:=ini.ReadString('FIRMAMIZ','bizimWebSitesi','');
bizimVergiNo:=ini.ReadString('FIRMAMIZ','usernbizimVergiNo','');
bizimMukellefTipi:=ini.ReadString('FIRMAMIZ','bizimMukellefTipi','');
bizimTicaretSicilNo:=ini.ReadString('FIRMAMIZ','bizimTicaretSicilNo','');
bizimMersisNo:=ini.ReadString('FIRMAMIZ','bizimMersisNo','');
bizimFirmaUnvani:=ini.ReadString('FIRMAMIZ','bizimFirmaUnvani','');
bizimAdres:=ini.ReadString('FIRMAMIZ','bizimAdres','');
bizimKapiNo:=ini.ReadString('FIRMAMIZ','bizimKapiNo','');
bizimIlce:=ini.ReadString('FIRMAMIZ','bizimIlce','');
bizimSehir:=ini.ReadString('FIRMAMIZ','bizimSehir','');
bizimPostaKodu:=ini.ReadString('FIRMAMIZ','bizimPostaKodu','');
bizimUlkeKodu:=ini.ReadString('FIRMAMIZ','bizimUlkeKodu','');
bizimUlke:=ini.ReadString('FIRMAMIZ','bizimUlke','');
bizimVergiDairesi:=ini.ReadString('FIRMAMIZ','bizimVergiDairesi','');
bizimTel:=ini.ReadString('FIRMAMIZ','bizimTel','');
bizimFax:=ini.ReadString('FIRMAMIZ','bizimFax','');
bizimEPostaAdresi:=ini.ReadString('FIRMAMIZ','bizimEPostaAdresi','');
ini.Free;
......
Node3 := Node2.AddChild('cac:PartyName');
Node3.AddChild('cbc:Name').Text := bizimFirmaUnvani;
Node3 := Node2.AddChild('cac:PostalAddress');
Node3.AddChild('cbc:StreetName').Text := bizimAdres; //UZUN
Node3.AddChild('cbc:BuildingNumber').Text := bizimKapiNo; //1
Node3.AddChild('cbc:CitySubdivisionName').Text := bizimIlce; //PENDİK
Node3.AddChild('cbc:CityName').Text := bizimSehir; //İSTANBUL
Node3.AddChild('cbc:PostalZone').Text := bizimPostaKodu; //34123
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:IdentificationCode').Text := bizimUlkeKodu; //TR
Node4.AddChild('cbc:Name').Text := bizimUlke; //TÜRKİYE
Node3 := Node2.AddChild('cac:PartyTaxScheme');
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := bizimVergiDairesi;
***********************************
oluşan xml i notepad ile açtığımda görüntü böyle: Notepad++ ile bakmadım
Kod: Tümünü seç
<cac:PartyIdentification>
<cbc:ID schemeID="MERSISNO">3682909944400001</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>BALIKLI ECZANESÄ°</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Küçükbalıklı Mah. Ali Galip Yaldız cad.</cbc:StreetName>
<cbc:BuildingNumber>119</cbc:BuildingNumber>
<cbc:CitySubdivisionName>Osmangazi</cbc:CitySubdivisionName>
<cbc:CityName>BURSA</cbc:CityName>
<cbc:PostalZone>16250</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>TR</cbc:IdentificationCode>
<cbc:Name>TÃœRKÄ°YE</cbc:Name>
</cac:Country>
Re: E-Fatura için UBL data oluşturma
İNİ dosyanızı elle oluşturduğunuz için karakter kodlaması ne olduğunu bilemiyoruz. Kodunuzu hiç "DEBUG" ettiniz mi? Örneğin;
satırı çalıştıktan sonra bizimFirmaUnvani değişkeni değeri ne oluyor? Türkçe karakterleri doğru mu baktınız mı?
Yüksek ihtimal İNİ dosyasını UTF-8 karakter kodlaması ile kayıt ettiniz. Delphi kodu kullanarak TIniFile.WriteString() fonksiyonu kullanmadığınız için okunan veriyi manuel UTF-8 -> Unicode dönüşümü yaptırmanız gerekiyor. Bunu aşağıdaki şekilde yapmanız mümkün:
Ancak size tavsiyem İNİ dosyası formatını Notepad++ uygulaması kullanarak UTF-8'den Ansi'ye dönüştürmeniz (Encoding menüsü -> Convert to ANSI) ve bu şekilde kayıt etmeniz. Böylece mevcut kodunuzu değiştirmeden Türkçe karakterler ile okuma yapabilirsiniz.
Kod: Tümünü seç
bizimFirmaUnvani:=ini.ReadString('FIRMAMIZ','bizimFirmaUnvani','');
Yüksek ihtimal İNİ dosyasını UTF-8 karakter kodlaması ile kayıt ettiniz. Delphi kodu kullanarak TIniFile.WriteString() fonksiyonu kullanmadığınız için okunan veriyi manuel UTF-8 -> Unicode dönüşümü yaptırmanız gerekiyor. Bunu aşağıdaki şekilde yapmanız mümkün:
Kod: Tümünü seç
bizimFirmaUnvani:=UTF8ToString(RawByteString(ini.ReadString('FIRMAMIZ','bizimFirmaUnvani','')));