Logo e-Fatura UBL XML Yapısında AdditionalDocumentReference ve XSLT Kullanımı
Logo ERP (Tiger, Go 3) üzerinden kesilen e-Faturalar, Gelir İdaresi Başkanlığı’nın (GİB) belirlediği standart UBL-TR (Universal Business Language) XML formatında oluşturulur. Ancak çoğu işletmenin fatura şablonunda standart UBL etiketlerinin dışında; özel cari kodları, üretici kodları, sözleşme numaraları veya firmanın kendi iç işleyişine ait özel belge numaraları gibi ekstra verilere ihtiyaç duyulur.
Bu rehberde, LogoConnect üzerinde kural yazarak faturanın arka planındaki UBL XML yapısına “AdditionalDocumentReference” (Ek Belge Referansı) düğümünün nasıl ekleneceğini, bu verilerin Logo Özel Entegratörlük Portalında XSLT ile tasarıma nasıl çağrılacağını ve arka plandaki SQL veritabanı ilişkilerini inceleyeceğiz.
1. LogoConnect ile UBL’e Serbest Alan (Ek Alan) Gömmek
Standart e-Fatura (Giden) işlemleri sırasında, faturanın UBL yapısına ekstra veri basmak için LogoConnect üzerinde “Kural Tanımlama” işlemi yapılır. Belge imzalanmadan önce devreye giren bu kural sayesinde ERP veritabanındaki (Örneğin INVOICE tablosu) özel alanlar XML’e taşınır.
LogoConnect’te bir kural oluştururken olay olarak “İmzalanmadan Önce” seçilmeli ve İşlem olarak “Serbest Alanları Ekle” adımı uygulanmalıdır.
Örneğin; bir faturaya Cari Kodu ve Belge Numarası eklemek için ID ve DOCUMENTTYPE tanımlamaları şu şekilde eşleştirilir:
-
ARP_CODE->CARIKOD DOC_NUMBER->BELGENO
Kural çalıştıktan sonra LogoConnect’in ürettiği XML (UBL) dosyasının içerisine şu şekilde ekstra düğümler (<cac:AdditionalDocumentReference>) eklenir:
<cac:AdditionalDocumentReference>
<cbc:ID>AS-003</cbc:ID>
<cbc:IssueDate>2016-01-17</cbc:IssueDate>
<cbc:DocumentType>CARIKOD</cbc:DocumentType>
</cac:AdditionalDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>000000000000000001</cbc:ID>
<cbc:IssueDate>2016-01-17</cbc:IssueDate>
<cbc:DocumentType>BELGENO</cbc:DocumentType>
</cac:AdditionalDocumentReference>
2. Görsel Tasarım Ek Alanlarında XSLT Kullanımı
Logo Özel Entegratörlük Portalında e-Fatura ve e-Arşiv menüleri altındaki standart Tasarım Aracında bulunmayan özel alanlar için “Araçlar” menüsü altındaki “Görsel Tasarım Ek Alanları” bölümüne XSLT kod bloğu yazılması gerekmektedir. Tanımlanan bu alanlar, daha sonra Tasarım Aracı içerisinden seçilerek fatura şablonuna getirilir.
AdditionalDocumentReference Verisini Tasarıma Çekmek
UBL XML içerisinde birden fazla AdditionalDocumentReference alanı olabileceği için, doğrudan etiketi çağırmak yerine XSLT içerisinde <xsl:if> kısıtı kullanılarak ilgili DocumentType kontrol edilmelidir.
Aşağıdaki XSLT kodlarını ek alan olarak tanımlayabilirsiniz:
Cari Kodu Getirmek İçin:
<xsl:for-each select="//n1:Invoice/cac:AdditionalDocumentReference">
<xsl:if test ="cbc:DocumentType = 'CARIKOD'">
<xsl:value-of select="cbc:ID"/>
</xsl:if>
</xsl:for-each>
Belge Numarasını Getirmek İçin:
<xsl:for-each select="//n1:Invoice/cac:AdditionalDocumentReference">
<xsl:if test ="cbc:DocumentType = 'BELGENO'">
<xsl:value-of select="cbc:ID"/>
</xsl:if>
</xsl:for-each>
Ekstra İpucu: Birden Fazla İrsaliye Numarasını Yan Yana Yazdırmak
Sık karşılaşılan bir diğer senaryo, faturaya bağlı birden fazla irsaliyenin tasarımda alt alta veya yan yana gösterilmesidir. Tasarım portalındaki Görsel Tasarım Ek Alanlarına aşağıdaki döngüyü ekleyerek UBL’deki DespatchDocumentReference verilerini listeleyebilirsiniz:
<b>İrsaliye Numaraları</b><br />
<xsl:for-each select="//n1:Invoice/cac:DespatchDocumentReference">
<xsl:value-of select="cbc:ID"/>
<text> - </text>
</xsl:for-each>
3. UBL Etiketlerinin SQL Veritabanı ve C# API Karşılıkları
Yazılım geliştiriciler (özellikle .NET platformunda) veya dışarıdan Logo REST API / L-Objects kullanan uzmanlar UBL verilerini manuel oluştururken "app.doc.writestartelement" "additionaldocuments/additionaldocument" gibi C# XML Serialization metodlarına ihtiyaç duyarlar.
Bu verilerin Logo ERP veritabanındaki (SQL Server) karşılıkları şunlardır:
-
"additionaldocuments/additionaldocument" "additionaldocumentreference": XML’deki bu etiketler, genellikleLG_XXX_01_INVOICE(Fatura Başlıkları) tablosundakiSPECODE(Özel Kod),DOCODE(Belge No) veyaCYPHCODE(Yetki Kodu) alanlarından beslenir. Ayrıca faturaya bağlanan Logo döküman ekleri veritabanında bu referanslarla saklanır. -
cac:DespatchDocumentReference(İrsaliye Referansı): VeritabanındaLG_XXX_01_STFICHE(İrsaliyeler) tablosuna denk gelir. Bir faturanın altındaki irsaliyeleri bulmak içinSTFICHE.INVOICEREF = INVOICE.LOGICALREFSQL Join işlemi yapılmalıdır. -
cac:PaymentMeans/cbc:PaymentDueDate(Ödeme Planı Tarihi): Logo veritabanındaLG_XXX_PAYPLANStablosuna denk düşer. cac:SellersItemIdentification(Satıcı Kodu): Malzeme kalemleri (InvoiceLine) içindeki bu etiket,LG_XXX_ITEMStablosundaki malzeme kodu (CODE) veya üretici kodunu temsil eder.
Özel ERP entegrasyonlarında "app.doc.writestartelement" komutuyla faturanın UBL XML’i manuel oluşturulurken (örneğin e-fatura kontörü harcamamak veya farklı bir entegratör kullanmak için), yukarıda paylaştığımız SQL tablolarından SELECT atılarak ilgili verilerin AdditionalDocumentReference düğümlerine yazdırılması veri bütünlüğü açısından kritik bir adımdır.
Bu yöntemlerle, standart e-fatura görünümünün dışına çıkarak işletmenize veya müşterinize tam uyumlu, esnek ve kurumsal kimliği yansıtan teknik fatura tasarımları oluşturabilirsiniz. XSLT kuralları veya SQL veritabanı eşleştirmeleri hakkında karşılaştığınız hataları yorumlarda belirtebilirsiniz.

