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:
| Kod | Açıklama |
|---|---|
| 1 | Müşteri Çeki |
| 2 | Müşteri Senedi |
| 3 | Firma Çeki |
| 4 | Firma Senedi |
cha_sntck_poz — Çek/Senet Pozisyonu:
| Kod | Açıklama |
|---|---|
| 0 | Portföyde |
| 1 | Ciro Edildi |
| 2 | Tahsilde |
| 3 | Teminatta |
| 4 | İade Edilen |
| 6 | Ödenmedi, Portföyde |
| 7 | Ödenmedi, İade |
| 8 | İcrada |
| 9 | Kısmen Ödendi |
| 10 | Ödendi |
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
cha_vadevscha_reftarihi: Çek/senette vade tarihicha_vadealanında YYYYMMDD integer formatındadır (örn:20261231).cha_reftarihialanı çoğu kayıtta boştur ve güvenilir değildir. Datetime’a çevrim:TRY_CONVERT(datetime, CONVERT(char(8), cha_vade), 112).cha_trefno: Çek/senet referans numarasıdır.cha_belge_noile farklı olabilir.- Ciro edilen çekler:
cha_sntck_poz = 1olan çekler ciro edilmiştir, portföyünüzde değildir.
İlgili Yazılar
- Cari Risk Raporu — Bakiye + açık sipariş + teminat
- Cari Ekstre Raporu — Borç/alacak listesi
- Kapanmamış Hareketler — Açık evraklar
- Kasa ve Nakit Akış — Nakit takip
Bu rehber Mikro ERP API Docs tablo yapısına dayanarak hazırlanmıştır.