(Dip Not : Kusura bakmayın resimler devasa boyutta olduğu için dipnotu buraya düştüm, resimleri büyül olarak upload etmem olayı daha net görmeniz içindir. Sorularınız olursa yardımcı olmaya çalışırım.)
Merhaba arkadaşlar, uzun zamandır bir başlık bile atamıyorum.Malumunuz işler yoğun ve vakit kısıtlı. Boş bir vaktimde ihtiyaç duyduğum ve sizlerinde ihtiyaç duyabilceğiniz bir konuya değinmek istiyorum "Raporlama" . Bilindiği gibi arkadaşlar raporlama konusu müşterilerden en çok istenilen şeydir ve bir çok componentle yada dahili visual studio komponentleri ile birşeyler yapmaya çalışırız fakat bazen yetersiz kalabiliyor. Ben component ihtiyacımı Devex üzerinden sağlıyorum çünkü çok başarılı ve kaliteli ve en önemlisi ihtiyaç duyabilceğim şeyleri üzerinde barındırıyor olmasıdır. Lafı çok uzatmadan Devex'in XtraReport undan bahsedelim :
Bu rapor komponenti Fatura,İrsaliye vb. gibi belgeler için ,
Teklif vb. belgeler için,
İş Emirleri vb. belgeler için,
Müşterilerin istediği özel formatlarda belge çıktıları için v.b birçok durumda kullanılan rapordur.
Ben burada bir fatura raporlama örneği vericem ve bu hazır raporu müşterinin kendisine göre nasıl editleye bileceğini göstericem.
İlk önce raporun 3 noktasından bahsetmem gerek :
1.Report Header = Rapor Başlık bilgileri . Örnek : Faturadaki sabit bilgiler : Cari Adı,Adresi,Vergi Dairesi,Vergi Nosu , Tarihi,Sevk Tarihi,Tarihi.
Faturanın detayları için oluşturula bilecek başlık bilgileri :
Stok Adı Stok Kodu Birim Miktar Birim Fiyat Tutar gibi..
2.Detail = Faturanın detay kısmı , burası aşağı doğru akan kayıtlar için kullanılan kısımdır, mesela bir faturada 1 den fazla ürün çeşidi alına bilir ve her çeşit için tek satır belirtmeniz lazım. Burası bunun için kullanılacaktır.
3.PageFooter = Raporun Sonu . Bizde burası faturanın genel toplamı,aratoplamı,iskonto toplamı,kdv toplamı, cari son bakiyesi, genel tutarın yazı ile yazılışını parametrik olarak göndericeğiz.
İlk olarak bir proje oluşturun .

Sonra projeye sağ tıklayıp Add->New Item diyelim ve bir DataSet nesnesi ekleyelim.


Sonra oluşan dataset nesnesini SolutionExplorer üzerinden açın ve sağtıklayıp 2 tane tablo ekleyelim
1.si FaturaBaşlık(Cari bilgileri vs.) bilgileri 2.si FaturaDetay(Ürünlerin Olduğu) bilgileri olsun
Sonra Faturanın başlıklarını tutacak tabloya gerekli sütunları ekleyelim :
CariKodu,CariAdı,CariAdres,VergiDairesi,VergiNumarası,Tarih,SevkTarihi,Saat
CariSonBakiyesi,FaturaAraToplamı,FaturaIskontoToplamı,FaturaKDVToplamı,FaturaGenelToplamı,FaturaGenelToplamıYazısı
Detay Tablosu için :
Stok Kodu,Stok Adı, Birim, Birim Fiyat, Miktar ,İskonto Oran,KDV ,İskonto Tutar,Kdv Tutar , Tutar ,Net Tutar

Şimdi gelelim Fatura Dizaynına , bunun için yine projeye sağ tıklayın Add - >New Item -> XtraReport ekleyelim.

Sonra Rapor Dizayn Sayfasında bize bir hazır şablon oluşturma sihirbazı çıkacaktır bunu direk Cancel diyerek kapayalım.


Daha sonra ToolBox üzerinde bulunan Data üzerinden bir DataSet nesnesine çift tıklayarak Rapora ekleyelim.

Sonra karşımıza böyle bir diyalog çıkacak ve bizim oluşturduğumuz DataSet üzerinden miras alma seçeneği çıkacaktır. Az önce bizim oluşturduğumuz DataSet aslında kendimiz için hazır kullanıla bilecek bir classtır. Bizde rapora eklediğimiz dataset i bunun özelliklerini devralması için ekliyoruz ve direk OK butonuna basalım.
Sonra DataSet e bir isim verelim , erişim belirtecinide Properties Penceresinden -> Modifiers Özelliğini -> PUBLİC olarak değiştirelim

Bunuda yaptıktan sonra Field List penceresinden gerekli bilgileri istediğimiz yerlere sürükle bırak yapalım.
Dizaynımızı Oluşturalım.

Resim kocaman ama daha iyi görünmesi ve anlaşılması için küçültmek istemedim. Arkadaşlar dikkat ederseniz Cari Adresini DataSet üzerinde göremiyoruz ve buraya onu eklememiz gerek , bunun için Ana Dataset nesnemizi açıp oraya birde Cari Adres alanı eklememiz gerekmektedir. Daha sonra Field List üzerinde bu alanın güncellenmiş olduğunu görüceksiniz.

Evet gördüğünüz gibi bu alanda geldiğine göre dizaynda ilgili noktaya yerleştirmemiz gerekir ve şimdi gelelim işin kodlama tarafına ve en zevkli kısmına =)
Formumuza 3 buton ekleyelim
1.si Fatura Dizaynını kullanıcıya açsın
2.si Baskı Önizlemesi Yapsın
3.sü Bizim kaydettiğimiz bir dizayn dosyasını yükleyerek kullanıcının bunu düzenleme şansını sağlasın.
Kodlarımı aşağıda yayınlıyorum:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DevexXtraReportExample
{
public partial class Form1 : Form
{
XRprInvoice myInvoice = new XRprInvoice();
public Form1()
{
InitializeComponent();
}
private void btnInvoiceDesign_Click(object sender, EventArgs e)
{
myInvoice.ShowDesigner();
}
private void btnShowInvoice_Click(object sender, EventArgs e)
{
DataRow dRowHeader = myInvoice.dsRprInvoice.dtInvoiceHeader.NewdtInvoiceHeaderRow();//Fatura Başlık İçin Bir Satır Oluşturduk
dRowHeader["CustCode"] = "CRY. YAZILIM EMRCRK";//Müşteri Kodu
dRowHeader["CustName"] = "EMR CRK CORP.";//Müşteri Adı
dRowHeader["CustAdress"] = "BEYLİKDÜZÜ";//Müşteri Adres
dRowHeader["CustRemBalance"] = Math.Round((-1)*(529.056),2).ToString("#0.00");//Müşteri Kalan Bakiyesi
dRowHeader["TaxOffice"] = "BEYLİKDÜZÜ";//Vergi Dairesi
dRowHeader["TaxNum"] = "1122334455";//Vergi Numarası
dRowHeader["Date_"] = DateTime.Now.ToShortDateString();//Fatura Tarihi
dRowHeader["RecvDate_"] = DateTime.Now.ToShortDateString();//Sevk Tarihi
dRowHeader["Time_"] = DateTime.Now.ToShortTimeString();//Saat
dRowHeader["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Fatura Tutar
dRowHeader["TotalDiscount"] = Math.Round((00.00), 2).ToString("#0.00");//Fatura İskonto Toplamı
dRowHeader["TotalVat"] = Math.Round((36.00), 2).ToString("#0.00");//Fatura Kdv Toplamı
dRowHeader["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Fatura Genel Toplam
dRowHeader["NetTotalStr"] = "İKİ YÜZ OTUZ ALTI /TL. /KRŞ. ";//Genel Toplam Yazısı
myInvoice.dsRprInvoice.dtInvoiceHeader.Rows.Add(dRowHeader);//Fatura Başlık Bilgisine
//yeni bir satır ekledik
DataRow dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
dRowDetail["StockCode"] = "HDD.SGT EXT 1TB";//Stok Kodu
dRowDetail["StockName"] = "SEGATE GO FLEX 1 TB EXT. HDD";//Stok Adı
dRowDetail["StockUnit"] = "ADET";//Stok Birim
dRowDetail["Price"] = Math.Round((200.00), 2).ToString("#0.00");//Birim Fiyat
dRowDetail["Amount"] = 1;//Miktar
dRowDetail["DiscPer"] = 0;//İskonto Oranı
dRowDetail["Vat"] = 18;//KDV Oranı
dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
dRowDetail["VatMnt"] = Math.Round((36.00), 2).ToString("#0.00");//KDV Tutarı
dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar
myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);
myInvoice.ShowPreview();
}
private void btnLoadLayout_Click(object sender, EventArgs e)
{
myInvoice.LoadLayout(@"D:\NewXRprInvoice.repx");
DataRow dRowHeader = myInvoice.dsRprInvoice.dtInvoiceHeader.NewdtInvoiceHeaderRow();//Fatura Başlık İçin Bir Satır Oluşturduk
dRowHeader["CustCode"] = "CRY. YAZILIM EMRCRK";//Müşteri Kodu
dRowHeader["CustName"] = "EMR CRK CORP.";//Müşteri Adı
dRowHeader["CustAdress"] = "BEYLİKDÜZÜ";//Müşteri Adres
dRowHeader["CustRemBalance"] = Math.Round((-1) * (529.056), 2).ToString("#0.00");//Müşteri Kalan Bakiyesi
dRowHeader["TaxOffice"] = "BEYLİKDÜZÜ";//Vergi Dairesi
dRowHeader["TaxNum"] = "1122334455";//Vergi Numarası
dRowHeader["Date_"] = DateTime.Now.ToShortDateString();//Fatura Tarihi
dRowHeader["RecvDate_"] = DateTime.Now.ToShortDateString();//Sevk Tarihi
dRowHeader["Time_"] = DateTime.Now.ToShortTimeString();//Saat
dRowHeader["Total"] = Math.Round((400.00), 2).ToString("#0.00");//Fatura Tutar
dRowHeader["TotalDiscount"] = Math.Round((00.00), 2).ToString("#0.00");//Fatura İskonto Toplamı
dRowHeader["TotalVat"] = Math.Round((72.00), 2).ToString("#0.00");//Fatura Kdv Toplamı
dRowHeader["NetTotal"] = Math.Round((472.00), 2).ToString("#0.00");//Fatura Genel Toplam
dRowHeader["NetTotalStr"] = "DÖRT YÜZ YETMİŞ İKİ /TL. /KRŞ. ";//Genel Toplam Yazısı
myInvoice.dsRprInvoice.dtInvoiceHeader.Rows.Add(dRowHeader);//Fatura Başlık Bilgisine
//yeni bir satır ekledik
DataRow dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
dRowDetail["StockCode"] = "HDD.SGT EXT 1TB";//Stok Kodu
dRowDetail["StockName"] = "SEGATE GO FLEX 1 TB EXT. HDD";//Stok Adı
dRowDetail["StockUnit"] = "ADET";//Stok Birim
dRowDetail["Price"] = Math.Round((200.00), 2).ToString("#0.00");//Birim Fiyat
dRowDetail["Amount"] = 1;//Miktar
dRowDetail["DiscPer"] = 0;//İskonto Oranı
dRowDetail["Vat"] = 18;//KDV Oranı
dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
dRowDetail["VatMnt"] = Math.Round((36.00), 2).ToString("#0.00");//KDV Tutarı
dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar
myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);
dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
dRowDetail["StockCode"] = "RAM.KNG 1GB DDR2";//Stok Kodu
dRowDetail["StockName"] = "1 GB KINGSTON DDR3 RAM";//Stok Adı
dRowDetail["StockUnit"] = "ADET";//Stok Birim
dRowDetail["Price"] = Math.Round((50.00), 2).ToString("#0.00");//Birim Fiyat
dRowDetail["Amount"] = 4;//Miktar
dRowDetail["DiscPer"] = 0;//İskonto Oranı
dRowDetail["Vat"] = 18;//KDV Oranı
dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
dRowDetail["VatMnt"] = Math.Round((9.00), 2).ToString("#0.00");//KDV Tutarı
dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar
myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);
myInvoice.DataMember = "dtInvoiceDetail";//Eğer bu satırı yazmazsanız detay da sadece ilk satırı görmüş olursunuz bu satır detayın hangi kaynaktan geldiğini belirdir.
myInvoice.ShowPreview();//Önizleme
//myInvoice.ShowDesigner();//Dizayn Mod
}
}
}



KAYNAK KODU INDIR (SOURCE CODE DOWNLOAD ): DevexXtraReportExample.rar (123,67 kb)
Umarım işinize yarar , iyi çalışmalar herkese...