ürün,stok ve detay stok diye 3 tablom var
aşağıdaki sql sorgusu ile detay stok tablosundaki ürün gruplandırması yaparak toplam gelen ve toplam çıkan ürünler ile birlikte satılan ürün bedeli ve alınan ürün bedelini almak için kullanıyorum
Kod: Tümünü seç
select urun.BARCOD,urun.URUNADI,urun.DEVIR,urun.GELEN,urun.GIDEN,sum(satis) as tsatis,sum(alis) as talis,
sum(satis)-SUM(alis) as durum,(urun.DEVIR+urun.GELEN-urun.GIDEN) as stokdev FROM
(
select detaystok.BARCOD,urun.URUNADI,urun.DEVIR,urun.GELEN,urun.GIDEN,
case when (stok.STOKTURU='Stok Girişi') or (stok.STOKTURU='Satış İade') then detaystok.TUTAR3 else 0 end alis,
case when (stok.STOKTURU='Stok Çıkışı') or (stok.STOKTURU='Kasiyer Satış') then detaystok.TUTAR3 else 0 end satis
from stok,detaystok,urun where stok.DURUM=0 and stok.STOKID=detaystok.STOKID and urun.BARCOD=detaystok.BARCOD
) urun
GROUP BY urun.BARCOD
Kod: Tümünü seç
procedure TForm1.devirstokClick(Sender: TObject);
begin
// stok devri başlat
cxPageControl1.ActivePageIndex:=1;
RzProgressBar1.ShowParts:=true;
RzProgressBar1.TotalParts:=0;
sorgu.close;
sorgu.SQL.Clear;
sorgu.SQL.Add('select stok.stokid,stok.stokturu,stok.belgetur,detaystok.stokid,detaystok.barcod,sum(detaystok.miktar) as tmiktar,'+
'sum(detaystok.tutar3) as ttoplam from stok,detaystok'+#13+
'where stok.stokid=detaystok.stokid ');
urun.first;
RzProgressBar1.TotalParts:=urun.RecordCount;
while not urun.Eof do
begin
if AdvStringGrid2.RowCount=1 then
beep else
AdvStringGrid2.RowCount:=AdvStringGrid2.RowCount+1;
AdvStringGrid2.Cells[0,AdvStringGrid2.RowCount-2]:=inttostr(AdvStringGrid2.RowCount-2);
AdvStringGrid2.Cells[1,AdvStringGrid2.RowCount-2]:=urunBARCOD.AsString;
AdvStringGrid2.Cells[2,AdvStringGrid2.RowCount-2]:=urunURUNADI.AsString;
AdvStringGrid2.Cells[3,AdvStringGrid2.RowCount-2]:=urunCINSI.AsString;
AdvStringGrid2.Cells[4,AdvStringGrid2.RowCount-2]:=FloatToStr(urunDEVIR.AsFloat);
//giden ürün sorgulama
sorgu.SQL.Add('and stok.stokturu="Stok Çıkışı" or (stok.stokturu="Kasiyer Satış" and stok.belgetur<>"Satış İade")'+
' and detaystok.barcod=:br');
sorgu.Params[0].Value:=QuotedStr(urunBARCOD.AsString);
sorgu.Execute;
giden:=sorgu.FieldByName('tmiktar').AsFloat;
tgiden:=sorgu.FieldByName('ttoplam').AsFloat;
AdvStringGrid2.Cells[6,AdvStringGrid2.RowCount-2]:=FloatToStr(sorgu.FieldByName('tmiktar').AsFloat);
AdvStringGrid2.Cells[9,AdvStringGrid2.RowCount-2]:=FloatToStr(sorgu.FieldByName('ttoplam').AsFloat);
// gelen ürün sorgulama
sorgu.SQL.Add('and stok.stokturu="Stok Girişi" or (stok.stokturu="Kasiyer Satış" and stok.belgetur="Satış İade")'+
' and detaystok.barcod=:br');
sorgu.Params[0].Value:=QuotedStr(urunBARCOD.AsString);
sorgu.Execute;
gelen:=sorgu.FieldByName('tmiktar').AsFloat;
tgelen:=sorgu.FieldByName('ttoplam').AsFloat;
AdvStringGrid2.Cells[5,AdvStringGrid2.RowCount-2]:=FloatToStr(sorgu.FieldByName('tmiktar').AsFloat);
AdvStringGrid2.Cells[8,AdvStringGrid2.RowCount-2]:=FloatToStr(sorgu.FieldByName('ttoplam').AsFloat);
AdvStringGrid2.Cells[7,AdvStringGrid2.RowCount-2]:=FloatToStr(urunDEVIR.AsFloat+gelen-giden);
AdvStringGrid2.Cells[10,AdvStringGrid2.RowCount-2]:=FloatToStr(tgiden-tgelen);
urun.Next;
RzProgressBar1.PartsComplete:=RzProgressBar1.PartsComplete+1;
AdvStringGrid2.AutoSize:=true;
end;
end;
daha hızlı çalışan bir sorgu veya kod tavsiye edebilir misiniz....