detail tablosuz detail yapısı

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

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...
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
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

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

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;
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ı :D

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]
_________________
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

Mesaj gönderen bukentay »

muhasebeden pek anlamam ama ben soyle bir seyler yaptim.
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
);
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

Kod: Tümünü seç

    update hesaplar set tutar=tutar+new.tutar
        where id=new.parent_id;
buda after update triggeri

Kod: Tümünü seç

    update hesaplar set tutar=tutar+new.tutar-old.tutar
        where id=new.parent_id;

herhangi bir hesabi silince, silinen hesabin tutati ust hesapdan silinecek
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;
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

Kod: Tümünü seç

SELECT
    ID,
    PARENT_ID,
    HESAP_KODU,
    HESAP_ADI,
    TUTAR
FROM
    HESAPLAR 
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

Resim

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;

tabiki biraz basit oldu.illaki degisik kontroller yaptirmak gerekiyordur. ama muhasebe ile ilgili detaylari tam bilmiyorum.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

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.

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
ş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...
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
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
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

Yukarıdaki örneğinizi baz alarak bir vt oluşturdum.

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
);

ben örneklerde alacak ve bakiyeyi kullanmamışım iskelet bir yapı olsun diye sadece borc
alanını kullanmışım.
bir generator :

Kod: Tümünü seç

CREATE GENERATOR GEN_ACCOUNT_ID;
SET GENERATOR GEN_ACCOUNT_ID TO 1;
bir trigger:

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
Yeni grup kontrolü için bir sp:

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


istediğiniz toplamları vermesi için aratoplam adlı sp

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

Grupları listelemek için Gruplar adlı sp

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

ş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.

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
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

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 ;
şeklinde alabilirsiniz. Ben bunları ibexpertte denedim. çalışıyordu.
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

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.
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

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 ..
İnsanca.... Pek insanca....
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhabalar
peki ya bir detay hesap sadece 700 şeklinde ise..
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.

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
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

sen muhasebeci misin .. ya adam oyle tanımlarsa .... hadi oyle değil de..
bir hesabı iki dereceli birini üç dereceli tanımlarsa ki bu çok olağan..
nasıl olacak..
bana muhasebe değil programlama ve kod lazım.. mantık lazım..
yine de ilgine teşekkur ederim.
İnsanca.... Pek insanca....
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

sen muhasebeci misin ..
evet
ya adam oyle tanımlarsa ....
adam dediğiniz sanırım Kullanıcı oluyor. Bayanlarda Kullanıcı olabilir. neyse Tanımlarsa bakar control ettirisin.
hadi oyle değil de..
bir hesabı iki dereceli birini üç dereceli tanımlarsa ki bu çok olağan..
nasıl olacak..
sen bu başlığı tekrar gündeme taşıdın. anlamadığım konu, ne üzerine program yazıyorsun ve istediğin tam olarak nedir.
bana muhasebe değil programlama ve kod lazım.. mantık lazım..
Seni Tutan Yok Arkadaşı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
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

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,

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
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

beklediğim kişiden beklediğim cevap geldi..
sağol usta... daha denemedim. ama bakıyorum.. sanırım olur..
İnsanca.... Pek insanca....
iqprog

Mesaj gönderen iqprog »

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.
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: detail tablosuz detail yapısı

Mesaj gönderen IZLEN »

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
AhmetNuri
Üye
Mesajlar: 262
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: detail tablosuz detail yapısı

Mesaj gönderen AhmetNuri »

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
Ahmet DENİZ
Cevapla