BASİT BİR SU FATURASI UYGULAMASI

gitarisyen

Aşk şarkıları söylemeyi bıraktığımız gün her şeyimizi yitirdik biz. İşte o yüzden durmadan aşk şarkıları söylüyorum.

 

Ne ölümler yaşatırım

İçimde ben

Hiçbiri kalmaz kendime

Bir karlı bahar açar

Gözlerimde yankısız

Kendimi öldürmekten

Yenik düşerim kendime...

Bu sitenin içeriğinden tam olarak faydalanabilmek için sisteminizde

 

JAVA ve FLASH PLAYER

 

yüklü olmalıdır.

BASİT BİR SU FATURASI UYGULAMASI

 

NOT: Microsoft Office Access 2003 sürümüyle yapmış olduğum bu "SU FATURASI UYGULAMASI" 14 Mayıs 2008 tarihinde tamamlanmış olup, aşağıda bu uygulamanın tanıtımını yaptığım yazı da, aynı tarihte yazılmış ve www.access-sql.com sitesinde yayınlanmıştır.

 

Bilindiği gibi Access’te veritabanının bütün yükünü sırtlanan nesneler tablolardır ve iyi yapılmış bir tablo tasarımı ve tabloda gereksiz fazlalıkların olmaması, yapacağımız uygulamanın performansını artırır... Yine hesaplanmış alanların veya hesaplamaların da tablolarda tutulmaması gerekir. Zira bu alanlar tabloların (dolayısıyla veritabanının) gereksiz yere şişmesine, performansının düşmesine ve diğer aksaklık ve hatalara neden olacaktır... Bu nedenle hesaplamalar formlar, raporlar ve daha çok (özellikle) sorgular üzerinde yapılır.
 

İşte ben de bugün tablomuzda tutulmaması gereken hesaplamaların sorgularla nasıl oluşturulacağı, form üzerinde nasıl gösterileceği, formdan rapora form üzerindeki kaydın nasıl aktarılacağı, basit şekilde Iif fonksiyonunun kullanımı gibi konuları basit şekilde anlatabilmek amacıyla kendime göre bir Su Faturası Çalışması hazırladım...
 

Elbette, benim yaptığım örnekteki hesaplamalar ve yerleşimler, kodlarla, SQL ile veya farklı şekillerde de yapılabilir. Amacım sadece basit bir örnekle (hiçbir fazla ayrıntıya girmeden) form ve sorgu üzerinde hesaplamaların nasıl ve ne şekilde yapılabileceğini göstermek...
 

Şimdi gelelim örneği hazırlarken hangi aşamaları takip ettiğime:

TABLO TASARIMI:
 

Öncelikle tasarım görünümünde tablomu açarak alan isimlerini ve veri türlerini girdim.
 

Burada amacım; su sayacının son okuma tarihinden 15 gün sonra son ödeme tarihi olacak şekilde; ilk endeks ile son endeks arasındaki sarfiyat miktarını bulup, bunu suyun birim (m3) fiyatı olan 1,35 ile çarparak su bedelini bulmak, %8 KDV’sini hesaplamak ve su bedeli ile KDV’yi toplayarak toplam tutarı bulmak olduğu için tablomda şu alanları oluşturdum:

aboneno (Her abonenin farklı bir numarası olmasını ve sırayla artarak gitmesini istediğimden, bu alanın veri türünü “Otomatik Sayı” yaptım.)

adsoyad

adres

turu (Burada “mesken” veya “işyeri”nin birim fiyatının farklı olacağını düşündüğümden, “Veri Türü” bölümünde arama sihirbazıyla bir değerler listesi oluşturdum ve varsayılan değerini =”MESKEN” yaptım. Formumda burası açılan kutu şeklinde gözükecek ve kutu içinde varsayılan değer olarak “MESKEN” ifadesi yer alacak.)

okumatarihi (Burada veri türünü “Tarih/Saat” yaparak giriş maskesi ile bir tarih biçimi oluşturdum ve -forma bilgileri girdiğim gün sayacı okuduğumu farz ederek- varsayılan değeri -bugünün tarihini göstermesi için- "=Date()" yaptım.)

ilkendeks (“Sayı” veri türünde oluşturduğum bu alan, sayacın ilk endeksini gösterecek.)

sonendeks (“Sayı” veri türünde oluşturduğum bu alan, sayacın son endeksini gösterecek.)

sarfiyat (sonendeks ile ilkendeks arasındaki farkı alacağımız bu alandaki fark hesaplamasını sorguyla yapacağız.)

birimfiyat (“Para birimi” veri türünde oluşturduğum bu alan bize sarfiyat miktarını hangi birim fiyatla çarpacağımızı gösterecek. Meskenler için su birim fiyatı 1,35 YTL olduğundan buranın varsayılan değerini 1,35 yaptım.)

subedeli (sarfiyatla birim fiyatı çarpınca bulunacak bedel için oluşturduğum “Para birimi” veri türündeki bu alandaki hesaplamayı da yine sorguda ve form üzerinde göstereceğiz.)

kdv (“Para birimi” veri türünde oluşturduğum bu alan, su bedelinin %8’ini hesaplayarak bize KDV miktarını verecek. Buradaki hesaplamayı da sorguda ve form üzerinde göstereceğiz.)

toplamtutar (Su bedeli ile kdv’yi topladığımız zaman bulacağımız toplam tutar için oluşturduğum bu alandaki hesaplamayı da sorgu ve form üzerinde yapacağız.)

sonodemetarihi (“Tarih/Saat” veri türünde oluşturduğum bu alanda sonokumatarihi’nden 15 gün sonra son ödeme tarihi olmasını istediğimden varsayılan değerini "=Date()+15" yaptım.)

NOT: Burada önemle şunu söylemek isterim, yukarıda oluşturmuş olduğumuz sarfiyat, birimfiyat, subedeli ve kdv alanların veri türünü “Metin” olarak bırakabileceğimiz gibi hatta (bu alanlar tabloda bir işleme girmeyeceğinden ve bu alanların hesaplamaları tabloya kaydedilmeyeceğinden) tablomuzda göstermemize de gerek yoktur. Zira bu alanları sorgu veya form üzerinde formüllerle tanımlayacağız ve hesaplamalarımızı orada yapacağız. Ancak yine de, ben kolaylık olması, gelişimin görünmesi ve tablodan sihirbazla form oluştururken basit olması nedeniyle bu alanları da tabloma dahil ettim.

FORM TASARIMI:
 

Form oluşturma sihirbazıyla tablomdaki alanları form üzerine aktardım ve formun şeklini şemalini verdikten sonra form üzerinde hesap yapacağım metin kutuları üzerinde formülleri yazmaya başladım. (Burada yapacağımız işlemler, formüller bizim örneğimizde sadece form üzerinde gözükecek, daha doğrusu formumuz için geçerli. Raporda görebilmek için sorgu oluşturup, sorgu üzerinde ayrıca işlem yapacağız.)

SARFİYAT (M3): Buradaki metin kutusunun Veri sekmesinin Denetim Kaynağı satırına =[sonendeks]-[ilkendeks] yazdım. (Amacım sonendeks alanındaki değerden ilkendeks alanındaki değeri çıkarıp sarfedilen su miktarını m3 cinsinden bu metin kutusunda göstermek.)

BİRİMFİYAT: Hatırlanacağı üzere yukarıda sarfiyatla çarpılacak olan birim fiyatın meskenler için farklı, işyerleri için farklı olduğunu söylemiştik. Meskenler için 1,35 YTL olan birimi de varsayılan değer olarak atamıştık. (O yüzden formumuzda yeni bir kayıt açtığımız zaman BİRİM FİYAT alanında 1,35 YTL gözükmekte.) İşte TÜRÜ açılan kutusundan İŞYERİ seçeneğini seçtiğim zaman BİRİM FİYAT alanındaki bu değerin 1,35 YTL değil de, (örneğin) 2,00 YTL gözükmesini ve işyeriyle ilgili hesaplamaları bu birim fiyat üzerinden yapmasını istiyorum. (İşyerlerinin birim fiyatını bilmediğim için ben örnek olması bakımından 2 YTL dedim.) Bunun için Iif fonksiyonundan faydalandım ve birimfiyat metin kutusunun özelliklerinden Veri sekmesinin Denetim Kaynağına

=IIf([turu]="MESKEN";1,35;2) yazdım.

Burada şunu demek istedim: Eğer “turu” alanındaki değer “MESKEN”e eşitse 1,35 olarak değilse 2 olarak göster.) (Bu işlemi yaptıktan sonra formu form görünümünde açarak TÜRÜ alanındaki açılan kutunun seçeneklerini değiştirirseniz farkı görebilirsiniz.)

SU BEDELİ: Burada sarfiyatla birim fiyatı çarparak su bedelini bulmayı amaçladığımdan, Veri sekmesinin Denetim Kaynağı satırına

=[sarfiyat]*[birimfiyat] yazdım.

(Sarfiyat adı verilen metin kutusuyla birimfiyat adı verilen –ve her ikisi içinde formül yazdığımız- metin kutularındaki değerin birbiriyle çarpılarak su bedelinin ne kadar olacağını hesaplatmaktı amacım.)

KDV (%8): Burada da, su bedelinin %8’ini hesaplayarak YTL cinsinden fiyatı göstermesi için metin kutusunun Veri sekmesinin Denetim Kaynağı satırına

=[subedeli]*0,08 yazdım.


TOPLAM TUTAR: Son olarak su bedeli ile kdv miktarını toplayarak toplam tutarı bulmak amacıyla metin kutusunun Veri sekmesinin Denetim Kaynağı satırına

=[subedeli]+[kdv] yazdım.


Formumuzu normal görünümde açtığımız ve ilk endeks ile son endeks alanlarına değerleri girdiğimiz zaman hesaplamaların form üzerinde otomatik olarak yapıldığını görebiliriz.

SORGU TASARIMI:
 

Sorgular bölümünü açarak, “Tasarım görünümde sorgu oluştur” dedikten sonra, Tbl_Sayac tablomu Sorgu kılavuzuna ekledim. Daha sonra kılavuza eklenen bu tablodan bütün alanları (tablonun başlık çubuğunu çift tıklayarak ve bütün alanlar seçili hale gelince tasarım kılavuzunun alttaki satırlarına sürükleyerek) sorguya ekledim.
 

Form tasarımında uzun uzun anlattığım için burada anlatmayacağım ancak örneği ve sorguyu incelediğiniz zaman göreceğiniz gibi; sorgunun alan satırında hesaplama yapacağım alanları formül yazarak tanımladım. Burada form üzerinde yukarıda yaptığım formülleri bu alanlara da yazdım. Ancak burada şöyle bir fark var: Örneğin sarfiyat alanı satırında sorguya hesaplama yaptırabilmek için

sarfiyat: [sonendeks]-[ilkendeks] yazdım.

Diğer alan satırlarını da şu şekilde tanımladım:

birimfiyat: IIf([turu]="MESKEN";1,35;2)

subedeli: [sarfiyat]*[birimfiyat]

kdv: [subedeli]*0,08

toplamtutar: [subedeli]+[kdv]

Burada yukarıda değindiğim gibi aslında tablomuzda olmasa bile örneğin [sonendeks]-[ilkendeks] formülünü gerçekleştiren “sarfiyat” isimli bir alan tanımlamış oldum.

RAPOR TASARIMI:
 

Yukarıda sorgumuzu oluşturduk ama, bu sorguyu güzel şekilde bir raporda görüntülemek ve yazıcıdan çıktısını da alabilmek gayet güzel olur herhalde.
 

Bunun için Raporlar bölümünde “Sihirbazı kullanarak rapor oluştur” dedikten sonra yukarıda oluşturduğumuz Srg_Sayac sorgusunu kaynak alan bir rapor oluşturdum. Sorgudaki bütün alanlar rapora yerleşmiş oldu. (Artık sorgunun yaptığı bütün hesaplamaları bu raporda görebiliriz.) Raporun şekliyle şemaliyle (biçim menüsüyle oynayarak) biraz uğraştıktan sonra, rapora son şeklini verdim.
 

Artık form üzerine bir buton yerleştirerek ve bu butona tıkladığımda raporu ön izlemede göstermesi için komut düğmesi sihirbazından faydalanabilirim.
 

Ancak aklıma şöyle bir şey geldi: Ben form üzerinde bu butona tıkladığım zaman, ne kadar abonenin kaydı varsa raporda hepsini gösterecek… Bense sadece form üzerinde hangi kayıttaysam raporda da o abonenin bilgilerini göstermesini istiyorum. O halde sorguya öyle bir ölçüt yazayım ki; form üzerinde hangi kayıttaysam formdaki butona tıklayınca sorgu sadece o kaydın bilgilerini görüntülesin ve raporda da bunu göstersin.
 

Bunun için Srg_Sayac sorgumu tasarım görünümünde açtım ve “aboneno” alanının “Ölçüt” satırına

[Formlar]![Frm_Sayac]![aboneno] yazdım.
 

Bunun anlamı şudur: Sorgumda, ben Frm_Sayac formu üzerindeyken hangi kaydın aboneno alanı gözüküyorsa o kaydı sorgula…
 

Bunu örneğin;

[Formlar]![Frm_Sayac]![adsoyad] olarak da yazabilirdik. O zaman da form üzerinde hangi adsoyad değeri varsa ona göre o kaydı sorgulatmış olurduk.
 

Sorguma bu ölçütü yazdıktan sonra formumu tasarım görünümde açıp, sihirbaz yardımıyla “Raporu Ön izlemek” için bir komut düğmesi oluşturdum ve adına “FATURAYI GÖR” dedim. Bu butona tıkladığım zaman, rapor açılacak ve form üzerinde hangi abonenin kaydındaysam (sorgudaki ölçüt nedeniyle o ölçüt sorgulanarak) raporda (kayıt kaynağını sorgumuzdan aldığı için) o abonenin fatura bilgileri görüntülenecektir…
 

Daha sonra raporumun özellikler penceresinden faydalanarak önde ve ortada açılacak şekilde ayarladım.
 

Son olarak uygulamam açıldığı zaman doğrudan oluşturduğum form gözüksün diye Araçlar>Başlangıç yoluyla Form/Sayfa Görüntüle kısmında Frm_Sayac formunu seçtim… Yine veritabanının şişmemesi ve uygulama kendini her kapattığında veritabanının sıkıştırılıp onarılması ve boyutunun küçülmesi için Araçlar>Seçenekler>Genel yoluyla “Kapatırken Düzenle” onay kutusunu aktif hale getirdim…
 

Örneğimi bu şekilde bitirmiş oldum.
 

Yukarıda da bahsettiğim gibi, bütün bunları oluşturmanın tek yolu benim izlediğim bu yöntem değil elbette. Ancak çabuk olması, pratik olması, Access’e yeni başlayanlara bir fikir vermesi açılarından ben bu yolu tercih ettim.
 

Örnek ektedir.
 

Saygılarımla…

 

 

 

gitarisyen

(M. Feridun GÜLSAN)

 

"ACCESS UYGULAMALARIM" Sayfasına Geri Dön

 

 

Tasarlayan: gitarisyen

 Bu site en iyi Internet Explorer ile 1024 X 768 çözünürlükte görüntülenir. © 2011