Mikro ERP Çek ve Senet Vade Takip Raporu: Portföy Durumu SQL Sorgusu

Mikro ERP'de çek ve senet portföyü nasıl takip edilir? Vadesi gelen çekler, portföy durumu, ciro edilen ve tahsildeki senetleri listeleyen SQL sorguları.

Sorun: “Bu Hafta Vadesi Gelen Çek Var Mı?”

Finans yöneticisi her pazartesi soruyor: “Bu hafta tahsil edilecek çek ne kadar? Ciro ettiğimiz senet ödendi mi?” Bu soruların cevabı CARI_HESAP_HAREKETLERI tablosunda — ama doğru filtreler olmadan çöp veri dönersiniz.

Çek/Senet Mantığı: cha_cinsi ve cha_sntck_poz

Mikro’da çek/senet hareketleri iki kritik alanla takip edilir:

cha_cinsi — Hareket Cinsi:

KodAçıklama
1Müşteri Çeki
2Müşteri Senedi
3Firma Çeki
4Firma Senedi

cha_sntck_poz — Çek/Senet Pozisyonu:

KodAçıklama
0Portföyde
1Ciro Edildi
2Tahsilde
3Teminatta
4İade Edilen
6Ödenmedi, Portföyde
7Ödenmedi, İade
8İcrada
9Kısmen Ödendi
10Ödendi

Kaynak: CARI_HESAP_HAREKETLERI — cha_sntck_poz detayı

Kritik Uyarı: Vade Tarihi Alanı

Mikro’da çek/senet vade tarihi cha_reftarihi alanında değildir. Bu alan çoğu kayıtta boştur (1899-12-30 görünür). Gerçek vade tarihi cha_vade alanında YYYYMMDD formatında integer olarak saklanır (örn: 20261231 = 31.12.2026). Sorgularda TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112) ile datetime’a çevrilmelidir.

Portföydeki Çekler — Vade Takvimi

SELECT 
    cha_kod                                        AS [Cari Kodu],
    C.cari_unvan1                                  AS [Kesideci / Cari],
    cha_belge_no                                   AS [Cek No],
    cha_meblag                                     AS [Tutar],
    CONVERT(VARCHAR(10), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112), 104) AS [Vade Tarihi],
    DATEDIFF(DAY, GETDATE(), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112)) AS [Kalan Gun],
    CASE 
        WHEN TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112) < GETDATE() THEN 'Vadesi Gecti'
        WHEN TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112) <= DATEADD(DAY, 7, GETDATE()) THEN 'Bu Hafta'
        WHEN TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112) <= DATEADD(DAY, 30, GETDATE()) THEN 'Bu Ay'
        ELSE 'Ileri Vade'
    END                                             AS [Durum],
    CASE cha_sntck_poz
        WHEN 0 THEN 'Porfoyde'
        WHEN 2 THEN 'Tahsilde'
        WHEN 3 THEN 'Teminatta'
        ELSE 'Poz: ' + CAST(cha_sntck_poz AS VARCHAR)
    END                                             AS [Pozisyon]
FROM CARI_HESAP_HAREKETLERI WITH (NOLOCK)
LEFT JOIN CARI_HESAPLAR C WITH (NOLOCK) ON cha_kod = C.cari_kod
WHERE cha_cinsi IN (1, 2)                           -- Musteri ceki + senedi
  AND cha_sntck_poz IN (0, 2, 3)                    -- Porfoyde, tahsilde veya teminatta
  AND cha_iptal = 0
  AND cha_tip = 1                                   -- Alacak (giren)
  AND cha_vade > 0                                  -- Vadesiz kayitlari disla
ORDER BY cha_vade;

Haftalık Vade Özeti

Bu hafta ne kadar tahsilat beklendiğini görmek:

SELECT 
    DATEPART(WEEK, TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112)) AS [Hafta No],
    MIN(CONVERT(VARCHAR(10), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112), 104)) AS [Baslangic],
    MAX(CONVERT(VARCHAR(10), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112), 104)) AS [Bitis],
    COUNT(*)                                        AS [Adet],
    SUM(cha_meblag)                                AS [Toplam Tutar],
    SUM(CASE WHEN cha_cinsi = 1 THEN cha_meblag ELSE 0 END) AS [Cek Toplami],
    SUM(CASE WHEN cha_cinsi = 2 THEN cha_meblag ELSE 0 END) AS [Senet Toplami]
FROM CARI_HESAP_HAREKETLERI WITH (NOLOCK)
WHERE cha_cinsi IN (1, 2)
  AND cha_sntck_poz IN (0, 2, 3)
  AND cha_iptal = 0
  AND cha_tip = 1
  AND cha_vade > 0
  AND TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112) BETWEEN GETDATE() AND DATEADD(MONTH, 3, GETDATE())
GROUP BY DATEPART(WEEK, TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112))
ORDER BY [Hafta No];

Firma Çekleri — Ne Zaman Ne Kadar Ödeyeceğiz?

Firmanın kendi verdiği çek ve senetlerin vade takvimi:

SELECT 
    cha_kasa_hizkod                                AS [Odenen Cari],
    C.cari_unvan1                                  AS [Unvan],
    cha_belge_no                                   AS [Cek No],
    cha_meblag                                     AS [Tutar],
    CONVERT(VARCHAR(10), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112), 104) AS [Vade Tarihi],
    DATEDIFF(DAY, GETDATE(), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112)) AS [Kalan Gun],
    CASE WHEN cha_cinsi = 3 THEN 'Firma Ceki' ELSE 'Firma Senedi' END AS [Tur]
FROM CARI_HESAP_HAREKETLERI WITH (NOLOCK)
LEFT JOIN CARI_HESAPLAR C WITH (NOLOCK) ON cha_kasa_hizkod = C.cari_kod
WHERE cha_cinsi IN (3, 4)                           -- Firma ceki + senedi
  AND cha_sntck_poz NOT IN (10, 4)                  -- Odenmemis ve iade edilmemis
  AND cha_iptal = 0
  AND cha_vade > 0
ORDER BY cha_vade;

Karşılıksız / Protestolu Çek Listesi

SELECT 
    cha_kod                                         AS [Cari],
    C.cari_unvan1                                   AS [Unvan],
    cha_belge_no                                    AS [Cek/Senet No],
    cha_meblag                                      AS [Tutar],
    CONVERT(VARCHAR(10), TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112), 104) AS [Vade],
    CASE cha_sntck_poz
        WHEN 6 THEN 'Karsiliksiz - Porfoyde'
        WHEN 7 THEN 'Karsiliksiz - Iade'
        WHEN 8 THEN 'Icrada'
    END                                              AS [Durum]
FROM CARI_HESAP_HAREKETLERI WITH (NOLOCK)
LEFT JOIN CARI_HESAPLAR C WITH (NOLOCK) ON cha_kod = C.cari_kod
WHERE cha_cinsi IN (1, 2)
  AND cha_sntck_poz IN (6, 7, 8)                    -- Sorunlu pozisyonlar
  AND cha_iptal = 0
ORDER BY cha_meblag DESC;

Dikkat Edilecekler

  1. cha_vade vs cha_reftarihi: Çek/senette vade tarihi cha_vade alanında YYYYMMDD integer formatındadır (örn: 20261231). cha_reftarihi alanı çoğu kayıtta boştur ve güvenilir değildir. Datetime’a çevrim: TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112).
  2. cha_trefno: Çek/senet referans numarasıdır. cha_belge_no ile farklı olabilir.
  3. Ciro edilen çekler: cha_sntck_poz = 1 olan çekler ciro edilmiştir, portföyünüzde değildir.

İlgili Yazılar


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

📚 İlgili Yazılar