Etiketler ‘crystal report’

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 Yarının tarihini yazdırmak -2

Cumartesi, Temmuz 12th, 2008

Şu yazımda patronum Crystal Report ile hazırladığım raporda rapor yazdırılma tarihinin günün tarihi değilde bir gün sonrasının tarihini yazmasını istediğinden bahsetmiştim.  İyi güzelde kimse sormuyor acaba ?

Yapmak istediğimizden kısaca tekrar bahsedeyim. Raporu hangi gün alırsanız o günün tarihini PrintDate komutu ile Crystal Reports da yazdırmaktaydım. Fakat biz hep bir sonraki günün programını yaptığımız için ertesi gün imalattaki arkadaşlar programı çıktı olarak ellerine aldıklarında dünün tarihini görmüş olacaklardı. Sıkıntı çıkmaktaydı.  Patronum sağolsun dedi ki :

Rapor’un çıktısını aldığımız tarih deÄŸilde bir sonraki günün yani yarının tarihini program atamaz mı ?

Olur dedim attırırız …  Bir önceki yazımda nasıl yaptığımdan bahsetmiÅŸtim sizlere… Fakat bir sorunla karşılaÅŸtım.  Pazartesi salı gününün programını yaptığımız için çıktısını alınca tamam salı gününün tarihini atıyor böyle Cumartesiye kadar sorun yok ama …. Cumartesi günü yine program yapıp çıktı alırsak PAZAR gününün tarihini atmış olacak program…!  Fakat ÅŸirket pazar günü çalışmıyor… Pazartesinin programını Cumartesi günün yapıp üzerine Pazartesinin tarihini nasıl atacağız ? Al sana boru dediler :)

Heyecana gerek yok boruya hiç gerek yok dedim :) Onuda yaptım gerçi biraz kastım ama oldu sonunda çalışıyor…

Önceki yazımdaki prensibimiz neydi ?

Raporun yazdırılma tarihine 1 eklemekti. Bunu (printdate)+1 diye formül girdiÄŸim @tarih deÄŸiÅŸkeni ile tanımlamıştım.  Åžimdi ise Cumartesi gününe 2 eklemem ve diÄŸer günlere 1 eklemem lazım ki … İstediÄŸimiz olsun… Peki nasıl olacak ?

Öncelikle Önceki yazımda @tarih olarak belirlediğim değişkenimin içerisine

(PrintDate)+1

olarak formül girmiştim. Bu formüldeki +1 i siliyorum ve @tarih değişkenimiz için sadece

(printdate)

olarak kalmasını saÄŸlıyorum. Sonra menüde saÄŸ tıklayıp NEW seçeneÄŸini seçerek ayrı bir deÄŸiÅŸken tanımlıyorum bu deÄŸiÅŸkenimizin ismide tarihekleme olsun…

@tarihekleme değişkenimize şu formülü girdim.

if DayOfWeek ({@tarih}) = crSaturday then {@tarih}+2 else {@tarih}+1
// Nasıl bir çözüm ama :) Yarının tarihini attırıyorum eÄŸer …
// Günlerden Cumartesi ise o zaman pazartesinin tarihini atıyor …
// By TEAkolik  12.07.08   http://www.teakolik.com …

Böylelikle Cumartesi günü tarihe 2 ilave edecek ve pazartesinin tarihini ekrana yazacaktır. DiÄŸer günlerde ise sadece 1 ekleyecek ve ertesi günün tarihini vermiÅŸ olacak… Sorunu şükür ki çözebildim..Yukarıdaki resimde de görebilmektesiniz.

NOT: Beni Cyrstal Report ile tanıştıran ve bana çok çok yardımcı olan UÄŸur Çullukçu abimede buradan teÅŸekkür edip acaba iyi bir öğrenci olabilmiÅŸ miyim sormak istedim…

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…

Cyrstal Report Dizay yaparken

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

Uyuz oldum. Harbiden de uyuz oldum. Ya şu programda dizayn yapamayacak mıyız ? Arada kafasına göre program boşluk bırakıyor kardeşim ben bu boşluğu bıraksın istemiyorum. Kendim milimetrik bir dizayn yapmak istiyorum ama program bazen öyle bir yerde duruyor ki inat ediyor o boşluğu açmıyor. Yada inat ediyor oraya koydurmuyor.

Ya program sen ne uyuzmuÅŸssun ya… Adamı çıldırtıyor. Sanki program içerisinde dizaynı belirli pixellere bölmüşler bu pixellerden baÅŸka bir yere eriÅŸim saÄŸlayamıyorsunuz. Özelliklede 4 tane kutuyu yan yana yanaÅŸtırmak için saatlercede kassanız hiçbir yolu yok. İnat deÄŸilmi.

Tamam kabullendim inat bir program ama kardeşim bari bir tarafa koyduğum boşlukla diğer taraftaki boşluk eşit olsun yok olmaz bazen dar bazende geniş boşluk bırakıyor.

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