3 Tabloyu birleştirerek malzeme ihtiyaç sorgulama...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

3 Tabloyu birleştirerek malzeme ihtiyaç sorgulama...

Mesaj gönderen serkan »

selam arkadaşlar planlamaya bağlı olarak kullanılması gereken malzemeleri bir tabloya yazıyorum.

STOKKODU,STOKADI,KULLANIM alanları var bu tabloda.Aşağıdaki kodla
stokkodu aynı olanları gruplayarak toplam kullanım miktarını öğreniyorum.Tabi kriterlerde var iki tarih arası filan ama onlarda problem olmadığından yazmadım koda.Asıl sorunum aşağıdaki kodda stok hareketlerinden toplamgiren-toplamcikan şeklinde bakiyeyide hesaplatıp bakiye-toplamsarfdan ihtiyacı almam lazım.şimdilik tabloyu taratıp bakiyeyi yazdırıyorum ama bence tek select de yapmalıyım bunu.

Kod: Tümünü seç

select m.stokkodu,m.stokadi,s.stokgrubu,s.birim,sum(kullanim)sarf from mrpmalz m,stoklar s where s.stokkodu=m.stokkodu group by m.stokkodu,m.stokadi,s.stokgrubu,s.birim
aşağıdaki kodla kendimce bakiyeyide hesaplatmaya çalıştım hata vermiyo ama sonuçlar yanlış çıkıyor.Aslında sonuç yanlış çıkmaz kod yanlıştır tabiki..

Kod: Tümünü seç

screen.Cursor:=crSQLWait;
mrprapor.close;
mrprapor.SelectSQL.Clear;
mrprapor.SelectSQL.Add('select  m.stokkodu,m.stokadi,h.stokkodu,s.stokkodu,s.birim,s.aktar,s.stokgrubu,sum(m.kullanim)sarf,coalesce(sum(h.giris),0)-coalesce(sum(h.cikis),0)bakiye,sum(m.kullanim)-(coalesce(sum(h.giris),0)-coalesce(sum(h.cikis),0))IHTIYAC');
MRPrapor.SelectSQL.Add('from mrpmalz m,stoklar s,stokhrkt h where h.stokkodu is not null');
if pk.Text<>'' then mrprapor.SelectSQL.Add('and M.mrpkodu='+#39+(pk.Text)+#39);
if ogn.Text<>'' then mrprapor.SelectSQL.Add('and M.ogun='+#39+(ogn.Text)+#39);
if t1.Text<>'' then mrprapor.SelectSQL.Add('and M.tarih >='+#39+(T1.Text)+#39);
if t2.Text<>'' then mrprapor.SelectSQL.Add('and M.tarih <='+#39+(T2.Text)+#39);
if depoedit.Text<>'' then mrprapor.SelectSQL.Add('and h.cikdepokodu ='+#39+(depoedit.Text)+#39);
MRPrapor.SelectSQL.Add('and m.stokkodu=s.stokkodu and m.stokkodu=h.stokkodu');
mrprapor.SelectSQL.Add('group by  m.stokkodu,m.stokadi,h.stokkodu,s.stokkodu,s.birim,s.aktar,s.stokgrubu');
mrprapor.SelectSQL.Add('having  sum(m.kullanim)-(coalesce(sum(h.giris),0)-coalesce(sum(h.cikis),0))>0 ');
mrprapor.open;
screen.Cursor:=crdefault;
yardımlarınızı bekliyorum.(Firebird 1.5 ve ibdataset bileşeni kullanıyorum)
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

sorgunu delphi de çalıştırmadan IBcons. da bir çalıştırıp dene ilk öncelikle,
ve tek bir ürün kısıtı vererek çalıştır daha basit yakalarsın.Tarih aralığı v.s. vermeden.

Veya çektiğin tablonun ilgili alanlarını burada belirtirsen, Kısıt vermeden Sql oluşturabiliriz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

ben olsam sp ile hallederdim. bu kadar uzun sql cümlelerini kontrol etmek biraz zorlaşıyor, sp de daha rahat sorgulama yapabiliyosun. sorguyu gördüğüm kadarıyla rapor maksatlı oluşturuyorsun. fieldleri output tanımla daha hızlı ve syntax check ederek yaz.
Cevapla