Genel Bilgiler

SQL Server
View
⚠️ Devirde Güncellenmeli
23.12.2025 07:15
23.12.2025 16:10

Notlar

Düzenle

Henüz not eklenmemiş.

+ Not ekle

İstatistikler

7
Kod Analizi
34
Satır
0
Kullandığı
0
Kullanan
🔗

İlişki Bulunamadı

Bu nesne için henüz ilişki tanımlanmamış. İlişki Analizi sayfasından otomatik analiz başlatabilirsiniz.

Tam SQL Kodu

Düzenle
CREATE VIEW dbo.[0001_alis_satis_fiyatlari]
AS
SELECT        TOP (100) PERCENT ITM.CODE AS [MALZEME KODU], ITM.NAME AS [MALZEME AÇIKLAMASI], GN.ONHAND - GN.RESERVED - GN.TEMPIN AS [STOK MIKTARI], ISNULL
                             ((SELECT        TOP (1) PRICE
                                 FROM            dbo.LG_011_PRCLIST
                                 WHERE        (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), 0) AS [SATIS FIYATI], ISNULL
                             ((SELECT        TOP (1) CASE WHEN CAST(CURRENCY AS VARCHAR(5)) = 1 THEN 'USD' WHEN CAST(CURRENCY AS VARCHAR(5)) = 20 THEN 'EURO' WHEN CAST(CURRENCY AS VARCHAR(5)) = 160 OR
                                                          CAST(CURRENCY AS VARCHAR(5)) = 0 THEN 'TL' ELSE 'YOK' END AS Expr1
                                 FROM            dbo.LG_011_PRCLIST AS LG_011_PRCLIST_5
                                 WHERE        (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), '') AS [SATIS KURU], ISNULL
                             ((SELECT        TOP (1) PRICE
                                 FROM            dbo.LG_011_PRCLIST AS LG_011_PRCLIST_4
                                 WHERE        (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), 0) AS [ALIS FIYATI], ISNULL
                             ((SELECT        TOP (1) CASE WHEN CAST(CURRENCY AS VARCHAR(5)) = 1 THEN 'USD' WHEN CAST(CURRENCY AS VARCHAR(5)) = 20 THEN 'EURO' WHEN CAST(CURRENCY AS VARCHAR(5)) = 160 OR
                                                          CAST(CURRENCY AS VARCHAR(5)) = 0 THEN 'TL' ELSE 'YOK' END AS Expr1
                                 FROM            dbo.LG_011_PRCLIST AS LG_011_PRCLIST_3
                                 WHERE        (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), '') AS [ALIS KURU], ISNULL
                             ((SELECT        TOP (1) LOGICALREF
                                 FROM            dbo.LG_011_PRCLIST AS LG_011_PRCLIST_2
                                 WHERE        (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), 0) AS [SATIS DURUM], ISNULL
                             ((SELECT        TOP (1) LOGICALREF
                                 FROM            dbo.LG_011_PRCLIST AS LG_011_PRCLIST_1
                                 WHERE        (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
                                 ORDER BY BEGDATE DESC), 0) AS [ALIS DURUM], ITM.LOGICALREF, ITM.UNITSETREF
FROM            dbo.LG_011_ITEMS AS ITM LEFT OUTER JOIN
                         dbo.LV_011_07_GNTOTST AS GN ON GN.STOCKREF = ITM.LOGICALREF AND GN.INVENNO = - 1
WHERE        (ITM.ACTIVE = 0) AND (ITM.NAME <> '')
ORDER BY 'MALZEME AÇIKLAMASI'

Kodun Çalışma Mantığı (Adım Adım)

Analiz Ekle/Düzenle
Adım 1
FROM dbo.LG_011_ITEMS AS ITM
LEFT OUTER JOIN dbo.LV_011_07_GNTOTST AS GN
  ON GN.STOCKREF = ITM.LOGICALREF AND GN.INVENNO = - 1
WHERE (ITM.ACTIVE = 0) AND (ITM.NAME <> '')

Ne oluyor?

  • Listeyi LG_011_ITEMS (malzeme kartı) üzerinden kuruyor. (CODE, NAME, LOGICALREF, UNITSETREF buradan geliyor.) ugurozpinar.github.io+1

  • LV_011_07_GNTOTST ile STOCKREF = malzeme logicalref üzerinden birleşip stok toplamlarını çekiyor.

  • INVENNO = -1 genelde “tüm ambarlar / genel toplam” mantığında kullanılır (sizdeki yapı bu şekilde kurgulanmış).

  • ITM.ACTIVE = 0 ve ITM.NAME <> '' ile aktif olan ve adı boş olmayan kartları listeliyor (Logo’da ACTIVE alanı bu şekilde sık kullanılır).

Adım 2
GN.ONHAND - GN.RESERVED - GN.TEMPIN AS [STOK MİKTARI]

Ne oluyor?

  • Stok toplamından “kullanılabilir stok” gibi bir değer üretiyor:

    • ONHAND (eldeki stok)

    • RESERVED (rezerve/ayrılmış)

    • TEMPIN (geçici giriş / geçici işlem etkisi)

  • Sonuç: net kullanılabilir stok gibi düşünülmüş.

Buradaki alanların isimleri zaten stok toplam mantığını gösteriyor; view bunu “eldeki - ayrılmış - geçici” şeklinde nete çeviriyor.

Adım 3
ISNULL(
  (SELECT TOP (1) PRICE
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  0
) AS [SATIŞ FİYATI]

Ne oluyor?

  • LG_011_PRCLIST Logo’da fiyat kartları / fiyat listesi tablosu. ugurozpinar.github.io

  • PTYPE = 2satış fiyatı tipini seçiyor. (PTYPE: 1 alış, 2 satış) ugurozpinar.github.io

  • CARDREF = ITM.LOGICALREF → fiyat kaydı hangi malzemeye ait (malzeme referansına bağlıyor).

  • ORDER BY BEGDATE DESC + TOP 1 → “başlangıç tarihi en yeni olan fiyat kaydı”nı alıyor.

  • Fiyat yoksa ISNULL(..., 0) → 0 dönüyor.

Adım 4
ISNULL(
  (SELECT TOP (1)
     CASE
       WHEN CAST(CURRENCY AS VARCHAR(5)) = 1 THEN 'USD'
       WHEN CAST(CURRENCY AS VARCHAR(5)) = 20 THEN 'EURO'
       WHEN CAST(CURRENCY AS VARCHAR(5)) = 160 OR CAST(CURRENCY AS VARCHAR(5)) = 0 THEN 'TL'
       ELSE 'YOK'
     END
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  ''
) AS [SATIŞ KURU]

Ne oluyor?

  • Aynı “en güncel satış fiyat kaydı”nın CURRENCY alanını alıyor. (LG_PRCLIST.CURRENCY alanı “Döviz türü” olarak geçer.) ugurozpinar.github.io

  • Sonra CASE ile sizin sistemdeki kodlara göre USD/EURO/TL metnine çeviriyor.

    • (Not: Buradaki 1/20/160 değerleri Logo’nun kur tablosu/parametrelerine göre değişebilen bir eşleştirme olabiliyor; sizde böyle map’lenmiş.)

Adım 5
ISNULL(
  (SELECT TOP (1) PRICE
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  0
) AS [ALIŞ FİYATI]

Ne oluyor?

  • PTYPE = 1alış fiyatı tipini seçiyor. ugurozpinar.github.io

  • Yine en güncel (BEGDATE en büyük) kaydı alıyor; yoksa 0.

Adım 6
ISNULL(
  (SELECT TOP (1)
     CASE ... END
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  ''
) AS [ALIŞ KURU]

Ne oluyor?

  • Aynı mantıkla alış fiyat kaydının CURRENCY alanını yazıya çeviriyor.

Adım 7
ISNULL(
  (SELECT TOP (1) LOGICALREF
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 2) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  0
) AS [SATIŞ DURUM]



ISNULL(
  (SELECT TOP (1) LOGICALREF
   FROM dbo.LG_011_PRCLIST
   WHERE (PTYPE = 1) AND (ACTIVE = 0) AND (CARDREF = ITM.LOGICALREF)
   ORDER BY BEGDATE DESC),
  0
) AS [ALIŞ DURUM]

Ne oluyor?

  • Burada fiyatın kendisini değil, o fiyat kaydının LOGICALREF’ini alıyor.

  • Pratik kullanım:

    • 0 ise “bu malzemede o tip fiyat kaydı yok”

    • 0 değilse “fiyat kaydı var” (ve istersen o kaydı referans alıp başka alanlarını da çekebilirsin)