arkadaşlar başlıktan anlaşılacağı üzere master-detail diye 2 tablo olmadan tek tablo ile bazı kayıtları master bazı kayıtları detail göstereceğiz.
Kod: Tümünü seç
100 Kasa 100,00
100 001 Merkez Kasa 50,00
100 002 Şube Kasa 50,00
Kod: Tümünü seç
100 Kasa 100,00
100 001 Merkez Kasa 50,00
100 002 Şube Kasa 50,00
Kod: Tümünü seç
100 Kasa 260,00
100 001 Merkez Kasa 80,00
100 001 001 Merkez 1 Nolu Kasa 20,00
100 001 002 Merkez 2 Nolu Kasa 60,00
100 002 Şube Kasa 180,00
100 002 001 Şube 1 Nolu Kasa 40,00
100 002 002 Şube 2 Nolu Kasa 90,00
100 002 003 Şube 3 Nolu Kasa 50,00
Kod: Tümünü seç
select sum(tutar) from deneme where hes_kod like '100 001%'
Alt hesaplar belli olmayabilir. Siz eklerken 100 001 099 şeklinde bir alt hesap girdiğiniz gibi 001 grubuna dahil etmiş oluyorsunuz. Yani önceden tanımlı olmasına gerek yok. Sonuç alırken tek bilmeniz gereken değeri alınacak hesap aralığı.kadirkurtoglu yazdı:kardeş bu yapı biraz karışık yani önceden alt hesaplar belli değildir.
Kod: Tümünü seç
1 100 Kasa 260,00
2 100 001 Merkez Kasa 80,00
3 100 001 001 Merkez 1 Nolu Kasa 20,00
3 100 001 002 Merkez 2 Nolu Kasa 60,00
2 100 002 Şube Kasa 180,00
3 100 002 001 Şube 1 Nolu Kasa 40,00
3 100 002 002 Şube 2 Nolu Kasa 90,00
3 100 002 003 Şube 3 Nolu Kasa 50,00
Kod: Tümünü seç
procedure TmizanRapor.Query1CalcFields(DataSet: TDataSet);
var
qSorgula:TQuery;
Temp:AnsiString;
begin
if yer=1 then
begin
Temp:='select sum(tutar) from mhsfisi where YEAR(fistar)='+''''+genelmizan.edit16.Text+'''';
if genelmizan.ComboBox3.ItemIndex=0 then
Temp:=temp+' and MONTH(fistar)<='+''''+genelmizan.edit11.Text+'''' else
Temp:=temp+' and MONTH(fistar)='+''''+genelmizan.edit11.Text+'''';
if genelmizan.ComboBox2.ItemIndex=0 then
Temp:=Temp+' and fistip<>4';
Temp:=Temp+' and ba=:ba';
Temp:=Temp+' and LEFT(heskod,:uzunluk)='+''''+Query1heskod.AsString+'''';
end else
begin
Temp:='select sum(tutar) from mhsfisi where fistar>=:t1 and fistar<=:t2';
if donemselmizan.ComboBox2.ItemIndex=0 then
Temp:=Temp+' and fistip<>4';
Temp:=Temp+' and ba=:ba';
Temp:=Temp+' and LEFT(heskod,:uzunluk)='+''''+Query1heskod.AsString+'''';
end;
try
qSorgula:=TQuery.create(nil);
with qSorgula do
begin
if yer=1 then
begin
DatabaseName:='dbsm';
close;
sql.clear;
sql.add(Temp);
Params[0].AsString:='B';
Params[1].AsInteger:=Length(Query1heskod.AsString);
Active:=true;
Query1borc.AsCurrency:=qSorgula.fields[0].AsCurrency;
Active:=false;
Params[0].AsString:='A';
Params[1].AsInteger:=Length(Query1heskod.AsString);
Active:=true;
Query1alacak.AsCurrency:=qSorgula.fields[0].AsCurrency;
Active:=false;
end else
begin //dönemsel mizan
DatabaseName:='dbsm';
close;
sql.clear;
sql.add(Temp);
Params[0].AsDate:=donemselmizan.DateTimePicker2.date;
Params[1].AsDate:=donemselmizan.DateTimePicker1.date;
Params[2].AsString:='B';
Params[3].AsInteger:=Length(Query1heskod.AsString);
Active:=true;
Query1borc.AsCurrency:=qSorgula.fields[0].AsCurrency;
Active:=false;
Params[0].AsDate:=donemselmizan.DateTimePicker2.date;
Params[1].AsDate:=donemselmizan.DateTimePicker1.date;
Params[2].AsString:='A';
Params[3].AsInteger:=Length(Query1heskod.AsString);
Active:=true;
Query1alacak.AsCurrency:=qSorgula.fields[0].AsCurrency;
Active:=false;
end;
end;
finally
qSorgula.free;
end;
Bu yapıya göre oluşturduğum tablo yapısında ilk alana ANA_HESAP ikinciye ALT_HESAP .. vs. şeklinde isim vermiştim. Bir kayıtın ANA HESAP olup olmadığını sonraki alanın yani ALT_HESAP alanının sıfır olup olmadığından ayırt ediyordum. Belki başka bir fikir verir01 00 000 000 Ana Hesap
01 01 000 000 Alt Hesap
01 01 001 000 Detay Hesap
01 01 001 001 Alt detay hesap
Kod: Tümünü seç
100 anahesap
100 01 alt hesap
100 01 01 alt detay hesap 120,00 YTL değer girilebilir hesap
100 01 02 alt detay hesap 80,00 YTL değer girilebilir hesap
100 02 alt hesap
100 02 01 alt detay hesap 230,00 YTL değer girilebilir hesap
100 02 02 alt detay hesap 20,00 YTL değer girilebilir hesap