Home > Visual Basic > Tutorial Active Report bagian 3 – Sub Report

Tutorial Active Report bagian 3 – Sub Report

Walaupun sedikit telat janji akan tetap saya penuhi untuk membahas ulang kasus pada postingan 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.

Selamat MENCOBA :)

  1. September 14, 2011 at 11:20 am | #1

    perbedaan dengan pembahasan sblmnya apa nih..? tampilannya sama dengan yang grouping..?

  2. glenk
    October 19, 2011 at 6:17 am | #2

    Om, konsep push reportnya CR bisa dimplementasikan ke Active report kagak, piye carane?

    • October 20, 2011 at 6:28 am | #3

      Push report di CR sy belum tau nih om, emg cara kerjanya seperti apa ?

  3. Hanif
    October 21, 2011 at 12:55 am | #4

    Met pagi.
    Mas, kalau ngeprint data pake active report yang ditampilkan di listview gimana ya, tanpa melewati database. jadi langsung mengambil dari list view
    udah utak atik tapi belum nemu
    makasih atas pencerahannya

    • October 24, 2011 at 1:37 pm | #5

      Coba seperti ini om :
      1. Di desain AR section Detail tambahkan 1 komponen Field kemudian set nilai properties DataField = counter
      2. Dibagian editor code ketik kode berikut :

      Public counter As Integer
      
      Private Sub ActiveReport_DataInitialize()
          Fields.Add "counter"
      End Sub
      
      Private Sub ActiveReport_FetchData(EOF As Boolean)
          Static i As Integer
          
          i = i + 1
          
          If i > counter Then
              EOF = True
              Exit Sub
          Else
              EOF = False
          End If
          
          Fields("counter").Value = i
      End Sub
      

      3. Kemudian di form tinggal panggil seperti berikut :

      Private Sub Command1_Click()
          Dim rpt As New ActiveReport1
          
          rpt.counter = 10
          rpt.Show
      End Sub
      

      Mudah2xan dapat pencerahan :D

  4. Maul
    November 9, 2011 at 1:38 am | #6

    Om, kalo saya mau menampilkan data, isi row recordnya-nya cuma 2, tetapi saya mau garisnya tetap mencetak 10 row, ada caranya ga? Kalo yang disajikan disini kan tabelnya mengikuti row recordnya. btw, saya menggunakan cr11…

  5. KaryOnO
    November 23, 2011 at 3:29 am | #8

    UuMm,,,,, KaLo mO Setting Active Report Bentuk Landscape GmN YaAhh,

    • November 23, 2011 at 8:32 am | #9

      Di active report designer klik menu File -> Page Setup, trus aktifkan pilihan Printer Settings
      nah disitu ada pengaturan Portrait atau Landscape

      • KaryOnO
        November 24, 2011 at 12:25 am | #10

        EmMm…. Um, posting project Vb + Active Report + Sql server dong, disuruh dosen nieh tapi lum dapet referensinya.
        Thank’s…………

        • November 24, 2011 at 12:49 am | #11

          Bedanya tuh cuma di string koneksi aja, disamakan dg string koneksi waktu koneksi ke database

  6. January 15, 2012 at 5:25 pm | #12

    om admin mohon bantuanya, saya membuat instalasi vb mysql dengan inno setup, dan sya menggunakan datareport. setelah selesai lalu sya instal, knapa selalu ada pesan DataSource not found padahal sebelum dijadikan instaler normal dan bisa jalan.?. mohon pencerahanya.

    • January 24, 2012 at 10:59 am | #13

      Klo datareport sudah lama enggak make om, cuma seingat sy pada saat manggil datareportnya lokasi databasenya diset ulang

  7. January 21, 2012 at 9:17 pm | #14

    mas admin klu mau print semua transaksi gimana cara nya,,,

    saya mau bikin aplikasi yg pembayaran ,, dimana pembayaran nya di tagih ke rumah rumah,,,
    jadi kita bikin kwitansi nya terlebih dahulu….
    mohon pencerahannya…

    • January 24, 2012 at 11:01 am | #15

      Klo untuk cetak nota biasanya menggunakan grouping, mungkin om bisa coba postingan sy yg disini.

  8. ahmad7802
    March 17, 2012 at 9:17 pm | #16

    Om klo mau nampil photo ato gambar dgn ActiveReport gimana ? , dengan database MySql ..thanks

    • March 18, 2012 at 9:39 am | #17

      Karena pertanyaannya bagaimana menampilkan gambar jadi sy asumsikan om sudah berhasil menyimpan file gambar di database mysql.

      Jadi kode berikut masih mengacu pada skrip diatas, misal di header laporan daftar siswa akan kita tambahkan objek Image untuk menampilkan logo sekolah.

      Logo sekolah sudah tersimpan di tabel profil_sekolah dg nama field logo_sekolah dg tipe mediumblob.

      Pertama tambahkan dulu fungsi berikut :

      Private Function getImageFromDB(ByVal query As String, ByVal fieldName As String, ByVal tempFileImage As String) As IPictureDisp
          Dim rsImage     As ADODB.Recordset
          Dim myStream    As ADODB.Stream
          
          Set rsImage = New ADODB.Recordset
          Set myStream = New ADODB.Stream
          
          On Error GoTo errHandle
          
          myStream.Type = adTypeBinary
          
          rsImage.Open query, conn, adOpenStatic, adLockOptimistic
          If Not rsImage.EOF Then
              myStream.Open
              myStream.Write rsImage(fieldName).Value
              myStream.SaveToFile tempFileImage, adSaveCreateOverWrite
              myStream.Close
              
              Set getImageFromDB = LoadPicture(tempFileImage, , vbLPColor)
          Else
              Set getImageFromDB = Nothing
          End If
          rsImage.Close
          Set rsImage = Nothing
          
          Exit Function
      errHandle:
          Set getImageFromDB = Nothing
      End Function
      

      Kemudian kita revisi kode untuk pemanggilan laporan daftar siswa diatas

      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 = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=akademik;User=root;Password=rahasia;Option=3;"
              .adoSiswaPerKelas.Source = strSql
      
              .lblHeader1.Caption = "SEKOLAH MENGENGAH ..."
              .lblHeader2.Caption = "Laporan Data Siswa Per Kelas"
      
              ' tambahan kode untuk menampilkan logo sekolah yg diload dari database
              strSql = "SELECT * FROM profil_sekolah"
              .imgLogo.Picture = getImageFromDB(strSql, "logo_sekolah", App.Path & "\logo_sekolah.jgp")
              
              .Show
          End With
      End Sub
      

      Kode diatas membutuhkan referensi Microsoft ActiveX Data Objects 2.5 Library

      Selamat mencoba :)

  9. ahmad7802
    March 18, 2012 at 9:52 pm | #18

    Thanks om , mau di coba dan di sampeka hasil nya nanti…*laporan*

  10. ahmad7802
    March 19, 2012 at 6:43 pm | #20

    Laporan om misi sudah terlaksana dan terima kasih bantuan nya

  11. ahmad7802
    March 20, 2012 at 9:48 pm | #22

    Misi Om , boleh nanya lg ? mungkin di luar tema ini, singkat nya aku ada tabel surat Fields(no_surat,tgl_surat,nama) yg aku tampilkan di listview .. dan ada button buat print .. maksud nya dengan clik no_surat semua nama-nama dengan no_surat yg sama bisa di tampil kan semua di ActiveReport

    • March 22, 2012 at 11:05 am | #23

      Kan query biasa om, tinggal kondisi di WHERE untuk nomor suratnya ambil nilainya berdasarkan data yg di listview

  12. ahmad7802
    March 22, 2012 at 6:52 pm | #24

    Iya om dah clear ternyata ado ga di masukin … btw thanks info nya

  13. ahmad7802
    March 28, 2012 at 6:56 am | #26

    Om datang dan bertanya lg nih , klo mau tampilin report dengan Activer Report Viewer gimana ?

    • March 28, 2012 at 1:50 pm | #27

      Sudah ada contoh penggunaanya om, di folder “C:\Program Files\Data Dynamics\ActiveReports Pro\Samples\Visual Basic Samples\CategorySelection”

  14. Ahmad
    April 10, 2012 at 8:51 am | #28

    Assalamu’alaikum Mas, saya ada kendala dalam penggunaan active report.
    Gimana ya cara tampilkan foto atau gambar di laporan dengan active report sesuai dengan fields yang diinginkan. Misalnya kode karyawan : 00001, maka akan tampil data karyawan tersebut beserta fotonya. Begitu juga jika kode karyawannya :0002 maka yang muncul data karyawan yg lain lagi. Demikian Mas, saya mohon sekali bantuannya, saya masih belajar pakai active report. Jika boleh ada sedikit tampilan dan coding juga tutorialnya. maklum Mas masih awam. trims ya Mas.

    • April 10, 2012 at 10:50 am | #29

      Waalaikumussalam
      Diatas kayaxnya udah ada yg nanya om (komentar #16 – #17) bagaimana cara nampilkan gambar di Active Report coba dipelari dulu

  15. Ahmad
    April 14, 2012 at 10:33 am | #30

    Iya Mas sudah saya pelajari, tapi kendala saya yaitu : saya ingin ketika kode karyawan 00001, maka akan tampil foto karyawan tersebut di laporannya beserta data lainnya di active reportnya. Begitu juga ketika kode 00002 dan seterusnya. Jika yang mas maksud dikomentar #16 – #17 biasanya itu sudah baku seperti pada input data instansi/perusahaan maka logonya hanya sekali diambil tidak bisa berulang-ulang karena namanya filenya sudah baku dan tidak bisa dirubah. Bagaimana jika yang saya maksud Mas Admin, mohon pencerahannya. Trims sdh reply Mas.

    • April 14, 2012 at 11:26 am | #31

      Fotonya disimpan di database atw enggak ?

  16. Ahmad
    April 26, 2012 at 2:25 pm | #32

    Iya Mas sdh disimpan didatabase, tapi hanya lokasinya saja yg disimpan. Jadi yang di panggil lokasi tempat penyimpanan fotonya aja sehingga fotonya pun ikut tampil. Saya pakai Ms. Access sebagai database dan VB 6 sebagai front. Trims ya Mas …

    • April 27, 2012 at 9:51 am | #33

      coba gini om, untuk memanggil ARnya tetap seperti biasa

      Private Sub cmdPreviewSiswa_Click()
          Dim strCon  As String
          Dim strSql  As String
      
          strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\sampleDb.mdb"
          strSql = "SELECT nomorinduk, nama, lokasi_foto FROM siswa"
      
          With arLapSiswa
              .adoSiswa.ConnectionString = strCon
              .adoSiswa.Source = strSql
      
              .lblHeader1.Caption = "SEKOLAH MENGENGAH ..."
              .lblHeader2.Caption = "Laporan Data Siswa Per Kelas"
      
              .Show
          End With
      End Sub
      

      Untuk fotonya diload di event Detail_Formatnya AR

      Private Sub Detail_Format()
          Dim foto As String
          
          With adoSiswa.Recordset
              If Not .EOF Then
                  txtNo.Text = Val(txtNo.Text) + 1
                  txtNoInduk.Text = .Fields("nomor_induk").Value
                  txtNama.Text = .Fields("nama").Value
                  
                  ' TODO : tambahkan validasi pengecekan file foto
                  foto = .Fields("lokasi_foto").Value & "\" & txtNoInduk.Text & ".jpg"
                  imgFoto.Picture = LoadPicture(foto)
              End If
          End With
      End Sub
      
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s