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...
fastreport reportsummary de if ile sorgulama...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: fastreport reportsummary de if ile sorgulama...
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.
En sonunda Summary bandın OnBeforePrint olayında ilgili caption'a bu xToplam değerini yansıtırsın.
Başarılar..
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;
Başarılar..
Re: fastreport reportsummary de if ile sorgulama...
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.
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.
Re: fastreport reportsummary de if ile sorgulama...
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
Masterbandın OnBeforePrint olayına
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
Kanaatimce bu iş en iyi böyle yapılır. Kodları ezbere yazdım. Yazım hatası olabilir. Kolay gelsin.
Code başına
Kod: Tümünü seç
var
GrupToplam : Currency;
Kod: Tümünü seç
if Length([HesapNo])=3 then GrupToplam := GrupToplam + [Tutar];
Kod: Tümünü seç
MemoToplam.Text := FormatFloat(',0.00', GrupToplam);
GrupToplam := 0;
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/)
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/)
Re: fastreport reportsummary de if ile sorgulama...
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.
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.