active report 1 2 3
TRANSCRIPT
Active Report adalah salah satu tool yang digunakan untuk pembuatan report di visual basic, mulai dari report yang sederhana sampai yang komplek, berikut contoh beberapa report yang bisa dibuat menggunakan active report.
Selain itu active report juga sudah terintegrasi dengan IDE visual basic sehingga pembuatan report pun menjadi lebih menyenangkan, lalu bagaimana cara meload datanya ? Caranya gampang cukup menggunakan query biasa seperti query-query yang digunakan dalam pembuatan aplikasi.
Untuk contoh pada tutorial pertama ini kita akan menampilkan data siswa dengan struktur tabel seperti berikut :
1. Mendesain reportMendesain report di Active Report sama mudahnya seperti mendesain tampilan di form, tinggal drag komponennya kemudian ganti nilai properties masing-masing komponennya sesuai kebutuhan.
Oke langsung saja aktifkan project vb Anda kemudian klik kanan di nama project -> Add -> Data Dynamics ActiveReport 2.0
jika berhasil pada panel project explorer akan ketambahan node baru dengan nama Designers
kita akan mengganti nilai dari properties Name dan Caption seseusai setting berikut :
Nama = arLapSiswaCaption = Laporan Data Siswa
untuk properties yang lain bisa Anda ganti nilainya sesuai kebutuhan.
Berikutnya kita akan menambahkan judul report, objek yang akan digunakan adalah objek label
nilai caption dari labelnya kita abaikan saja, karena akan kita ganti pada saat runtime (program dijalankan).
Setelah selesai menambahkan judul reportnya, kita akan menambahkan judul kolom, objek yang digunakan masih sama yaitu label
selanjutnya kita akan menambahkan border untuk judul kolom nya, caranya adalah dengan menyeleksi label “No.” sampai “Tanggal Lahir”, kemudian klik kanan pada salah satu label yang diseleksi pilih Format Border
pilih jenis border pada pilihan Line Styles, kemudian pada bagian Preview border yang diaktifkan hanya bagian “Atas”, “Kiri” dan “Bawah”
selanjutkan kita akan menambahkan border untuk label ayah
Gimana? jadi terlihatkan perbedaannya kenapa dipisah pembuatan border label “Ayah” dengan label lainnya.
Hasil akhir penambahan border judul kolom
Berikutnya kita akan menambahkan objek TextBox yang akan digunakan untuk menampilkan data
Khusus untuk textbox “No.” (tag merah) properties Textnya diset = 0, untuk textBox lainnya diabaikan saja dan kemudian untuk menambahkan border langkah-langkahnya sama seperti sebelumnya, hanya saja border bagian “Atas” tidak aktifkan
kemudian untuk setting border textbox ayah
ada satu komponen lagi yang akan kita tambahkan yaitu komponen ADO Data Control dan saya rasa tidak perlu lagi dijelaskan apa kegunaan komponen ini.
Berikut adalah hasil akhir desain report siswanya.
2. Kode untuk reportActive Report sama seperti form dan komponen lainnya mempunyai event-event yang bisa kita isikan kode program sesuai kebutuhan, biasanya nama event tersebut diawali oleh nama sectionya, contoh :
pada contoh diatas section “Detail” mempunyai beberapa event yaitu AfterPrint, BeforePrint, Format.
Disini saya hanya akan mencontohkan penggunaan event Format dan BeforePrint.
Private Sub Detail_Format()
With adoSiswa.Recordset
If Not .EOF Then
txtNo.Text = Val(txtNo.Text) + 1
txtNIS.Text = .Fields("nomorinduk").Value
txtNama.Text = .Fields("nama").Value
txtTempatLahir.Text = "" & .Fields("tempat_lahir").Value ' untuk menghandle nilai null
If IsDate(.Fields("tgl_lahir").Value) Then
txtTglLahir.Text = Format(.Fields("tgl_lahir").Value, "dd/MM/yyyy")
Else
txtTglLahir.Text = ""
End If
txtAyah.Text = "" & .Fields("ayah").Value ' untuk menghandle nilai null
End If
End With
End Sub
Sampai disini report sudah siap digunakan/dipanggil via aplikasi
3. Memanggil report dari aplikasiBalik ke form visual basic kemudian buat desain form seperti gambar berikut :
kemudian untuk menampilkan reportnya ketik kode berikut :
Private Sub cmdPreview_Click()
Dim strCon As String
Dim strSql As String
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\sampleDb.mdb"
strSql = "SELECT * FROM siswa"
With arLapSiswa
.adoSiswa.ConnectionString = strCon
.adoSiswa.Source = strSql
.lblHeader1.Caption = "SEKOLAH MENGENGAH ..."
.lblHeader2.Caption = "Laporan Data Siswa"
.Show
End With
End Sub
Gimana ? Simple kan
jalankan program kemudian klik tombol “Tampilkan Report”, akan ditampilkan hasil preview data siswanya.
waduhh, ternyata setelah pindah ke halaman 2 ada data siswa yang nampil tidak sesuai harapan, lihat gambar berikut :
Setelah diusut ternyata penyebabnya adalah nilai dari tempat lahirnya terlalu panjang sehingga tampilan report jadi berantakan, nah bagaimana cara menyelesaikan masalah ini ? Disinilah peran penting dari event Detail_BeforePrint.
Oke kita kembali lagi ke desain report siswanya kemudian tambahkan kode berikut pada event Detail_BeforePrint :
Private Sub Detail_BeforePrint()
txtNo.Height = Detail.Height
txtNIS.Height = Detail.Height
txtNama.Height = Detail.Height
txtTempatLahir.Height = Detail.Height
txtTglLahir.Height = Detail.Height
txtAyah.Height = Detail.Height
End Sub
Klo sudah jalankan lagi programnya dan kita lihat hasil reportnya
Case closed sampai ketemu lagi di seri tutorial active report berikutnya, insya Allah
LANJUT 2 >>
Setelah cukup lama tertunda akhirnya tutorial kedua dari yang pertama ini rilis juga.Fokus pada tutorial kali ini adalah pembuatan format laporan yang sering digunakan yaitu grouping.
Contoh laporan yang akan kita buat adalah seperti berikut :
Masih menggunakan database yang sama pada tutorial pertama, kita akan tambahkan 2 buah tabel lagi yaitu kelas dan kelas_siswa
Sebelum membuat laporannya, kita liat dulu query yang digunakan untuk menampilkan data siswa berikutnya kelasnya
SELECT kelas.id AS kelas_id, kelas.keterangan AS kelas, siswa.nomor_induk, siswa.nama
FROM siswa INNER JOIN (kelas INNER JOIN kelas_siswa ON kelas.id = kelas_siswa.kelas_id) ON siswa.nomor_induk = kelas_siswa.nomor_induk
Oke sampai disini persiapan sudah cukup, saatnya kita membuka project pada tutorial pertama klik kanan di nama project -> Add -> Data Dynamics ActiveReport 2.0
jika berhasil akan ditambahkan sub node baru dengan nama ActiveReport1
kemudian ganti properties namenya menjadi arLapSiswaPerKelas dan caption menjadi Laporan Data Siswa Per Kelas
Selanjutnya kita akan menambahkan section Group dengan cara mengklik kanan salah satu section (PageHeader atau Detail) -> Insert -> Group Header/Footer
jika berhasil akan ditambahkan 2 section baru yaitu GroupHeader1 dan GroupFooter1
kemudian ganti properties namenya menjadi grpKelasID
field kelas_id mengacu pada query diatasuntuk format laporannya sesuai dengan contoh diatas
bagaimana cara mendesainnya sudah saya bahas tuntas disini.Setelah desain reportnya jadi, kita akan menambahkan beberapa baris kode di event Detail_Format
kemudian ketik kode berikut :
Private Sub Detail_Format()
With adoSiswaPerKelas.Recordset
If Not .EOF Then
txtNo.Text = Val(txtNo.Text) + 1
txtNoInduk.Text = .Fields("nomor_induk").Value
txtNama.Text = .Fields("nama").Value
End If
End With
End Sub
selanjutnya kita akan menambahkan kode di event Detail_BeforePrint
Private Sub Detail_BeforePrint()
txtNo.Height = Detail.Height
txtNoInduk.Height = Detail.Height
txtNama.Height = Detail.Height
End Sub
terakhir event grpKelasID_Format
Private Sub grpKelasID_Format()
With adoSiswaPerKelas.Recordset
If Not .EOF Then
txtKelas.Text = .Fields("kelas").Value
End If
End With
End Sub
kemudian aktifkan form yang sudah ada setelah itu tambahkan 1 buah tombol untuk menampilkan laporan siswa per kelas
adapun untuk kodenya seperti berikut :
Private Sub cmdPreviewSiswaPerKelas_Click()
Dim strCon As String
Dim strSql As String
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\sampleDb.mdb"
strSql = "SELECT kelas.id AS kelas_id, kelas.keterangan AS kelas, siswa.nomor_induk, siswa.nama " & _
"FROM siswa INNER JOIN (kelas INNER JOIN kelas_siswa ON kelas.id = kelas_siswa.kelas_id) ON siswa.nomor_induk = kelas_siswa.nomor_induk"
With arLapSiswaPerkelas
.adoSiswaPerKelas.ConnectionString = strCon
.adoSiswaPerKelas.Source = strSql
.lblHeader1.Caption = "SEKOLAH MENGENGAH ..."
.lblHeader2.Caption = "Laporan Data Siswa Per Kelas"
.Show
End With
End Sub
Jalankan program kemudian klik tombol “Tampilkan Report Siswa Per Kelas”
Ada yang aneh pada laporan diatas, nomor urut untuk kelas VII B (UNGGULAN) harusnya dimulai dari 1 bukan 12 (melanjutkan nomor urut kelas sebelumnya).
Untuk menyelesaikan masalah ini kita harus kembali ke desain reportnya kemudian aktifkan event grpKelasID_Format setelah itu tambahkan kode berikut :
txtNo.text = "0"
untuk kode lengkapnya seperti berikut :
Private Sub grpKelasID_Format()
With adoSiswaPerKelas.Recordset
If Not .EOF Then
txtNo.Text = "0" ' reset nomor urut kelas
txtKelas.Text = .Fields("kelas").Value
End If
End With
End Sub
coba dijalankan lagi programnya kemudian klik tombol “Tampilkan Report Siswa Per Kelas”
Yuph nomor urut untuk kelas berikutnya sudah dimulai dari 1
Untuk postingan kali ini rasanya cukup sampai disini, postingan berikutnya insya Allah kita masih akan membahas kasus yang sama (menampilkan daftar siswa per kelas) tetapi dengan memanfaatkan Sub Report.
LANJUT >>
Walaupun sedikit telat janji akan tetap saya penuhi untuk membahas ulang kasus padapostingan sebelumnya menggunakan sub report.Untuk refreshing dibawah ini merupakan format laporan yang akan kita buat menggunakan sub report.
Langsung saja kita aktifkan project postingan sebelumnya
kemudian klik kanan node Designers -> Add -> Data Dynamics ActiveReports 2.0
setelah itu akan bertambah 1 sub node baru dengan nama ActiveReport1 kemudian ganti properties Name dan Captionnya sesuai gambar berikut :
langkah selanjutnya kita akan menambahkan section baru yaitu section Group Header/Footer dengan cara mengklik kanan salah satu section yang sudah ada
jika berhasil akan ditambahkan 2 section baru yaitu section group header dan footer
kemudian ganti properties namenya menjadi grpKelasID
field kelas_id mengacu pada query berikut
SELECT kelas.id AS kelas_id, kelas.keterangan AS kelas
FROM kelas INNER JOIN kelas_siswa ON kelas.id = kelas_siswa.kelas_id
kemudian desain laporan sesuai gambar berikut :
bagaimana cara mendesainnya sudah saya bahas tuntas disini.karena kita disini menggunakan sub report berarti kita harus menambahkan 1 report baru yang akan kita panggil melalui objek sub report.
Tambahkan report baru dengan cara mengklik kanan node Designers -> Add -> Data Dynamics ActiveReports 2.0
kemudian ganti properties Name sesuai gambar berikut :
setelah itu hapus section PageHeader dengan cara mengklik kanan section PageHeader -> Delete Section
kemudian lengkapi desainnya seperti berikut :
sampai disini kita akan mulai menghubungkan report utama dengan sub reportnya dengan cara mengaktifkan report arLapSiswaPerkelas2 kemudian klik ganda section Group Header
kemudian lengkapi kodenya seperti berikut :
Private Sub grpKelasID_Format()
Dim strSql As String
With adoSiswaPerKelas.Recordset
If Not .EOF Then
txtKelas.Text = .Fields("kelas").Value
strSql = "SELECT siswa.nomor_induk, siswa.nama " & _
"FROM siswa INNER JOIN kelas_siswa ON siswa.nomor_induk = kelas_siswa.nomor_induk " & _
"WHERE kelas_siswa.kelas_id = " & grpKelasID.GroupValue & ""
' memanggil sub report
Set SubReport1.object = New arSubReportSiswaPerKelas
With SubReport1.object.adoSiswaPerKelas
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\sampleDb.mdb"
.Source = strSql
End With
End If
End With
End Sub
setelah itu aktifkan juga report arSubReportSiswaPerKelas kemudian tambahkan kode berikut pada event Detail_Format
Private Sub Detail_Format()
With adoSiswaPerKelas.Recordset
If Not .EOF Then
txtNo.Text = Val(txtNo.Text) + 1
txtNoInduk.Text = .Fields("nomor_induk").Value
txtNama.Text = .Fields("nama").Value
End If
End With
End Sub
Terakhir kita akan memanggil report utama dari form vb
Private Sub cmdPreviewSiswaPerKelas2_Click()
Dim strSql As String
strSql = "SELECT kelas.id AS kelas_id, kelas.keterangan AS kelas " & _
"FROM kelas INNER JOIN kelas_siswa ON kelas.id = kelas_siswa.kelas_id"
With arLapSiswaPerkelas2
.adoSiswaPerKelas.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\sampleDb.mdb"
.adoSiswaPerKelas.Source = strSql
.lblHeader1.Caption = "SEKOLAH MENGENGAH ..."
.lblHeader2.Caption = "Laporan Data Siswa Per Kelas"
.Show
End With
End Sub
Yuph selesai sudah
Sampai disini modal kita sudah cukup untuk membuat report yang lebih kompleks, insya Allah akan kita bahas di seri terakhir dari tutorial Active Report ini.
Tutorial Active Report bagian 4 – Membuat Report tanpa DatabaseOctober 31, 2011Admin Leave a comment Go to comments
Karena kesibukan ngajar (terutama nyiapin materi) di semester ini hampir saja membuat mata rantai postingan
saya terputus dibulan ini, jadi akhirnya disempat2xin juga nulisnya .
Dan sekalian permohonan maaf buat om2x yg nanya responnya enggak bisa secepat dulu, maklum alasannya juga
sama “sok sibuk” .
Oke, langsung saja beberapa waktu yang lalu ada yang nanya bagaimana menampilkan data yang ada di ListView ke ActiveReport.
Misal kita mempunyai data mahasiswa seperti berikut :
Sebelumnya kita akan membuat terlebih dulu sebuah class Mahasiswa untuk menampung data diatas kemudian tinggal kita lewatkan melalui variabel public yang kita tambahkan dibagian ActiveReportnya.
Berikut kode lengkap class Mahasiswa
Private m_Npm As String
Private m_nama As String
Private m_kota As String
Public Property Let Npm(ByVal vData As String)
m_Npm = vData
End Property
Public Property Get Npm() As String
Npm = m_Npm
End Property
Public Property Let Nama(ByVal vData As String)
m_nama = vData
End Property
Public Property Get Nama() As String
Nama = m_nama
End Property
Public Property Let Kota(ByVal vData As String)
m_kota = vData
End Property
Public Property Get Kota() As String
Kota = m_kota
End Property
Untuk ActiveReportnya buat desain seperti biasa
Setelah itu lengkapi juga kodenya
Public daftarMhs As Dictionary
Private Sub ActiveReport_FetchData(EOF As Boolean)
Static i As Integer
i = i + 1
If i > daftarMhs.Count Then
EOF = True
Exit Sub
Else
EOF = False
End If
Dim mhs As Mahasiswa
Set mhs = daftarMhs.Item(CStr(i))
txtNpm.Text = mhs.Npm
txtNama.Text = mhs.Nama
txtKota.Text = mhs.Kota
End Sub
Private Sub Detail_Format()
txtNo.Text = Val(txtNo.Text) + 1
End Sub
Pada kode diatas terlihat variabel daftarMhs bertipe Dictionary dengan access modifier public, jadi nilainya bisa kita set dari form.
Class Dictionary mirip seperti class Collection di C# atau java.
Terakhir kode untuk menampilkan ActiveReport plus mengeset nilai variabel daftarMhs yang diambil dari ListView.
Private Sub cmdPreview_Click()
Dim rpt As New ActiveReport1
Dim daftarMhs As New Dictionary
Dim mhs As Mahasiswa
Dim i As Integer
For i = 1 To lsvMahasiswa.ListItems.Count
Set mhs = New Mahasiswa
With mhs
.Npm = lsvMahasiswa.ListItems(i).SubItems(1)
.Nama = lsvMahasiswa.ListItems(i).SubItems(2)
.Kota = lsvMahasiswa.ListItems(i).SubItems(3)
End With
daftarMhs.Add CStr(i), mhs
Next i
With rpt
Set .daftarMhs = daftarMhs
.Show
End With
End Sub