Muhasebeci - Genel Tasarım Dökümanı
SourceForge.net Logo

 

I - İçindekiler

 I  - İçindekiler
 II - Revizyon Bilgisi
  1 - Önsöz
  2 - Geliştirme Ortamı
  3 - Genel Yapı
  4 - Detaylar
 

II - Döküman Revizyonu

Revizyon Tarihi Revize Eden Revizyon Sebebi
12.11.2004 Yüksel ÖZCAN Döküman Oluşturuldu
16.11.2004 Yüksel ÖZCAN Kart silme kontrol mekanizması diyagramı eklendi
 

1 - Önsöz


      Bu döküman muhasebeci projesinin geliştirilme aşaması'nda diğer programcılara açıklayıcı bilgi sunmak amacı ile hazırlanmıştır. Dökümanda proje gelişiminde kullanılan araçlardan, genel yapı'dan, veritabanı ve projeye katma değer katacak olan diğer hususlar üzerinde durulacaktır.

 

2 - Geliştirme Ortamı


      Projemiz GNU/GPL lisansına sahip geliştirme araçları ile geliştirilmekte ve yine bu lisansları kullanan kütüphaneler kullanılmaktadır. Aşağıda kullanılan araçlar ve kullanım amaçları ile ilgili bilgiler verilmektedir

C Dili : Projemizi geliştirirken C Programlama Dilini kullanıyoruz. C dili teknik olarak üstün bir dil olmakla birlikte bu dille yazılan programlar oldukça hızlı çalışmaktadır. Geliştirilen uygulamanın network üzerinde kullanılacağı ve sürekli olarak bir database server'dan veri alıp işleyeceği göz önüne alındığında yazılacak olan programın hızlı çalışması gerekmektedir. Muhasebeciler de işi yoğun insanlar olduklarından kullandıkları programın da maksimum hızda çalışması gerekmekir. Bu şartları da en iyi C Programlama Dili sağlar.
Gtk+/Gnome : Arayüz (GUI) kütüphanesidir. GTK+ kütüphanesi tüm linux dağıtımlarında hazır olarak gelmektedir. Gnome kütüphanesi de aşağı yukarı tüm dağıtımlarda gelmektedir. Fakat bazı dağıtımların öntanımlı(default) kurulumunda kurulu olarak gelmez(Ör.Suse9.1). Programın arayüzünün büyük kısmında GTK+ kodları kullanılmaktadır. Gnome kütüphanesinden ise sadece gnome_date_edit(tarih) bileşeni kullanılmaktadır. Diğer taraftan bu kütüphaneler oldukça hızlı çalışmaktadırlar. Kısa sürede ekrandaki grafiklere yüklü miktarda veriyi çok hızlı basmak mümkün olmaktadır. Diğer taraftan da GNU/Linux altında çalışan programların büyük bir kısmı da bu grafik arayüz kütüphaneleri kullanmaktadır.
Glade : Programın arayüzünü oluşturmak için kullanılmaktadır. GTK+/Gnome kutuphanesini kullanaraktan bize arayüzü oluşturmak için gerekli olan C/C++ kodunu sunar. Tasarlanan arayüzü .glade uzantılı XML formattaki dosyalara kaydeder. Build tuşuna basıldığında ise C/C++ kodu oluşturur. Diğer taraftan libglade kütüphanesi kullanılarak sadece .glade XML dosyası kullanılaraktan da arayüz oluşturulabilir. Tavsiye edilen Glade kullanım şekli budur. Fakat biz projemizde şimdilik arayüz için Glade'in ürettiği C kodlarını kullanmaktayız.
Anjuta : Glade ile oluşturulan arayüzü kontrol eden, veritabanı bağlantısı sağlayıp raporlar üreten kısımları elle bir editörde kodlamak gerekir. Biz de editör olarak Anjuta kullanmaktayız. Anjuta hem gtk+/gnome hem de glibc kütüphanelerindeki fonksiyonları otomatik tamamlama özelliği ile kolayca kodlamayı sağlar. Bu da projenin gelişimini hızlandıran etkenlerden biridir. Diğer taraftan proje yönetebilme ve çeşitli özelliklere sahip, GNU geliştiricilerinin gönlüne taht kurmuş gelişmiş bir editördür.
MySQL : Hem Linux hem de Windows sürümleri olan çift lisanslı ve Açık Kaynak Kodlu bir veritabanıdır. Lisanslardan birisi GPL kullanım için herhangi bir ücret talep etmezken diğeri konumuzdan uzak olduğu için bizi ilgilendirmiyor. Hızlı çalışması ile ünlenen bu veritabanı php ile de bağlantı kurularaktan datalara web'den kolayca ulaşılabilmesi için de idealdir.
GNUBuild : GNU yapılandırma araçlarından oluşur. Bunlar gcc, automake, autoconf, autoheader gibi bir programı derlerken kullanılan Açık Kaynak Kodlu yapılandırma araçları setidir. Kurduğunuz/kuracağınız dağıtımda Geliştirme Araçları içerisinde yer alır. Açık Kaynak Kodlu bir projeyi derleyip te kullanmak isterseniz GNU yapılandırma araçlarını sisteminize kurmanız gerekir.
Gettext : GNU yapılandırma araçlarından içerisindedir. Geliştirdiğiniz programa çoklu dil desteği kazandırmak isterseniz programınızı gettext desteği ile geliştirmelisiniz. _("xxxx") gibi bir kullanım şekli vardır. Çeviri dosyaları .po uzantısı ile genelde projenin po dizini altında tutulur. Programın derlenmesi esnasında ise bu po dosyaları .gmo dosyalarına dönüşerek işlem tamamlanır. Programın çalışması esnasında sistem yereline göre program çevirisi yapılmış metinler ile çalışır.
gmtrans : GNU muhasebeci translator. Ekibimizin geliştirdiği bir projedir. Kullanım amacı projemizin çeviri işlemlerinin daha süratli ve daha çok kişi tarafından hızla yapılabilmesi ve çeviri dosyalarının en güncel halinin sürekli herkesin ulaşabileceği şekilde web sitesinde tutulabilmesini sağlar. gmtrans php ile yazılmış ve çeviri metinlerini MySQL veritabanında tutan bir web uygulamasıdır. "generate .po" bölümü çalıştırıldığında çeviri dosyalarını otomatik olarak oluşturur. Normal şartlarda bir dile ait çeviri işlemleri tek bir çevirmen tarafından çevrilir. gmtrans ile ise aynı anda 1 tek dili pek çok kişi çevirebilir.
 

3 - Genel Yapı


      Projemizin hemen hemen her yerde aynı mantık biraz değişerek kullanılmaktadır. Örneğin stok kartlarındaki yapı ve genel muhasebedeki yapı birbirinin aynısıdır, sadece bölümlere göre ihtiyaçlar farklılık gösterdiğinden bölüme göre yapı farklılık göstermektedir. Yapıyı genel olarak 4 bölüme ayırabiliriz.

1. Bölüm : Kart tanımları; Programı kullanabilmek için ilk önce kartlar tanımlanmalıdır. Stok Kartları, Hesap kartları, cari hesap kartları, kasa kartları, banka kartları bu kartlara örnek verilebilir.

2. Bölüm : Hareket Fişleri(fişin kendisi); Daha önceden kayıt edilmiş kartlar hareket fişleri içerisinde hareket eder. Örn. Stok fişleri, faturalar, muhasebe fişleri, cari hesap fişleri birer hareket fişleridir. Bu fişler içerisinde bir yada daha fazla miktarda kart hareket görür. Bunların detayları aşağıda ayrıntılı olarak verilecektir.

3. Bölüm : Fişler; hareket fişlerinin tamamının olduğu bölümlerdir. liste halinde ekrana gelirler, bu listeden istediğimiz bir fişi seçerek üzerinde değişiklik yapar, siler yada yeni fiş ekleriz.

4. Bölüm : Raporlar; Daha önceden yapılmış kayıtlar ile ilgili filtrelenebilir raporlar alınabilmelidir. Esnek ve kolay bir raporlama mekanizması olmalıdır.


 

4 - Detaylar


      Yukarıda bahsi geçen yapının daha kolay kavranabilmesi için bu bölümde detaylara değinilecektir. Örnek olarak projenin stok bölümünü inceleyeceğiz.

1. Bölüm : Kart tanımları; "Stok" Bölümünde "kart tanımı" sınıfına "Stok Kartları" girer. Her stok yada ürün için bir adet stok kartı açmak kullanıcı için her açıdan faydalı olacaktır. Programdan Stok İşlemleri->Stok Kartları menülerinden bu bölüme ulaşabiliriz. Karşımıza çıkan ekran Şekil 1.1 deki gibidir.


Şekil 1.1 Stok Kartları

Yukarıdaki şekilden de anlaşıldığı üzere Stok Kartları ile ilgili işlemler buradan yapılır, Kart ekleme, değiştirme, çıkarma, ekstre alma gibi pek çok işlem bu bölümden yapılır. Arayüz ile yapılan işlemler bütünleşik olmalıdır. BU yüzden de kullanıcıya sunacağımız arayüzü tasarlarken arayüzümüzün kullanım kolaylığı sağlamasına dikkat etmekte fayda var. Arayüz programın görünen kısmıdır. Arayüz öyle olmalıdır ki kullanıcı programın görünmeyen kısımlarını bile bu arayüz ile görebilmelidir. Yapmak istediklerini maximum kolaylıkla yapabilmeli ve arayüze şöyle bir bakması programın çalışması hakkında fikir vermelidir. Bu kullanım kolaylığını sağlamak için biz projemizde basit sayılabilecek bir yöntem kullanmaktayız. Şekilden de görüldüğü gibi penceremizde bir adet sütunlu liste, arama kutusu, siralama menüsü ve en altta da birkaç düğme var. Düğmeler işlem yapabilmek için orada durmaktadır. Yalnız herhangi bir işlem yapabilmek için önce listeden işlem yapılacak stok kartı seçilmelidir. Ancak ondan sonra işlem yapılabilir. Örneğin değiştir düğmesine basılması bir stok kartında değişiklik yapılacağını ifade eder ve bu düğmeye basmadan önce listeden bir seçim yapılması mantıklıdır. Sadece yeni bir kart eklemek için mevcut kartlardan seçim yapmak gerekmemektedir. Arama kutucuğumuz bize stok kartları arasında arama yapmamızı sağlar. Arama kutusunu kullanırken dikkat edilmesi gereken sıralama şeklidir. Eğer sıralama "Stok Koduna Göre" seçili ise arama koda göre yapılır. Eğer sıralama "Stok Adına Göre" seçili ise de arama stok adına göre yapılmaktadır. Bu da işlemlerin hızlı yapılmasını sağlayacak olan hızlı çalışan bir mantıktır. Örneğin binlerce stok kartı olan bir işletme kalem sayısı çok yada az olan bir fatura keserken programımızın bu arama yöntemini kullanarak en seri biçimde aradığı stoku kolayca bulup faturaya dahil edebilecektir. Bu liste mantığı programın her yerinde aktif olarak kullanılmaktadır. Bu görüntüyü oluşturmak için listeyi gtk_tree_view, düğmeleri gtk_button, arama kutusunu gtk_entry ve sıralama listesini de gtk_combo_box bileşenlerini kullanıyoruz. Ekle düğmesine bastığımızda ise Şekil 1.2 deki gibi bir tanımlama penceresi çıkacaktır.


Şekil 1.2 Stok Kartı

Kart tanımlama pencereleri yukarıdaki gibidir. Hemen hemen tüm kartların bir kodu, adı muhasebe kodları vardır. Örneğin cari hesap kodu/adı, stok kodu/adı, kasa kodu/adı, muhasebe hesap kodu/adı. Muhasebe kodları ise işin resmi tarafıyla alakalıdır. her stok bir muhasebe koduna sahiptir, kasalar, cari hesaplar, banka kartları vs. hepsi bir muhasebe kodu ile ilişiklendirilmelidir. Böylece tüm kart tanımlarını yaparken en az 3 adet tanımlama bilgisine sahip olmamız gerekmektedir. Diğer tanımlama alanları da kart ile ilgili detayları bildirmektedir. Örneğimizde ek alan olarak stoklar ile ilgili ölçü birimi vardır, aynı tanımlama alanına cari hesap kartlarında ihtiyacımız yoktur. Bölüme göre eklenebilecek tanımlama alanları çokluk gösterebilir, örneğin aynı stok kartı için barkod bilgisi, üretici bilgisi, temin süresi, 2. Ölçü birimi eklenebilecek diğer tanımlama alanları arasında sayılabilir. Ekranda 2 adet düğme görünmesine rağmen düğme sayısı aslında 3 adettir. görünmeyen diğer düğme bir karta değiştir diyerek girdiğimizde karşımıza çıkan güncelleme işlemini yapmamızı sağlayan düğmedir. Normal kart ekleme işlemi esnasında bu düğme karşımıza çıkmamaktadır. Bu bölüm'de aynı zamanda kullanıcının hız kazanması hedeflendiğinden işlemler fonksiyon tuşları ile desteklenmiştir. F2 düğmesi kayıt işlemleri için, F3 te işlemden vazgeçmek ve pencereyi kapatmak için kullanılmaktadır. Bu kısayollar sadece kart tanımlarında değil fişler'de de aktif olarak kullanılmaktadır. Yeni bir kart kaydettiğimizde kart tanımlama alanlarındaki bilgiler veritabanına kaydedilir, kart tanımlama penceresi kapatılır ve kart listesi yeniden oluşturularak liste üzerinde eklenen yada değiştirilen kart seçilerek focuslama işlemi gerçekleşir. bu kısıma ait veritabanı dizaynı da aşağıdadır.

Veritabanı Dizaynı

Alan Adı Tipi Gereklilik
stok_id bigint(20) Bu alana kullanıcının göremediği kart id numarası kayıt edilir. Özellikle raporlama ve ilgili kartın diğer bölümlerde de kullanılması esnasında ayırt edici alan olması bakımından önemlidir. Bu alandaki numara otomatik olarak her yeni kayıtt 1 arttırılır.
stok_kodu varchar(50) 50 adet alfanumerik karakter alabilecek büyüklükte bir alandır. Adından da anlaşılacağı üzere kart kodu buraya kayıt edilir.
stok_adi varchar(250) 250 adet alfanumerik karakter alabilecek büyüklükte bir alandır. Kart adı kayıt edilir.
olcu varchar(10) 10 adet alfanumerik karakter alabilecek büyüklükte bir alandır. Stok kartının ölçü birimini kayıt etmek için kullanılmaktadır.
alis_muhasebe_kodu varchar(50) 50 adet alfanumerik karakter alabilecek büyüklükte bir alandır. İlgili stok kartının alış işlemlerinde kullanılacak olan muhasebe kodunu kayıt etmek için kullanılmaktadır.
satis_muhasebe_kodu varchar(50) 50 adet alfanumerik karakter alabilecek büyüklükte bir alandır. İlgili stok kartının satış işlemlerinde kullanılacak olan muhasebe kodunu kayıt etmek için kullanılmaktadır.
miktar double Stok miktarını güncel olarak bu alanda tutuyoruz. Stok giriş yada çıkış işlemleri yapılırken artı yada eksi bu alana ekleme hareket gören miktar kadar ekleme yapılır.



2. Bölüm : Hareket Fişleri(fişin kendisi); Fişler kayıt edilmiş kartların giriş çıkış işlemlerini gerçekleştirmek için kullanılır. Stok hareketi gerçekleştirmek için stok fişi, alış faturası ayda satış faturası hareket fişine örnek verilebilir. Fişler 2 bölümden oluşur. Fişin genel başlık bilgisi ve fişin içeriği.

Şekil 1.3 Alış Faturası

Şekil 1.3'te görülen örnekte fatura no, tarih, cari hesap kodu ve adı, irsaliye numarası, irsaliye tarihi, açıklama bölümü ve fatura dip toplamlarının olduğu bölüm fatura genel bilgilerini oluturur. Geriye kalan gtk_tree_view bileşenini kullanan stok listesi ise fiş içeriğini oluşturur. Bu liste editable özelliğe sahip bir listedir. Listeye yeni kayıt girmek için Insert, bir satırı silmek için de Shift+Delete kısayolları kullanılmaktadır. Genel olarak fiş işeriğini oluşturan listelerde kart kodu yada kart adı sütünlarına veri girilir. Girilen veri, kartların tutulduğu veritabanında var mı yok mu diye kontrol edilir. Var ise kart adı, ölçü gibi bilgiler ilgili sütünlara otomatik yerleşir, eğer girilen kart kodu yada kart adı bilgisi veritabanında kayıtlı değilse kayıtlı kartlar arasından seçim yapmak üzere kart listesi ekrana gelir. Buradan da ilgili kart listeden seçilir ve seç düğmesine basılmasıyla birlikte seçilen karta ait bilgiler fiş içeriğine dahil edilir. Tutar kısmına gelince faturada izlenen mantık şudur; miktar x birim fiyat = tutar şeklinde hesaplama yapılır. Bu 3 sütuna her rakamsal veri girişinden sonra verilen bağıntı sağlaması yapılarak tüm satırların Toplam, KDV ve bunların ikisinin toplamı sonucu oluşan Genel Toplam yeniden hesaplanarak fatura dip toplamlarına yeni hesaplanmış rakalmar yazılır. Kaydetme işlemi ile birlikte de fatura genel bilgileri veritabanındaki faturalar tablosuna, fiş içeriği de fatura hareketleri ve stok hareketleri tablolarına kayıt edilir.


3. Bölüm : Fişler; Faturalar yada stok fişleri fişlere örnektir. Kart listeleri gibi çalışırlar. Listeden fiş seçimi yapılarak, seçimi yapılan fiş değiştirilebilir, silinebilir yada yeni bir fiş eklenebilir.


4. Bölüm : Raporlar; Kaydedilmiş kartlar yada kaydedilmiş hareket fişlerinin raporunu alıp yazdırabileceğimiz bölümlerdir. Raporlarda filtreleme yaptırmak gerekir. Örneğin kayıtlarında 1500 çeşit stok bulunan birisi belli özellikleri içeren sadece 40 adet stok'un raporunu almak isteyebilir, yada belli tarihler arası stok giriş-çıkış'larına ait bilgileri isteyebilir, yada hepsini birlikte almak isteyebilir. Bunun için esnek bir filtreme yapmak gerekir.

Şekil 1.4 Stok Giriş-Çıkış Toplamları

Yukarıdaki raporlama filtresi'nde Stok kodu ve stok adı bölümleri grup yada aralık tanımı yapılarak filtrelenmiş bir stok raporu alınabilir. Aynı zamanda bu raporun belli tarihler arası olması istendiğinde başlangıç ve bitiş tarihleri ile oynanarak daha sağlıklı bir rapor üretilebilir. Ek olarak alınan raporda sıralamanın da neye göre yapılacağını da belirlemek mümkündür.

 

Akış Diyagramı-1: Kart Silme Kontrol Mekanizması
 
Copyright @ 2004 Muhasebeci Geliştirici Ekibi