Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Yürüyen bakiye
#51
(Dün, Saat: 13:03)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Benim yapım size uymayacaktır büyük ihtimalle o yüzden vermemin bi anlamı yok ama mantığı şöyle anlatayım size;

bir CARI tablom var.

Buna bağlı CARI_ISLEM tablom var,
KOD, TARIH, CARIKODU, ISLEMTURU(0:devir borc, 1:devir alacak, 2:Nk Tah.[alacak], 3:Nk Ödeme[borc]), BORC, ALACAK alanlarım var,
ISLEMTURU'ne göre BORC yada ALACAK alanlarına kaydediyorum.

Yine CARI ve STOK tablolarıma bağlı FATURA tablom var,
KOD, TARIH, CARIKODU, ISLEMTURU(0:Alış Ft.[alacak], 1:Satıs Ft.[borc]), BORC, ALACAK alanlarım var,
ISLEMTURU'ne göre BORC yada ALACAK alanlarına kaydediyorum.

Yine CARI tabloma bağlı CEKSENET tablom var,
KOD, TARIH, CARIKODU, ISLEMTURU(0:Cek/Senet Girişi[alacak], 1:Cek/Senet Çıkışı[borc]), BORC, ALACAK alanlarım var,
ISLEMTURU'ne göre BORC yada ALACAK alanlarına kaydediyorum.

yani kısaca tüm tablolarımda KOD, TARIH, CARIKODU, BORC ve ALACAK ortak alanlarım var, bunları birleştirip (KOD, TARIH, CARIKODU, BORC, ALACAK alanları olan) bir view oluşturuyorum. Sonrada bir stored procedure ile bu view den istediğim CARI nin verileri çekiyorum. Çekerkende her satırda BAKIYE hesaplatıyorum.

Mantık kısaca budur.

@esistem işte buuuu. esistem sayende hallettim. tablo yapısını verince senin view'dan kopya çekerek gerisi geldi. sonun da oldu.
sadeleştirilmiş kodları herkes anlayabilsin diye şuraya koyalım.

view kodları :
CREATE VIEW yuruyen(
   CARIID,
   TARIH,
   ACIKLAMA,
   BORC,
   ALACAK)
AS
select a.als_crid, a.als_tarih, a.als_faturano, 0, a.als_tutar from tbl_alis A
left join tbl_cari c on c.cr_id=a.als_crid
union all

select s.sts_crid, s.sts_tarih, s.sts_faturano, s.sts_tutar, 0 from tbl_satis S
left join tbl_cari c on c.cr_id=s.sts_crid
union all

select b.banka_crid, b.banka_tarih, b.banka_hareket, b.banka_cikan, b.banka_giren from tbl_banka B
left join tbl_cari c on c.cr_id=b.banka_crid
union all

select o.od_crid, o.od_tarih, o.od_aciklama, o.od_tutar, 0 from tbl_odeme O
left join tbl_cari c on c.cr_id=o.od_crid
union all

select t.th_crid, t.th_tarih, t.th_aciklama, 0, t.th_tutar from tbl_tahsilat T
left join tbl_cari c on c.cr_id=t.th_crid
;

SP kodları:
CREATE OR ALTER PROCEDURE PROC_yuruyen(
    MUSTERI_ID INTEGER)
RETURNS (
    MUSTERI INTEGER,
    TARIH DATE,
    ACIKLAMA VARCHAR(100),
    BORC NUMERIC(15,2),
    ALACAK NUMERIC(15,2),
    BAKIYE NUMERIC(15,2))
AS
declare variable dyn_bakiye numeric(15,2);
declare c cursor for (select cariid, tarih, aciklama, borc, alacak from cislem
where cariid=:musteri_id order by tarih, cariid);
BEGIN
DYN_BAKIYE = 0.00;
OPEN C;  
 WHILE (1 = 1) DO
    BEGIN
    FETCH C INTO :musteri, :tarih, :aciklama, :borc, :alacak;
    IF (ROW_COUNT = 0) THEN LEAVE;
      DYN_BAKIYE = DYN_BAKIYE + (borc - alacak);
      BAKIYE = DYN_BAKIYE;
    SUSPEND;
    END
  CLOSE C;
END
Dosyalarınızı kendi bulutunuza yedekleyin. Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Eyvallah..
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi