detail tablosuz detail yapısı
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
hocam bu iş enine boyuna tamamen sql ile procedure olarak yazılamazmı?
sql in dışında kalan argümanlara ihtiyaç varmıdır bilemiyorum. ama sadece boşluk tan yararlanarak group by kullanılarak her yapı kendi grubunda hesaplanır. vs. yukarı da da dediğim gibi iftara 1 saat var kafam durdu...
sql in dışında kalan argümanlara ihtiyaç varmıdır bilemiyorum. ama sadece boşluk tan yararlanarak group by kullanılarak her yapı kendi grubunda hesaplanır. vs. yukarı da da dediğim gibi iftara 1 saat var kafam durdu...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Merhaba,
Hocam sorunuzu çok iyi anlamakla birlikte arkadaşların verdiği çözümler çok mantıklı.
Yani Siz herşeyi tümüyle storet procedurelere yaptırmayı düşünmezseniz bu konuyu halledeceğinizden şüphem yok.
Ana hesaplarla alt hesapları doğruı bir şekilde yaptıktan sonra guruplama işlemiyle sonuca ulaşmak çok kolay olacaktır şöyleki.
100.00.000 anahesap
100.00.001 alt hesap
110.00.000 ana hesap
110.00.001 alt hesap
hocam böyle bir işlem için
Biraz karışık oldu ama benim yapı.
anlatmak istedğim SQL string fonctionları ile bu yapı desteklenebilir.
Yukarıdaki substring fonksiyonu ile ana hesaba kadar olan alanı alıyorum yani.
100.00 anahesap
100.00 alt hesap
110.00 ana hesap
110.00 alt hesap
dikkat ettiyseniz şimdi herşeyi eşitlemiş oldum yani ana hesap alt hesap olmadı tek bir hesap oldu bu sonucuda kendi içinde toplatıp sonuca ulaşmış oluyorum.
Kadir hocam sizin belirttiğinz yol ise yani ana hesap alt hesap altalt hesap mantığıda olabilir yanlız bu yapı için çok daha karmaşık kodların içerisine gireceksiniz.
Gelişmeleri yazarsanız farklı fikişrler ve sonuçlar çıkacağına inanıyorum.
Hocam iftara 40 dak kaldı
Boşverin bunlar fani şeyler
Saygılarımla
Kolay gelsin.
Hocam sorunuzu çok iyi anlamakla birlikte arkadaşların verdiği çözümler çok mantıklı.
Yani Siz herşeyi tümüyle storet procedurelere yaptırmayı düşünmezseniz bu konuyu halledeceğinizden şüphem yok.
Ana hesaplarla alt hesapları doğruı bir şekilde yaptıktan sonra guruplama işlemiyle sonuca ulaşmak çok kolay olacaktır şöyleki.
100.00.000 anahesap
100.00.001 alt hesap
110.00.000 ana hesap
110.00.001 alt hesap
hocam böyle bir işlem için
Kod: Tümünü seç
frmDM.Query1.Close;
frmDM.Query1.SQL.Clear;
frmDM.Query1.SQL.Add('SELECT SUBSTRING(STI.Chk, 1, 11)as Chk,Sum(STI.Tutar - STI.ToplamIskonto)as Tutar, CHK.Unvan1');
frmDM.Query1.SQL.Add('FROM solar4.FINSAT4'+SdkQueryKod.Text+'.STI STI, solar4.FINSAT4'+SdkQueryKod.Text+'.STK STK, solar4.FINSAT4'+SdkQueryKod.Text+'.CHK CHK');
frmDM.Query1.SQL.Add('WHERE STK.MalKodu = STI.MalKodu and STI.Chk = CHK.HesapKodu and');
frmDM.Query1.SQL.Add('(STI.KynkEvrakTip=1) AND (STI.IslemTur=1) AND (STI.IslemTip=1) and');
frmDM.Query1.SQL.Add('(STK.TipKod=''FL101'') and (STI.Tarih Between 38353 and 38383 ) and');
frmDM.Query1.SQL.Add('(STI.Chk Between '''+Edit1.Text+''' and '''+Edit2.Text+''' ) and (STI.MalKodu Between '''+Edit3.Text+''' and '''+Edit4.Text+''') ');
frmDM.Query1.SQL.Add('GROUP BY SUBSTRING(STI.Chk, 1, 11), CHK.Unvan1 order by STI.Chk');
frmDM.Query1.open;
anlatmak istedğim SQL string fonctionları ile bu yapı desteklenebilir.
Yukarıdaki substring fonksiyonu ile ana hesaba kadar olan alanı alıyorum yani.
100.00 anahesap
100.00 alt hesap
110.00 ana hesap
110.00 alt hesap
dikkat ettiyseniz şimdi herşeyi eşitlemiş oldum yani ana hesap alt hesap olmadı tek bir hesap oldu bu sonucuda kendi içinde toplatıp sonuca ulaşmış oluyorum.
Kadir hocam sizin belirttiğinz yol ise yani ana hesap alt hesap altalt hesap mantığıda olabilir yanlız bu yapı için çok daha karmaşık kodların içerisine gireceksiniz.
Gelişmeleri yazarsanız farklı fikişrler ve sonuçlar çıkacağına inanıyorum.
Hocam iftara 40 dak kaldı

Boşverin bunlar fani şeyler

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
muhasebeden pek anlamam ama ben soyle bir seyler yaptim.
hesaplari tuttugum tablo su sekilde
bu sekilde ki tablolara self-referenced tablolar deniliyor sanirim.
parent_id kismini hesabin bir ust hesabini tutmak icin kullandim.
id alani primaryindex.
su sekilde de After insert tirggeri yazdim
buda after update triggeri
herhangi bir hesabi silince, silinen hesabin tutati ust hesapdan silinecek
herhalde. onun icinde bir before delete triggeri yazdim
yapiyi bu sekilde kurdukdan sonra,
id=1, parent_id=0, hesap_kodu=100, hesap_adi='KASA'
olacak sekilde ilk kaydi girdim.
tabloya yeni bir kayit girilecegi zaman, girilecek kaydin ust hesabinin koduda girilmeli.
isin delphi kisminda ise bu sekilde tablolari gostermek icin kullanilan DBTreeList'i kullandim.
bunun icin DevExpressin DBTreeList'i cok ideal.
DataSet in butun sql leri normal. ornegin selectsql su sekilde
bunu DataSource araciligi ile DBTreeListe bagladikdan sonra
DBTreeList-DataController-KeyField= ID,
DBTreelist-DataController-ParentField=Parent_ID yaptim.
DBtreelist'e HESAP_KODU,HESAP_ADI ve TUTAR alanlarini ekledim
gorunumu soyle oldu

Yeni kayit eklerken TreeView de aktif olan kaydin altina ekledim
tabiki biraz basit oldu.illaki degisik kontroller yaptirmak gerekiyordur. ama muhasebe ile ilgili detaylari tam bilmiyorum.
hesaplari tuttugum tablo su sekilde
Kod: Tümünü seç
CREATE TABLE HESAPLAR (
ID INTEGER NOT NULL,
PARENT_ID INTEGER DEFAULT 0,
HESAP_KODU VARCHAR(20) CHARACTER SET ASCII,
HESAP_ADI VARCHAR(40) COLLATE PXW_TURK,
TUTAR NUMERIC(15,2) DEFAULT 0
);
parent_id kismini hesabin bir ust hesabini tutmak icin kullandim.
id alani primaryindex.
su sekilde de After insert tirggeri yazdim
Kod: Tümünü seç
update hesaplar set tutar=tutar+new.tutar
where id=new.parent_id;
Kod: Tümünü seç
update hesaplar set tutar=tutar+new.tutar-old.tutar
where id=new.parent_id;
herhalde. onun icinde bir before delete triggeri yazdim
Kod: Tümünü seç
update hesaplar set tutar=tutar-old.tutar
where id=old.parent_id;
id=1, parent_id=0, hesap_kodu=100, hesap_adi='KASA'
olacak sekilde ilk kaydi girdim.
tabloya yeni bir kayit girilecegi zaman, girilecek kaydin ust hesabinin koduda girilmeli.
isin delphi kisminda ise bu sekilde tablolari gostermek icin kullanilan DBTreeList'i kullandim.
bunun icin DevExpressin DBTreeList'i cok ideal.
DataSet in butun sql leri normal. ornegin selectsql su sekilde
Kod: Tümünü seç
SELECT
ID,
PARENT_ID,
HESAP_KODU,
HESAP_ADI,
TUTAR
FROM
HESAPLAR
DBTreeList-DataController-KeyField= ID,
DBTreelist-DataController-ParentField=Parent_ID yaptim.
DBtreelist'e HESAP_KODU,HESAP_ADI ve TUTAR alanlarini ekledim
gorunumu soyle oldu

Yeni kayit eklerken TreeView de aktif olan kaydin altina ekledim
Kod: Tümünü seç
var
HesapKodu,HesapAdi:string;
UstHesapKodu,HesapKoduNumeric:Integer;
begin
UstHesapKodu:=pFIBDataSet1.FieldByName('id').AsInteger;
form1.Caption:=pFIBDataSet1.FieldByName('HESAP_kodu').AsString;
if not InputQuery('Hesap Adını Giriniz',
' Yeni Hesap '+pFIBDataSet1.FieldByName('HESAP_ADI').AsString+' Hesabının Altına Açılacaktır',
HesapAdi) then
Exit;
while not TryStrToInt(HesapKodu,HesapKoduNumeric) do
begin
if not InputQuery('Hesap Kodunu Giriniz',
'Yeni Hesap Kodu 1..999 Arasında Olmalıdır',
HesapKodu) then
Exit;
end;
while Length(HesapKodu)<3 do
HesapKodu:='0'+HesapKodu;
HesapKodu:=pFIBDataSet1.FieldByName('HESAP_kodu').AsString+' '+HesapKodu;
with pFIBDataSet1 do
begin
Insert;
FieldByName('HESAP_ADI').AsString:=HesapAdi;
FieldByName('HESAP_kodu').AsString:=HesapKodu;
FieldByName('Parent_id').AsInteger:=UstHesapKodu;
Post;
end;
end;
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
arkadaşlar hepinize teşekkür ediyorum verdiğiniz cevaplar için. yapmak istediğim benim fikrim değil aslında bu bir satndart yani tek düzen hesap planı dediğimiz yapı. bu hesap planını 1.sınıf tacirler ve hukuki yapısı şirket olan kurumsal mükellefler defterlerini bu yapıda tutup bu satandartta raporlar üretmek zorundalar. benim istediğim bu bilgiler, proje genelinin %10 unu oluşturuyor daha %90 lık kısmı var. ama şöle bişey var kalan %90 da bu %10 a bağlı yani bu hesap planı olayını yapamaz isem diğer sorgulara geçemem. şu an bu yapıyı türkiyede en iyi kullanan ETA firması dos ortamında yazılan program ile bu yapı aynen şu şekilde yürüyor hesapplani.idx ve hesapplani.dat diye iki dosya var birinde hesapplani tanımlari diğerinde ise işlenen hesaplara ait toplamlar tutuluyor.
ve anladığım kadarıyla ana alt olayı boşluklara göre belirleniyor.
mantık yapısı olarak
100 ana çünkü boşluk yok
100 01 alt alt hesap burda tek boşluk var
100 01 01 alt detay hesap bunda 2 boşluk var vs..
sağdan 2 basamka silerseniz ana gruba 1 basamak silerseniz alt gruba ulaşırsınız.
şeklinde bir yapısı var ve bu yapıda dikkat ederseniz alt hesap ve alt detay hesap olayı yok. işin düğüm noktası da bu ya yukarıdaki sistem maliye bakanlığı tarafından standart laştırılmış yapıdır. ve siz bu yapıyı kafanıza göre değiştiremezsiniz kullanıcı olarak sadece alt hesap açabilirsiniz. ana düzene bağlı kalmak şartıyla.
volkan hocam bu yapının vt seviyesinde yapılamayacağını söylemişti. kendisine katılıyorum. bu iş sadece vt nin üstleneceği bir yük değil çok complex bir yapı bu.
özetlersek işin özünde şu 3 nokta var hesapplanı tablosu tek dosya bu dosyadan raporlar türetilecek. bunu için
Ana grup = sağdan 2 basamak silinecek
Alt grup = sağdan 1 basamak silinecek
Ana Hesap = Bakanlıkça Belirlenmş hesaplar hazır olarak bulundurulacak kullanıcı tanımlamayacak
Alt Hesap = Ana hesapla arasında bir karekter kullanılarak tanımlanacak bu karekter nokta olur boşluk olur tire olur.
Alt Detaylar = Alt Hesap mantığı ile aynı...
bu yazdıklarımda en kapsamlı mantık yapısı idi. inşallah anlatabilmişimdir.
Not : Genel Muhasebe yazmak isteyen arkadaşlara lazım olacak bir yapı anlattıklarım. herkes stok, cari, fatura yazıyor, bu işe el atmalarını tavsiye edebilirim. Türkiyede 100.000 civarında Muhasebeci olduğu düşünülecek olursa bu işte talep her zaman yapabileceklerimize göre oluşacaktır. ben aktif bir muhasebeci olarak proje konusunda her zaman destek verebilirim...
ve anladığım kadarıyla ana alt olayı boşluklara göre belirleniyor.
mantık yapısı olarak
100 ana çünkü boşluk yok
100 01 alt alt hesap burda tek boşluk var
100 01 01 alt detay hesap bunda 2 boşluk var vs..
sağdan 2 basamka silerseniz ana gruba 1 basamak silerseniz alt gruba ulaşırsınız.
Kod: Tümünü seç
1 DÖNEN VARLIKLAR
10 HAZIR DEĞERLER
100 Kasa
101 Alınan Çekler
102 bankalar
103 verilen Çekler
11 MENKUL KIYMETLER
110 Hisse Senetleri
12 TİCARİ ALACAKLAR
120 Alıcılar
2 DURAN VARLIKLAR
20 TİCARİ ALACAKLAR
220 Alıcılar
volkan hocam bu yapının vt seviyesinde yapılamayacağını söylemişti. kendisine katılıyorum. bu iş sadece vt nin üstleneceği bir yük değil çok complex bir yapı bu.
özetlersek işin özünde şu 3 nokta var hesapplanı tablosu tek dosya bu dosyadan raporlar türetilecek. bunu için
Ana grup = sağdan 2 basamak silinecek
Alt grup = sağdan 1 basamak silinecek
Ana Hesap = Bakanlıkça Belirlenmş hesaplar hazır olarak bulundurulacak kullanıcı tanımlamayacak
Alt Hesap = Ana hesapla arasında bir karekter kullanılarak tanımlanacak bu karekter nokta olur boşluk olur tire olur.
Alt Detaylar = Alt Hesap mantığı ile aynı...
bu yazdıklarımda en kapsamlı mantık yapısı idi. inşallah anlatabilmişimdir.
Not : Genel Muhasebe yazmak isteyen arkadaşlara lazım olacak bir yapı anlattıklarım. herkes stok, cari, fatura yazıyor, bu işe el atmalarını tavsiye edebilirim. Türkiyede 100.000 civarında Muhasebeci olduğu düşünülecek olursa bu işte talep her zaman yapabileceklerimize göre oluşacaktır. ben aktif bir muhasebeci olarak proje konusunda her zaman destek verebilirim...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Merhaba,
Bu mesajımı bir inceleyin umarım size yardımcı olurum.
Yukarıdaki örneğinizi baz alarak bir vt oluşturdum.
ben örneklerde alacak ve bakiyeyi kullanmamışım iskelet bir yapı olsun diye sadece borc
alanını kullanmışım.
bir generator :
bir trigger:
Yeni grup kontrolü için bir sp:
istediğiniz toplamları vermesi için aratoplam adlı sp
Grupları listelemek için Gruplar adlı sp
şeklinde procedurler oluşturdum.
Veriyi girerken
hesap kodunu 100 001 001 şeklinde gireceksiniz.
hesap adını girerken ilk yirmi karakter ->grup adı
20-40 arası -> alt hesap adı
40-60 arası -> ana hesap adı olacak şekilde gireceksiniz. ve borc rakamı girilecek
Üstteki örneğinize göre aşağıdaki verileri girdim.
bu verileri vt ye girdiğinizde size otomatik olarak Ana ve grup kayıtlarını da
ekleyecektir.
Burada prensip gruplar hesap kodunun 9-12'inci pozisyonlarında '000' olarak tanınır.
Ana hesaplar hesap kodunun 5-12 inci pozisyonunda '000 000'olarak tanınır.
Grupları listelemek için
şeklinde kullanabilirsiniz.
sizin istediğiniz toplamı ise
şeklinde alabilirsiniz. Ben bunları ibexpertte denedim. çalışıyordu.
yukarıdaki kod aşağıdaki çıktıyı üretti.
Umarım bu şekil işinize yarar.
Ben sp ve triggerleri kullanmayı bilmiyordum. Sayenizde o işe el atmış olduk.
Sağolsun FAOSOFT hocamızın makalesi sayesinde çabuk bir giriş yaptık.
Kolay gelsin.
Not: Verileri ibexpertte girerken commit butonuna basmadan ana ve grup hesaplarını göremiyordum. sp içinden commit kullanıyordum olmuyordu. Aceleden fazla araştıramadım. Nasıl yapmam gerektiğini yazan olursa memnun olurum.
Bu mesajımı bir inceleyin umarım size yardımcı olurum.
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ç
CREATE TABLE ACCOUNT (
KNO INTEGER NOT NULL,
HESAP_KODU VARCHAR(16),
HESAP_ADI VARCHAR(60),
BORC INTEGER,
ALACAK INTEGER,
BAKIYE INTEGER
);
alanını kullanmışım.
bir generator :
Kod: Tümünü seç
CREATE GENERATOR GEN_ACCOUNT_ID;
SET GENERATOR GEN_ACCOUNT_ID TO 1;
Kod: Tümünü seç
CREATE TRIGGER ACCOUNT_BI0 FOR ACCOUNT
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable kadri int;
begin
execute procedure yeni_grup new.hesap_kodu, new.hesap_adi returning_values :kadri;
new.kno=gen_id(gen_account_id,1);
end
Kod: Tümünü seç
CREATE PROCEDURE YENI_GRUP (
YENI_HES_KOD VARCHAR(16),
YENI_HES_ADI VARCHAR(60))
RETURNS (
GRUP_SAYISI INTEGER)
AS
DECLARE VARIABLE BILGI VARCHAR(16);
begin
if (substring(:yeni_hes_kod from 9 for 3)<>'000') then
begin
bilgi=substring(:yeni_hes_kod from 1 for 3)||' 000 000';
select count(*) from ACCOUNT WHERE HESAP_KODU=:bilgi into :GRUP_SAYISI;
if (grup_sayisi=0) then
begin
insert into account (hesap_kodu,hesap_adi) values (
substring(:yeni_hes_kod from 1 for 3)||' 000 000',
substring(:yeni_hes_adi from 40 for 20));
end
bilgi=substring(:yeni_hes_kod from 1 for 7)||' 000';
select count(*) from ACCOUNT WHERE HESAP_KODU=:bilgi into :GRUP_SAYISI;
if (grup_sayisi=0) then
begin
insert into account (hesap_kodu,hesap_adi) values (
substring(:yeni_hes_kod from 1 for 7)||' 000',
substring(:yeni_hes_adi from 1 for 20));
end
end
end
Kod: Tümünü seç
CREATE PROCEDURE ARATOPLAM
RETURNS (
HES_KODU_CIKIS VARCHAR(25),
SAYI INTEGER)
AS
DECLARE VARIABLE BORC_TUT INTEGER;
DECLARE VARIABLE ARATOPLAM INTEGER;
DECLARE VARIABLE HES_KODU VARCHAR(16);
begin
SAYI=0 ;
for select distinct(hesap_kodu) from account into :hes_kodu do
begin
if (SUBSTRING(HES_KODU FROM 5 FOR 7)='000 000') then
begin
HES_KODU_CIKIS=substring(:HES_KODU from 1 for 3) ;
select SUM(borc) from account where HESAP_KODU like SUBSTRING(:hes_kodu from 1 FOR 3)||'%' into :sayi ;
suspend;
end
ELSE
if (SUBSTRING(HES_KODU FROM 9 FOR 3)='000' AND SUBSTRING(HES_KODU FROM 5 FOR 3)<>'000') then
BEGIN
HES_KODU_CIKIS=' '||substring(:HES_KODU from 1 for 7);
select SUM(borc) from account where HESAP_KODU like SUBSTRING(:hes_kodu from 1 FOR 7)||'%' into :sayi ;
suspend;
END
else
BEGIN
HES_KODU_CIKIS=' '||:HES_KODU;
select SUM(borc) from account where HESAP_KODU like :hes_kodu||'%' into :sayi ;
suspend;
END
end
end
Kod: Tümünü seç
CREATE PROCEDURE GRUPLAR (
TUR VARCHAR(4))
RETURNS (
GRUP_ISMI VARCHAR(16))
AS
DECLARE VARIABLE GRUP_HES_KOD VARCHAR(16);
begin
if (:tur='Grup') then
begin
for select distinct(hesap_kodu) from account where substring(hesap_kodu from 9 for 3)='000' and substring(hesap_kodu from 5 for 3)<>'000' into :grup_ismi do
begin
grup_ismi=substring(grup_ismi from 1 for 7);
suspend;
end
end
if (:tur='Ana') then
begin
for select distinct(hesap_kodu) from account where substring(hesap_kodu from 5 for 7)='000 000' into :grup_ismi do
begin
grup_ismi=substring(grup_ismi from 1 for 3);
suspend;
end
end
if (:tur='Alt') then
begin
for select distinct(hesap_kodu) from account where substring(hesap_kodu from 9 for 3)<>'000' into :grup_ismi do
begin
suspend;
end
end
end
Veriyi girerken
hesap kodunu 100 001 001 şeklinde gireceksiniz.
hesap adını girerken ilk yirmi karakter ->grup adı
20-40 arası -> alt hesap adı
40-60 arası -> ana hesap adı olacak şekilde gireceksiniz. ve borc rakamı girilecek
Üstteki örneğinize göre aşağıdaki verileri girdim.
Kod: Tümünü seç
hesap kodu hesap adı borc
------------ ---------------------------------------- ------------
100 001 001 Merkez 1 Nolu Kasa 10
100 001 001 Merkez 1 Nolu Kasa 10
100 001 002 Merkez 2 Nolu Kasa 25
100 001 002 Merkez 2 Nolu Kasa 35
100 002 001 Şube 1 Nolu Kasa 20
100 002 001 Şube 1 Nolu Kasa 20
100 002 002 Şube 2 Nolu Kasa 60
100 002 002 Şube 2 Nolu Kasa 30
100 002 003 Şube 3 Nolu Kasa 10
100 002 003 Şube 3 Nolu Kasa 15
100 002 003 Şube 3 Nolu Kasa 20
100 002 003 Şube 3 Nolu Kasa 5
ekleyecektir.
Burada prensip gruplar hesap kodunun 9-12'inci pozisyonlarında '000' olarak tanınır.
Ana hesaplar hesap kodunun 5-12 inci pozisyonunda '000 000'olarak tanınır.
Grupları listelemek için
Kod: Tümünü seç
select * from gruplar('Ana');
Kod: Tümünü seç
select * from gruplar('Grup');
Kod: Tümünü seç
select * from gruplar('Alt');
şeklinde kullanabilirsiniz.
sizin istediğiniz toplamı ise
Kod: Tümünü seç
select * from aratoplam ;
yukarıdaki kod aşağıdaki çıktıyı üretti.
Kod: Tümünü seç
HES_KODU_CIKIS SAYI
--------------------- --------
100 260
100 001 80
100 001 001 20
100 001 002 60
100 002 180
100 002 001 40
100 002 002 90
100 002 003 50
Ben sp ve triggerleri kullanmayı bilmiyordum. Sayenizde o işe el atmış olduk.
Sağolsun FAOSOFT hocamızın makalesi sayesinde çabuk bir giriş yaptık.
Kolay gelsin.
Not: Verileri ibexpertte girerken commit butonuna basmadan ana ve grup hesaplarını göremiyordum. sp içinden commit kullanıyordum olmuyordu. Aceleden fazla araştıramadım. Nasıl yapmam gerektiğini yazan olursa memnun olurum.
arkadaslar yazdıkalarınıza baktım..
ama sanırım herkes detay hsapların derecesini eşit almışş
mesela fişe işlenecek bir kasa hesabı 100 01 001 formatında oluyor.
ilgilenen arkadaşlar biliyor ama benım anladığım detayı yine de yazayım..
detay en alt hesap..
detay olmayan ise fişe işlenemeyen sadece toplam ve gruplamada kullanılan hesap.. (ara hesap, ust hesap ya da ana hesap)..
peki ya bir detay hesap sadece 700 şeklinde ise..
bunlara sanırım kırım ya da derece deniyor.
yanı her detay hesabın derecesi üç olmak zorunda değil ve olmaması durumunda nasıl bir yol izleyebilirim..
.......
benım düşüncem zaten ilk dereceye gore gruplama yapacam..
dolayısı ile 2 dereceli hesaplar için bir group yeter..
üçüncü derece olunca ek bir alanda da bunları tutmak.. yanı hesapkodunu briden fazla alanla kontrol etmek..
bütün muhasebe programlarının temelinde iki tablo var..
fişler ve hesap planı..
ve hesap palnları da bir birine çok benzer..
ve hepsinde de detay mızan ve kebir mizan dokumu vardır..
hal boyle olunca daha standart bir yapı geliştirmek nasıl olur ??
yanı bu işi daha once yapan arkadaslara soyluoyrum..
yanı bu iki tablo için ornek yapı, ve dokum için ornek kodlar..
saygılarımla ..
ama sanırım herkes detay hsapların derecesini eşit almışş
mesela fişe işlenecek bir kasa hesabı 100 01 001 formatında oluyor.
ilgilenen arkadaşlar biliyor ama benım anladığım detayı yine de yazayım..
detay en alt hesap..
detay olmayan ise fişe işlenemeyen sadece toplam ve gruplamada kullanılan hesap.. (ara hesap, ust hesap ya da ana hesap)..
peki ya bir detay hesap sadece 700 şeklinde ise..
bunlara sanırım kırım ya da derece deniyor.
yanı her detay hesabın derecesi üç olmak zorunda değil ve olmaması durumunda nasıl bir yol izleyebilirim..
.......
benım düşüncem zaten ilk dereceye gore gruplama yapacam..
dolayısı ile 2 dereceli hesaplar için bir group yeter..
üçüncü derece olunca ek bir alanda da bunları tutmak.. yanı hesapkodunu briden fazla alanla kontrol etmek..
bütün muhasebe programlarının temelinde iki tablo var..
fişler ve hesap planı..
ve hesap palnları da bir birine çok benzer..
ve hepsinde de detay mızan ve kebir mizan dokumu vardır..
hal boyle olunca daha standart bir yapı geliştirmek nasıl olur ??
yanı bu işi daha once yapan arkadaslara soyluoyrum..
yanı bu iki tablo için ornek yapı, ve dokum için ornek kodlar..
saygılarımla ..
İnsanca.... Pek insanca....
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
merhabalar
ana grup 1 den başlar 7 ye kadardır.
alt grup 10 dan başlar 79 a kadardır.
hesap 100 den başlar 799 a kadardır.
burdaki algortima ise
10 1 in 10 katıdır 100 ise 10 un 10 katıdır.
100 Kasa Hesabı alt grup olarak 10 a anagrup olarak 1 e bağlıdır.
791 işçi ücret ve giderleri hesabı alt grup olarak 79 a anagrup olarak 7 ye bağlıdır.
ve sonuç olarak
aldığı ağaç yapıdır.
detay hesap 700 olamaz. 100 den 799 kadar olan yapı hesap planı yapısıdır. detay hesap ise hesapların altına açılan teferruatlandırma maksatlıdır. tabi şu da olabilir. hesap uzmanları 100 den başlayıp 799 da bitirdikleri rakamları tamamen doldurmamışlarıdr. 100 ile 799 arsında seri olarak 700 rakam vardır. ancak hesap planı 260 civarı hesaptan oluşmaktadır. arada boş kalan rakamlar vardır. bunlar belli bir algoritma çerçevesinde ilerler. sıralama arka arkaya devam etmez. kanunlar değiştiğinde ihtiyaç dahilinde bu boşluklar yeni hesap isimleriyle doldurulur.peki ya bir detay hesap sadece 700 şeklinde ise..
ana grup 1 den başlar 7 ye kadardır.
alt grup 10 dan başlar 79 a kadardır.
hesap 100 den başlar 799 a kadardır.
burdaki algortima ise
10 1 in 10 katıdır 100 ise 10 un 10 katıdır.
100 Kasa Hesabı alt grup olarak 10 a anagrup olarak 1 e bağlıdır.
791 işçi ücret ve giderleri hesabı alt grup olarak 79 a anagrup olarak 7 ye bağlıdır.
ve sonuç olarak
aldığı ağaç yapıdır.
Kod: Tümünü seç
1 DÖNEN VARLIKLAR
10 HAZIR DEĞERLER
11 MENKUL KIYMETLER
12 TİCARİ ALACAKLAR
13 DİĞER ALACAKLAR
15 STOKLAR
17 YILLARA YAYGIN İNŞAAT VE ONARIM İŞLERİ
18 GELECEK AYLARA AİT GİDERLER VE GELİR TAHAKKUKLARI
19 DİĞER DÖNEN VARLIKLAR
2 DURAN VARLIKLAR
22 TİCARİ ALACAKLAR
23 DİĞER ALACAKLAR
24 MALİ DURAN VARLIKLAR
25 MADDİ DURAN VARLIKLAR
26 MADDİ OLMAYAN DURAN VARLIKLAR
27 ÖZEL TÜKENMEYE TABİ VARLIKLAR
28 GELECEK YILLARA AİT GİDERLER VE GELİR TAHAHKKUKLARI
29 DİĞER DURAN VARLIKLAR
3 KISA VADELİ YABANCI KAYNAKLAR
30 MALİ BORÇLAR
32 TİCARİ BORÇLAR
33 DİĞER BORÇLAR
34 ALINAN AVANSLAR
35 YILLARA YAYGIN İNŞAAT İŞLERİNDEN ALINAN HAKEDİŞLER
36 ÖDENECEK VERGİ VE DİĞER YÜKÜMLÜLÜKLER
37 BORÇ VE GİDER KARŞILIKLARI
38 GELECEK AYLARA AİT GELİRLER VE GİDER TAHAKKUKLARI
39 DİĞER KISA VADELİ YABANCI KAYNAKLAR
4 UZUN VADELİ YABANCI KAYNAKLAR
40 MALİ BORÇLAR
42 TİCARİ BORÇLAR
43 DİĞER BORÇLAR
44 ALINAN AVANSLAR
47 BORÇ VE GİDER KARŞILIKLARI
48 GELECEK YILLARA AİT GELİRLER VE GİDER TAHAKKUKLARI
49 DİĞER UZUN VADELİ YABANCI KAYNAKLAR
5 ÖZKAYNAKLAR
50 ÖDENMİŞ SERMAYE
52 SERMAYE YEDEKLERİ
54 KAR YEDEKLERİ
57 GEÇMİŞ YILLAR KARLARI
58 GEÇMİŞ YILLAR ZARARLARI
59 DÖNEM NET KARI (ZARARI)
6 GELİR TABLOSU HESAPLARI
60 BRÜT SATIŞLAR
61 SATIŞ İNDİRİMLERİ (-)
62 SATIŞLARIN MALİYETİ (-)
63 FAALİYET GİDERLERİ (-)
64 DİĞER FAALİYETLERDEN OLAĞAN GELİR VE KARLAR
65 DİĞER FAALİYETLERDEN OLAĞAN GİDER VE ZARARLAR (-)
66 FİNANSMAN GİDERLERİ (-)
67 OLAĞANDIŞI GELİR VE KARLAR
68 OLAĞANDIŞI GİDER VE ZARARLAR (-)
69 DÖNEM NET KARI (ZARARI)
7 MALİYET HESAPLARI
70 MALİYET MUHASEBESİ BAĞLANTI HESAPLARI
71 DİREKT İLKMADDE VE MALZEME GİDERLERİ
72 DİREKT İŞÇİLİK GİDERLERİ
73 GENEL ÜRETİM GİDERLERİ
74 HİZMET ÜRETİM MALİYETİ
75 ARAŞTIRMA VE GELİŞTİRME GİDERLERİ
76 PAZARLAMA SATIŞ VE DAĞITIM GİDERLERİ
77 GENEL YÖNETİM GİDERLERİ
78 FİNANSMAN GİDERLERİ
79 GİDER ÇEŞİTLERİ
9 NAZIM HESAPLAR
90 NAZIM HESAPLAR
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
evetsen muhasebeci misin ..
adam dediğiniz sanırım Kullanıcı oluyor. Bayanlarda Kullanıcı olabilir. neyse Tanımlarsa bakar control ettirisin.ya adam oyle tanımlarsa ....
sen bu başlığı tekrar gündeme taşıdın. anlamadığım konu, ne üzerine program yazıyorsun ve istediğin tam olarak nedir.hadi oyle değil de..
bir hesabı iki dereceli birini üç dereceli tanımlarsa ki bu çok olağan..
nasıl olacak..
Seni Tutan Yok Arkadaşım.bana muhasebe değil programlama ve kod lazım.. mantık lazım..
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Merhaba,
Hesapplanı ve MuhasebeFişi tablolarını birleştirerek istediğiniz şekle uygun mizanı aşağıdakine benzer bir komutla yapabilirsiniz ben böyle yaptım,
iyi çalışmalar diliyorum.
Hesapplanı ve MuhasebeFişi tablolarını birleştirerek istediğiniz şekle uygun mizanı aşağıdakine benzer bir komutla yapabilirsiniz ben böyle yaptım,
Kod: Tümünü seç
select h.heskod,h.hesad,h.hestip,sum(IF(f.ba="B",f.tutar,0)) as borc ,sum(IF(f.ba="A",f.tutar,0)) as alacak from mhsfisi f , hesplan h where LEFT(f.heskod,LENGTH(h.heskod))=h.heskod group by h.heskod order by h.heskod,h.hestip
iyi çalışmalar diliyorum.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
bence yanlış yoldasın.
100
100 01
100 01 100
vb gibi veriler var.
burada yapman gereken hesap kodu için bir tek saha o da en detay seviyedeki veriyi tutacak o da 100 01 100.
diğer seviyedeki tutarları sql ve rapor aracının özelliklerini kullanarak getireceksin. yani hiç bir zaman 100 , 100 01 seviyelerinde veri olamayacak tabi bunları alt seviyesinde veri varsa.
eğer en alt seviyede veri yoksa ve 100 01 seviyesine veri girilecekse girilsin hiç bir problem doğurmaz. sen zaten raporları seviye bazlı alırsın
örnek 100 01 ile başlayanların toplamını aldığında 100 01 de girer potaya 100 01 100 de. ha eğer adam hem 100 01'e veri girer hem de 100 01'in alt seviyelerine veri girerse hem 100 01in hem de alt seviyelerinin toplamı gelir ki o da zaten kullanıcı hatası demektir. seni ilgilendiren bir konu yok orada. adam mantıksız veri giriyorsa sen ne yapacaksın. onu dert etme o işi yapan adamlar öyle salaklıklar yapmaz, yapanlar da zaten ona yapmasa başka şeye yapar zaten salak adamı engelleyemezsin o bulur bi şeyler.
bunu hayalimden uydurmuyorum. benim yapım aynen böyle. tek bir tablo ve tek bir hesapno sahası var. sqllerde group by ve union kullanarak öttürüyorsun verileri bülbül gibi şakıyorlar. sisteminde esnek oluyor.
mizan, defteri kebir, aktif pasif bilanço bi şey daha vardı unuttum ismini hepsini çatır çatır çıkarıyorum. sql sonu istediğim tablo geliyor ver rapor da gösteriyor stored proya falan da gerek yok. group by ve unionla iş bitiyor.
100
100 01
100 01 100
vb gibi veriler var.
burada yapman gereken hesap kodu için bir tek saha o da en detay seviyedeki veriyi tutacak o da 100 01 100.
diğer seviyedeki tutarları sql ve rapor aracının özelliklerini kullanarak getireceksin. yani hiç bir zaman 100 , 100 01 seviyelerinde veri olamayacak tabi bunları alt seviyesinde veri varsa.
eğer en alt seviyede veri yoksa ve 100 01 seviyesine veri girilecekse girilsin hiç bir problem doğurmaz. sen zaten raporları seviye bazlı alırsın
örnek 100 01 ile başlayanların toplamını aldığında 100 01 de girer potaya 100 01 100 de. ha eğer adam hem 100 01'e veri girer hem de 100 01'in alt seviyelerine veri girerse hem 100 01in hem de alt seviyelerinin toplamı gelir ki o da zaten kullanıcı hatası demektir. seni ilgilendiren bir konu yok orada. adam mantıksız veri giriyorsa sen ne yapacaksın. onu dert etme o işi yapan adamlar öyle salaklıklar yapmaz, yapanlar da zaten ona yapmasa başka şeye yapar zaten salak adamı engelleyemezsin o bulur bi şeyler.
bunu hayalimden uydurmuyorum. benim yapım aynen böyle. tek bir tablo ve tek bir hesapno sahası var. sqllerde group by ve union kullanarak öttürüyorsun verileri bülbül gibi şakıyorlar. sisteminde esnek oluyor.
mizan, defteri kebir, aktif pasif bilanço bi şey daha vardı unuttum ismini hepsini çatır çatır çıkarıyorum. sql sonu istediğim tablo geliyor ver rapor da gösteriyor stored proya falan da gerek yok. group by ve unionla iş bitiyor.
Re: detail tablosuz detail yapısı
Evet Kardeş Dediğin mantıklı hesap planı ile hesap hareketlerini table lerini birleştirerek böyle bişi yapmak mümkün gibi görünüyor
fakat ;
ben bir türlü beceremedim elinde örnek bir kod varsa sql kodu yazarsan sevinirim
Teşekklürker
fakat ;
ben bir türlü beceremedim elinde örnek bir kod varsa sql kodu yazarsan sevinirim
Teşekklürker
Re: detail tablosuz detail yapısı
Eğer Sadece sorgu için gerekli ise normal master detail kayıt sistemi kur,
Sorguların için iki tabloyu birleştiren view tanımla
Sorguların için iki tabloyu birleştiren view tanımla
Ahmet DENİZ