hangi üründen ne kadar sipariş verilmiş tarih aralığı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

hangi üründen ne kadar sipariş verilmiş tarih aralığı

Mesaj gönderen erdogan_ozkaya »

arkadaşlar,

Aşağıdaki kod ile 1.tabladaki "Urun_Kodu" 2. tablada var ise (birden fazla olabilir) aynı "Urun_Kodu" eşitse toplayıp karşısına yazıyor.
fakat herhangi bir filtre yapamıyorum

SIPARIS_DETAYLARI_DB özellikleri
Resim

Kod: Tümünü seç

procedure TGUNLUK_STOK_RAPORU.Button1Click(Sender: TObject);
var
        B : TBookmark;
        SiparisToplam : double ;
begin
        URUN_KARTLARI_DB.first;    // master tablomuzun ilk satırındayız ve detail tabloyu filtreledik
        while not URUN_KARTLARI_DB.eof do
begin
        SiparisToplam := 0;
        try
          B :=URUN_KARTLARI_DB.getbookmark;                //master tablomuza nokta koyduk ki detail da gezerken
          SIPARIS_DETAYLARI_DB.first;                          //sıramızı bozmasın
          while not SIPARIS_DETAYLARI_DB.eof do               //detail tablomuzun  first une gittik ve artık ofirmanın
begin                                            //bütün şiparişleri filtreledik
            SiparisToplam := SiparisToplam + SIPARIS_DETAYLARI_DB.FieldByName('Urun_Adeti').value ;  //baştan aşşa
            SIPARIS_DETAYLARI_DB.next;                         //dolaşarak total şipariş toplamını bulduk
          end;
        finally
          URUN_KARTLARI_DB.GotoBookmark(B);                  //en son da master tablomuzdaki nokta koydugumuz yere geri döndük
          URUN_KARTLARI_DB.edit;                            //master tablomuza edit açtık ve gerekli fielda sonucu postladı
          URUN_KARTLARI_DB.FieldByName('Siparis_Sayisi').value:= '0' ;
          URUN_KARTLARI_DB.FieldByName('Siparis_Sayisi').value:= SiparisToplam ;
          URUN_KARTLARI_DB.FieldByName('Toplam').AsCurrency:= URUN_KARTLARI_DB.FieldByName('Fiili_Stok_Sayisi').AsCurrency - URUN_KARTLARI_DB.FieldByName('Siparis_Sayisi').AsCurrency;
          URUN_KARTLARI_DB.post;
          URUN_KARTLARI_DB.FreeBookmark(B);
         end;
     URUN_KARTLARI_DB.next;   //yeni cari geçtik.
  end;
end;
buradaki amaç hangi üründen ne kadar sipariş verilmiş tarih aralığı eklemek istiyorum

teşekkürler
En son erdogan_ozkaya tarafından 22 Haz 2012 01:05 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: hangi üründen ne kadar sipariş verilmiş tarih aralığı

Mesaj gönderen yusuf simsek »

Tablo yapısını tam olarak anlayamadım,

Örnek bir Sql sorgusu yazıyorum. Kendi alanlarına göre uyarlayıp kullanabilirsin.

Kod: Tümünü seç

SELECT u.UrunKodu, SUM( ud.Urun_Adedi) AS ToplamSiparis
FROM UrunKartlari u
LEFT JOIN Siparis_Detaylari s ON u.UrunKodu = s.UrunKodu
WHERE s.SiparisTarihi BETWEEN :Tarih1 AND :Tarih2
GROUP BY u.UrunKodu
Sorguda Tarihleri parametre olarak yazdım....

İstersen Sorguyu Query Nesnenin SQL alanına yazıp LİSTELEME butonu altında

Kod: Tümünü seç

siparis_detaylari_db.Close;
siparis_detaylari_db.ParamByName('Tarih1').asdatetime := datetimepicture1.date;
siparis_detaylari_db.ParamByName('Tarih2').asdatetime := datetimepicture2.date;
siparis_detaylari_db.Open;

şeklinde kullanabilirsin, istersen gene LİSTELE butonu altında sorguyu string olarak oluşturup :Tarih1, :Tarih2 yerine sorgulamak istediğin tarihleri yazıp

Kod: Tümünü seç

siparis_detaylari_db.Close;
siparis_detaylari_db.Sql.Text := Olusturdugun_sorgu;
siparis_detaylari_db.Open;
şeklinde de kullanabilirsin.

Kullandığın nesnenin özelliğine göre ParamByName yazımı değişebilir, veritabanına göre de Tarih formatı değişebilir. Parametre ile eklersen tarih formatı seni etkilemez, ancak sorguyu string olarak oluşturursan Tarih formatına dikkat etmen gerekir.
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hangi üründen ne kadar sipariş verilmiş tarih aralığı

Mesaj gönderen erdogan_ozkaya »

teşekkürler, aşağıdaki kod ile çözdüm "unicorn64" arkadaşımızda çok teşekkürederim.

Kod: Tümünü seç

procedure TGUNLUK_STOK_RAPORU.SpeedButton1Click(Sender: TObject);
begin
   Memo1.Clear;
   SIPARISLER_DETAY_DB.Close;
   SIPARISLER_DETAY_DB.SQL.Clear;
   with SIPARISLER_DETAY_DB,SQL do
   begin
   // Add('select u.Urun_Kodu,u.Urun_adi,u.Fiili_Stok_Sayisi, sum(sk.Urun_Adeti) Urun_Adeti ,u.toplam ');
  //  Add('from urun_kartlari u                                                  ');
  //  Add('inner join siparisler_detay sk on   u.Urun_Kodu=sk.Urun_Kodu           ');
  //  Add('where Siparis_Tarihi>=:tar1 and Siparis_Tarihi<=:tar2    ');
  //  Add('group by u.urun_kodu,u.Urun_adi,u.Fiili_Stok_Sayisi,u.Toplam           ');

    Add('select deneme.Urun_Kodu,deneme.Urun_adi,deneme.Fiili_Stok_Sayisi,');
    Add('coalesce((select sum(coalesce(sk.Urun_Adeti,0))  from siparisler_detay sk ');
    Add('where   deneme.Urun_Kodu=sk.Urun_Kodu and Siparis_Tarihi>=:tar1 and Siparis_Tarihi<=:tar2),0.0) Urun_Adeti  ');
    Add('from urun_kartlari deneme');



   ParamByName('tar1').Value:=StrToDate(DateToStr(DateTimePicker1.Date));
   ParamByName('tar2').Value:=StrToDate(DateToStr(DateTimePicker2.Date));
  end;
  //  SIPARIS_DETAYLARI_DB.ParamByName('tar1').Value:=StrToDate(DateToStr(DateTimePicker1.Date));
 //   SIPARIS_DETAYLARI_DB.ParamByName('tar2').Value:=StrToDate(DateToStr(DateTimePicker2.Date));

 // if RzButtonEdit9.Text<>'' then begin
 // SIPARIS_DETAYLARI_DB.SQL.Add(' and Sevkiyat_Teslim_Eden='+QuotedStr(RzButtonEdit9.Text)+'');
 // End;

  Memo1.Lines.add(SIPARISLER_DETAY_DB.SQL.Text);
  SIPARISLER_DETAY_DB.Open;
end;
Cevapla