1. Anasayfa
  2. SQL Destek
Trendlerdeki Yazı

Logo ERP Fatura Tabloları ve SQL İlişkileri (INVOICE, STLINE)

Logo ERP Fatura Tabloları ve SQL İlişkileri (INVOICE, STLINE)
ogo ERP Fatura Tabloları ve SQL İlişkileri
0

Logo ERP (Tiger 3, Tiger Enterprise, Go 3) üzerinde özel raporlamalar, B2B/B2C entegrasyonları veya özel yönetim panelleri geliştirirken en çok ihtiyaç duyulan veriler fatura ve stok hareketleridir. Veritabanı mimarisinde fatura süreçleri tek bir tabloda tutulmaz; başlık bilgileri, irsaliye detayları, satır hareketleri ve cari bağlantıları normalize edilmiş farklı tablolara dağıtılmıştır.

Özellikle ASP.NET Core tabanlı web projelerinde, DevExpress gibi gelişmiş grid bileşenlerinde veya harici dashboard uygulamalarında fatura verilerini listelemek için bu tabloların birbiriyle olan ilişkilerini (Foreign Keys) ve veri yapılarını (Entity Yapısı) kusursuz kavramak gerekir.

Bu rehberde, Logo ERP veritabanındaki INVOICE, STFICHE, STLINE ve CLIENTREF mimarisini inceleyecek, ardından tüm ticari detayları (Döviz, ÖTV, İade Maliyetleri, Ödeme Planları) barındıran %100 optimize edilmiş kapsamlı bir SQL fatura raporu sorgusunu parçalara ayıracağız.

Logo Fatura Modülü Ana Tabloları Nelerdir?

Logo veritabanı mimarisinde bir faturanın oluşabilmesi için temel olarak üç ana tabloya kayıt atılır. Bu üçlü yapı, sistemin esnekliğini ve irsaliye-fatura parçalanmasını yönetir.

1. LG_XXX_XX_INVOICE (Fatura Başlık Tablosu)

Faturanın genel hatlarının tutulduğu ana belgedir.

  • FICHENO (Fatura Numarası): Belgenin resmi numarasıdır.

  • DATE_ (Tarih): Faturanın kesildiği tarih.

  • CLIENTREF (Cari Referansı): Faturanın hangi cari hesaba (Müşteri/Tedarikçi) kesildiğini gösteren, LG_XXX_CLCARD tablosuna giden anahtar (Foreign Key).

  • TRCODE (Fiş Türü): Faturanın tipini belirler (Örn: 8 = Toptan Satış, 1 = Satınalma Faturası, 3 = Toptan Satış İade).

  • CANCELLED: İptal statüsüdür. Geçerli faturaları çekmek için CANCELLED = 0 şartı mutlaka eklenmelidir.

2. LG_XXX_XX_STFICHE (İrsaliye ve Malzeme Fişi Tablosu)

Logo’da faturalar aslında irsaliyelerin (veya malzeme fişlerinin) faturalaştırılmış halleridir. Bir INVOICE kaydı, altında bir veya birden fazla STFICHE (İrsaliye) kaydı barındırabilir.

  • INVOICEREF: Bu alan, irsaliyenin hangi faturaya bağlı olduğunu gösterir (INVOICE.LOGICALREF).

  • DESTINDEX / SOURCEINDEX: İşlemin gerçekleştiği ambar ve işyeri (L_CAPIDIV, L_CAPIWHOUSE) bilgileri bu tabloda tutulur.

  • SHPTYPCOD / SHPAGNCOD: Sevkiyat türü ve taşıyıcı firma bilgileri başlık seviyesinde irsaliye tablosuna işlenir.

3. LG_XXX_XX_STLINE (Satır Hareketleri Tablosu)

Faturanın içerisindeki ürünler, hizmetler, indirimler ve masraflar bu tabloda satır satır tutulur. En yüksek veri hacmine sahip tablodur.

  • STFICHEREF: Satırın hangi irsaliyeye/fişe ait olduğunu gösterir. Faturaya ulaşmak için önce STFICHE tablosuna, oradan INVOICE tablosuna sıçrama yapılmalıdır.

  • LINETYPE (Satır Türü): Satırın karakteristiğini belirler.

    • 0: Malzeme (Stok)

    • 2: İndirim

    • 3: Masraf

    • 4: Hizmet

    • 8: Karma Koli

  • STOCKREF: Satırdaki kartın referansıdır. Eğer LINETYPE 0 ise bu referans LG_XXX_ITEMS (Malzemeler) tablosuna, LINETYPE 4 ise LG_XXX_SRVCARD (Hizmetler) tablosuna bağlanmalıdır.

Tablolar Arasındaki Kritik Bağlantılar (Join Mantığı)

Veritabanından eksiksiz bir fatura dökümü almak için tabloları doğru hiyerarşi ile bağlamak (Join) hayati önem taşır. Yanlış bağlanan tablolar verilerin mükerrer (duplicate) gelmesine veya performans darboğazlarına (Timeout) yol açar.

Doğru Bağlantı Sıralaması:

  1. Merkez tablo olarak LG_XXX_XX_STLINE (Satırlar) alınmalıdır.

  2. Satırdan Başlığa: STLINE.STFICHEREF = STFICHE.LOGICALREF

  3. Fişten Faturaya: STFICHE.INVOICEREF = INVOICE.LOGICALREF

  4. Fişten Cari Karta: STFICHE.CLIENTREF = CLCARD.LOGICALREF

Bu yapı sayesinde, tek bir fatura altındaki irsaliyeleri ve o irsaliyelerin altındaki satırları kusursuz bir ağaç mimarisiyle çekebilirsiniz.

Fatura Verilerinde Dikkat Edilmesi Gereken Gelişmiş Alanlar

Basit bir “Fatura Listesi” çekmenin ötesinde, ERP sisteminden finansal raporlama düzeyinde veri çekerken bazı alanların hesaplanmasına özellikle dikkat edilmelidir.

Dövizli İşlemler (TRCURR ve REPORTRATE)

Logo üzerinde üç farklı döviz tipi çalışır: Yerel Para Birimi (TL), İşlem Dövizi ve Raporlama Dövizi. Satır bazlı döviz kurlarını hesaplarken STLINE.TRRATE (İşlem Döviz Kuru) ve STLINE.REPORTRATE (Raporlama Döviz Kuru) kullanılır. Eğer TRRATE = 0 ise işlem TL üzerinden yapılmış demektir. Dövizli tutarı bulmak için satır tutarı (TOTAL) bu kurlara bölünmelidir. (Bölme işlemi yaparken Divide by Zero hatası almamak için CASE WHEN TRRATE = 0 THEN 0 ELSE TOTAL/TRRATE END mantığı kurulmalıdır).

İade İşlemlerinde Miktar ve Tutar Çevrimi

Fatura türü iade (TRCODE IN (2,3)) olduğunda, veritabanı miktarları ve tutarları genellikle pozitif tutar. Ancak finansal mizan veya bakiye kontrolü yapan SQL sorgularında bu tutarların firmadan çıktığını veya girdiğini belirtmek için -1 ile çarpılması gerekir.

İndirim ve KDV Matrahı (LINENET ve VATMATRAH)

Kullanıcılar fatura satırında brüt birim fiyat girebilir ve altına 3 farklı indirim uygulayabilir. STLINE.LINENET alanı, tüm indirimler düşüldükten sonra satırın net tutarını verir. KDV tutarını hesaplarken VATMATRAH üzerinden işlem yapmak, indirimli faturalarda kuruş farkı hatalarının önüne geçer.

Gelişmiş Kapsamlı Logo Fatura Raporu SQL Sorgusu

Aşağıdaki sorgu, Logo ERP sistemindeki satır, irsaliye ve fatura bağını kuran; cari bilgileri, organizasyonel yapıları (Şube/Ambar), birimleri, döviz çevrimlerini, ÖTV hesaplamalarını ve iade maliyetlerini tek bir sonuç setinde getiren en optimize ve kapsamlı SQL raporudur. Bu sorguyu raporlama toollarında veya API endpointlerinde ana veri kaynağı (DataSource) olarak kullanabilirsiniz.

SELECT
    -- CARI HESAP VE BELGE BILGILERI
    STFICHE.FICHENO AS IRSALIYE_NO,
    INVOICE.FICHENO AS FATURA_NO,
    INVOICE.DATE_ AS TARIH,
    INVOICE.DOCODE AS BELGE_NO,
    CLCARD.CODE AS CARI_HESAP_KODU,
    CLCARD.DEFINITION_ AS CARI_HESAP_UNVANI,
    
    ISNULL(PAYPLANS.CODE,'PEŞİN') AS ODEME_PLANI_KODU,
    ISNULL(PAYPLANS.DEFINITION_,'PEŞİN') AS ODEME_PLANI_ACIKLAMASI,
    STFICHE.TRADINGGRP AS TICARI_ISLEM_GRUP_KODU,
    L_TRADGRP.GDEF AS TICARI_ISLEM_GRUP_ACIKLAMASI,
    
    -- ORGANIZASYONEL GRUPLANDIRMALAR
    L_CAPIDIV.NAME AS ISYERI,
    L_CAPIDEPT.NAME AS BOLUM,
    L_CAPIFACTORY.NAME AS FABRIKA,   
    L_CAPIWHOUSE.NAME AS AMBAR,
    
    INVOICE.SPECODE AS FATURA_OZEL_KODU,
    INVOICE.CYPHCODE AS FATURA_YETKI_KODU,
    LG_SLSMAN.CODE AS SATIŞ_ELEMANI_KODU,
    LG_SLSMAN.DEFINITION_ AS SATIŞ_ELEMANI_ADI,
    
    -- SATIR DETAYLARI VE KART BILGILERI
    CASE STLINE.LINETYPE 
        WHEN 4 THEN SRVCARD.CODE
        ELSE ITEMS.CODE 
    END AS KODU,
    ITEMS.NAME AS ACIKLAMA,
    
    CASE 
        WHEN STLINE.LINETYPE = 0 THEN 'Malzeme'
        WHEN STLINE.LINETYPE = 2 THEN 'İndirim'
        WHEN STLINE.LINETYPE = 4 THEN 'Hizmet'
        ELSE 'Başka' 
    END AS SATIR_TURU,
    
    -- MIKTAR VE BIRIM HESAPLAMALARI
    STLINE.AMOUNT AS MIKTAR,
    CASE WHEN STLINE.TRCODE IN (2,3) THEN STLINE.AMOUNT * -1 ELSE STLINE.AMOUNT END AS NET_MIKTAR,
    STLINE.PLNAMOUNT AS PLANLANAN_MIKTAR,
    UNITSETL.CODE AS BIRIM_KODU,
    UNITSETF.CODE AS BIRIM_SETI_KODU,
    STLINE.UINFO2 AS CEVRIM_KATSYISI_2,
    
    -- ANA DOVIZ CINSINE GÖRE TOPLAM DEĞERLER (TL)
    STLINE.PRICE AS BIRIM_FIYAT,
    STLINE.VAT AS KDV,
    STLINE.TOTAL AS TUTAR,
    STLINE.VATMATRAH AS KDV_MATRAHI,
    STLINE.LINENET AS SATIR_NET_TUTARI,
    (CASE WHEN STLINE.TRCODE IN (2,3) THEN STLINE.LINENET * -1 ELSE STLINE.LINENET END) + STLINE.DIFFPRICE AS NET_SATIS_TUTARI,
    
    -- RAPORLAMA DÖVİZ CİNSİNE GÖRE TUTARLAR
    STFICHE.REPORTRATE AS RAPORLAMA_DOVIZ_KURU,
    CASE STLINE.REPORTRATE WHEN 0 THEN 0 ELSE STLINE.PRICE/STLINE.REPORTRATE END AS RD_BIRIM_FIYATI,
    CASE STLINE.REPORTRATE WHEN 0 THEN 0 ELSE STLINE.TOTAL/STLINE.REPORTRATE END AS RD_TUTARI,
    CASE STLINE.REPORTRATE WHEN 0 THEN 0 ELSE STLINE.VAT/STLINE.REPORTRATE END AS RD_KDV,
    CASE STLINE.REPORTRATE WHEN 0 THEN 0 ELSE STLINE.LINENET/STLINE.REPORTRATE END AS RD_NET_SATIR_TUTARI,
    CASE STLINE.REPORTRATE WHEN 0 THEN 0 ELSE ((CASE WHEN STLINE.TRCODE IN (2,3) THEN STLINE.LINENET * -1 ELSE STLINE.LINENET END) + STLINE.DIFFPRICE) / STLINE.REPORTRATE END AS RD_NET_ALIM_TUTARI,
    
    -- İŞLEM DÖVİZ CİNSİNE GÖRE TUTARLAR
    CASE STLINE.TRCURR WHEN 0 THEN 'TL' ELSE L_CURRENCYLIST.CURCODE END AS ISLEM_DVZ_TURU,
    CASE STLINE.TRRATE WHEN 0 THEN 0 ELSE STLINE.PRICE/STLINE.TRRATE END AS ISLEM_DVZ_BIRIM_FIYATI,
    CASE STLINE.TRRATE WHEN 0 THEN 0 ELSE STLINE.TOTAL/STLINE.TRRATE END AS ISLEM_DVZ_TUTAR,
    
    -- SATIR ÖZEL KOD VE TESLİMAT BİLGİLERİ
    STLINE.SPECODE AS SATIR_OZEL_KODU,
    SPECODE.DEFINITION_ AS SATIR_OZEL_KODU_ACIKLAMASI,
    STLINE.DELVRYCODE AS TESLIMAT_KODU,   
    SPECODES.DEFINITION_ AS TESLIMAT_ACIKLAMASI,
    
    -- ÖTV (ÖZEL TÜKETİM VERGİSİ) DETAYLARI
    STLINE.ADDTAXRATE AS OTV_ORANI,
    STLINE.ADDTAXCONVFACT AS OTV_TUTARI,
    STLINE.ADDTAXAMOUNT AS HESAPLANAN_OTV,
    STLINE.ADDTAXPRCOST AS OTV_MALİYETI,
    
    -- IADE ISLEMLERI VE MALIYETLENDIRME
    CASE STLINE.RETCOSTTYPE 
        WHEN 0 THEN 'Çıkış'
        WHEN 1 THEN 'O anki'
        WHEN 2 THEN 'Tutar' 
    END AS IADE_ISLEMI_MALIYET_TURU,
    STLINE.RETCOST AS IADE_FISLERI_ICIN_IADE_MALIYETI,
    STLINE.OUTCOST AS CIKIS_FISLERI_CIKIS_MALIYETI,
    STLINE.RETAMOUNT AS IADE_MIKTARI,
    
    -- SEVKIYAT VE ADRES BİLGİLERİ
    CLC1.CODE AS SEVKIYAT_HESABI_KODU,
    CLC1.DEFINITION_ AS SEVKIYAT_HESABI_UNVANI,
    CLC2.CODE AS SEVLIYAT_ADRESI_KODU,
    STFICHE.GENEXP1 AS ACIKLAMA_1,
    STFICHE.SHPTYPCOD AS SEVKIYAT_TURU,
    L_SHPTYPES.SDEF AS SEVKIYAT_TURU_ACIKLAMASI
    
FROM LG_001_01_STLINE STLINE WITH (NOLOCK)
LEFT JOIN LG_001_01_STFICHE STFICHE WITH (NOLOCK) ON STLINE.STFICHEREF = STFICHE.LOGICALREF
LEFT JOIN LG_001_01_INVOICE INVOICE WITH (NOLOCK) ON INVOICE.LOGICALREF = STFICHE.INVOICEREF
LEFT JOIN LG_001_CLCARD CLCARD WITH (NOLOCK) ON CLCARD.LOGICALREF = STFICHE.CLIENTREF
LEFT JOIN LG_001_PAYPLANS PAYPLANS WITH (NOLOCK) ON PAYPLANS.LOGICALREF = STFICHE.PAYDEFREF
LEFT JOIN L_TRADGRP WITH (NOLOCK) ON L_TRADGRP.GCODE = STFICHE.TRADINGGRP
LEFT JOIN L_CAPIDIV WITH (NOLOCK) ON L_CAPIDIV.NR = STFICHE.BRANCH AND L_CAPIDIV.FIRMNR = '001'
LEFT JOIN L_CAPIDEPT WITH (NOLOCK) ON L_CAPIDEPT.NR = STFICHE.DEPARTMENT AND L_CAPIDEPT.FIRMNR = '001'
LEFT JOIN L_CAPIFACTORY WITH (NOLOCK) ON L_CAPIFACTORY.NR = STFICHE.FACTORYNR AND L_CAPIFACTORY.FIRMNR = '001'
LEFT JOIN L_CAPIWHOUSE WITH (NOLOCK) ON L_CAPIWHOUSE.NR = STFICHE.SOURCEINDEX AND L_CAPIWHOUSE.FIRMNR = '001'
LEFT JOIN LG_SLSMAN WITH (NOLOCK) ON STFICHE.SALESMANREF = LG_SLSMAN.LOGICALREF AND LG_SLSMAN.FIRMNR = '001'
LEFT JOIN LG_001_CLCARD CLC1 WITH (NOLOCK) ON STFICHE.RECVREF = CLC1.LOGICALREF
LEFT JOIN LG_001_CLCARD CLC2 WITH (NOLOCK) ON STFICHE.SHIPINFOREF = CLC2.LOGICALREF
LEFT JOIN L_SHPTYPES WITH (NOLOCK) ON L_SHPTYPES.SCODE = STFICHE.SHPTYPCOD
LEFT JOIN LG_001_ITEMS ITEMS WITH (NOLOCK) ON ITEMS.LOGICALREF = STLINE.STOCKREF AND STLINE.LINETYPE IN (0,8)
LEFT JOIN LG_001_SRVCARD SRVCARD WITH (NOLOCK) ON SRVCARD.LOGICALREF = STLINE.STOCKREF AND STLINE.LINETYPE = 4
LEFT JOIN LG_001_UNITSETL UNITSETL WITH (NOLOCK) ON STLINE.UOMREF = UNITSETL.LOGICALREF
LEFT JOIN LG_001_UNITSETF UNITSETF WITH (NOLOCK) ON STLINE.USREF = UNITSETF.LOGICALREF
LEFT JOIN LG_001_SPECODES SPECODES WITH (NOLOCK) ON SPECODES.SPECODE = STLINE.DELVRYCODE AND SPECODES.CODETYPE = 3 AND SPECODES.SPECODETYPE = 0
LEFT JOIN LG_001_SPECODES SPECODE WITH (NOLOCK) ON SPECODE.SPECODE = STLINE.SPECODE AND SPECODES.CODETYPE = 1 AND SPECODES.SPECODETYPE = 19
LEFT JOIN L_CURRENCYLIST WITH (NOLOCK) ON L_CURRENCYLIST.CURTYPE = STLINE.TRCURR AND L_CURRENCYLIST.FIRMNR = '001'

WHERE INVOICE.CANCELLED = 0
  AND STLINE.LINETYPE IN (0,2,4,8)
  AND INVOICE.TRCODE IN (2,3,7,8,9,10,14)
  AND (STFICHE.BILLED = 1 OR STFICHE.BILLED IS NULL)

(Not: Tablo isimlerindeki 001 ve 01 ibareleri çalıştığınız firma numarası ve döneme göre LG_XXX_XX_ şeklinde dinamik olarak değiştirilmelidir.)

 

Geliştiriciler İçin Optimizasyon İpuçları

Veritabanından dönen bu devasa sonucu ASP.NET Core MVC projelerinizde veya web panel mimarinizde doğrudan Entity Framework (EF Core) üzerinden bir View’a bind edebilir ya da Dapper ile IEnumerable<InvoiceDto> modelinize kolayca map edebilirsiniz. Tüm yapı NOLOCK mimarisiyle hazırlandığı için, yüksek veri akışı olan firmalarda sisteme anlık yük bindirmeden hızlı dashboard listelemeleri (Grid) yapılmasına imkan tanır.

Özellikle DevExpress GridView veya React DataGrid bileşenleri kullanıyorsanız, sorgudaki Gruplama (Ambar, İşyeri) ve Döviz kırılımları doğrudan Component’in Grouping ve Summary mimarisine tam uyum sağlayacak şekilde yapılandırılmıştır.

Logo Fatura satırları hangi tabloda tutulur?

Logo ERP mimarisinde fatura satır detayları (malzeme, tutar, miktar bilgileri) LG_XXX_XX_STLINE tablosunda tutulmaktadır. Başlık bilgileri ise INVOICE tablosundan okunur.

STFICHE ve INVOICE tabloları arasındaki temel fark nedir?

STFICHE irsaliye, sevk ve malzeme hareketlerinin başlığını tutan lojistik ve operasyonel bir tablodur. INVOICE ise bu irsaliyelerin maliyetlendirildiği ve resmi fatura numarasının verildiği finansal ana başlık tablosudur.

Başlık 3STLINE tablosundaki LINETYPE 4 ne anlama gelir?

Fatura satırında LINETYPE değerinin 4 olması, o satırın fiziksel bir malzeme değil, bir hizmet kalemi (Örn: Nakliye, Danışmanlık bedeli) olduğu anlamına gelir. Bu durumda stok referansı ITEMS yerine SRVCARD (Hizmet Kartları) tablosu ile birleştirilmelidir.

Bu Yazıya Tepkiniz Ne Oldu?
  • 0
    be_endim
    Beğendim
  • 0
    alk_l_yorum
    Alkışlıyorum
  • 0
    e_lendim
    Eğlendim
  • 0
    d_nceliyim
    Düşünceliyim
  • 0
    _rendim
    İğrendim
  • 0
    _z_ld_m
    Üzüldüm
  • 0
    _ok_k_zd_m
    Çok Kızdım

Logo destek, logo go3, logo tiger3, logo muhasebe, logo go3 eğitim, logo tiger eğitim, logo connect, logo kural yazma, logo connect kural, logo sql, logo raporlama, logo rapor tasarımı, logo sqlinfo

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir