fastreport reportsummary de if ile sorgulama...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

fastreport reportsummary de if ile sorgulama...

Mesaj gönderen serkan »

selam arkadaşlar,bir sorum olacaktı fastreport 3.25 de masterdata üzerinde hesapkodu ve borc diye iki sütün var
ve bunlar liste şeklinde gösteriyor.

örnek:

120-------------------------300
120 01-----------------------300
120 01 001--------------------300
==============================================
TOPLAM:


toplam yazan yer reportsummary bandı olsun ben burda toplam aldığımda sadece 120 nin toplamını almak istiyorum.burda diğer kodlarda olabilir en güzel çözüm karekter sayısı 3 olan hesap kodlarının toplamını reportsummaryde göstermesi bu konuda yardımcı olcak,bilgisi veya fikri olan arkadaş varmıdır...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: fastreport reportsummary de if ile sorgulama...

Mesaj gönderen mrmarman »

Bir tane GLOBAL değişken tanımla. GLOBAL değişkenin ne tip bir değişken olduğunu daha önce bir çok defa belirttik. Kısaca tüm procedure'lerde geçerli olan ve formun en başında tanımlanan değişkendir. örneğin xToplam : Currency; diyelim.

Raporun OnBeforePrint olayında bu GLOBAL değişkeni sıfırlarsın. xToplam := 0;

Detail bandın da OnBeforePrint olayı vardır. Sen bu event altına yazacağın satırlar ile dilediğin KOD hangisi ise ona ait veri olup olmadığını sorgular, aradığına uygun ise, o kaydın borç hanesini GLOBAL değişkene eklersin.

Kod: Tümünü seç

if Pos( '120', DataSet.FieldByName('HesapKodu').AsString ) = 1 then xToplam := xToplam + DataSet.FieldByName('Borc').asCurrency;
En sonunda Summary bandın OnBeforePrint olayında ilgili caption'a bu xToplam değerini yansıtırsın.

Başarılar..
Resim
Resim ....Resim
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Re: fastreport reportsummary de if ile sorgulama...

Mesaj gönderen serkan »

hocam işi delphi tarafında calculated fieldler ile çözdüm cxgride bağladıp footer toplamlarını aldım yöntem sizinkine benzer fakar sizin dediğiniz gibi olması imkansız burda raporda sadece 120 gönderilmiyor ben örneği kısa tutttum.

120 başlıyor 121'i ve onun altını döküyor 121 bitiyor 122 ve onun detaylarını döküyor.dediğiniz olayı pos ile değil IIF length=3 is topla v.s gibi bir şekilde yapmak lazım.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: fastreport reportsummary de if ile sorgulama...

Mesaj gönderen csunguray »

Ben aktif şekilde fastreport kullanıyorum. Mümkün olan heşeyi raporun kendi içerisinde halletmeye çalışıyorum. Bunun mümkün olmadığı yerlerde sadece program içerisinden rapora müdahale ediyorum. Böylece kullanıcı raporda değişiklik yaparsa daha sağlıklı sonuçlar alıyorum. İstediğin şey şöyle yapılır

Code başına

Kod: Tümünü seç

var
  GrupToplam : Currency;
Masterbandın OnBeforePrint olayına

Kod: Tümünü seç

if Length([HesapNo])=3 then GrupToplam := GrupToplam + [Tutar];
Bir group header ve ona karşılık gelen bir group footer bandı koyarsın. GroupHeader ın ifadesine Copy([HesapNo],1,3) koyarsın. GroupFooter ın OnBeforePrint olayına

Kod: Tümünü seç

MemoToplam.Text := FormatFloat(',0.00', GrupToplam);
GrupToplam := 0;
Kanaatimce bu iş en iyi böyle yapılır. Kodları ezbere yazdım. Yazım hatası olabilir. Kolay gelsin.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: fastreport reportsummary de if ile sorgulama...

Mesaj gönderen mrmarman »

Arkadaşım sen de soruyu sorarken belli bir değere sabit olmadığının altını çizseydin. Soruna ilk bakışta 120 serisi kodların bakiyesini istediğini anlıyorum. Yani sorunu "bir grup sorgunun ilk üç rakamının 120 ile başlayanların borç bakiyesinin toplamı olanları bulmak" şeklinde algıladım. 120 ifadesinin statik olarak bulunması mantıklı olmadığını okuyan herkes anlayacaktır. Bunun yerine basit bir değişken koyacaksın diye değerlendirdik.

Tabii ki SQL içinden çözüm üretilmesi esastır. Burada üretilmiş bir SQL sorgunun ürün kümesinin içerisinden spesifik bir kısmının hesaplanması ve detay elde edilmesi gerektiği aşikar. Dilersen bağımsız bir SQL kurar sonucu özet bandında yansırtırsın, veyahut örneklerimizde olduğu gibi yazıcıya yansırken hesaplatırsın. Verdiğimiz örneğin en büyük özelliği, dilediğin zaman dökümler için sayfa sayfa ara toplam değer alma imkanının da bulunması. Zaten bunu istememişsin (ya da henüz istememişsin). Bazı işler SQL ile arap saçına döner, bunun basit bir çözümünü gösterdik.

Bu bağlamda @csunguray da sağolsun senin algılaman gereken noktanın altını çizmiş. Yani "POS ile belli bir değer istemiyorsan sen de boyu 3 karakter olan bakiyeleri topla" demiş. Baştan 3 hane olup olmadığının kontrolü ile spesifik bir değerin olup olmadığının POS ile kontrolü arasında teknik açısından (her ikisi de basit string operasyondur) zaten fark yoktur.

FastReport veya başkaları farketmez, zaten tümü benzer şekilde çalışıyor. Kodları motomod değerlendirmeyip esnekliğini kavrayalım yeter.
Resim
Resim ....Resim
Cevapla