Logo Hazır SQL Sorguları: Kopyala-Çalıştır 8 Örnek (GO 3/Tiger)
Logo (Tiger, GO 3, GO Plus) veritabanından hızlı rapor almak isteyenler için en çok ihtiyaç duyulan 8 SQL sorgusunu bir araya getirdik: aktif cari ve stok listesi, satış irsaliyeleri, en çok satan ürünler, cari bakiye, açık siparişler, net stok miktarı ve aylık ciro. Sorguların tamamı gerçek bir Logo GO 3 veritabanında çalıştırılıp doğrulanmıştır.
Önce şu iki kuralı bilin
Logo sorguları iki noktada diğer ERP'lerden ayrılır:
- Tablo ve fonksiyon adları firma/dönem önekli. Aşağıdaki sorgularda tabloları mantıksal adıyla (
ITEMS,STLINE) yazdık. Kendi veritabanınızda başına önek eklemelisiniz: kart tablolarıLG_{firma}_(örneğinLG_323_ITEMS), hareket/fiş tablolarıLG_{firma}_{dönem}_(örneğinLG_323_01_STLINE). Fonksiyonlar da önekli:dbo.LG_323_01_GETUNITCOEF(...). ACTIVE = 0aktif demektir ve ilişkilerLOGICALREFsayısal anahtarıyla kurulur (kodla değil).
Örneğin 323 numaralı firma, 1. dönem için ilk sorgunun tam (önekli) hali şöyle olur:
SELECT CODE, DEFINITION_, CITY, TAXNR
FROM LG_323_CLCARD
WHERE ACTIVE = 0
ORDER BY CODE;
Aşağıda okunabilirlik için önekleri kaldırdık; kendi firma/dönem numaranızı ekleyerek çalıştırın.
1. Aktif cari kartları
SELECT CODE, DEFINITION_, CITY, TAXNR
FROM CLCARD
WHERE ACTIVE = 0
ORDER BY CODE;
CLCARD firma-master tablodur (LG_{firma}_CLCARD). Ünvan DEFINITION_, aktiflik ACTIVE = 0.
2. Stok kartları (KDV oranıyla)
SELECT CODE, NAME, VAT
FROM ITEMS
WHERE ACTIVE = 0
ORDER BY CODE;
ITEMS.VAT doğrudan yüzde orandır (Mikro'daki gibi bir "pointer" değildir). Stok adı NAME, kodu CODE.
3. Bu dönem satış irsaliyeleri
SELECT F.DATE_, F.FICHENO, C.CODE AS cari_kod, C.DEFINITION_ AS cari_ad, F.NETTOTAL
FROM STFICHE F
JOIN CLCARD C ON C.LOGICALREF = F.CLIENTREF
WHERE F.TRCODE = 8 AND F.IOCODE = 3 AND F.CANCELLED = 0
ORDER BY F.DATE_ DESC;
Satış irsaliyesi = TRCODE = 8, IOCODE = 3 (çıkış). Cari bağı CLIENTREF = CLCARD.LOGICALREF. Tarih kolonu DATE_ (alt çizgiyle).
4. En çok satan 10 ürün (miktar bazlı)
SELECT TOP 10 I.CODE, I.NAME,
SUM(SL.AMOUNT * dbo.GETUNITCOEF(SL.UINFO1, SL.UINFO2)) AS toplam_miktar
FROM STLINE SL
JOIN ITEMS I ON I.LOGICALREF = SL.STOCKREF
WHERE SL.LINETYPE = 0 AND SL.CANCELLED = 0 AND SL.TRCODE = 8
GROUP BY I.CODE, I.NAME
ORDER BY toplam_miktar DESC;
LINETYPE = 0 indirim/promosyon satırlarını dışarıda bırakır. Miktar ana birime GETUNITCOEF(UINFO1, UINFO2) ile çevrilir (fonksiyon da önekli: dbo.LG_{firma}_{dönem}_GETUNITCOEF).
5. En yüksek borçlu 5 cari
SELECT TOP 5 C.CODE, C.DEFINITION_,
SUM(CASE WHEN F.SIGN = 0 THEN F.AMOUNT ELSE -F.AMOUNT END) AS bakiye
FROM CLFLINE F
JOIN CLCARD C ON C.LOGICALREF = F.CLIENTREF
WHERE F.CANCELLED = 0
GROUP BY C.CODE, C.DEFINITION_
HAVING SUM(CASE WHEN F.SIGN = 0 THEN F.AMOUNT ELSE -F.AMOUNT END) > 0
ORDER BY bakiye DESC;
Cari bakiye CLFLINE hareketlerinden hesaplanır: SIGN = 0 borç, SIGN = 1 alacak. Bakiye = borç − alacak.
6. Açık sipariş kalemleri (kalan miktarıyla)
SELECT O.FICHENO, C.CODE AS cari, I.CODE AS stok,
OL.AMOUNT, OL.SHIPPEDAMOUNT, (OL.AMOUNT - OL.SHIPPEDAMOUNT) AS kalan
FROM ORFLINE OL
JOIN ORFICHE O ON O.LOGICALREF = OL.ORDFICHEREF
JOIN ITEMS I ON I.LOGICALREF = OL.STOCKREF
JOIN CLCARD C ON C.LOGICALREF = OL.CLIENTREF
WHERE OL.CLOSED = 0 AND OL.CANCELLED = 0 AND (OL.AMOUNT - OL.SHIPPEDAMOUNT) > 0
ORDER BY O.FICHENO;
Açık kalem: sevk edilmemiş (CLOSED = 0) ve kalanı (AMOUNT − SHIPPEDAMOUNT) sıfırdan büyük satırlar.
7. Bir stoğun net miktarı (giriş − çıkış)
SELECT SUM(
SL.AMOUNT
* dbo.GETUNITCOEF(SL.UINFO1, SL.UINFO2)
* dbo.GETSTTRANSCOEF(SL.TRCODE, SL.IOCODE, SL.LINETYPE, 0, 0, 0, 0, SL.SOURCELINK, SL.BILLED, 0)
) AS net_miktar
FROM STLINE SL
WHERE SL.STOCKREF = (SELECT LOGICALREF FROM ITEMS WHERE CODE = @stok)
AND SL.CANCELLED = 0;
Yönü (giriş +, çıkış −) GETSTTRANSCOEF verir; miktarı birim katsayısıyla GETUNITCOEF düzeltir. Yönü tek başına IOCODE'dan çıkarmayın — iade ve özel işlemlerde yanılırsınız.
8. Aylık satış cirosu (faturadan)
SELECT YEAR(DATE_) AS yil, MONTH(DATE_) AS ay,
COUNT(*) AS fatura_adedi, SUM(NETTOTAL) AS ciro
FROM INVOICE
WHERE TRCODE = 8 AND CANCELLED = 0
GROUP BY YEAR(DATE_), MONTH(DATE_)
ORDER BY yil DESC, ay DESC;
Satış faturaları INVOICE başlık tablosunda TRCODE = 8 ile tutulur; net tutar NETTOTAL. İptalleri (CANCELLED = 0) dışlamayı unutmayın.
Sık sorulanlar
Bu sorguları doğrudan çalıştırınca "Invalid object name" alıyorum. Logo tablo ve fonksiyon adları firma/dönem önekli olduğundan mantıksal adlar tek başına çalışmaz. Kart tablolarına LG_{firma}_, hareket tablolarına ve fonksiyonlara LG_{firma}_{dönem}_ önekini ekleyin (örneğin LG_323_01_STLINE, dbo.LG_323_01_GETUNITCOEF).
Satış ile alışı nasıl ayırırım? Stok tarafında TRCODE + IOCODE birlikte okunur; satış tipik olarak TRCODE = 8, IOCODE = 3. Fatura tarafında satış INVOICE.TRCODE = 8'dir. Kendi verinizde GROUP BY TRCODE, IOCODE ile dağılımı bir kez teyit edin.
Neden SUM(AMOUNT) yanlış miktar veriyor? İki nedenle: farklı birimlerden girilen satırlar ana birime çevrilmeden toplanır (GETUNITCOEF gerekir) ve giriş/çıkış yönü hesaba katılmaz (GETSTTRANSCOEF gerekir). Net miktar için 7. sorgudaki deseni kullanın.
Cari bakiye kartta yok mu? Hayır; Logo bakiyeyi CLCARD'da tutmaz, CLFLINE hareketlerinden SIGN (0 borç / 1 alacak) ile hesaplarsınız. Detaylı ekstre için ayrı yazımıza bakın.
Bu sorguları elle yazmak yerine Erp Asistanı ile Türkçe sorabilirsiniz: "bu dönem en çok satan 10 ürünü getir" dersiniz, sistem Logo şemasına uygun (LG önekleri, LOGICALREF bağları, doğru fonksiyonlar dahil) çalışan SQL'i üretir; kopyalayıp çalıştırırsınız.
Mikro'da SQL ve raporu konuşarak alın
Türkçe sorunuzu yazın, şemanıza uygun çalışan SQL'i ya da hazır uygulamanızı saniyeler içinde alın. Kredi kartı gerekmez.