Panduan Feat Desain: 3. Rumus dan Tanda Kurung


🖨️

Panduan ini menjelaskan perbedaan tanda [ ] dan < >, cara menulis rumus, fungsi yang tersedia, fungsi agregat, serta cara mengatasi pesan error.

⭐ Feat Desktop   ⭐ Feat Professional   ⭐ Feat Enterprise   ⭐ Feat ERP

ℹ️   Ini adalah Panduan 3 dari 7 seri Panduan Mendesain Formulir dan Laporan di Feat. Panduan ini memakai istilah standar FastReport karena itulah istilah yang tampil di layar designer.
📌  Inti pembahasan: (1) [ ] menandai bagian teks yang harus dihitung; yang berada di luar kurung siku dicetak apa adanya. (2) < > dipakai di dalam rumus untuk mengambil nilai field. (3) Pada isian yang sudah pasti berupa rumus (kondisi Highlight, Group, script), tidak dipakai [ ], tetapi < > tetap dipakai.

Tanda [ ] sebagai Batas Ekspresi

Anda mengetikDicetak
Nomor: [frData."NO FAKTUR"]Nomor: 14
[frData."KOTA"] [frData."KODE POS"]Nilai kota, spasi, nilai kode pos (satu objek boleh memuat beberapa [ ])
frData."NO FAKTUR" (tanpa [ ])Dicetak sebagai teks biasa, tidak diganti nilai

Tanda < > untuk Mengambil Nilai Field di Dalam Rumus

Di dalam [ ] terdapat dua bentuk penulisan:

  • Bentuk A (hanya menampilkan field): tulis nama field tanpa < >, misalnya [frData."JUMLAH HARGA"].
  • Bentuk B (ada rumus, fungsi, atau perbandingan): setiap field wajib dibungkus < >.
[<frData."JUMLAH HARGA"> * 2]
[iif(<frData."JUMLAH"> > 10, 'Banyak', 'Sedikit')]
[<frData."KODE BARANG"> + ' - ' + <frData."NAMA BARANG">]

Mengapa demikian? Isi rumus dibaca sebagai script PascalScript. Tanda < > mengubah nama field menjadi nilainya. Tanpa tanda tersebut, FastReport mengira seluruh isi [ ] adalah satu nama field dan mencarinya.

Perbandingan Hasil Nyata

Contoh berikut diuji pada faktur dengan JUMLAH HARGA = 2.500.000.

Ditulis di Text objectHasilKeterangan
[frData."JUMLAH HARGA"]2500000Bentuk A: menampilkan field
[<frData."JUMLAH HARGA">*2]5000000Bentuk B yang benar
[frData."JUMLAH HARGA" * 2]0 dan muncul pesan errorSalah. Tanpa < >, FastReport mencari field yang tidak ada
[frData."JUMLAH HARGA"] * 22500000 * 2* 2 berada di luar [ ], sehingga hanya dicetak sebagai teks
[<frData."JUMLAH HARGA"> * 0.11]275000Angka desimal di dalam rumus memakai titik
[iif(<frData."JUMLAH HARGA">>1000000,'Besar','Kecil')]BesarPerbandingan dengan iif. Teks dalam rumus memakai tanda petik tunggal
[UpperCase(<frData."NAMA REKAN">)]USM, PTFungsi huruf besar
[FormatDateTime('dd mmmm yyyy',<frData."TANGGAL FAKTUR">)]13 May 2015Mengatur format tanggal. Nama bulan mengikuti bahasa Windows
[SUM(<frData."JUMLAH HARGA">,MasterData1)]4000000Jumlah seluruh baris data (total)
[COUNT(MasterData1)]2Banyak baris data

Aturan Penulisan Nama Field

  • Bentuknya NamaDataset."NAMA FIELD", misalnya frData."JUMLAH HARGA".
  • Tanda petik ganda wajib bila nama field mengandung spasi. Nama field di Feat umumnya huruf besar semua dan sering memakai spasi.
  • Nama field dan nama dataset tidak membedakan huruf besar dan kecil, tetapi sebaiknya ditulis sama seperti yang tampak di Data Tree.
  • Teks (string) di dalam rumus memakai tanda petik tunggal: 'Besar'.
  • Angka desimal di dalam rumus memakai titik: 0.11, bukan 0,11.

Di Mana Memakai [ ], Di Mana Tidak?

IsianPakai [ ]?Contoh
Text objectYa[<frData."JUMLAH"> * 2]
Highlight › ConditionTidak<frData."JUMLAH HARGA"> > 1000000
Group Header › ConditionTidakfrData."NO FAKTUR"
Script (tab Code)Tidakif <frData."TOTAL"> = 0 then ...
Expression EditorTidak<frData."JUMLAH HARGA"> > 5000000
💡  Cara mengingat: [ ] hanya ada di dalam teks yang dicetak. Pada tempat yang memang berisi rumus, [ ] tidak diperlukan.

Operator

JenisOperator
Hitung+   -   *   /
Bagi bulat dan sisadiv   mod
Perbandingan=   <>   <   >   <=   >=
Logikaand   or   not

Fungsi yang Sering Dipakai

Seluruh daftar fungsi ada pada Data Tree › tab Functions. Klik dua kali nama fungsi atau tarik ke dalam teks untuk memasukkannya.

KategoriFungsi
MathematicalAbs, Int, Round, Sqrt, Power, MaxValue, MinValue, Trunc
AggregateSUM, MIN, MAX, AVG, COUNT
ConversionsIntToStr, FloatToStr, DateToStr, StrToInt, StrToFloat, StrToDate
StringCopy, Length, Lowercase, Uppercase, NameCase, Pos, Trim
OtherIIF, ValidDate, ValidFloat, VarIsNull, dan lain-lain
Feat functionsTerbilang, TerbilangInggris, RoundTo, LeftStr, RightStr, ReplaceStr, ReplaceText, EscapeXML, CSVGetValue, JSONGetValue, JSONArrayGetValue
Date and TimeDate, Now, DayOf, MonthOf, YearOf, DaysInMonth, EncodeDate
FormattingFormat, FormatDateTime, FormatFloat, FormatMaskText

Kategori Feat functions adalah fungsi tambahan khusus dari Feat. Contoh penggunaan yang sudah diuji:

PenulisanHasil
[Terbilang(SUM(<frData."JUMLAH HARGA">,MasterData1))]tujuh juta lima ratus ribu (huruf kecil, tanpa kata “rupiah”)
[NameCase(Terbilang(<frData."JUMLAH HARGA">))]Dua Juta
[RoundTo(<frData."JUMLAH HARGA"> / 3, -2)]666666,67
[LeftStr(<frData."NAMA REKAN">, 3)]Tiga huruf pertama nama rekan
[FormatFloat('#,##0.00', <frData."JUMLAH HARGA">)]2.000.000,00 (mengikuti pengaturan regional Windows)
⚠️  Teks terpotong: bila isi Text object lebih tinggi daripada band-nya, baris yang melewati batas tidak tercetak. Perbesar Height band, atau gunakan Stretch (lihat Panduan 4).

Fungsi Agregat (Total, Hitung, Rata-rata)

SUM(<frData."JUMLAH HARGA">, MasterData1)
  • SUM = jumlah, MIN = terkecil, MAX = terbesar, AVG = rata-rata, COUNT = banyak baris.
  • Argumen kedua adalah nama band data yang dihitung (lihat nama band pada Report Tree).
  • Argumen ketiga bersifat pilihan: 1 = hitung juga band yang disembunyikan, 2 = total berjalan (running total), 3 = keduanya.

Cara mudah dengan dialog Insert Aggregate:

  1. Klik dua kali Text object di band total (misalnya Group Footer).
  2. Pada tab Text, klik tombol Σ (Insert Aggregate).
  3. Pilih Function, Data band, DataSet, dan DataField.
  4. Klik OK. Teks [SUM(<frData."JUMLAH HARGA">,MasterData1)] masuk ke objek.

Hasil agregat bergantung pada letak band tempat teks berada:

Letak teksMenghitung
Group FooterHanya baris di grup itu (subtotal)
Footer atau Report SummarySeluruh baris laporan (total keseluruhan)
Page FooterTidak disarankan untuk total. Pada formulir Feat, gunakan field siap pakai seperti TOTAL TRANSAKSI

Terbilang dan Script

Cetakan faktur Feat memuat baris seperti “Terbilang: tujuh juta lima ratus ribu rupiah”. Cara termudah adalah memakai fungsi Terbilang:

Terbilang: [Terbilang(<frData."TOTAL TRANSAKSI">)] rupiah

Kata “rupiah” ditulis di luar [ ] karena fungsi hanya menghasilkan kata bilangannya. Untuk huruf awal kapital, bungkus dengan NameCase.

Untuk kebutuhan yang tidak tercakup rumus, tersedia tab Code berisi script PascalScript. Pada script, field diambil dengan < > tanpa [ ]:

procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
  if <frData."TOTAL TRANSAKSI"> = 0 then
    TfrxMemoView(Sender).Text := 'nol rupiah';
end;
💡  Saran: sebelum menulis script, periksa apakah kebutuhan tersebut dapat diselesaikan dengan rumus atau Highlight. Keduanya lebih mudah dirawat.

Pertanyaan Umum

❓ Apa perbedaan tanda kurung siku dan kurung sudut pada rumus Feat?

Kurung siku menandai bagian teks yang harus dihitung. Kurung sudut dipakai di dalam rumus untuk mengambil nilai field. Pada kolom yang sudah pasti berupa rumus, seperti kondisi Highlight, kurung siku tidak dipakai.

❓ Mengapa muncul pesan Field not found saat Preview?

Penyebab umumnya field di dalam rumus tidak dibungkus kurung sudut, misalnya ditulis frData."JUMLAH HARGA" * 2. Tulis sebagai [<frData."JUMLAH HARGA"> * 2] dan periksa ejaan nama field pada Data Tree.

❓ Mengapa hasil rumus tampil 0 pada Preview di dalam designer?

Preview di dalam designer tidak berisi data. Periksa hasil sebenarnya lewat Preview pada transaksi untuk formulir, atau lewat Daftar, Semua Laporan untuk laporan.