FireBird de Detail tabloda hesaplama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

FireBird de Detail tabloda hesaplama

Mesaj gönderen mikser »

herkese selamlar,

FB 1.5 kullanıyorum.

iki tablom var.

Kod: Tümünü seç

master
ID index    

ID  TARIH             TUTAR   KDV    TOPLAM 
 1    01.01.2004        0         0        0

detail (ID VE SIRA index)
ID  SIRA   MIKTAR    FIYAT    KDVORAN    TUTAR    
 1    1       1        100       18      118
 1    2       1        100       20      120

master tabloya toplamlari nasıl yazdırabilirim?

TUTAR 200 , KDV 38 , TOPLAM 238 olması gerekir.

detail tabloda for select ile kayıtlari seciyorum fakat hesabi nerde yapip master tabloya kaydedecegimi bilemedim.

bu kodda hesabı nerde yaptirmam gerekiryor, master tabloya nerde yazdırmam gerekiryor.

Kod: Tümünü seç

CREATE PROCEDURE TOPLAM (
    ISTEKID INTEGER)
RETURNS (
    ID INTEGER,
    SIRA VARCHAR(12),
    MIKTAR NUMERIC(15,2),
    TFIYAT NUMERIC(15,2),
    KDVORAN NUMERIC(15,2),
    TTUTAR NUMERIC(15,2)   )
AS
BEGIN
  FOR SELECT ID,
             SIRA,
             MIKTAR,
             TFIYAT,
             KDVORAN,
             TTUTAR             
      FROM DeTAIL
        WHERE (ID = :ISTEKID)
      INTO :ID,
           :SIRA,
           :MIKTAR,
           :TFIYAT,
           :KDVORAN,
           :TTUTAR
  DO
  BEGIN
    SUSPEND;
  END
END
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Detail tablonun after insert, after update ve after delete triggerinda (hem postta hem dekete de calıssın)
Detail tablodali ID masterın ID si olduguna gore

Kod: Tümünü seç

update master m set 
     TUTAR=(select sum(FIYAT) from DETAIL where ID=new.ID),
     KDV=(select sum(KDVORAN) from DETAIL where ID=new.ID),
     TOPLAM=(select sum(TUTAR) from DETAIL where ID=new.ID)
where m.ID=new.ID 
olabilir...yalnız burada dikkat edecegin nokta delete isleminde de bu toplamların update edilmesi ama new.ID degil de old.ID nin kullanılması
ValID isimli bir degiskenin oldugunu varsayarsak

Kod: Tümünü seç

if (INSERTING or UPDATING) then
  ValID=new.ID;

if (DELETING) then
  ValID=new.ID;
belki birkac duzenleme ve iyilestirme gerekebilir...
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

gkimirti üstadım sagolasın

detailde KDV oranını tutuyordum.. KDV nin ne kadar ettigini Uygulama tarafında hallediyordum. Simdi vt de de tutuyorum.
bu sekilde olunca verdigin örnegin örnek işe yaradı.

mesele halloldu.

eyvallah üstad.....
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

sizler sagolun :)
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla