Mikro ERP Fiyat Listesi Neden Yanlış Geliyor? SQL ile Fiyat Kontrolü

Mikro ERP'de satış fiyatı neden yanlış? STOK_SATIS_FIYAT_LISTELERI tablosundan fiyat doğrulama, müşteriye özel fiyat kontrolü ve liste...

Sorun: “Fiyat Neden Yanlış Geldi?”

Sipariş kesildi, fatura çıktı — ama müşteri “fiyat yanlış” diyor. Bu ERP kullanan firmaların en sinir bozucu sorunlarından biridir. Genellikle şu sebeplerden kaynaklanır:

  • Stok kartında birden fazla fiyat listesi tanımlı ve yanlışı aktif
  • Müşterinin cari kartındaki ödeme planı farklı bir fiyat listesine bağlı
  • Fiyat listesi güncellenmiş ama eski tarihli sipariş eski fiyattan gitmiş
  • Döviz cinsi veya kur farkı

Hangi Tablolar Kullanılmalı?

TabloNe Tutar?Neden Önemli?
STOK_SATIS_FIYAT_LISTELERIÜrün bazlı fiyat tanımlarıGüncel fiyatı kontrol etmek
CARI_HESAPLARMüşteri bilgileriHangi fiyat listesine bağlı?
STOKLARÜrün kartıStok kodu ve isim

Kaynak: STOK_SATIS_FIYAT_LISTELERI · CARI_HESAPLAR

Bir Ürünün Tüm Fiyat Listelerini Görmek

SELECT 
    FL.sfiyat_stokkod                              AS [Stok Kodu],
    S.sto_isim                                     AS [Urun Adi],
    FL.sfiyat_listesirano                           AS [Liste No],
    FL.sfiyat_fiyati                                AS [Fiyat],
    CASE FL.sfiyat_doviz
        WHEN 0 THEN 'TL'
        WHEN 1 THEN 'USD'
        WHEN 2 THEN 'EUR'
        ELSE 'Doviz: ' + CAST(FL.sfiyat_doviz AS VARCHAR)
    END                                             AS [Doviz],
    FL.sfiyat_odemeplan                              AS [Odeme Plani]
FROM STOK_SATIS_FIYAT_LISTELERI FL WITH (NOLOCK)
INNER JOIN STOKLAR S WITH (NOLOCK) ON FL.sfiyat_stokkod = S.sto_kod
WHERE FL.sfiyat_stokkod = 'STK.001'                 -- Stok kodu (isletmenize gore degistirin)
  AND FL.sfiyat_iptal = 0
ORDER BY FL.sfiyat_listesirano;

Müşterinin Görmesi Gereken Fiyat

Bir müşterinin cari kartındaki fiyat kodu ile stok fiyat listesini eşleştirme:

SELECT 
    C.cari_kod                                     AS [Cari Kodu],
    C.cari_unvan1                                  AS [Musteri],
    C.cari_odemeplan_no                             AS [Odeme Plani No],
    FL.sfiyat_stokkod                               AS [Stok Kodu],
    S.sto_isim                                     AS [Urun],
    FL.sfiyat_fiyati                                AS [Uygulanmasi Gereken Fiyat],
    FL.sfiyat_listesirano                           AS [Liste No]
FROM CARI_HESAPLAR C WITH (NOLOCK)
INNER JOIN STOK_SATIS_FIYAT_LISTELERI FL WITH (NOLOCK)
    ON FL.sfiyat_odemeplan = C.cari_odemeplan_no
INNER JOIN STOKLAR S WITH (NOLOCK) 
    ON FL.sfiyat_stokkod = S.sto_kod
WHERE C.cari_kod = '120.001'                       -- Cari kodu (isletmenize gore degistirin)
  AND FL.sfiyat_stokkod = 'STK.001'                 -- Stok kodu (isletmenize gore degistirin)
  AND FL.sfiyat_iptal = 0;

Fiyatsız Ürünleri Bulma

Fiyat listesinde tanımı olmayan ürünler:

SELECT TOP 50
    S.sto_kod                                      AS [Stok Kodu],
    S.sto_isim                                     AS [Urun Adi]
FROM STOKLAR S WITH (NOLOCK)
LEFT JOIN STOK_SATIS_FIYAT_LISTELERI FL WITH (NOLOCK) 
    ON FL.sfiyat_stokkod = S.sto_kod
    AND FL.sfiyat_iptal = 0
WHERE FL.sfiyat_stokkod IS NULL
  AND S.sto_iptal = 0
ORDER BY S.sto_isim;

Son Satış Fiyatı vs Liste Fiyatı Karşılaştırması

Gerçekte uygulanan fiyat ile listede tanımlı fiyat arasındaki farkı yakalamak:

;WITH SonSatis AS (
    SELECT 
        sth_stok_kod,
        sth_cari_kodu,
        sth_tutar,
        sth_miktar,
        CASE WHEN sth_miktar > 0 
             THEN ROUND(sth_tutar / sth_miktar, 2) 
             ELSE 0 END AS BirimFiyat,
        ROW_NUMBER() OVER (PARTITION BY sth_stok_kod ORDER BY sth_tarih DESC) AS RN
    FROM STOK_HAREKETLERI WITH (NOLOCK)
    WHERE sth_tip = 1 AND sth_cins = 0
      AND sth_iptal = 0 AND sth_miktar > 0
)
SELECT TOP 50
    SS.sth_stok_kod                                AS [Stok Kodu],
    S.sto_isim                                     AS [Urun],
    SS.BirimFiyat                                  AS [Son Satis Fiyati],
    FL.sfiyat_fiyati                                AS [Liste Fiyati],
    ROUND(SS.BirimFiyat - ISNULL(FL.sfiyat_fiyati, 0), 2) AS [Fark],
    CASE 
        WHEN FL.sfiyat_fiyati IS NULL THEN 'Liste tanimi yok'
        WHEN SS.BirimFiyat < FL.sfiyat_fiyati THEN 'Liste altinda satis!'
        WHEN SS.BirimFiyat > FL.sfiyat_fiyati THEN 'Liste ustunde'
        ELSE 'Esit'
    END                                             AS [Durum]
FROM SonSatis SS
INNER JOIN STOKLAR S WITH (NOLOCK) ON SS.sth_stok_kod = S.sto_kod
LEFT JOIN STOK_SATIS_FIYAT_LISTELERI FL WITH (NOLOCK)
    ON FL.sfiyat_stokkod = SS.sth_stok_kod
    AND FL.sfiyat_listesirano = 1                   -- Liste 1 (varsayilan)
    AND FL.sfiyat_iptal = 0
WHERE SS.RN = 1
ORDER BY [Fark];

Dikkat Edilecekler

  1. Birden fazla fiyat listesi: Mikro’da bir ürünün 10+ fiyat listesi olabilir. Müşterinin ödeme planına göre doğru liste seçilir.
  2. Tarih aralığı: STOK_SATIS_FIYAT_LISTELERI tablosunda tarih alanı bulunmamaktadır. Fiyat geçerliliği sfiyat_iptal ve sfiyat_listesirano ile yönetilir.
  3. Döviz cinsi: TL fiyat listesindeki fiyat ile USD fiyat listesindeki fiyat karıştırılmamalı.
  4. İskonto etkisi: Fiyat listesindeki fiyat brüt fiyattır. Cariye özel iskonto varsa net fiyat farklı olacaktır.

İlgili Yazılar


Bu rehber Mikro ERP API Docs tablo yapısına dayanarak hazırlanmıştır.

📚 İlgili Yazılar