Fast Report ve Sayıyı Yazıya Çevirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Necatiozbek
Üye
Mesajlar: 24
Kayıt: 23 Eki 2006 06:33

Fast Report ve Sayıyı Yazıya Çevirme

Mesaj gönderen Necatiozbek »

Merhaba,
herkese kolay gelsin ;

Hazırladığım projede bir Cari hesaba sıralı ve artan tarihli alacak senetleri oluşturuyor ve bunları gridde listeletiyorum..
Oluşturduğum senet sayısı kadar fastreporta da hazırladığım senetleri ayrı ayrı oluşturuyorum.. Buraya kadar bir sıkıntı yok..
Asıl sıkıntım senet miktarlarının fastreportta hazırladığım senet raporu üzerine ayrı ayrı yazıyla yazdırabilmek..
Aslında hazırlanılan bütün senetlerin miktarları aynı olsa yine bir sorun olamayacak..Fakat bazen müşterinin talebine bağlı olarak senet miktarları değişebiliyor.
Delphi kısmında sayıyı yazıya çeviren fonksiyonu kullanıyorum ama bunu fastreporttaki aynı memo alana ayrı ayrı aktaramadım..

Fast reportta Müşteri bilgilerini Masterbantta ,Senet bilgilerini ise detail bantta listeliyorum.
Senetler.ShowReport(true) demeden önce
TFrxMemoview(Senet.FindObject('Memo1')).text:= rakyazf(sayi,0); diyerek memo1 e aktardığım yazı fastreportta diğer senet miktarları değişik olan kayıtlarda değişmiyor.. Sayıyı yazıya çeviren fonsiyon ve procedureyi fast reporta mı yazmam ve örmeğin memo1 buna mı bağlamam lazım ? Nasıl ?
FastReportla ilgili forumda bir çok şey okudum ama bir sonuç yakalayamadım..

İlginiz için şimdiden teşekkür ederim..
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Fast Report ve Sayıyı Yazıya Çevirme

Mesaj gönderen aslangeri »

s.a.
fastreportta sayıyı yazıya çeviren bir script hazırlayabilirsin.
veya tabloda calculated alan oluşturup buraya sayıyı yazı ile alırsın fastreporttada onu kullanırsın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Fast Report ve Sayıyı Yazıya Çevirme

Mesaj gönderen White Rose »

Rapor Senetlerinde yazıyla olan kısmı için bir değişken tanımlayın (örn: YAZIYLA)
sonra program kısmında fast reportun getvalue olayında bu değişkene fonksiyondan gelen yazı değerini atayın

procedure TForm1.FastRaport1GetValue(const ParName: String; var ParValue: Variant);
begin
If ParName='YAZIYLA' then // değişken kontrolü
Parvalue:=Yaziyla(Senetler.SenetTutari.AsString);
end;
Necatiozbek
Üye
Mesajlar: 24
Kayıt: 23 Eki 2006 06:33

Re: Fast Report ve Sayıyı Yazıya Çevirme

Mesaj gönderen Necatiozbek »

Daha önce script hiç yazmadım maalesef;
Yol gösterebilirseniz sevinirim..

Teşekkürler..
Necatiozbek
Üye
Mesajlar: 24
Kayıt: 23 Eki 2006 06:33

Sanırım Sorunu Şöyle Çözeceğim

Mesaj gönderen Necatiozbek »

Senetleri listelettirdiğim dataset e bir calculated alan tanımlayıp buraya delphi kısmında kullandığım yazıya dönüştür fonksiyonunun sonucunu aktaracağım.
Buradaki alanı da otomatik rapor daki datasetten çekip yazdırmış olacağım..
Bir deneyelim bakalım nasıl olacak...
haznedarli
Üye
Mesajlar: 122
Kayıt: 31 Tem 2010 06:38

Re: Fast Report ve Sayıyı Yazıya Çevirme

Mesaj gönderen haznedarli »

Function GeriyeKalaniYaziyaCevir(GeriyeKalan)
If GeriyeKalan <> 0 Then
KacYuz = Fix(GeriyeKalan / 100)
If Len(GeriyeKalan) > 2 Then
GeriyeKalan = Right(GeriyeKalan,2)
End If

If KacYuz <> 0 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & GeriyeKalaniYaziyaCevir(KacYuz) & "YÜZ"
End If
If GeriyeKalan > 9 Then
OnlarBasamagi = Left(GeriyeKalan,1)
If OnlarBasamagi = 9 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "DOKSAN"
ElseIf OnlarBasamagi = 8 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "SEKSEN"
ElseIf OnlarBasamagi = 7 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "YETMİŞ"
ElseIf OnlarBasamagi = 6 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "ALTMIŞ"
ElseIf OnlarBasamagi = 5 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "ELLİ"
ElseIf OnlarBasamagi = 4 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "KIRK"
ElseIf OnlarBasamagi = 3 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "OTUZ"
ElseIf OnlarBasamagi = 2 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "YİRMİ"
ElseIf OnlarBasamagi = 1 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "ON"
End If
End If
BirlerBasamagi = Right(GeriyeKalan,1)
If BirlerBasamagi = 9 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "DOKUZ"
ElseIf BirlerBasamagi = 8 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "SEKİZ"
ElseIf BirlerBasamagi = 7 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "YEDİ"
ElseIf BirlerBasamagi = 6 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "ALTI"
ElseIf BirlerBasamagi = 5 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "BEŞ"
ElseIf BirlerBasamagi = 4 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "DÖRT"
ElseIf BirlerBasamagi = 3 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "ÜÇ"
ElseIf BirlerBasamagi = 2 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "İKİ"
ElseIf BirlerBasamagi = 1 Then
GeriyeKalaniYaziyaCevir = GeriyeKalaniYaziyaCevir & "BİR"
End If
End If
End Function

Function YaziyaCevir(Sayi)
KacMilyar = Fix(Sayi/1000000000)
If Sayi > 9 Then
Sayi = Right(Sayi,9)
End If
KacMilyon = Fix(Sayi/1000000)
If Sayi > 6 Then
Sayi = Right(Sayi,6)
End If
KacBin = Fix(Sayi / 1000)
If Sayi > 3 Then
Sayi = Right(Sayi,3)
End If
GeriyeKalan = Sayi

If KacMilyar <> 0 Then
YaziyaCevir = YaziyaCevir & GeriyeKalaniYaziyaCevir(KacMilyar) & "MİLYAR"
End If
If KacMilyon <> 0 Then
YaziyaCevir = YaziyaCevir & GeriyeKalaniYaziyaCevir(KacMilyon) & "MİLYON"
End If
If KacBin <> 0 Then
YaziyaCevir = YaziyaCevir & GeriyeKalaniYaziyaCevir(KacBin) & "BİN"
End If
YaziyaCevir = YaziyaCevir & GeriyeKalaniYaziyaCevir(GeriyeKalan)
End Function


bu çeviri yapıyor ama bir hata var yardımcı olabilecek arkadaş varmıdır.
Cevapla