Selasa, 24 Desember 2019

Mengenal Penggunaan Properti “Range” Untuk Menentukan Halaman Report Yang Di Cetak ~Tutorial Gambas (Report Manual)


Sebagaimana yang disebutkan pada judul diatas, bahwa properti Range pada Report (Report.Range) digunakan untuk menentukan/memilih halaman Report yang akan dicetak. Misal pada Report terdapat 10 halaman, bisa memilih halaman berapa yang akan dicetak.
Gambas hanya mengenal 3 cara pemilihan halaman yang akan dicetak, yakni:
  • Cetak Seluruhnya, Jika Range tidak ditentukan atau tulisan range tidak dikenali seperti “1-”, “-1”, “A”, maka Printer akan mencetak semua halaman.
  • Cetak satu-satu, Range hanya ditentukan satu halaman saja, misal halaman 4 (saja).
  • Cetak beberapa tapi berurutan, misal Range “2-5” (halaman dua sampai halaman lima).
Gambas tidak menerima Range yang tidak berurutan seperti “5-2”, jika diisi urutan terbalik seperti itu maka gambas akan mencetak semua halaman (tidak berdasar halaman yang dipilih). Format ini juga tidak bisa “2,4,7” (Cetak halaman 2 dan 4 dan tujuh), maka otomatis mencetak semua halaman.

Ok, langsung pelajari/praktekkan contoh berikut:
Buat Form (Lebar= 714, Tinggi=518) yang terdiri dari Object:
ReportView = ReportView1
TextBox = HalamanCetak
Button = Cetak



Open Code:

' Gambas class file

Private Report1 As New Report
Private Printer1 As New Printer As "Printer1"
Private obj As Object[]


Public Sub Form_Open()

   Dim n As Short
  ‘Membuat 500 Object ReportLabel. Dengan ukuran kertas
  ‘Default(Custom: 215,9 x 279,4 mm) menjadi 7 halaman.
   obj = New Object[500]
   For n = 0 To obj.Max
      obj[n] = New ReportLabel(Report1)
      obj[n].Text = n
   Next
   'Menampilkan Report ke ReportView1
   ReportView1.Report = Report1

End

Public Sub HalamanCetak_Change()


  ReportView1.Range = HalamanCetak.Text
  If ReportView1.RangePages.Count > 0 Then
     Printer1.FirstPage = ReportView1.RangePages[0] + 1
     Printer1.LastPage = ReportView1.RangePages[ReportView1.RangePages.Max] + 1
   Else
     Printer1.FirstPage = 0
     Printer1.LastPage = Report1.PageCount
   Endif

End

Public Sub Cetak_Click()

   Dim n As Byte
   'Outputnya dicetak sebagai file .pdf
   Printer1.OutputFile = "~/Tespdfooo"
   ReportView1.Report.Print(Printer1)

End

Keterangan:
Perintah “ReportView1.Range = HalamanCetak.Text” pada Event HalamanCetak_Change akan menampilkan perubahan tampilan ReportView setiap inputan pada HalamanCetak (untuk memilih halaman yang akan dicetak).

“ReportView1.RangePages” berkaitan langsung dengan “ReportView1.Range”, Saat nilai “ReportView1.Range” di tentukan maka otomatis terindex di “ReportView1.RangePages”. “RangePages” sebagai index halaman, nilainy dimulai dari angka 0, sedangkan Page nilainya dimulai dari angka 1 (halaman). Misal saat nilai Range = “3-4” (halaman 3 sampai halaman 4) maka pada ReportView1 akan menampilkan 2 halaman, yakni halaman dari Report ke 3 dan ke 4. Jika di index akan terbaca halaman 1 (RangePage) sebagai index ke 0 , sedangkan halaman 2 (RangePage) sebagai index ke 1 (N-1).
Artinya RangePage[0] (halaman Report ke 3) berada pada index ke 2 halaman Report. Sedangkan RangePage[1] (halaman Report ke 4) berada pada index ke 3 halaman Report. Itulah kenapa pada nilai “Printer1.FirstPage” diisi dengan nilai “ ReportView1.RangePages[0] + 1” karena FirsPage mengacu pada halaman Report sedangkan RangePages pada index.
Ribet ya?? sudah,, sudah,,, dipelajari pelan-pelan aja dengan otak-atik itu skrip code.

Yang terakhir, untuk “Printer1.FirstPage” dan “Printer1.LastPage” sebaiknya jangan di set dalam satu event /proses pada tombol cetak ( ReportView1.Report.Print(Printer1) ), misal pada event Cetak_Click(), karena pada tombol pertama tidak akan berfungsi seperti yang diharapkan, sedangkan tombol yang keduakalinya maka akan berfungsi. Itulah kenapa sebaiknya “Printer1.FirstPage” dan “Printer1.LastPage” diatur secara terpisah pada event CetakHalaman_Change().

Tampilan hasil program diatas:



Jumat, 29 November 2019

Cara Supaya Cetak Printer Sesuai Dengan (Nama) Driver Printer Yang Dipilih Dari ComboBox ~Report Manual Gambas


Seteleah mempelajari cara memasukkan nama driver printer pada ComboBox (di artikel “http://sandi.bloger.id/cara-menampilkan-memasukkan-daftar-nama-driver-printer-pada-combobox-untuk-report-manual-gambas.xhtml”), sekarang bagaimana supaya cetak ke printernya sesuai dengan nama (driver) printer yang dipilih pada ComboBox.

Pelajari Contoh Berikut.

Buat project dengan Form yang terdiri dari 3 object: ReportView, ComboBox, dan Button.



Open Code:

' Gambas class file

Private Report1 As New Report
Private Printer1 As New Printer
Private ReportTextLabel1 As ReportTextLabel

Public Sub Form_Open()

   ComboBox1.List = Printer.List
   ‘Nama Driver Printer default
   ComboBox1.Text = Printer1.Name
   Button1.Text = "Cetak"

   ReportTextLabel1 = New ReportTextLabel(Report1)
   ReportTextLabel1.Text = "Tes Cetak"

   ReportView1.Report = Report1

End

Public Sub ComboBox1_Click()

   ‘Nama Driver Printer disesuaikan dengan pilihan di ComboBox
   Printer1.Name = ComboBox1.Text

End

Public Sub Button1_Click()

   Report1.Print(Printer1)

End

Cara Menampilkan/Memasukkan Daftar Nama (Driver) Printer Pada ComboBox ~Untuk Report Manual Gambas


Langsung pelajari pada contoh berikut:

Buat Form Report sederhana yang terdiri dari Object ReportView1 dan ComboBox1



Source/Open Code:

' Gambas class file

Public Sub Form_Open()

   ComboBox1.List = Printer.List
   ComboBox1.Text = ComboBox1.List[0]

End

Nb:
Memasukkan daftar printer tidak bisa menggunakan instansi printer seperti Printer1.List

Senin, 25 November 2019

Mengenal Penggunaan Properti OutputFile Untuk Mencetak Report Ke PDF Pada Gambas (Report Manual)


Jika mencetak Report menjadi file .pdf menggunakan generator gb.Report maka akan menjadi lebih mudah karena sudah tersedia pada menu pilihan. Namun bagaimana jika pada Report yang tampilan Formnya dibuat secara manual, maka pengaturan cetaknya harus diatur secara manual juga.

Gambas Report secara default sudah memasukkan library untuk mencetak report menjadi file pdf, pengguna hanya menggunakan properti OutputFile untuk cetak ke pdf.

Ok, langsung ke contoh:

Buat Project dan Form Report seperti pada gambar berikut, dengan nama “BuatLaporan”.

Object Form:
ReportView = ReportView1
Label = Label1
TextBox = LokasiFile
Button = Cetak

Tampilan Project

 Tampilan Project From Detacth
Tampilan Form Report

Isi kode pada Class Report (TesReport) tersebut

‘Gambas class file

Private Report1 As New Report
Private Printer1 As New Printer
Private ReportHBox1 As ReportHBox
Private ReportTextLabel1 As ReportTextLabel

Public Sub Form_Open()

  Cetak.Text = "Cetak Ke PDF"
  ReportHBox1 = New ReportHBox(Report1)
  ReportTextLabel1 = New ReportTextLabel(ReportHBox1)
  With ReportTextLabel1
     .Width = 400
     .Height = 80
     .Margin.Top = 20
     .Margin.Left = 20
     .Padding.Left = 10
     .Font.Bold = 1
     .Text = "ReportTextLabel1: Uji coba cetak ke PDF"
     .BackGround = ReportBrush.Color(&H9EC5EC)
  End With
  ReportView1.Report = Report1

End


Public Sub Cetak_Click()

   'Jika TextBox1 (Tempat Lokasi File disimpan) -
   'tidak diisi apa - apa maka Cetak tidak berjalan
   If Trim(LokasiFile.Text) = "" Then
     Message("Lokasi penyimpanan file harus diisi")
     Return
   Endif

   'Jika Lokasi yang diisikan di TextBox1 tidak
   'tersedia, maka Cetak tidak berjalan
   If Not IsDir(LokasiFile.Text) Then
     Message("Lokasi penyimpanan tidak ditemukan")
     Return
   Endif

   Printer1.OutputFile = LokasiFile.Text &/ "NamaFile.pdf"
   Report1.Print(Printer1)

End

 Tampilan Report

Selamat belajar

Rabu, 13 November 2019

Cara Membuat Tabel Data (GridView) Pada Report Gambas


Pada gb.Report2 tidak disediakan fitur ReportGridview untuk membuat tabel pada report, maka pembuatannya harus dilakukan secara manual yng melibatkan beberapa object yaitu ReportHBox, ReportVBox, ReportLabel/ReportTextLabel.

Berkut contoh script code pembuatan GridView pada Report

Pertama-tama buat dulu object Report. Jika belum mengerti cara pembuatan object Report bisa pelajari di sini:



Kode pada Class Report:


' Gambas class file

Private ReportHBox1 As ReportHBox

Private BarisIsi As Object[]
Private KolomIsi As Object[]

Private ReportTextLabel1 As ReportTextLabel


Public Sub Report_Open()

   Dim nb, nk As Byte
   Dim Nama As String[] = ["Bejo", "Ponimin", "Rukmini", "Iyum", "Sulastri"]
   Dim Alamat As String[] = ["Malang", "Pasuruan", "Nganjuk", "Blitar", "Sorong"]
   BarisIsi = New Object[Nama.Count]
   KolomIsi = New Object[Nama.Count, 3]
   '-------------------- Kepala Tabel
   ReportHBox1 = New ReportHBox(Report1)
   ReportHBox1.Border.Top.Width = 1
   ReportHBox1.Border.bottom.Width = 1
   ReportTextLabel1 = New ReportTextLabel(ReportHBox1)
   ReportTextLabel1.Width = 40
   ReportTextLabel1.Height = 20
   ReportTextLabel1.Text = "No"
   ReportTextLabel1.Background = ReportBrush.Color(&H00FFFF)
   ReportTextLabel1 = New ReportTextLabel(ReportHBox1)
   ReportTextLabel1.Width = 150
   ReportTextLabel1.Height = 20

   ReportTextLabel1.Text = "Nama"
   ReportTextLabel1.Background = ReportBrush.Color(&H9EC5EC)
   ReportTextLabel1 = New ReportTextLabel(ReportHBox1)
   ReportTextLabel1.Width = 300
   ReportTextLabel1.Height = 20
   ReportTextLabel1.Text = "Alamat"
   ReportTextLabel1.Background = ReportBrush.Color(&HFFFF00)
   '-------------------- Isi Tabel
   For nb = 0 To Nama.Max
     BarisIsi[nb] = New ReportHBox(Report1)
     For nk = 0 To 2
       KolomIsi[nb, nk] = New ReportTextLabel(BarisIsi[nb])
       KolomIsi[nb, nk].Height = 20
       If nk = 0 Then
         KolomIsi[nb, nk].Width = 40
         KolomIsi[nb, nk].Text = nb + 1
       Else If nk = 1 Then
         KolomIsi[nb, nk].Width = 150
         KolomIsi[nb, nk].Text = Nama[nb]
       Else If nk = 2 Then
         KolomIsi[nb, nk].Width = 300
         KolomIsi[nb, nk].Text = Alamat[nb]
       Endif
     Next
   Next

End

Selasa, 29 Oktober 2019

Mengatur Tinggi/Height - Lebar/Width Object Report (ReportLabel, ReportTextLabel) ~Tutorial Gambas


Mengatur tinggi-lebar object report tidak seperti dan semudah mengatur tinggi-lebar object pada umumnya (form) yang hanya tinggal bikin object lalu atur tinggi-lebarnya. Untuk atur tinggi-lebar (ReportLabel/ReportTextLabel) harus memastikan object tersebut berada pada sebuah object parent (objek induk) yang merupakan sebuah object Container yakni ReportHBox, yaitu sebuah container/wadah yang menampung object secara berurutan kesamping. Jika hanya menggunakan container ReportVBox sepengelaman penulis tidak bisa karena otomatis ke Expand, kecuali dibantu dengan ReportHBox didalamnya.

Contoh:

Private Report1 As New Report
Private ReportHBox1 As ReportHBox
Private ReportLabel1 As ReportLabel
Private ReportTextLabel1 As ReportTextLabel

Public Sub Form_Open()

   ReportHBox1 = New ReportHBox(Report1)
   ReportLabel1 = New ReportLabel(ReportHBox1)
   ReportTextLabel1 = New ReportTextLabel(ReportHBox1)
   ReportLabel1.Text = "ReportLabel1"
   ReportLabel1.Width = 200
   ReportLabel1.Height = 20
   ReportLabel1.BackGround = ReportBrush.Color(&H00FFFF)
   ReportTextLabel1.Text = "ReportTextLabel1"
   ReportTextLabel1.Width = 150
   ReportTextLabel1.Height = 20
   ReportTextLabel1.BackGround = ReportBrush.Color(&H9EC5EC)

   ‘Jika menggunakan ReportView untuk melihat hasilnya
   ReportView1.Report = Report1

End

Selamat belajar

Senin, 28 Oktober 2019

Mengenal Penggunaan Perintah IIf() Untuk Kondisi (Pada) Nilai/Value ~Tutorial Gambas


Perintah IIf (jika dalam huruf kecil: iif) digunakan untuk memasukkan kondisi pada nilai variable. Bedanya dengan If-Then yaitu:

If-Then
  • Mengekseskusi baris perintah-perintah didalamnya berdasarkan kondisi.
  • Dapat melakukan dengan banyak kondisi
  • Debuger memeriksa kefalidan logika (perintah) hanya pada kondisi yang memenuhi syarat saja

IIf()
  • Untuk memasukkan sebuah nilai berdasarkan kondisi.
  • Hanya menentukan satu kondisi True/Flase (Boolean)
  • Debuger akan memeriksa kefalidan logika tiap nilai untuk masing-masing Bolean (Nilai1 untuk True dan Nilai2 untuk False). Jadi harus hati-hati saat menggunakan dan Format() atau membuat fungsi, karena jika terdapat kesalahan logika pada nilai baik pada salah satu maupun keduanya, makan akan menghasilkan error.


Rumus:

Iif(Boolean(True/False), Nilai1, Nilai2)

Nilai1 jika kondisi True/benar, dan Nilai2 jika kondisinya False/salah

Contoh:

Public Sub Main()

   Dim a As Byte
   Dim Teks As String = “Nama saya adalah “
   a = 1
   Print Teks & IIf(a = 0, “Bagio”, “Paimin”)

End

Hasil:
Nama saya adalah Paimin

“Paimin” yang didapat karena kondisinya False, bahwa a bukan sama dengan 0, melainkan 1. perintah diatas sama halnya dengan perintah berikut:

Print Teks & IIf(False, “Bagio”, “Paimin”)

Contoh error karena kesalahan logika

Public Sub Main()

   Dim a As Byte = 1
   Print IIf(a = 1, a + 6, a + Fungsiku()) ‘Error

End

Private Sub Fungsiku() As String

   Return "Ok"

End

Perintah diatas akan menghasilkan error karena tidak seharusnya menjumlahkan “a” yang bertipe byte dengan “Fungsiku()” yang bertipe String. Selain itu, padahal, jika “Fungsiku()” bertipe byte/short/integer dan tidak menghasilkan error saat dijalankan, hasil yang keluar dari perintah diatas adalah dari “a + 6” karena bernilai True.

Coba jika perintah diatas menggunakan If-Else

Public Sub Main()

   Dim a As Byte = 1
   If a = 1 Then
     Print a + 6
   Else
     Print a + Fungsiku()
   Endif

End

Private Sub Fungsiku() As String

   Return "Ok"

End

Maka perintah diatas tidak terjadi error, kecuali jika kondisinya “a” bukan 1.

Kamis, 24 Oktober 2019

Mengenal (Macam-macam) Penggunaan If - Else - Endif untuk Kondisi/Perbandingan ~Tutorial Gambas


Perbandingan atau pengkondisian merupakan salah satu bagian yang umum dan paling penting dalam dunia pemrogaman. Sebuah program baik dalam sekala kecil (bukan dasar), menengah, maupun besar tidak akan luput dari penggunaan fungsi perbandingan/kondisi tersebut. Terdapat banyak macam/bentuk kondisi berdasarkan fungsi dan tujuannya. Namun disini hanya di fokuskan pada penggunaan If – Else – Endif.

Contoh:
Untuk satu kondisi dan satu statement

Public Sub Main()

   Dim a As Byte = 4
   Dim b As String
   If a = 4 Then b = “Nilai a adalah 4”
   Print b

End

Diatas penggunaan If yang boleh tanpa ditutup menggunakan Endif

Untuk satu kondisi dengan banyak statement

Public Sub Main()

   Dim c As Byte
   Dim d As Byte = 5
   Dim e As String = “Zonk”
   If c = 0 Then
     Inc d
     e = “Nilai \”e\” adalah: “ & d
     Print “Selesai”
   Endif

End

Jika kondisinya memenuhi sayarat (c = 0) maka hasil yang dikeluarkan:
Nilai “e” adalah: 6
Selesai

Penggunaan If dengan banyak statement harus diakhiri dengan Endif.

Untuk banyak kondisi

Public Sub Main()

   Dim z As Byte = 2
   If z = 0 Then
     Print “Tes1”
     z = z * 4
   Else If z = 1 Then
     Print “Tes2”
     z = z * 8
   Else If z = 2 Then
     Print “Tes3”
     z = z * 3
   Else
     Print “Tes1”
     z = z * 10
   Endif
   Print z

End

Hasil diatas adalah:
Tes 3
6

Penggunaan kondisi dengan And, Or, Not


Public Sub Main()

   Dim x, y As Short
   Dim t As String

   x = 1000
   y = 2000
   If x = 1000 And y = 1000 Then
         t = “Tes1”
   Else If x = 2000 And y = 4000 Then
     t = “Tes2”
   Else If x = 1000 And y = 2000 Then
     t = “Tes3”
   Else If x = 6000 Or y = 2000 Then
     t = “Tes4”
   Else If (x = 2000 Or x = 5000) And y = 3000 Then
     t = “Tes5”
   Endif
   Print t

End

Hasil:
Tes3

Public Sub Main()

   Dim a As Byte = 4
   Dim b As String
   If Not (a = 2) Then Print “Mantab”

End

Pada dasarnya kondisi/perbandingan adalah suatu keadaan yang dinilai dari perbandingan antara dua nilai yang bersifat kebenaran (Boolean), yakni menghasilkan nilai antara True (benar) dan False (salah).

If Boolean(True/Flase) Then Statement

Misal bernilai True:

Dim a As String = “Ok”
If a = “Ok” Then Print a

sama dengan

If (a = “Ok”) = True Then Print a

atau juga sama dengan

If True Then Print a

Misal bernilai False:

Dim a As String = “Yes”
If a <> “Ok” Then Print a

dapat ditulis dengan

If Not (a = “Ok”) Then Print a

Juga dapat ditulis dengan

If (a = “Ok”) = False Then Print a

sama dengan

If Flase Then Print a

Selamat Belajar