Stok Hareketlerinde girilen tarihten öncesi devir , sonrası

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ı
kurthan
Üye
Mesajlar: 49
Kayıt: 29 Kas 2004 06:05
Konum: İstanbul
İletişim:

Stok Hareketlerinde girilen tarihten öncesi devir , sonrası

Mesaj gönderen kurthan »

Selamun aleyküm,

Firebird kullanıyorum.sorunum şu şekilde;

birkaç alandan oluşan basit bir stok hareket tablom var:

Kod: Tümünü seç



Tablo Stkhareket
----------------------
id
faturano
stkkod
tarih
htur
miktar
aciklama



Şimdi verilen tarihe ve stok numarasına göre stok hareketlerinin dökümünü vereceğim.

Yalnız burda verilen tarihten önceki varsa hareketlerin htur alanına göre (G/C) değerlendirilip devir miktarı ve devir türünün bulunması gerekiyor.
Bunuda raporun ilk satırına yazdırmam gerek.Rapor aracı olarak Zreport kullanıyorum.

Bu işlemin ardından verilen tarihte ve sonrasında olanlarıda devir satırından sonra göstermem gerekiyor.

Bu iki işlemi tek bir sql kullanarak yapabilir miyim veya nasıl bir sql yazmam gerekiyor.

Daha önce bu şekilde çalışmalar yapmış arkadaşların fikir ve önerilerini bekliyorum.

Teşekkür ediyor,iyi çalışmalar diliyorum.
Tarihtir adil hakem
Sen kadar mende Türk'em
Sense hür Türkiyemsin
Mense esir Kerkük'em


Atilla Yılmaz 2005 - Vaktidir
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Stored Procedure ile bu durumu kolayca halledebilirsin.

Kod: Tümünü seç

CREATE PROCEDURE SP_EKSTRE(
    ILK_TARIH DATE,
    SON_TARIH DATE,
    STOK_KODU INTEGER)
RETURNS (
    STKKOD INTEGER,
    TARIH DATE,
    ACIKLAMA VARCHAR(30),
    GIREN_MIKTAR DOUBLE PRECISION
    CIKAN_MIKTAR DOUBLE PRECISION)
AS
BEGIN
  STKKOD = :STOK_KODU;
  SELECT SUM(MIKTAR) AS GIREN FROM STKHAREKET
  WHERE STKKOD = :STOK_KODU AND HTUR = 'G' AND TARIH < ILK_TARIH
  INTO :GIREN_MIKTAR;
  SELECT SUM(MIKTAR) AS CIKAN FROM STKHAREKET
  WHERE STKKOD = :STOK_KODU AND HTUR = 'C' AND TARIH < ILK_TARIH
  INTO :CIKAN_MIKTAR;
  IF (GIREN_MIKTAR > 0 OR CIKAN_MIKTAR > 0) THEN
  BEGIN
    ACIKLAMA = 'D E V İ R';
    SUSPEND; -- devir satırını dışarı atar.
  END
  FOR SELECT TARIH, ACIKLAMA, 
         ( CASE HTUR
             WHEN 'G' THEN MIKTAR ELSE 0
           END ) AS GIREN,
         ( CASE HTUR
             WHEN 'C' THEN MIKTAR ELSE 0
           END ) AS CIKAN
      WHERE STKKOD = :STOK_KODU AND TARIH <= :SON_TARIH
         INTO :TARIH, :ACIKLAMA, :GIREN_MIKTAR, :CIKAN_MIKTAR
     DO BEGIN
        SUSPEND;
     END
END
gibi bir SP olacak. Kendine göre düzenleyip istediğin diğer alanları da ekleyip;

Kod: Tümünü seç

SELECT * FROM SP_EKSTRE(:ILK_TARIH, :SON_TARIH, :STKKOD) 
Bu query yi çalıştırmadan her üç parametreyi de vermen lazım :idea:

Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
kurthan
Üye
Mesajlar: 49
Kayıt: 29 Kas 2004 06:05
Konum: İstanbul
İletişim:

Mesaj gönderen kurthan »

çok teşekkür ediyorum Allah razı olsun.

Hemen deniyorum.
Tarihtir adil hakem
Sen kadar mende Türk'em
Sense hür Türkiyemsin
Mense esir Kerkük'em


Atilla Yılmaz 2005 - Vaktidir
Kullanıcı avatarı
kurthan
Üye
Mesajlar: 49
Kayıt: 29 Kas 2004 06:05
Konum: İstanbul
İletişim:

For selectten sonraki wherede hata veriyor...

Mesaj gönderen kurthan »

Hocam sa.

verdiğiniz örneği kendim uyarlıyorum fakat for selectten sonra wherede aşağıdaki hata ile karşılaşıyorum

Invalid token.
SQL error code = -104.
Token unknown - line 27, char 10.
WHERE.

sebebi sizce ne olabilir ?

Teşekkür ediyor , iyi çalışmalar diliyorum.
Tarihtir adil hakem
Sen kadar mende Türk'em
Sense hür Türkiyemsin
Mense esir Kerkük'em


Atilla Yılmaz 2005 - Vaktidir
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ben bir şey göremedim doğrusu. yazdığın şekliyle mesaja eklersen daha iyi görebiliriz belki...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
kurthan
Üye
Mesajlar: 49
Kayıt: 29 Kas 2004 06:05
Konum: İstanbul
İletişim:

whereden sonra fromu unutmuşum.

Mesaj gönderen kurthan »

hocam for selectten sonra from ile tabloyu yazmayı unutmuşum.
onu hallettim.

Fakat şimdide sp'ye parametre olarak göndereceğimiz değişkenleri kabul etmiyor.

Acaba SP'yi create ederken ben mi hata yapıyorum ?

Sp'nin son hali şu şekilde :

Kod: Tümünü seç


CREATE PROCEDURE SP_EKSTRE(
    ILK_TARIH DATE, 
    SON_TARIH DATE, 
    STOK_KODU varchar(255))
RETURNS ( 
    STKKOD VARCHAR(255),
    TARIH DATE, 
    ACIKLAMA VARCHAR(255),
    GIREN_MIKTAR FLOAT,
    CIKAN_MIKTAR float)
AS 
BEGIN 
  STKKOD = :STOK_KODU; 
  SELECT SUM(MIKTAR) AS GIREN FROM falt_fatura
  WHERE STKKOD = :STOK_KODU AND TUR = 'G' AND TARIH < ILK_TARIH INTO :GIREN_MIKTAR;

  SELECT SUM(MIKTAR) AS CIKAN FROM falt_fatura
  WHERE STKKOD = :STOK_KODU AND TUR = 'C' AND TARIH < ILK_TARIH INTO :CIKAN_MIKTAR;
  IF (GIREN_MIKTAR > 0 OR CIKAN_MIKTAR > 0) THEN 
  BEGIN 
    ACIKLAMA = 'D E V İ R'; 
    SUSPEND; -- devir satırını dışarı atar. 
  END 
  FOR SELECT TARIH, ACIKLAMA, 
         ( CASE TUR WHEN 'G' THEN MIKTAR ELSE 0 END ) AS GIREN,
         ( CASE TUR WHEN 'C' THEN MIKTAR ELSE 0 END ) AS CIKAN from falt_fatura

         WHERE STKKOD = :STOK_KODU AND TARIH <= :SON_TARIH

         INTO :TARIH, :ACIKLAMA, :GIREN_MIKTAR, :CIKAN_MIKTAR

     DO BEGIN 
        SUSPEND; 
     END 
END

aldığım hata :

Kod: Tümünü seç

 
Column does not belong to referenced table.
SQL error code = -206.
Column unknown.
ILK_TARIH.
At line 15, column 65.
Tarihtir adil hakem
Sen kadar mende Türk'em
Sense hür Türkiyemsin
Mense esir Kerkük'em


Atilla Yılmaz 2005 - Vaktidir
Kullanıcı avatarı
kurthan
Üye
Mesajlar: 49
Kayıt: 29 Kas 2004 06:05
Konum: İstanbul
İletişim:

Mesaj gönderen kurthan »

Hocam teşekkür ederim tekrar şu an tamamdır.İstediğim gibi çalışıyor.

Kod: Tümünü seç

BEGIN 
  STKKOD = :STOK_KODU; 
  SELECT SUM(MIKTAR) AS GIREN FROM falt_fatura
  WHERE STKKOD = :STOK_KODU AND TUR = 'G' AND TARIH < :ILK_TARIH INTO :GIREN_MIKTAR;

  SELECT SUM(MIKTAR) AS CIKAN FROM falt_fatura
  WHERE STKKOD = :STOK_KODU AND TUR = 'C' AND TARIH < :ILK_TARIH INTO :CIKAN_MIKTAR;

  SELECT ABS(SUM(CASE TUR WHEN 'G' THEN MIKTAR ELSE 0 END)-SUM(CASE TUR WHEN 'C' THEN MIKTAR ELSE 0 END )) FROM falt_fatura into :KALAN_MIKTAR;

  IF (GIREN_MIKTAR > 0 OR CIKAN_MIKTAR > 0) THEN
  BEGIN 

    ACIKLAMA = 'D E V İ R';
    FATURATUR='D E V İ R';

    --    TARIH =ILKTARIH;
    SUSPEND; -- devir satırını dışarı atar. 
  END 
  FOR SELECT TARIH, ACIKLAMA,
         ( CASE TUR WHEN 'G' THEN MIKTAR ELSE 0 END ) AS GIREN,
         ( CASE TUR WHEN 'C' THEN MIKTAR ELSE 0 END ) AS CIKAN,
         ( CASE TUR WHEN 'G' THEN MIKTAR ELSE (0-MIKTAR) END ) AS KALAN_MIKTAR,FATURATUR


         from falt_fatura

         WHERE STKKOD = :STOK_KODU AND TARIH <= :SON_TARIH  order BY TARIH

         INTO :TARIH, :ACIKLAMA, :GIREN_MIKTAR, :CIKAN_MIKTAR ,:KALAN_MIKTAR , :FATURATUR

     DO BEGIN 
        SUSPEND; 
     END 
END
Tarihtir adil hakem
Sen kadar mende Türk'em
Sense hür Türkiyemsin
Mense esir Kerkük'em


Atilla Yılmaz 2005 - Vaktidir
Cevapla