Makale Özeti

Daha önceki yazılarımızda Crystal Reports’u tanımış ve temel bir rapor oluşturup formatlamıştık. Bu yazımızda Crystal Reports üzerinde gruplama, toplam alma, ardışık toplam hesaplama ve formül kullanma gibi özellikleri tanıyacağız.

Makale




Crystal Reports ile Rapor Düzenleme

Daha önceki yazılarımızda Crystal Reports’u tanımış ve temel bir rapor oluşturup formatlamıştık. Bu yazımızda Crystal Reports üzerinde gruplama, toplam alma, ardışık toplam hesaplama ve formül kullanma gibi özellikleri tanıyacağız.

Öncelikle gruplamanın mantığını anlayalım. Neden gruplama yaptığımızı anlarsak geriye kalan tek şey , bu işlemi Crystal Reports menulerinden nasıl yapacağımızı öğrenmek olacak. Genel anlamda gruplamayı yapmamızın sebebi, elimizdeki veri listesini belli bir alana göre değerlendirmektir. Elimizde farklı ülkelerden karışık bir müşteri listesi olduğunu düşünelim. Bu müşterileri ülkelere göre gruplamak istersek listemizin ülke sütununa Group By özelliği uygulamamız gerekecektir.

Örneğimizi Crystal Reports’un kendi örnek veritabanı üzerinde yapacağız. Gruplama ve tablo ilişkilerini bir seviye daha basitleştirdiği için bu veritabanından örnek yapmayı tercih ettim. Siz de bu işlemleri öğrendikten sonra kendi veritabanınız üzerinde deneyebilirsiniz. Örneğimizi çalıştırabilmek için Crsytal Reports üzerinde bir önceki yazılarımızda görebileceğiniz adımları geçerek yeni bir boş rapor oluşturalım. Create New Connection bölümünde ODBC(RDO) türüne basarak yeni bir veritabanı bağlantısı kuralım. Seçeceğimiz veritabanı Xtreme Sample Database 10 olacak. Bu veritabanında Customer, Employee ve Orders tablolarından faydalanacağız.



Eğer birden fazla tablo seçtiysek, bir sonraki adımda tablolar arasındaki ilişkiyi de belirlememiz gerekir. Şekilde Customer, Employee ve Orders tabloları kullanıldığı için her bir Order’ın hangi Customer’dan geldiğini belirleyen CustomerID alanları ve Order’ın hangi Employee tarafından görev alındığı bilgisini tutan EmployeeID alanları birbirine bağlanmıştır.

Bu adımı da geçtikten sonra daha önceki örneklerimizden hatırlayabileceğiniz gibi Database Fields altında Customer, Employee ve Orders tablolarından istediğimiz tüm alanları görebiliyoruz. Bu örneğimiz için Orders tablosundan OrderID, OrderAmount, OrderDate ve ShipDate alanları ile Customers tablosundan CustomerName alanlarını raporumuzda kullanalım. Design bölümünde, resimde gördüğünüz gibi ilgili alanları koyabiliriz.



Gelen tüm siparişleri düzensiz bir şekilde sıralamış olduk. Birkaç aşama sonrasında oldukça kullanışlı bir rapor elde edeceğiz. Öncelikle siparişleri ülkelere göre gruplayalım. Yani Fransa’dan gelen siparişleri bir bütün , İngiltere’den gelenleri ayrı bir bütün şeklinde ülkelere göre gruplayalım. Menu üzerinde Insert -> Group’ a basarsak aşağıdaki gibi bir pencere açılacak ve hangi tablodaki hangi alana göre gruplama yapılacağı seçilebilecektir. Alt tarafta kalan Customers tablosundan Country alanını seçiyoruz.



Bu işlemin hemen ardından Design penceresini incelersek daha önceden öğrenmiş olduğumuz temel rapor bölümlerine ek olarak Details bölümünü ortada bırakacak şekilde Group Header #1 ve Group Footer #1 bölümlerinin de eklenmiş olduğunu göreceğiz.



Group Header ve Group Footer bölümleri, rapora eklemiş olduğumuz gruplama alanını işaret eder. Bu işlemlerin sonrasında aşağıdaki gibi bir çıktı elde ederiz. Gördüğümüz gibi gelen siparişler ülkelere göre gruplanmış durumdadır.



Raporumuza bir başlık ekleyelim. Insert –> Text Object seçerek metin nesnesini Report Header bölümüne sürüklüyoruz. Metin olarak Ülkelere Göre Sipariş Listesi yazabiliriz. Sağ tıklayıp Format Text ile Font değerlerini Arial, Kalın, 12 ve Black; Paragraph içinde de Alignment ‘ı Centered yapalım.

Şu ana kadar rapor üzerinde gruplama, birden fazla tablodan alan seçme ve raporu formatlama üzerinde durduk. Şimdi her grubun kendi toplam değerlerini bulalım. Ülke satırlarının en altına OrderAmount toplamlarını görüntüleyelim. Bunun için Insert -> Summary’ye basalım. Orders tablosundan OrderAmount alanını seçip, SummaryLocation olarak Group #1: Customer.Country - A ‘yı seçelim. Böylece her grubun altına OrderAmount toplamlarını görüntülemiş olacağız.



Şekilde gördüğümüz gibi raporumuzda grupların altına grup toplamları da eklenmiş oldu. Birkaç düzeltme ve ekleme ile raporumuzu daha kullanışlı ve yeni özellikleri kullanır hale getirelim. Öncelikle tarih formatını standart hale getirelim. Gün / Ay / Yıl formatında ve saat dakika değeri görüntülenmeyen bir şekil seçelim. Bunun için Design penceresinde Details bölümünde OrderDate alanına sağ tıklayarak Format Field seçilir. Date and Time sekmesinde alt tarafta Customize’a basarak DateTime sekmesinde sadece Date görünmesini seçebilir ve Date için DMY (Date Month Year) seçebiliriz. Ay ve yıl ayraçları . veya / karakterleri şeklinde seçilebilir.







Bu işlemleri OrderDate ve ShipDate için tek tek uygularsak raporumuz istediğimiz görselliğe kavuşacaktır.

Şimdi raporumuza bir formül alanı ekleyelim. Formül alanı çoğu zaman mevcut tablolarımızdaki alanlardan faydalanarak istediğimiz işlemleri yapmamızı sağlar. Bizim raporumuzda bir formül alanımız olacak ve bu alan ShipDate ile OrderDate alanlarının farkını hesaplayacak.

Bunun için Field Explorer üzerinde Formula Fields’a sağ tıklayıp Formula Name penceresinde DiffOfDate adını verelim. Bu ad, raporumuzda kullanacağımız tarihler arasındaki gün farkı alanının adıdır. Bu adı verdikten sonra Use Editor seçeneğini seçiyoruz.






Use Editor seçeneğini seçtikten sonra Formula Editor üzerinde Report Fields penceresinde tablolardan ilgili alanlara çift tıklayarak bunları formül alanına yazdıralım. Araya – operatorünü ekleyerek {Orders.Ship Date} - {Orders.Order Date} sonucunu kaydedelim.DiffOfDate adını vermiş olduğumuz bu alan Field Explorer içinde Formula Fields altında yer alacaktır. Bu alan da Database Fields gibi rapor içinde kullanılabilecek bir alan gibi Field Explorer içinde yer alır. (Nasıl ki tüm veritabanı alanları rapor içinde kullanılmayabilir ise, formül alanlarının da hepsini kullanmak zorunda değiliz). Oluşturduğumuz bu formül alanını raporumuza ekleyelim. Formula Fields altında DiffOfDate alanını Details bölümüne sürükleyelim. Page Header bölümünde DiffOfDate başlığını Days Passed olarak güncelleyelim. Raporumuz aşağıdaki gibi bir görünüme kavuşacaktır.



Crystal Reports’un sunduğu güzel özelliklerden biri de herhangibir sütun için, belirtilen aralık dışında veya bir alt sınır üzerinde bir değeri farklı bir renkle vurgulama özelliğidir. Örnek olarak bu raporumuzda Days Passed adlı formülle bulduğumuz fark alanı 3 ‘den fazla olan , yani istendikten 3 gün geçtikten sonra gönderilen değerleri kırmızı renk ile gösterelim.

Bunun için Design penceresinde Details bölümünde @DiffOfDate alanına (@ işareti formül alanı olduğunu belirtir) sağ tıklayarak Highlighting Expert’e basalım ve alt tarafta New’a tıklayalım. Bu alan değeri 3’ten büyük ise Font’u kırmızı olsun seçimini aşağıdaki şekildeki gibi yapıyoruz.




Bu işlemin sonucunda aşağıdaki gibi bir çıktı elde ederiz.




Raporumuzda özel alanlardan da faydalanalım. Field Explorer’da Special Fields altında Page N of M alanını Design penceresinde iken Page Footer’a sürükleyip bırakırsak her bir sayfanın sonunda toplam kaç sayfalık bir raporumuz olduğunu ve şu anda kaçıncı sayfada olduğumuzu görüntülemiş olacağız.

Önceki yazılarımızda vurguladığımız çizgi ve kutu (Line / Box) özelliklerini burada kullanarak raporumuzu bitirelim. Design penceresinde Details bölümünde alanların altını baştan sona çizecek şekilde Insert -> Line ‘ı kullanalım. Insert -> Box ‘a basarak Group Header #1’ın sol üst köşesinden Group Footer #1’ın sağ alt köşesine kadar kutumuzu çizelim. (Group Footer bölümünün sınırı ile tablonun alt çizgi sınırı arasında biraz boşluk bırakmanız tavsiye edilir. Aksi taktirde kutunun grup grup değil tüm kayıtları çerçeveye alması gibi bir durumla karşılaşabilirsiniz.) Kutuya sağ tıklayıp Format Box diyerek Rounding (Yuvarlama) değerini 24 olarak seçelim. Sonuç çıktımız aşağıdaki gibi olacaktır .




Raporumuzda Crystal Reports’un bize sunduğu birçok temel ve ileri özellikten faydalanmış olduk. Bir sonraki yazımızda Crystal Reports üzerinde kayıt filtreleme ve dışardan parametre verme özelliklerini inceleyeceğiz.


Onur Kulabaş
Yazılım Danışmanı


Sorularınız için onur.kulabas@bilgeadam.com