Fikir vermesi adına size benim kendi kullandığım kodların bir kısmını not defterinde düzenleyerek buraya ekliyorum.
Dediğim gibi not defterinde düzenleme ile sildim, isim değişikliği ile düzenledim direkt kullanırsanız çalışmaz ama genel olarak yapıyı paylaştım. Bazı commentler yanlış veya eski olabilir.
XSLT dediğimiz şablonu da GİB baz bir örnek olarak veriyor. Bu baz dosya üzerinde görsellik adına değişiklik yapabilirsiniz.
Burada eFatura, eİrsaliye veya eArsiv Fatura gibi işlemlerin mantığı devlet tarafından belirlenen bir kalıp var. Bizim yapmamız gereken bu kalıp çerçevesinde XML uzantılı bir dosya oluşturmak.
Burada sizin referans noktanız GİB'in paylaştığı teknik dokümanlardaki bilgileri okuyarak hangi bilgilerin hangi durumlarda geleceğini bilmeniz ve programınızdaki fatura kaydı içinden gerekli bilgiler buraya alarak XML dosyayı oluşturmanız.
Ayrıca 3 saate yakındır sizin anlayacağınız şekilde kodlarda silme düzenleme yaptım. Umarım size yol gösterir.
Kod: Tümünü seç
function TFaturaUBL.CreateXMLHeader: TXMLDocument;
begin
Result := TXMLDocument.Create(nil);
try
Result.Options := Result.Options + [doNodeAutoIndent]; //girintiyi otomatik ayarla
Result.NodeIndentStr := #9; //girinti boyutunu ayarla
Result.Active := True;
Result.Version := '1.0';
Result.Encoding := 'UTF-8';
Result.DocumentElement := Result.CreateNode('Invoice'); //Root Node
Result.DocumentElement.Attributes['xsi:schemaLocation'] := 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 UBL-Invoice-2.1.xsd';
Result.DocumentElement.DeclareNamespace('', 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2');
Result.DocumentElement.DeclareNamespace('cac', 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2');
Result.DocumentElement.DeclareNamespace('cbc', 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2');
Result.DocumentElement.DeclareNamespace('ccts', 'urn:un:unece:uncefact:documentation:2');
Result.DocumentElement.DeclareNamespace('ext', 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2');
Result.DocumentElement.DeclareNamespace('qdt', 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2');
Result.DocumentElement.DeclareNamespace('ubltr', 'urn:oasis:names:specification:ubl:schema:xsd:TurkishCustomizationExtensionComponents');
Result.DocumentElement.DeclareNamespace('udt', 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2');
Result.DocumentElement.DeclareNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
//ZORUNLU(1)
//AÇIKLAMA=XSD dokümanının UBL versiyonu yazılacaktır.
//KULLANIM=Bu değer için “2.1” kullanılacaktır.
//ÖRNEK=<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
Result.DocumentElement.AddChild('cbc:UBLVersionID').Text := '2.1';
//ZORUNLU(1)
//AÇIKLAMA=UBL’ in özelleştirme numarasıdır.
//KULLANIM=Bu değer için “TR1.2” kullanılacaktır.
//ÖRNEK=<cbc:CustomizationID>TR1.2</cbc:CustomizationID>
Result.DocumentElement.AddChild('cbc:CustomizationID').Text := 'TR1.2';
finally
end;
end;
function TFaturaUBL.AddXMLEFaturaHeader(XmlDoc: TXMLDocument): TXMLDocument;
var
profilID, faturaTipi : string;
begin
Result := XmlDoc;
if faturaKaydi.FaturaTipi = 'IHRACAT' then profilID := 'IHRACAT' else profilID := 'TEMELFATURA';
//ZORUNLU(1)
//AÇIKLAMA=Kullanılan senaryodur.
//KULLANIM=Bknz. Kod Listeleri
//ÖRNEK=<cbc:ProfileID>TEMELFATURA</cbc: ProfileID>
//DEĞERLER=TEMELFATURA, TICARIFATURA, YOLCUBERABERFATURA, IHRACAT
Result.DocumentElement.AddChild('cbc:ProfileID').Text := profilID;
//ZORUNLU(1)
//AÇIKLAMA=Üç haneli alfanumerik birim kod ile 13 haneli müteselsil numaranın birleşiminden meydana gelen Fatura Numarası bu elemana yazılacaktır.
// Müteselsil numaranın ilk dört hanesi faturanın düzenlendiği yılı kalan dokuz hane ise müteselsil numarayı ifade etmektedir.
// Fatura düzenleyen bünyesinde aynı fatura numarası birden fazla kullanılamaz.
//KULLANIM=Alfanumerik ÖRNEK=<cbc:ID>GIB2009000000001</cbc:ID>
Result.DocumentElement.AddChild('cbc:ID').Text := faturaKaydi.FaturaNo;
//ZORUNLU(1)
//AÇIKLAMA=Bu elemanda düzenlenen faturanın asıl veya suret olduğu gösterilecektir.
//KULLANIM=Asıl ise “false”, suret ise “true”
//ÖRNEK=<cbc:CopyIndicator>true</cbc:CopyIndicator>
Result.DocumentElement.AddChild('cbc:CopyIndicator').Text := 'false';
//ZORUNLU(1)
//AÇIKLAMA=Evrensel Tekil Tanımlama Numarası (ETTN), düzenlenen faturanın evrensel eşsizliğini sağlayan numaradır.
// Bu numara fatura düzenleyen tarafından standartlara uygun olarak üretilip faturalarda kullanılacaktır.
//KULLANIM=GUID formatı
//ÖRNEK=<cbc:UUID>e093a490-dd99-11dd-ad8b-0800200c9a66</cbc:UUID>
Result.DocumentElement.AddChild('cbc:UUID').Text := faturaKaydi.ETTNNumarasi;
//ZORUNLU(1)
//AÇIKLAMA=Bu elemana faturanın düzenleme tarihi yazılacaktır.
//KULLANIM=Yıl-Ay-Gün (YYYY-AA-GG)
//ÖRNEK=<cbc:IssueDate>2009-01-01</cbc:IssueDate>
Result.DocumentElement.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
//SEÇİMLİ(0..1)
//AÇIKLAMA=Bu elemana faturanın düzenleme saati yazılabilecektir.
//KULLANIM=Saat:Dakika:Saniye
//ÖRNEK=<cbc:IssueTime>14:50:00</cbc:IssueTime>
Result.DocumentElement.AddChild('cbc:IssueTime').Text := TimeToStr(faturaKaydi.FaturaSaati);
//ZORUNLU(1)
//AÇIKLAMA=Bu elemanda UBL-TR içerisinde yer alan fatura tiplerine ait kodlar yazılacaktır.
//KULLANIM=Bknz. Kod Listeleri
//ÖRNEK=<cbc:InvoiceTypeCode>SATIS</cbc:InvoiceTypeCode>
//DEĞERLER=SATIS, IADE, TEVKIFAT, ISTISNA, OZELMATRAH, IHRACKAYITLI
Result.DocumentElement.AddChild('cbc:InvoiceTypeCode').Text := faturaKaydi.FaturaTipi;
end;
function TFaturaUBL.AddXMLNotes(XmlDoc: TXMLDocument):TXMLDocument;
begin
Result := XmlDoc;
//SEÇİMLİ(0..n)
//AÇIKLAMA=Faturada yer verilmek istenen genel açıklamalar için bu eleman kullanılacaktır.
// Birden fazla açıklama yapılmak istenmesi halinde elemanın tekrar kullanımı mümkündür.
//KULLANIM=Serbest Metin
Result.DocumentElement.AddChild('cbc:Note').Text := 'bla bla açıklama satır 1';
Result.DocumentElement.AddChild('cbc:Note').Text := 'satır 2 bla bla';
Result.DocumentElement.AddChild('cbc:Note').Text := 'Banka Hesap Bilgileri...';
end;
function TFaturaUBL.AddXMLDocumentCurrencyCode(XmlDoc: TXMLDocument):TXMLDocument;
var
Node1 : IXMLNode;
strProfilID, strFaturaTipi : string;
fatura_ozeti : TViewFaturaOzeti;
nIndex, nSiraNo: Integer;
fs : TStream;
old_seperator : Char;
view_fatura_kdv_gruplari : TViewFaturaKdvGrupToplamlari;
mal: TMal;
begin
Result := XmlDoc;
//Bu elemana faturanın düzenlendiği paranın birim kodu yazılacaktır.
//Zorunlu(1) Kullanım Bknz. Kod Listeleri
Node1 := Result.DocumentElement.AddChild('cbc:DocumentCurrencyCode');
Node1.Text := 'TL';
Result.DocumentElement.AddChild('cbc:LineCountNumeric').Text := '5'; //Toplam Fatura Kalem sayısı
//Seçimli(0..1)
//Kullanım Bknz. Ortak Sınıflar: Period
//Açıklama:Faturada dönem bilgisine yer verilmesi halinde bu eleman kullanılacaktır.
// Node1 := Result.DocumentElement.AddChild('cac:InvoicePeriod');
// Node1.AddChild('cbc:StartDate').Text := '2009-08-13';
// Node1.AddChild('cbc:EndDate').Text := '2009-09-13';
// Node1.AddChild('cbc:Description>').Text := 'Açıklama';
//İrsaliye bilgileri için bu eleman kullanılabilecektir. Birden fazla irsaliyeye ait bilgilerin girilmesi ve irsaliye belgesinin faturaya eklenmesinde bu eleman kullanılabilecektir.
//Kullanım Bknz. Ortak Sınıflar: DocumentReference
//Seçimli (0…1)
//Kullanım Bknz. Ortak Sınıflar: OrderReference
//Açıklama:Sipariş bilgilerinin gösterilmesinde ve sipariş belgesinin faturaya eklenmesinde bu eleman kullanılabilecektir.
// Node1 := Result.DocumentElement.AddChild('cac:OrderReference');
// Node1.AddChild('cbc:ID').Text := siparisNo;
// Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', siparisTarihi);
//Faturanın ilişkili olduğu diğer belgelerin bilgileri bu elemana yazılacaktır.
//Seçimli (0…n) Kullanım Bknz. Ortak Sınıflar: BillingReference
// Node1 := Result.DocumentElement.AddChild('cac:BillingReference');
// Node1 := Node1.AddChild('cac:InvoiceDocumentReference');
// Node1.AddChild('cbc:ID').Text := '';//Döküman No
// Node1.AddChild('cbc:IssueDate').Text := '';//Döküman Tarihi
//İrsaliye bilgileri için bu eleman kullanılabilecektir.
// Birden fazla irsaliyeye ait bilgilerin girilmesi ve irsaliye belgesinin faturaya eklenmesinde bu eleman kullanılabilecektir.
//Seçimli (0…n) Kullanım Bknz. Ortak Sınıflar: DocumentReference
Node1 := Result.DocumentElement.AddChild('cac:DespatchDocumentReference');
Node1.AddChild('cbc:ID').Text := irsaliyeNo;
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', irsaliyeTarihi);
//Alındı bilgilerinin gösterilmesinde ve alındı belgesinin faturaya eklenmesinde bu eleman kullanılabilecektir.
//Seçimli (0…n) Kullanım Bknz. Ortak Sınıflar: DocumentReference
// Node1 := Result.DocumentElement.AddChild('cac:ReceiptDocumentReference>');
// Node1.AddChild('cbc:ID').Text := '';//No
// Node1.AddChild('cbc:IssueDate').Text := '';//Tarih
//Faturanın düzenlenmesine referans teşkil eden ilgili belgelere ait bilgiler bu elemana yazılacaktır.
//Seçimli (0…n) Kullanım Bknz. Ortak Sınıflar: DocumentReference
// Node1 := Result.DocumentElement.AddChild('cac:OriginatorDocumentReference>');
// Node1.AddChild('cbc:ID').Text := '';//No
// Node1.AddChild('cbc:IssueDate').Text := '';//Tarih
//Fatura ile ilgili kontrat dokümanın bilgilerinin gösterilmesinde bu eleman kullanılabilecektir.
//Seçimli (0…n) Kullanım Bknz. Ortak Sınıflar: DocumentReference
// Node1 := Result.DocumentElement.AddChild('cac:ContractDocumentReference>>');
// Node1.AddChild('cbc:ID').Text := '';//No
// Node1.AddChild('cbc:IssueDate').Text := '';//Tarih
end;
function TFaturaUBL.AdditionalDocumentReferenceXSLT(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1 : IXMLNode;
begin
//İrsaliye, sipariş, kontrat, alındı ve diğer fatura belgeleri dışında faturaya eklenmek istenen diğer belgeler için bu eleman kullanılabilecektir.
// Örneğin belge para birimi dışında ayrıca fatura düzenlenmek isteniyorsa bu fatura düzenlenip
// AdditionalDocumentReference elemanının EmbeddedDocumentBinaryObject elemanına eklenebilir.
// NOT: 433 nolu VUK genel tebliği kapsamında düzenlenen ÖKC bilgi fişi bilgileri bu elemana yazılacaktır.
//Kullanız Bknz. Ortak Sınıflar: DocumentReference
//Seçimli (0…n)
Result := XmlDoc;
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := faturaKaydi.ETTNNumarasi;
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1 := Node1.AddChild('cac:Attachment');
Node1 := Node1.AddChild('cbc:EmbeddedDocumentBinaryObject');
Node1.Attributes['characterSetCode'] := 'UTF-8';
Node1.Attributes['encodingCode'] := 'Base64';
Node1.Attributes['filename'] := faturaKaydi.FaturaNo + '.xslt'; //yukarıdaki cbc:ID (ETTN Numarası) değeri ile aynı olacak sonuna ".xslt" eklenecek
Node1.Attributes['mimeCode'] := 'application/xml';
Node1.Text := TGenel.FileToBase64(faturaKaydi.FaturaNo + '.xslt', XSLTSablonAdi); //xslt dosyasının base64 dönüştürülmüş kodu olacak
end;
function TFaturaUBL.AdditionalDocumentReference(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1 : IXMLNode;
old_seperator : Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
//burası XSLT dosyasında verileri göstermi için eklendi. Ayrıca düzenlemeler yapıldı. Logo entegratör bir kısmını tanımlı gönderdi
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', sizinFaturaToplamlariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'LINEEXTENSIONAMOUNT';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', sizinFaturaToplamlariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'TAXEXCLUSIVEAMOUNT';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', sizinFaturaToplamlariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'TAXINCLUSIVEAMOUNT';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', sizinFaturaToplamlariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'ALLOWANCETOTALAMOUNT';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', sizinFaturaToplamlariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'CHARGETOTALAMOUNT';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', ownerFatura.ToplamTutar - ownerFatura.ToplamIskontoTutar - ownerFatura.GenelIskontoTutar);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', ownerFatura.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'NETTUTAR_TR';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', ownerFatura.DovizTutar - ownerFatura.DovizIskontoTutar - ownerFatura.DovizGenelIskontoTutar);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', ownerFatura.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'NETTUTAR_DOVIZ';
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', dPayableAmount);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', ownerFatura.FaturaTarihi);
Node1.AddChild('cbc:DocumentType').Text := 'PAYABLEAMOUNT';
//burası XSLT dosyasında verileri göstermi için eklendi. Ayrıca düzenlemeler yapıldı. Logo entegratör bir kısmını tanımlı gönderdi
//Her KDV için ayrı ayrı girilecek
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', toplam18KDVTutariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentTypeCode').Text := vergiKodu; //0015 KDV kodu
Node1.AddChild('cbc:DocumentType').Text := IntToStr(18); //Fatura içindeki KDV oranınız
//gibi
Node1 := Result.DocumentElement.AddChild('cac:AdditionalDocumentReference');
Node1.AddChild('cbc:ID').Text := FormatFloat('0.0000', toplam8KDVTutariniz);
Node1.AddChild('cbc:IssueDate').Text := FormatDateTime('YYYY-MM-DD', faturaKaydi.FaturaTarihi);
Node1.AddChild('cbc:DocumentTypeCode').Text := vergiKodu; //0015 KDV kodu
Node1.AddChild('cbc:DocumentType').Text := IntToStr(8); //Fatura içindeki KDV oranınız
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddAccountingSupplierParty(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2, Node3, Node4 : IXMLNode;
vAdres: string;
begin
Result := XmlDoc;
//Bu elemanda faturayı düzenleyen tarafın bilgileri yer alacaktır.
//Kullanım Bknz. Ortak Sınıflar: SupplierParty
//Zorunlu(1)
Node1 := Result.DocumentElement.AddChild('cac:AccountingSupplierParty');
Node2 := Node1.AddChild('cac:Party');
Node2.AddChild('cbc:WebsiteURI').Text := bizimWebSitesi;
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := bizimVergiNo;
Node4.Attributes['schemeID'] := bizimMukellefTipi; //VKN veya TCKN ... gibi
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := bizimTicaretSicilNo;
Node4.Attributes['schemeID'] := 'TICARETSICILNO';
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := bizimMersisNo;
Node4.Attributes['schemeID'] := 'MERSISNO';
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;
Node3 := Node2.AddChild('cac:Contact');
Node3.AddChild('cbc:Telephone').Text := bizimTel;
Node3.AddChild('cbc:Telefax').Text := bizimFax;
Node3.AddChild('cbc:ElectronicMail').Text := bizimEPostaAdresi;
end;
function TFaturaUBL.AddAccountingCustomerParty(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2, Node3, Node4 : IXMLNode;
begin
Result := XmlDoc;
if faturaKaydi.FaturaTipi = 'IHRACAT' then
begin
Node1 := Result.DocumentElement.AddChild('cac:AccountingCustomerParty');
Node2 := Node1.AddChild('cac:Party');
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := '1460415308';
Node4.Attributes['schemeID'] := 'VKN';
Node3 := Node2.AddChild('cac:PartyName');
Node3.AddChild('cbc:Name').Text := 'GÜMRÜK VE TİCARET BAKANLIĞI BİLGİ İŞLEM DAİRESİ BAŞKANLIĞI';
Node3 := Node2.AddChild('cac:PostalAddress');
Node3.AddChild('cbc:StreetName').Text := 'Üniversiteler Mahallesi Dumlupınar Bulvarı';
Node3.AddChild('cbc:BuildingName').Text := '';
Node3.AddChild('cbc:BuildingNumber').Text := '151';
Node3.AddChild('cbc:CitySubdivisionName').Text := 'Çankaya';
Node3.AddChild('cbc:CityName').Text := 'Ankara';
Node3.AddChild('cbc:PostalZone').Text := '';
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:Name').Text := 'Türkiye';
Node3 := Node2.AddChild('cac:PartyTaxScheme');
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := 'Ulus';
// Node3 := Node2.AddChild('cac:Contact');
// Node3.AddChild('cbc:Telephone').Text := gumrukBakanligiTel;
// Node3.AddChild('cbc:Telefax').Text := gumrukBakanligiFaks;
// Node3.AddChild('cbc:ElectronicMail').Text := gumrukBakanligiEPostaAdresi;
end
else
begin
//Bu elemanda faturayı alan tarafın bilgileri yer alacaktır.
//Kullanım Bknz. Ortak Sınıflar: CustomerParty
//Zorunlu(1)
Node1 := Result.DocumentElement.AddChild('cac:AccountingCustomerParty');
Node2 := Node1.AddChild('cac:Party');
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := faturaKaydi.VergiNo;
Node4.Attributes['schemeID'] := faturaKaydi.MukellefTipi; //VKN TCKN
Node3 := Node2.AddChild('cac:PartyName');
Node3.AddChild('cbc:Name').Text := ownerFatura.Firma;
Node3 := Node2.AddChild('cac:PostalAddress');
Node3.AddChild('cbc:StreetName').Text := faturaKaydi.Adres;
Node3.AddChild('cbc:CitySubdivisionName').Text := faturaKaydi.Ilce;
Node3.AddChild('cbc:BuildingNumber').Text := faturaKaydi.KapiNo;
Node3.AddChild('cbc:CityName').Text := faturaKaydi.Sehir;
Node3.AddChild('cbc:PostalZone').Text := faturaKaydi.PostaKodu;
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:IdentificationCode').Text := faturaKaydi.UlkeKodu;
Node4.AddChild('cbc:Name').Text := faturaKaydi.UlkeAdi;
Node3 := Node2.AddChild('cac:PartyTaxScheme');
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := faturaKaydi..VergiDairesi;
Node3 := Node2.AddChild('cac:Contact');
Node3.AddChild('cbc:Telephone').Text := faturaKaydi.Tel;
Node3.AddChild('cbc:Telefax').Text := faturaKaydi.Faks;
Node3.AddChild('cbc:ElectronicMail').Text := faturaKaydi.EPostaAdresi;
//şahıs firması için firma sahibi adı
if faturaKaydi.MukellefTipi = MUKELLEF_TIPI_TCKN then
begin
Node3 := Node2.AddChild('cac:Person');
Node3.AddChild('cbc:FirstName').Text := faturaKaydi.PersonFirstName; //firma sahibi adı
Node3.AddChild('cbc:FamilyName').Text := faturaKaydi.PersonFamilyName; //firma sahibi soyadı
Node3.AddChild('cbc:Title').Text := '';
Node3.AddChild('cbc:MiddleName').Text := '';
Node3.AddChild('cbc:NameSuffix').Text := '';
end;
end;
end;
function TFaturaUBL.AddBuyerCustomerParty(XmlDoc: TXMLDocument):TXMLDocument;
var
Node1, Node2, Node3, Node4 : IXMLNode;
begin
Result := XmlDoc;
if ownerFatura.FaturaTipi = 'IHRACAT' then
begin
Node1 := Result.DocumentElement.AddChild('cac:BuyerCustomerParty');
Node2 := Node1.AddChild('cac:Party');
Node3 := Node2.AddChild('cac:PartyIdentification');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := 'EXPORT'; //buradaki bilgiler zorunlu bu şekilde yazılacak
Node4.Attributes['schemeID'] := 'PARTYTYPE'; //buradaki bilgiler zorunlu bu şekilde yazılacak
Node3 := Node2.AddChild('cac:PartyName'); //alıcı hesap ismi
Node3.AddChild('cbc:Name').Text := aliciHesapIsmi;
Node3 := Node2.AddChild('cac:PostalAddress');
Node3.AddChild('cbc:StreetName').Text := aliciHesapAdres;
Node3.AddChild('cbc:CitySubdivisionName');
Node3.AddChild('cbc:CityName').Text := aliciHesapSehir;
Node3.AddChild('cbc:PostalZone').Text := aliciHesapPostaKodu;
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:Name').Text := aliciHesapUlkeAdi;
Node3 := Node2.AddChild('cac:PartyLegalEntity');
Node3.AddChild('cbc:RegistrationName').Text := aliciHesapHesapIsmi; //alıcının kendi ülkesindeki resmi ünvanı
Node3.AddChild('cbc:CompanyID').Text := aliciHesapVergiNo; //alıcının kendi ülkesindeki vergi kodu
Node3 := Node2.AddChild('cac:Contact');
Node3.AddChild('cbc:Telephone').Text := aliciHesapTel;
Node3.AddChild('cbc:Telefax').Text := aliciHesapFaks;
Node3.AddChild('cbc:ElectronicMail').Text := aliciHesapEPostaAdresi;
end;
end;
function TFaturaUBL.AddDelivery(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2, Node3 : IXMLNode;
old_seperator : Char;
begin
//IHRACAT için Toplam Beyan edilen kıymet değeri
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
if ownerFatura.FaturaTipi = INVOICE_TYPE_IHRACAT then
begin
Node1 := Result.DocumentElement.AddChild('cac:Delivery');
Node2 := Node1.AddChild('cac:Shipment');
Node2.AddChild('cbc:ID').Text;
Node3 := Node2.AddChild('cbc:DeclaredCustomsValueAmount');
Node3.Text := FormatFloat('0.0000', beyanEdilenGumrukDegeri);
Node3.Attributes['currencyID'] := paraBirimi;
end;
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddAllowanceCharge(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2 : IXMLNode;
old_seperator : Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
//AÇIKLAMA BİLGİSİ
//Iskonto veya artırımların tanımlandığı elemandır.
//Zorunlu(1): ChargeIndicator
//Iskonto ise “false”, artırım ise “true” girilir.
// <cac:AllowanceCharge>
// <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
// <cbc:Amount currencyID="USD">0.0000</cbc:Amount>
// <cbc:BaseAmount currencyID="USD">2624.5900</cbc:BaseAmount>
// </cac:AllowanceCharge>
//
// Seçimli(0..1): AllowanceChargeReason //indirim/arttırım sebebi serbest metin
// Seçimli(0..1): MultiplierFactorNumeric //Iskonto veya artırım oranı numerik olarak girilir. '0.1'
// Seçimli(0..1): SequenceNumeric //Sıra Numarası
// Zorunlu(1): Amount //Toplam iskonto/arttırım tutarı (ToplamIskontoTutar+ToplamGenelIskontoTutar)
// Seçimli(0..1): BaseAmount //Iskonto/Arttırımın uygulandığı Tutar bilgisi (ToplamTutar-ToplamIskontoTutar-ToplamGenelIskontoTutar)
// Seçimli(0..1): PerUnitAmount //Ürün adetine göre iskonto veya artırımın uygulandığı durumlarda uygulanan ürün miktarını gösterir
Node1 := Result.DocumentElement.AddChild('cac:AllowanceCharge');
Node1.AddChild('cbc:ChargeIndicator').Text := 'false'; // ChargeIndicator: Iskonto ise “false”, artırım ise “true” girilir.
//Node1.AddChild('cbc:AllowanceChargeReason').Text := 'Müşteri indirimi'; // indirim/arttırım sebebi serbest metin
//Node1.AddChild('cbc:MultiplierFactorNumeric').Text := '0.1'; // Iskonto veya artırım oranı numerik olarak girilir. 0.1 anlamı %10
Node2 := Node1.AddChild('cbc:Amount');
Node2.Text := FormatFloat('0.0000', iskontoTutari);
Node2.Attributes['currencyID'] := paraBirimi;
if faturaKaydi.FaturaTipi = 'IHRACAT' then
begin
Node1 := Result.DocumentElement.AddChild('cac:AllowanceCharge');
Node1.AddChild('cbc:ChargeIndicator').Text := 'true';
Node1.AddChild('cbc:AllowanceChargeReason').Text := 'İhracat Masrafları';
Node2 := Node1.AddChild('cbc:Amount');
Node2.Text := FormatFloat('0.0000', hizmetTutari)
Node2.Attributes['currencyID'] := paraBirimi;
end;
end;
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddExchangeRate(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2 : IXMLNode;
old_seperator : Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
Node1 := Result.DocumentElement.AddChild('cac:PricingExchangeRate');
Node1.AddChild('cbc:SourceCurrencyCode').Text := kaynakPara;
Node1.AddChild('cbc:TargetCurrencyCode').Text := hedefPara;
Node1.AddChild('cbc:CalculationRate').Text := FormatFloat('0.0000', dovizKuru);
Node1.AddChild('cbc:Date').Text := FormatDateTime('YYYY-MM-DD', kurTarihi);// Kur tarihi
Node1 := Result.DocumentElement.AddChild('cac:PaymentExchangeRate');
Node1.AddChild('cbc:SourceCurrencyCode').Text := kaynakPara;
Node1.AddChild('cbc:TargetCurrencyCode').Text := hedefPara;
Node1.AddChild('cbc:CalculationRate').Text := FormatFloat('0.0000', dovizKuru);
Node1.AddChild('cbc:Date').Text := FormatDateTime('YYYY-MM-DD', kurTarihi);// Kur tarihi
Node1 := Result.DocumentElement.AddChild('cac:PaymentAlternativeExchangeRate');
Node1.AddChild('cbc:SourceCurrencyCode').Text := kaynakPara;
Node1.AddChild('cbc:TargetCurrencyCode').Text := hedefPara;
Node1.AddChild('cbc:CalculationRate').Text := FormatFloat('0.0000', dovizKuru);
Node1.AddChild('cbc:Date').Text := FormatDateTime('YYYY-MM-DD', kurTarihi);// Kur tarihi
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddTaxTotal(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2, Node3, Node4: IXMLNode;
old_seperator: Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
if faturaKaydi.FaturaTipi = 'IHRACAT' then
begin
if ownerFatura.ParaBirimi = PARA_BIRIMI_TL then
begin
Node1 := Result.DocumentElement.AddChild('cac:TaxTotal');
Node2 := Node1.AddChild('cbc:TaxAmount');
Node2.Text := FormatFloat('0.00', vergiTutari); //hesaplanan vergi tutarı
Node2.Attributes['currencyID'] := paraBirimi;
//hesaplanan vergi tutarı ayrıntıları farklı vergi oranlarına göre hepsini ayrı olarak hesapla
Node2 := Node1.AddChild('cac:TaxSubtotal');
Node3 := Node2.AddChild('cbc:TaxableAmount');
Node3.Text := FormatFloat('0.00', 0); //vergi uygulanacak tutar
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cbc:TaxAmount');
Node3.Text := FormatFloat('0.00', 0); //vergi tutarı
Node3.Attributes['currencyID'] := paraBirimi;
Node2.AddChild('cbc:Percent').Text := IntToStr(0); //vergi oranı
//vergi muafiyet kodu ve açıklaması
Node3 := Node2.AddChild('cac:TaxCategory');
Node3.AddChild('cbc:TaxExemptionReasonCode').Text := muafiyetKodu; //301
Node3.AddChild('cbc:TaxExemptionReason').Text := muafiyetKodu + ' ' + muafiyetKodAciklama; //301 11/1-a Mal ihracatı
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := 'KDV';
Node4.AddChild('cbc:TaxTypeCode').Text := '0015';
end;
end
else
begin
//Bu elemana faturada yer alan vergi ve diğer yasal yükümlülükler ile ilgili bilgiler yazılacaktır.
//Kullanım Bknz. Ortak Sınıflar: TaxTotal
//Zorunlu(1..n)
//Hesaplanan vergilerin toplam tutarı girilir. Bu alan zorunludur.
//TaxAmount: Toplam vergi tutarı girilir.
//TaxSubtotal: Vergi hesaplaması ile ilgili bilgilere yer verilir. Birden fazla vergi türü veya aynı vergi türü içerisinde farklı oranlarda yapılan hesaplamalarla ilgili bilgilere de bu alanda yer verilecektir. Bknz. TaxSubtotal.
//Zorunlu(1): TaxAmount
//Zorunlu(1..n): TaxSubtotal
//Açıklama
//Vergi ve diğer yasal yükümlülüklerin hesaplaması ile ilgili bilgiler ile belge üzerinde hesaplanan toplam vergi ve yasal yükümlülük tutarı girilecektir.
//Kullanım
//Üç çeşit kullanımı mevcuttur:
//1. “Invoice/TaxTotal”: Hesaplanan vergilerin toplam tutarı girilir. Bu alan zorunludur.
// TaxAmount: Toplam vergi tutarı girilir.
// TaxSubtotal: Vergi hesaplaması ile ilgili bilgilere yer verilir. Birden fazla vergi türü veya aynı vergi türü içerisinde farklı oranlarda yapılan hesaplamalarla ilgili bilgilere de bu alanda yer verilecektir. Bknz. TaxSubtotal.
//2. “Invoice/InvoiceLine/TaxTotal”: Hesaplanan vergilerin kalem bazlı hesaplanması durumunda bu alan kullanılır. Bu alan seçimlidir.
// TaxAmount: Kalem için hesaplanan toplam vergi tutarı girilir.
// TaxSubtotal: Kalem bazında vergi hesaplaması söz konusu olması halinde ilgili bilgilere yer verilebilecektir. Bknz. TaxSubtotal.
//3. “WithholdingTaxTotal”: Tevkifatlı faturalarda, uygulanan tevkifat miktarları, oranları ve diğer bilgileri girilir.
// TaxAmount: Toplam tevkifat tutarı girilir.
// TaxSubtotal: Tevkifat kodu ve oranı bilgisi girilir.
Node1 := Result.DocumentElement.AddChild('cac:TaxTotal');
Node2 := Node1.AddChild('cbc:TaxAmount');
Node2.Text := FormatFloat('0.00', toplamKDVTutar); //hesaplanan vergi tutarı
Node2.Attributes['currencyID'] := paraBirimi;
//hesaplanan vergi tutarı ayrıntıları farklı vergi oranlarına göre hepsini ayrı olarak hesapla
Node2 := Node1.AddChild('cac:TaxSubtotal');
Node3 := Node2.AddChild('cbc:TaxableAmount');
Node3.Text := FormatFloat('0.00', vergiUygulanacakTutar); //vergi uygulanacak tutar
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cbc:TaxAmount');
Node3.Text := FormatFloat('0.00', toplamKDVTutar); //vergi tutarı
Node3.Attributes['currencyID'] := paraBirimi;
Node2.AddChild('cbc:Percent').Text := IntToStr(18); //vergi oranı
Node3 := Node2.AddChild('cac:TaxCategory');
Node3.AddChild('cbc:TaxExemptionReasonCode').Text := muafiyetKodu;
Node3.AddChild('cbc:TaxExemptionReason').Text := muafiyetKodAciklama;
//vergi türü kodunu ve açıklaması
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := vergiKoduKisaltma;
Node4.AddChild('cbc:TaxTypeCode').Text := vergiKodu;
//tevkifatlı faturanın tevkifat bilgileri
if faturaKaydi.FaturaTipi = 'TEVKIFAT' then
begin
Node1 := Result.DocumentElement.AddChild('cac:WithholdingTaxTotal');
Node2 := Node1.AddChild('cbc:TaxAmount');
Node2.Text := FormatFloat('0.00', tevkifatTutari);
Node2.Attributes['currencyID'] := paraBirimi;
//tevkifat tutar ayrıntısı
Node2 := Node1.AddChild('cac:TaxSubtotal');
Node3 := Node2.AddChild('cbc:TaxableAmount');
Node3.Text := FormatFloat('0.00', toplamKDVTutar); //vergi uygulanacak tutar (tevkifat uygulanacak kdv tutarı)
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cbc:TaxAmount');
Node3.Text := FormatFloat('0.00', tevkifatTutari); //tevkifat tutarı
Node3.Attributes['currencyID'] := paraBirimi;
Node2.AddChild('cbc:Percent').Text := IntToStr(Trunc(tevkifatPay / tevkifatPayda) * 100)) //tevkifat oranı yüzdesi
Node3 := Node2.AddChild('cac:TaxCategory');
Node3.AddChild('cbc:Name').Text := 'KDV TEVKIFAT';
Node4 := Node3.AddChild('cac:TaxScheme');
Node4.AddChild('cbc:Name').Text := tevkifatAdi; //tevkifat kodu ve açıklaması
Node4.AddChild('cbc:TaxTypeCode').Text := tevkifatKodu; //tevkifat kodu ve açıklaması
end;
end;
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddLegalMonetaryTotal(XmlDoc: TXMLDocument): TXMLDocument;
var
Node1, Node2 : IXMLNode;
old_seperator : Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
//bildirilen toplam tutar
Node1 := Result.DocumentElement.AddChild('cac:LegalMonetaryTotal');
Node2 := Node1.AddChild('cbc:LineExtensionAmount');
Node2.Text := FormatFloat('0.00', lineExtensionAmount); //toplam tutar
Node2.Attributes['currencyID'] := paraBirimi;
Node2 := Node1.AddChild('cbc:TaxExclusiveAmount');
Node2.Text := FormatFloat('0.00', taxExclusiveAmount); //verigiler hariç toplam tutar
Node2.Attributes['currencyID'] := paraBirimi;
Node2 := Node1.AddChild('cbc:TaxInclusiveAmount');
Node2.Text := FormatFloat('0.00', taxInclusiveAmount); //vergiler dahil toplam tutar
Node2.Attributes['currencyID'] := paraBirimi;
Node2 := Node1.AddChild('cbc:AllowanceTotalAmount');
Node2.Text := FormatFloat('0.00', allowanceTotalAmount); //iskonto/arttırım miktarı
Node2.Attributes['currencyID'] := paraBirimi;
Node2 := Node1.AddChild('cbc:ChargeTotalAmount');
Node2.Text := FormatFloat('0.00', 0)
Node2.Attributes['currencyID'] := paraBirimi;
Node2 := Node1.AddChild('cbc:PayableAmount');
Node2.Attributes['currencyID'] := paraBirimi; //ödenecek tutar
Node2.Text := FormatFloat('0.00', payableAmount);
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;
function TFaturaUBL.AddInvoiceLine(XmlDoc: TXMLDocument; detay:TFaturaDetay; sira_no:Integer): TXMLDocument;
var
Node1, Node2, Node3, Node4, Node5 : IXMLNode;
old_seperator : Char;
begin
Result := XmlDoc;
old_seperator := FormatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
try
Node1 := Result.DocumentElement.AddChild('cac:InvoiceLine');
Node1.AddChild('cbc:ID').Text := IntToStr(sira_no);
if not faturaKalemDiibTanimi.IsEmpty then
Node1.AddChild('cbc:Note').Text := faturaKalemDiibTanimi;
Node2 := Node1.AddChild('cbc:InvoicedQuantity');
Node2.Text := FloatToStr(faturaKalemMiktar);
Node2.Attributes['unitCode'] := faturaKalemOlcuBirimi;
Node2 := Node1.AddChild('cbc:LineExtensionAmount');
Node2.Text := FormatFloat('0.00', faturaKalemTutar);
Node2.Attributes['currencyID'] := paraBirimi;
if faturaKaydi.FaturaTipi = 'IHRACAT' then
begin
Node2 := Node1.AddChild('cac:Delivery');
Node3 := Node2.AddChild('cac:DeliveryAddress');
Node3.AddChild('cbc:StreetName').Text := faturaKaydi.Adres;
Node3.AddChild('cbc:BuildingName').Text := faturaKaydi.Bina;
Node3.AddChild('cbc:BuildingNumber').Text := faturaKaydi.KapiNo;
Node3.AddChild('cbc:CitySubdivisionName');
Node3.AddChild('cbc:CityName').Text := faturaKaydi.Sehir;
Node3.AddChild('cbc:PostalZone').Text := faturaKaydi.PostaKodu;
Node4 := Node3.AddChild('cac:Country');
Node4.AddChild('cbc:Name').Text := faturaKaydi.UlkeAdi;
Node3 := Node2.AddChild('cac:DeliveryTerms');
Node4 := Node3.AddChild('cbc:ID');
Node4.Text := teslimSartiKodu;
Node4.Attributes['schemeID'] := 'INCOTERMS';
Node3 := Node2.AddChild('cac:Shipment');
Node3.AddChild('cbc:ID');
Node4 := Node3.AddChild('cbc:DeclaredCustomsValueAmount');
Node4.Text := FormatFloat('0.0000', beyanEdilenGumrukDegeri);
Node4.Attributes['currencyID'] := paraBirimi;
Node4 := Node3.AddChild('cac:GoodsItem');
Node4.AddChild('cbc:RequiredCustomsID').Text := faturaKalem.GTIPNo;
Node4 := Node3.AddChild('cac:ShipmentStage');
Node4.AddChild('cbc:TransportModeCode').Text := gonderimSekliKodu;
Node4 := Node3.AddChild('cac:TransportHandlingUnit');
Node5 := Node4.AddChild('cac:ActualPackage');
Node5.AddChild('cbc:ID').Text := faturaKalemKabNumarasi;
Node5.AddChild('cbc:Quantity').Text := faturaKalemKabAdeti.ToString;
Node5.AddChild('cbc:PackagingTypeCode').Text := faturaKalemPaketTipiKodu;
end;
//iskonto varsa indirim/arttırım bilgisini ekle
if CompareValue(faturaKaydi.IskontoTutar, 0, EPSILON) <> 1 then
begin
Node2 := Node1.AddChild('cac:AllowanceCharge');
Node2.AddChild('cbc:ChargeIndicator').Text := 'false';
if faturaKaydi.FaturaTipi = 'IHRACAT' then
begin
Node2.AddChild('cbc:MultiplierFactorNumeric').Text := FormatFloat('0.00', 0);
Node3 := Node2.AddChild('cbc:Amount');
Node3.Text := FormatFloat('0.00', 0);
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cbc:BaseAmount');
Node3.Text := FormatFloat('0.00', faturaKalemIskontosuzTutar)
Node3.Attributes['currencyID'] := paraBirimi;
end
else
begin
if detay.Iskonto <> 0 then
Node2.AddChild('cbc:MultiplierFactorNumeric').Text := FormatFloat('0.00', (detay.Iskonto/100) )
else
Node2.AddChild('cbc:MultiplierFactorNumeric').Text := FormatFloat('0.00', 0);
Node3 := Node2.AddChild('cbc:Amount');
Node3.Text := FormatFloat('0.00', detay.TLIskontoTutar )
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cbc:BaseAmount');
Node3.Text := FormatFloat('0.00', detay.TLTutar );
Node3.Attributes['currencyID'] := paraBirimi;
end;
end;
//vergi bilgileri
Node2 := Node1.AddChild('cac:TaxTotal');
Node3 := Node2.AddChild('cbc:TaxAmount');
Node3.Text := FormatFloat('0.00', KDVTutar); //vergi tutarı
Node3.Attributes['currencyID'] := paraBirimi;
Node3 := Node2.AddChild('cac:TaxSubtotal');
Node4 := Node3.AddChild('cbc:TaxableAmount');
Node4.Text := FormatFloat('0.00', vergiUygulanacakTutar); //vergi uygulanacak tutar
Node4.Attributes['currencyID'] := paraBirimi;
Node4 := Node3.AddChild('cbc:TaxAmount');
Node4.Text := FormatFloat('0.00', vergiTutari); //vergi tutarı
Node4.Attributes['currencyID'] := paraBirimi;
Node3.AddChild('cbc:Percent').Text := IntToStr(KDVOrani); //vergi yüzdesi/oranı
Node4 := Node3.AddChild('cac:TaxCategory');
//eğer vegi muafiyet kodu varsa alltaki iki satırı ekle
Node4.AddChild('cbc:TaxExemptionReasonCode').Text := muafiyetKodu;
Node4.AddChild('cbc:TaxExemptionReason').Text := muafiyetKodu + ' ' + muafiyetAdi;
Node5 := Node4.AddChild('cac:TaxScheme');
Node5.AddChild('cbc:Name').Text := vergiKoduKisaltma;
Node5.AddChild('cbc:TaxTypeCode').Text := vergiKodu; //vergi kodu
if (faturaKaydi.FaturaTipi = 'TEVKIFAT') then
begin
//tevkifat bilgileri
Node2 := Node1.AddChild('cac:WithholdingTaxTotal');
Node3 := Node2.AddChild('cbc:TaxAmount');
Node3.Text := FormatFloat('0.00', tevkifatTutar); //tevkifat tutarı
Node3.Attributes['currencyID'] := paraBirimi;
//tevkifat bilgileri
Node3 := Node2.AddChild('cac:TaxSubtotal');
//tevkifat uygulanacak vergi tutarı
Node4 := Node3.AddChild('cbc:TaxableAmount');
Node4.Text := FormatFloat('0.00', KDVTutar )
Node4.Attributes['currencyID'] := paraBirimi;
//tevkifat tutarı
Node4 := Node3.AddChild('cbc:TaxAmount');
Node4.Text := FormatFloat('0.00', tevkifatTutar );
Node4.Attributes['currencyID'] := paraBirimi;
//tevkifat yüzdesi
Node3.AddChild('cbc:Percent').Text := FloatToStr( (faturaKaydi.TevkifatPay / faturaKaydi.TevkifatPayda)*100 );
Node4 := Node3.AddChild('cac:TaxCategory');
Node5 := Node4.AddChild('cac:TaxScheme');
Node5.AddChild('cbc:Name').Text := vergi_kodlari.Kisaltma;
Node5.AddChild('cbc:TaxTypeCode').Text := vergi_kodlari.Kodu; //diger vergi kodu (tevkifat vergi kodu)
end;
//ürün özellikleri ve kodu
Node2 := Node1.AddChild('cac:Item');
Node2.AddChild('cbc:Description').Text := faturaKalemAciklama;
Node2.AddChild('cbc:Name').Text := faturaKalemUrunKodu;
Node3 := Node2.AddChild('cac:SellersItemIdentification');
Node3.AddChild('cbc:ID').Text := faturaKalemUrunKodu;
if (faturaKaydi.FaturaTipi = 'IHRACAT') then
begin
Node3 := Node2.AddChild('cac:OriginCountry');
Node3.AddChild('cbc:Name').Text := lowerCaseTr(faturaKalem.Mensei)[1]) + RightStr(lowerCaseTr(faturaKalem.Mensei), Length(faturaKalem.Mensei)-1);
end;
//ürün fiyatı
Node2 := Node1.AddChild('cac:Price');
Node3 := Node2.AddChild('cbc:PriceAmount');
Node3.Text := FormatFloat('0.00', fiyat);
Node3.Attributes['currencyID'] := paraBirimi;
finally
FormatSettings.DecimalSeparator := old_seperator;
end;
end;