---
title: "Mikro ERP Çek ve Senet Vade Takip Raporu: Portföy Durumu SQL Sorgusu"
description: "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ı."
date: 2026-04-15
category: mikro-erp
tags: ["mikro-erp", "sql-server", "cek-senet", "vade-takip", "portfoy", "nakit-akis"]
url: https://mikroerp.dev/blog/mikro-erp-cek-senet-vade-takip-sql/
---

## 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 |

> **Kaynak:** [CARI_HESAP_HAREKETLERI — cha_sntck_poz detayı](https://apidocs.mikro.com.tr/tablo-alan-adlari/cari_hesap_hareketleri)

## 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

```sql
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:

```sql
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:

```sql
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

```sql
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

- [Cari Risk Raporu](/blog/mikro-erp-cari-risk-raporu-sql/) — Bakiye + açık sipariş + teminat
- [Cari Ekstre Raporu](/blog/mikro-erp-cari-ekstre-raporu-sql/) — Borç/alacak listesi
- [Kapanmamış Hareketler](/blog/mikro-erp-kapanmamis-cari-hareket-sql/) — Açık evraklar
- [Kasa ve Nakit Akış](/blog/mikro-erp-kasa-nakit-akis-raporu-sql/) — Nakit takip

---

*Bu rehber [Mikro ERP API Docs](https://apidocs.mikro.com.tr/tablo-alan-adlari/cari_hesap_hareketleri) tablo yapısına dayanarak hazırlanmıştır.*