Etiketler ‘rpt’

Crystal Report Kazık bir soru ve Rapor dizaynı…

Cuma, Ekim 10th, 2008

Merhaba arkadaşlar ara sıra sizlere Crystal Report ile ilgili deneyimlerimi anlatmaya çalışıyorum. Özelliklede karşıma çıkan sorunları çözer çözmez yazmak en büyük zevkim diyebilirim.

Bugün yine can sıkıcı bir sorunla karşı kaşıya kaldım.  Aslında sorun değil bir soru tam bir boru :) Ulen espiri yapmayı bile beceremiyorum :) Lafı fazla uzatmadan hemen konuya balıklamasına dalıyorum.

KURULU SİSTEM :

Uyumsoft‘un ERP projesi sistemimizde kurulu. Sisteme girilen siparişler müşteriye teslim edildiğinde siparişler kapatılmaktadır. Sistemde 1 Database içerisinde 2 firma var. DB içerisinde veriler PROGRESS veritabanı yönetici ile işlenmekte. Uyumsoft ERP projesinde siparişler arasındaki Raporlar SQL ile Crystal Report programında dizayn edilerek işlenmektedir.  Genelde Açıklama1, Açıklama2, Açıklama3, Açıklama4 … gibi stunlara girilen değişkenler ile Rapor verileri çekilmekte. Sipariş Güncelleme adlı ekranda tüm açık siparişler alt alta satır satır belirtilmiş ve bazı kolonları açık ve yazılabilir durumda gelmektedir. Açıklama1, Açıklama2 … gibi stunlara yazılan DEĞİŞKENLER sayesinde raporlar database içerisinden çekilmektedir.

SİSTEMDEKİ SİPARİŞLER :

Panel, Ahşap ve Çelik olarak 3 farklı sipariş sisteme girilmekte. Panel siparişleri 100 01, 100 02, 100 03, … stok kodları ile başlamakta kendi içerisinde üretilen Panel ürünleri cinslerine göre stok kodları belirlenmiştir. Ahşap ürünlerinde ise 300 01, 300 02, 300 03, …. kodları ile belirlenmekte. Son olarak Çelik ürünleri ise 200 01, 200 02 … olarak kodlanmıştır. Ahşap, Panel ve Çelik ürünleri kendi içerisinde ayrı olarak raporlar halinde alınmaktadır.  İmalat raporu, ürün raporu, sipariş raporu, press raporu, gibi …

İHTİYAÇ :

Mobilya ürünlerindeki kullanılan KASA ürünleri dışarıdan hazır olarak alınmaktadır. Girilen siparişlerden üretime girecek olanların KASA ürünlerini sipariş vermek için tüm kasa adetleri gerekmektedir. Bir ürüne 2,5 adet kasa kullanılmaktadır. Bir kasa siparişi verilebilmesi için kasa ölçüleri guruplandırılacak bu gruplar arasında reklar ayrı olarak alınarak kasa siparişi ortaya çıkartılacak.

İSTENİLEN RAPOR : ( Açıkcası KAZIK SORU daha anlaşılır olacaktı. )

Sistemdeki Mobilya ürünlerinin siparişleri arasında istediğimiz siparişlerin AÇIKLAMA1 stunlarına “KASA” isimli bir değişken yazacağız.  Bu “KASA” değişkenini yazdığımız siparişler arasında Mobilya siparişleri seçilecek her siparişte 1 ile 20 arasında kalem bulunmaktadır. Siparişler kendi aralarında FINDIK, CEVİZ, MAUN …. gibi renklere sahiptir. Kasa ölçüleri ise 8, 10, 12, 14, 16, … gibi ölçülere sahiptir. Her renkte bu ölçüler bulunmakta. Hangi renkten hangi ölçüye sahip kaç tane sipariş olduğu ortaya çıkartılacak ve bu adetler 2,5 ile çarpılacaktır. ( Bir ürüne 2,5 adet kasa kullanılmakta. Fakat 0,5 kasa olmaz 1 ‘e tamamlanmalıdır. )

Aldın boruyu dedim kendi kendime… Daha anlaşılır bir şekilde ortaya şöyle bir sonuç çıkması gerekiyor..

10 ‘luk KASA dan

3 ADET MAUN  1 ADET CEVİZ  30 ADET FINDIK

12 LİK KASA dan

5 ADET MAUN 6 ADET CEVİZ 20 ADET FINDIK

…….
….
..

Tabiki ilk önce RAPOR dizaynımızı yapmamız gerekiyor. Bu kısmı  geçiyorum.

Raporde RECORD SELECTION bölümüne aşağıdaki kodları girdim.

{firma.firma_kod} = “MASTER” and

// Burası DB içerisindeki 2 firmadan MASTER olanını seçmek için;
{siparis_master.teslim_kod} = “KASA” and
// Burası Açıklama1 stunumuzda yazdığımız değşkeni belirttiğimiz kısım
// Açıklama1 stunlarına “KASA”  yazdığımız siparişlerin kalemleri toplanacak.
{siparis_detay.alis_satis} = “Satış” and
// Burası Alış - Satış siparişi olup olmadığını belirtmek için
{siparis_detay.siparis_durum} and
// Burası sipariş durumuna bakmak için KAPALI siparişleri okumayacak.
not ({siparis_detay.stok_kod} startswith ["100 01", "100 02", "100 03", "100 04", "100 05", "100 06", "100 07", "100 08", "100 09", "100 10", "100 12", "100 90", "200", "300 11", "300 12", "300 90"])
// Burası hangi siparişlerin kalemlerindeki STOK kodlarını filtrelemek için NOT eki sayesinde bu siparişleri programın okumasını engelliyorum.
// 10.10.08 by TEAkolik http://www.teakolik.com

tabiki siz bunu istediğiniz gibi farklı atraksiyonlara çevirebilirsiniz.

Raporda GRUP HEADER 1 oluşturdum bu kısmı siparis_detay_bmiktar -A  olarak Databaseye bağladım. Raporumuzda

KASA :

{bmiktar} databasemiz içerisindeki siparişlerin kasa ölçülerini yazdığımız alan 10,12,14,16 gibi…

Yazdıracağımız kısımda 10 luk, 12 lik, 14 lük, ayrımını yapmaktayız. Alt alta kasalar yazılacak. Hemen altına GRUP HEADER 2 oluşturdum ve siparis_master_okod2 sütünuna bağladım. Bu sütünda siparişlerin kalemlerindeki ürünlerin renkleri tutulmakta.

Bu kısımdaki GRUBU gizliyorum. Grup arka planda çalışacak daha doğrusu filtreleme yapacak. Hemen alt kısımdaki GRUP FOOTER2 bölümüne geliyorum.

Bu bölüme

20 Adet FINDIK gibi yazılacaktır. Bunun için öncelikle Adeti hesaplattırmamız gerekiyor.  Şimdi Siparişler arasında Mobilyaları bulduk bu mobilyaların içindeki kasa ölçülerini bulduk kasa ölçüleri arasındaki renkleri ayırdık ve her rengi alt alta adetlerini yazıp 2,5 ile çarpacağız.

Kalemleri toplamak ve topladığımız adetleri çarpmak için Count değerinden faydalandım.

Formula Fields arasına sağ tıklayıp NEW dedim ve kasa_carp isimli bir değişken tanımladım. Bu değişkenin içerisine aşağıdaki formülü girdim.

(Count ({siparis_detay.bmiktar}, {siparis_master.okod1}))*(2.5)

Count ile siparişlerdeki kalemleri saydırıyorum. Bmiktar kasa ölçüleri ve okod1 kısmıda renkleri böylelikle her renkten kaç tane olduğunu çıkartabildim. Sonrada *(2.5) yaparak kasa siparişi verilirken söylemiştim 1 kalemdeki mala 2,5 adet kasa gitmekte…  Sonrada bu değişkenimizi  GRUP Footer 2 (siparis_master_okod1) içerisine sürükleyip koydum..

@kasa_carp  ADET  okod1  olarak tanımlamamız bitti.

Sonuç :

Hesaplama harika yanlışlık yok. Hadi kolay gelsin. Raporun görmek isterseniz Raporumuz tıklayarak indirebilirsiniz. Aşağıdanda ekran görüntülerini inceleyebilirsiniz.

Crystal report ile günün tarihine 1 eklemek

Cumartesi, Temmuz 12th, 2008

Merhaba arkadaşlar bugün patronum kullandığımız ERP projesindeki çıktılarımızda bir problem olduğunu söyledi. Sorun şuydu…

Hergün biz yarının programını yapıp çıktılarını alıyoruz. Cyrstal Report ile yaptığım raporların üzerine printdate ile rapor üzerine tarih yazdırmaktaydım. Yalnız bugün yarının raporunu çıktı aldığımda ertesi gün program işleve alınıyor ve rapor üzerindeki tarih hep 1 gün öncesini göstermekteydi. İmalattaki arkadaşlar bu dünün programı diye raporu yukarı yollamaya başlayınca küçük bir sorun olarak karşıma çıktı.

Söylediğim gibi crystal report ile raporları yapıyorum ve rapor dizaynı yaparken sağ taraftaki Special Fields ler arasındaki Printdate komutunu rapor üzerine ekleyerek raporun çıktı tarihini yazmasını sağlamaktaydım.  Patronum ben ne zaman çıktıyı alırsam o hep bir gün sonraki tarihi yazsın diyince tabi işler değişti :)

Special Fields arasında da tomorrow gibi bir değişken göremedim açıkcası :) Date + 1 i benim oluşturmam gerekiyordu.

Yine sağ taraftaki X-1 Formula Fields kısmına geldim Sağ tıkladım ve New seçtim. Değişkenimin ismini tarih olarak belirledim. Sonra değişkenimin içerisine

// 12.07.08 by TEAkolik http://www.teakolik.com
(printdate)+1
// Bir sonraki günü belirtebilmek için tarihe bir eklemek lazımdı.
// bu değişken ile çıktı tarihine 1 eklemiş oluyorum.

Sonrada bu değişkenimi rapor üzerine @tarih olarak yerleştirdiğimde artık çıktıyı aldığınız zaman çıktı tarihini değilde bir sonraki günün tarihini rapora yazacaktır.

Eğer RPT dosyalarınız çok geç açılıyorsa

Çarşamba, Mayıs 21st, 2008

Merhaba arkadaşlar. 6 gibi bir süredir şirketimizde ERP projesini aktif edebilmek için ter döküyorum. Yeni sistemde sipariş yönetiminden tutunda muhasebe ve üretim-imalat a kadar herşey tek bir çatı altında toplanmış. Ne güzel bu hale getirebildik sonunda bu süreç biraz zorlu bir süreç oldu ki kendimize özel bir program yaptırdık 6 ayda normal… Bu süreç içerisinde programda karşılaştığımız bir sorundan bahsedeceğim.

Erp içerisinde bir RPT Viewer mevcut. Kendi içerisindeki bu rapor görüntüleyicisi sayesinde bana lazım olan rapor ekranlarını Crystal report ile yapıp programın Viewer’ine tanımlıyoruz. Gerekli olan rapor ekranlarını kullanıcılarımız ve şirket yöneticilerimiz gün boyunca alarak işlerin sürmesini sağlamaktalar.
İyi güzelde bazı raporlarımızdaki kodlar manyak ötesi fazla olunca yani şirket yöneticileri Hamza bize şöyle bir rapor lazım buda olsun, şuda olsun, oda olsun, şunuda koy, bunuda koy diyince tabiki doğal olarak rapor kasmaya başladı…

ÖR:

// EĞER HÜCRE BOŞSA RENKLENDİRME BEYAZ OLACAK..!
if {siparis_master.sevk_adres3}=”" then false ELSE
// EĞER YANLIŞ YAZILIRSA <> MANASI YANLIŞ YAZILAN VEYA FARKLI DEĞER RENK KIRMIZI OLSUN
if {siparis_master.sevk_adres3}<>”" then false ELSE
// by TEAkolik 10/05/2008 11:27

if {siparis_master.sevk_adres3}=”YER HAZIR DEĞİL” then false else
// İPTAL OLDU if {siparis_master.sevk_adres3}=”ÖLÇÜ” then false ELSE
if {siparis_master.sevk_adres3}=”PRESS” then false else
if {siparis_master.sevk_adres3}=”PRESSB” then false else
if {siparis_master.sevk_adres3}=”PRESS1″ then false else
if {siparis_master.sevk_adres3}=”PRESS1B” then false else
if {siparis_master.sevk_adres3}=”PRESS2″ then false else
if {siparis_master.sevk_adres3}=”PRESS2B” then false else
if {siparis_master.sevk_adres3}=”EBAT” then false else
if {siparis_master.sevk_adres3}=”EBATB” then false else
if {siparis_master.sevk_adres3}=”İMALAT” then false ELSE
// Ekleme by TEAkolik Genel Müdür istekleri … 03/03/08
if {siparis_master.sevk_adres3}=”DOLGU” then false else
if {siparis_master.sevk_adres3}=”DOLGUB” then false else
………………………………… ( 58 SATIR…. )

GİBİ olunca doğal olarak rapor esnasında kasılmalar başlıyor. Rapor süresi tabiki her yeni koddan sonra yeni bir ekleme ile uzamaya başladı. Bir raporu 4 dakikada almaya başlayınca bir çözüm yolu getirmek zorunda kaldık. Tabiki bu konuda uzman olan Uğur Çullukçu ‘ya yöneldim. Saolsun beni kırmadı ve abim mevcut programın dataları çekerken XML kullandığını ve bunun yerine ODBC ile bağlantı yaparsak raporların çok daha hızlanacağını söyledi. Peki ben Crystal Report ile raporu dizan ederken bağlantıyı ODBC ye çevireyim ama mevcut ERP projemiz okuyabilecek mi ? Sağolsun ERP projesini yapan arkadaşlar ODBC rapor görüntüleme diye bir menü ekleyip programın okuyabileceği hale getirdiler..

Peki 4 dakikada alınan bir raporu ODBC ile bağlantı yaparak kaç dakikada görüntüleyebiliriz ?

Bu sorunun cevabını denedim ve gördüm 4 Saniye… Evet yanlış duymadınız 4 saniye tabiki patronum bu süreyi duyunca süper oldu dedi :) Gerçi tebik beklerdim ama neyse :)

Peki Crystal Report ile nasıl ODBC bağlantısı yapacağız ?

Crystal Report programımızda DATABASE menüsüne gelerek Log on or Off sekmesine geliyoruz. Açılan pencerede Create New Connection seçeneğini seçiyoruz.

Sonrada bu menü içerisinde ODBC (RDO) seçeneğine geliyoruz. Bu seçeneği seçtiğimiz zaman bizden Databasemizi seçmemiz için bir ekran geliyor.

Bu kadar basit ….

Şimdi bizden hostname ( Server adı ) , Port Number ( Bağlantı portu ) , Database name ( Database adı ), User id ( DB kullanıcı adı ), password ( DB şifresi ) isteyecek bilgileri doğru girdiğiniz zaman bağlantıyı sağlamış olacaksınız.

ODBC ile bağlantı sağladığınız zaman Crystal Report içerisinde rapor dizaynı yaparken sağ taraftaki field explorer içerisinde SQL seçeneğinin belirdiğini göreceksiniz. Artık ODBC ile databasemize bağlantı sağlamış olacağız. Ben daha önceden ADONET ile XML bağlantısı sağlamaktaydım ve raporlarım kastıkça kasmaya başlamıştı. Şimdi çatır çatır birkaç saniye içerisinde rapor alabilmekteyim..

Hadi kolay gelsin…

Theme : N.Design Studio Türkçe : TEAkolik V.2.8 Altyapı : Wordpress
RSS Yorumlar RSS Giriş