stored procedure cari detaylı ekstre (çözüldü)

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ı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

stored procedure cari detaylı ekstre (çözüldü)

Mesaj gönderen esistem »

Selam arkadaşlar,
Cari Hesap Detaylı ekstrelerini stored procedure ile almak için birkaç gündür uğraşıyorum, sonunda bitti derken bir hata ile karşılaştım.
Sorun şu;
Cari hareket tablomda TARIH, ISLEMTURU, BORC, ALACAK alanlarım var (kısaca yazıyorum).
birde eğer cari hareket tablosunda islemturu=1 ise bu hareket bir faturadan gelmiş oluyor, detayında da bu faturadaki stok adını ve miktarını göstermem gerekiyor.
Procedure aşağıdaki şekilde

Kod: Tümünü seç

DECLARE VARIABLE BAKIYE DECIMAL(15,2);

BAKIYE = 0;
FOR SELECT TARIH, ISLEMTURU, ISLEMKODU, ACIKLAMA, BORC, ALACAK
FROM CARI_ISLEM
WHERE CARIKODU=:CKOD
INTO :TARIH, :ISLEMTURU, :ISLEMKODU, :BORC, :ALACAK
DO BEGIN
BAKIYE = :BAKIYE + (:BORC - :ALACAK);
ACIKLAMA='';
suspend; /* kayıt dışarı çıkartılıyor*/

IF (ISLEMTURU=1) THEN BEGIN /* islemturu 1 ise fatura */

FOR SELECT F.MIKTAR, S.ADI /* S.ADI stok adını alacak */
FROM FATURA2 F
LEFT JOIN STOK S ON S.KOD=F.STOKKODU
WHERE KOD=:ISLEMKODU
INTO :BORC, :ACIKLAMA /* borc'a miktar, açıklamaya stok adı alınacak  */
DO BEGIN /* burada faturadaki stoklar listelenecek */

BAKIYE = :BAKIYE; /* bakiye aynı kalacak */
suspend; /* burada stoklar dışarı veriliyor */
END /* burada faturadaki stoklar listelenecek */

END /* islemturu 1 ise fatura */

END
yukarıdaki kodda herşey düzgün çalışıyordu, taki islemturu=1 ise git faturadaki stokları alıp listele dediğim zaman sadece ilk kaydı gösteriyor, faturada kesilmiş 3-4 stok varsa onların hepsini suspend yapmıyor? acaba benmi suspend ları yanlış yere koyuyorum? yardımcı olabilirmisiniz.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: stored procedure cari detaylı ekstre (çözüldü)

Mesaj gönderen esistem »

Kod: Tümünü seç

DECLARE VARIABLE BAKIYE DECIMAL(15,2);

BAKIYE = 0;
FOR SELECT TARIH, ISLEMTURU, ISLEMKODU, ACIKLAMA, BORC, ALACAK
FROM CARI_ISLEM
WHERE CARIKODU=:CKOD
INTO :TARIH, :ISLEMTURU, :ISLEMKODU, :BORC, :ALACAK
DO BEGIN
BAKIYE = :BAKIYE + (:BORC - :ALACAK);
ACIKLAMA='';
suspend; /* kayıt dışarı çıkartılıyor*/

IF (ISLEMTURU=1) THEN BEGIN /* islemturu 1 ise fatura */

FOR SELECT F.MIKTAR, S.ADI /* S.ADI stok adını alacak */
FROM FATURA2 F
LEFT JOIN STOK S ON S.KOD=F.STOKKODU
WHERE KOD=:ISLEMKODU
INTO :BORC, :ACIKLAMA /* borc'a miktar, açıklamaya stok adı alınacak  */
DO /* bu satır böyle bırakılacakmış altında herhangi bir şey yazmadan direk suspend yapılacak */
suspend; /* burada stoklar dışarı veriliyor */

END /* islemturu 1 ise fatura */

END
Cevapla