Home » Delphi » Database, Delphi, Free Downloads, Tips & Tricks » Menggunakan Fungsi Terbilang Di FastReport

Menggunakan Fungsi Terbilang Di FastReport

Print Friendly



Di posting tentang Menampilkan Nilai Terbilang Di Rave Report, saya telah menuliskan trik untuk menampilkan tulisan nilai terbilang di Rave Report, kini kita akan melihat trik menampilkan nilai terbilang di FastReport.

Ada beberapa cara untuk menampilkan nilai terbilang di FastReport:

  • Menggunakan CalculatedFields, sehingga tiap row data mempunyai nilai terbilang sendiri sesuai definisi. Cara ini efektif bila tiap row memiliki nilai untuk ditampilkan secara terbilang. Namun tidak efektif bila Anda ingin menampilkan terbilang dari hasil akhir saja – seperti SUM().
  • Menggunakan FastScript, sebuah scripting engine untuk FastReport yang tersedia dalam beberapa bahasa pemrograman.
  • Menggunakan FastReport User Defined Function dan User Defined Variable. Cara ini bekerja dengan menulis fungsi atau membuat variabel di Delphi, kemudian diakses dari FastReport.
  • Terakhir, Dirty Way, trik kotor dari saya, yang menurut saya paling cocok. Cara ini sangat efektif bila nilai terbilang adalah hasil perhitungan akhir, seperti Jumlah Total, SUM(), dsb., dan bukan nilai berjalan di tap baris data.

Di tulisan kali ini, kita akan menggunakan Dirty Way, trik untuk menampilkan data ke objek FastReport secara runtime. Dengan cara ini, tentunya menampilkan teks nilai terbilang menjadi lebih mudah. Saya telah membuat sebuah contoh untuk di-download. Saya tidak menggunakan database sebagai data, tapi langsung dengan angka numerik biasa, dikonversi ke nilai terbilang, dan ditampilkan di FastReport. Jadi fokus kita adalah: Trik menampilkan nilai terbilang di FastReport saja, tidak database.

Catatan
Trik ini bekerja ada hampir semua versi Delphi, tapi sample untuk di-download dibuat dengan Delphi 2009, yang mungkin tidak dapat Anda buka di Delphi versi sebelumnya.

Pertama, kita buat sebuah aplikasi baru. Di form utama(Form1), tambahkan sebuah TEdit, sebuah TMemo, dan dua TButton. Tambahkan juga sebuah TFrxReport. Atur letak dan property menjadi seperti gambar berikut:

Kemudian download unit uTerbilang, utilitas untuk melakukan konversi angka ke teks terbilang. Anda dapat menggunakan library lain, atau mendownload unit uTerbilang di :

Unit Fungsi Terbilang (1.5 KiB)

Ekstrak hasil download dan copy fileuTerbilang ke dalam folder project. Tambahkan unit uTerbilang ke project lewat menu Project>Add To Project:

Kemudian, di form utama, tambahkan uTerbilang ke klausa Uses, lewat menu File>Use Unit.

Kini kembali ke form dan kita pilih event OnClick Button1, isi dengan kode:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:= MyTerbilang(StrToFloat(Edit1.Text));
end;

Potongan kode ini akan menampilkan hasil konversi ke Memo1. Bagaimana dengan FastReport? Nah di sinilah trik kotor dimulai :)

Tambahkan kode berikut setelah direktif {$R *.dfm}. Kode ini untuk mencari objek FastReport berdasarkan namanya.

function FRObject(FastReport: TfrxReport; ObjectName: String): TObject;
var
  i: Integer;
  AFound: Boolean;
begin
  AFound:=False;
  for I := 0 to FastReport.ComponentCount - 1 do
  begin
    if LowerCase(FastReport.Components[i].Name) = LowerCase(ObjectName) then
    begin
      Result:=TObject(FastReport.Components[i]);
      AFound:=True;
      Break;
    end;
  end;
  if not AFound then
  begin
    Result:=nil;
  end;
end;

Sedangkan kode berikut merupakan wrapper untuk kode di atas, khususuntuk mencari objek TFrxMemoView (yang akan dipakai untuk menampilkan teks di FastReport), diletakkan setelah kode di atas:

function FRMemo (FastReport: TfrxReport; ObjectName: String): TfrxMemoView;
begin
  Result := TfrxMemoView(FRObject(FastReport, ObjectName));
end;

Kembali ke laptop, eh, ke form. Klik kanan pada FrxReport1, klik Edit Report untuk mengedit FastReport. Tambahkan 4 buah Memo (TFrxMemoView). Sebagai perbandingan, berikut report saya:

Sudah? Tutup report editor dan kita kembali ke form. Klik ganda Button2 dan kita isi kodenya (event OnClick):

procedure TForm1.Button2Click(Sender: TObject);
begin
  FRMemo(frxReport1, 'Memo3').Text := Edit1.Text;
  FRMemo(frxReport1, 'Memo4').Text := MyTerbilang(StrToFloat(Edit1.Text));
  frxReport1.ShowReport();
end;

Kode di atas bertujuan untuk mengakses Memo3 dan Memo4 di FastReport dan mengatur property Text-nya dengan angka dan hasil konversinya. Selengkapnya, kode kita akan seperti ini:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, frxClass, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    frxReport1: TfrxReport;
    Label1: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Label2: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses uTerbilang;

{$R *.dfm}

function FRObject(FastReport: TfrxReport; ObjectName: String): TObject;
var
  i: Integer;
  AFound: Boolean;
begin
  AFound:=False;
  for I := 0 to FastReport.ComponentCount - 1 do
  begin
    if LowerCase(FastReport.Components[i].Name) = LowerCase(ObjectName) then
    begin
      Result:=TObject(FastReport.Components[i]);
      AFound:=True;
      Break;
    end;
  end;
  if not AFound then
  begin
    Result:=nil;
  end;
end;

function FRMemo (FastReport: TfrxReport; ObjectName: String): TfrxMemoView;
begin
  Result := TfrxMemoView(FRObject(FastReport, ObjectName));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:= MyTerbilang(StrToFloat(Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FRMemo(frxReport1, 'Memo3').Text := Edit1.Text;
  FRMemo(frxReport1, 'Memo4').Text := MyTerbilang(StrToFloat(Edit1.Text));
  frxReport1.ShowReport();
end;

end.

Sekarang kita jalankan aplikasi kita, dan coba tekan masing-masing button untuk melihat hasilnya.

Nilai Terbilang Di FastReport

Klik gambar untuk Memperbesar

Download Source Code

Berikut source code sampel di atas.

Nilai Terbilang di FastReport (518.1 KiB)


Incoming search terms:

 

Comments

comments

Powered by Facebook Comments

9 Responses to Menggunakan Fungsi Terbilang Di FastReport

  1. Komen pertama di awal tahun.. :p

    nice share bang Joko Rovai… :D

    jangan bosen buat bagi2 ilmunya… :D

    thanks…

       New Post

  2. Fahrizal Surya :

    Komen pertama di awal tahun.. :p

    nice share bang Joko Rovai… :D

    jangan bosen buat bagi2 ilmunya… :D

    thanks…

    Makasih ya bang. Sukses buat abang di tahun 2012 :)

       New Post

  3. bang klo pengen set image ke ke fast report gmn

       New Post

  4. @ridzky
    Kan ada TFrxPictureView, bisa di set field dan datasetnya…
    Atau, kalau mau seperti cara di atas, buat wrapper satu lagi:

    function FRImage(FastReport: TfrxReport; ObjectName: String): TfrxPictureView;
    begin
      Result := TfrxPictureView (FRObject(FastReport, ObjectName));
    end;
    

    Call:

      FRImage(frxReport1, 'Picture1').Picture.LoadFromFile('E:\Images\Screenshots\a.jpg');
      frxReport1.ShowReport();
    

       New Post

  5. owh thanks bang, syp tau nanti kepake wkt bikin kartu nama , dan lainya,,, hehe

       New Post

  6. @ridzky
    Wah…. banyak projek.. bagi2 bang :)

       New Post

  7. Bang Joko Rivai, terima kasih sharingnya nih…hehehe… jadi kepengin nyoba…

       New Post

  8. bang mau nanya nich kalau mau di terapi di webbase gimana??soalnya untuk reportnya punya saya error

       New Post

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>