Skip to main content

Membuat Laporan Trend Aktual

Seperti halnya laporan budget yang umumnya berbentuk trend bulanan, kita juga bisa membuat laporan trend aktual bulanan, baik untuk laporan yang hanya menampilkan rekening utama saja, atau laporan yang menampilkan rekening utama, derivatif 1, dan derivatif 2.

Membuat Laporan Trend Aktual di Form

Dalam bentuk form, cara membuat kriteria pada laporan ini sama dengan buku besar dan neraca lajur. Pada bagian detail, form ini mirip dengan budget, yaitu berupa trend yang terdiri dari 12 bulan beserta totalnya.
Gambar 1
Gambar 1 adalah Design view dari trend bulanan rekening laporan pendapatan. Kriteria “Dari”, “Sampai Dengan”, “Periode”, “Bentuk” adalah hasil copy dan paste dari buku besar di subbab 10.3, Membuat Laporan Buku Besar. Mengingat bentuk trend yang panjang dan kertas ukuran legal tidak dapat memuat semua kolom yang ada, kita akan menambahkan satu kriteria lagi. Kriteria itu fungsinya untuk menampilkan jumlah, bisa dalam satuan moneter penuh, ribuan, sampai dengan jutaan. Jadi misalnya, dengan menggunakan mata uang rupiah, maka angka 1.234.456.789,122 akan ditampilkan penuh seperti itu, 1.234.456,79 bila ingin disajikan dalam ribuan rupiah, atau 1.234,46 bila ingin disajikan dalam jutaan rupiah.
Gambar 2
Dengan menambahkan kriteria ini, maka kita dapat menampilkan semua kolom dalam report dengan kertas ukuran legal secara penuh, tidak terpotong. Hal ini memang berbeda dengan Excel yang bisa menampilkan column to repeat at left, Access tidak bisa. Kalaupun bisa, kita harus menyiasatinya dengan membuat duplikasi pada bagian header, footer, serta kolom yang harus ditampilkan kembali di halaman berikutnya dan diletakkan di sisi sebelah kanan.

Kembali pada cara penyajian, apakah dalam rupiah penuh atau jutaan rupiah, kita akan membuat kriteria di form header itu sebagai berikut:
  1. Sisipkan sebuah combo box dengan properti:
    1. Name=PenyajianMoneter
    2. Row Source Type=Value List
    3. Row Source=0;;3;000;4;0.000;5;00.000;6;000.000
    4. Boun Column=1
    5. Column Count=2
    6. Column Widths=0”;2”
    7. Column Heads=No
    8. List Width=2”
    9. Limit To List=Yes
  2. Label untuk combo box, Caption=Disajikan dalam:
  3. Di sebelah kanan combo box, sisipkan text box dengan properti:
    1. Name=Pengucapan
    2. Control Source==IIf(PreferensSistem("Pengucapan")<>"", PreferensSistem("Pengucapan"),"")
Gambar 3
Supaya form dapat berfungsi, salinlah kode VBA di bawah ini ke class module Frm_frmTrenLapRLAktual:
Option Compare Database
Dim blReport As Boolean
Private Function HapusTrenAktual()
  HapusObjekYgTidakPerlu "qryAktualTrend1"
  HapusObjekYgTidakPerlu "qryAktualTrend2"
  HapusObjekYgTidakPerlu "qryAktualTrend3"
End Function
Private Sub Form_Close()
  Form_frmMenus.Visible = True
  HapusTrenAktual
End Sub
Private Sub ProsesTrend()
  Dim intPeriode As Integer
  Dim drKodeGabung, sdKodeGabung As String
  If IsNull(Me.drTglTransaksi) Or IsNull(Me.sdTglTransaksi) Then
    MsgBox "Kriteria tanggal transaksi tidak boleh ada yang kosong"
    Exit Sub
  End If
  drKodeGabung = Me.drKodeRek & Me.drDeriv1 & Me.drDeriv2
  sdKodeGabung = Me.sdKodeRek & Me.sdDeriv1 & Me.sdDeriv2
  If Me.drDeriv1 > Me.sdDeriv1 Then
    MsgBox "Kriteria dari deriv 1 tidak boleh lebih besar dari sampai deriv 1"
    Me.drDeriv1.SetFocus
    Exit Sub
  End If
  If Format(Me.drTglTransaksi, "yyyymm") > Format(Me.sdTglTransaksi, "yyyymm") Then
    MsgBox "Periode akuntansi dari bulan tidak boleh lebih besar dari sampai bulan"
    Me.drTglTransaksi.SetFocus
    Exit Sub
  End If
  Me.frmTrenLapRLAktualSubform.SourceObject = ""
  intPeriode = (Year(Me.drTglTransaksi) * 12 + Month(Me.drTglTransaksi))
  strCriteriaDR = Format(Me.drTglTransaksi, "yyyy") & Format(Me.drTglTransaksi, "mm")
  strCriteriaSD = Format(Me.sdTglTransaksi, "yyyy") & Format(Me.sdTglTransaksi, "mm")
  strSqla = "SELECT (Year([TglTransaksi])* 12 + Val(Format([TglTransaksi],'mm')))- " & intPeriode & "+1 AS Periode1, Periode, " _
           & "KodeRek, Deriv1, Deriv2, Round(([debit]-[kredit])/" & 10 ^ (Me.PenyajianMoneter) & ",2) AS Selisih FROM qryPermTransJurnal " _
           & "WHERE Periode Between " & strCriteriaDR & " and " & strCriteriaSD _
           & " AND " & "KodeGabung Between '" & drKodeGabung & "' and '" & sdKodeGabung _
           & "' AND TipeJurnal<>PreferensSistem('JurnalPenutup') " _
           & "AND (Grup='4' OR Grup='5');"
  BuatQuery "qryAktualTrend1", strSqla
  strSqla = "TRANSFORM Sum(Selisih) AS JumlahAktual SELECT KodeRek, Deriv1, Deriv2, " _
           & "Sum(Selisih) AS [TotalAktual] FROM qryAktualTrend1 " _
           & "GROUP BY KodeRek, Deriv1, Deriv2 PIVOT Periode1 IN (1,2,3,4,5,6,7,8,9,10,11,12);"
  BuatQuery "qryAktualTrend2", strSqla
  strSqla = "SELECT qryAktualTrend2.KodeRek, Sum(qryAktualTrend2.[TotalAktual]) AS [TotalAktual], " _
           & "Sum(qryAktualTrend2.[1]) AS 1, Sum(qryAktualTrend2.[2]) AS 2, Sum(qryAktualTrend2.[3]) AS 3, " _
           & "Sum(qryAktualTrend2.[4]) AS 4, Sum(qryAktualTrend2.[5]) AS 5, Sum(qryAktualTrend2.[6]) AS 6, " _
           & "Sum(qryAktualTrend2.[7]) AS 7, Sum(qryAktualTrend2.[8]) AS 8, Sum(qryAktualTrend2.[9]) AS 9, " _
           & "Sum(qryAktualTrend2.[10]) AS 10, Sum(qryAktualTrend2.[11]) AS 11, Sum(qryAktualTrend2.[12]) AS 12 " _
           & "FROM qryAktualTrend2 GROUP BY qryAktualTrend2.KodeRek;"
  BuatQuery "qryAktualTrend3", strSqla
End Sub
Private Sub PrintTrenAktual_Click()
  ProsesTrend
  If Me.FrameBentuk = 1 Then
    If blReport = True Then PreviewUnRefresh "rptTrenLapRLAktual1", True Else PreviewUnRefresh "rptTrenLapRLAktual1"
  Else
    If blReport = True Then PreviewUnRefresh "rptTrenLapRLAktual2", True Else PreviewUnRefresh "rptTrenLapRLAktual2"
  End If
  blReport = False
End Sub
Private Sub ReportTrenAktual_Click()
  blReport = True
  PrintTrenAktual_Click
End Sub
Private Sub SubformTrenAktual_Click()
  ProsesTrend
  If Me.FrameBentuk = 1 Then
    Me.frmTrenLapRLAktualSubform.SourceObject = "frmTrenLapRLAktualSubform1"
  Else
    Me.frmTrenLapRLAktualSubform.SourceObject = "frmTrenLapRLAktualSubform2"
  End If
  Me.CaraPenyajian = "Disajikan dalam " & Me.Penyajian Moneter.Column(1) & " " & Me.Pengucapan
  Me.frmTrenLapRLAktualSubform.Requery
End Sub
Private Sub drDeriv1_Click()
    Me.sdDeriv1.Requery
End Sub
Private Sub Form_Open(Cancel As Integer)
  Me.Caption = "Trend Bulanan Laporan Pendapatan " & Nz(IdPerusahaan("Nama"), "")
  Me.frmTrenLapRLAktualSubform.SourceObject = ""
  If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True
End Sub
Private Sub txtPeriodeAkuntansi_Click()
  Me.drTglTransaksi = Format(Me.PeriodeAkuntansi.[Column](0), Me.drTglTransaksi.Format)
  Me.sdTglTransaksi = Format(Me.PeriodeAkuntansi.[Column](1), Me.sdTglTransaksi.Format)
End Sub
Pada bagian form detail, sisipkan text box kosong (unbound) dengan Name=CaraPenyajian dan subform kosong (unbound) dengan Name=frm TrenLapRLAktualSubform. Subform frmTrenLapRLAktualSubform ini akan diisi dengan form yang sesuai dengan kriteria bentuk, lengkap atau ringkas. Jadi, kita harus membuat form yang berfungsi sebagai subform itu.
Gambar 4
Untuk membuat form yang memuat bentuk lengkap, kita dapat mengkopi frmBudgetReportSubform pada Navigation pane dan paste dengan nama frmTrenLapRLAktualSubform1. Lalu, bukalah frmTrenLapRLAktualSubform1, isilah properti form Record Source = qryAktualTrend2, dan ganti properti text box Total Of JumlahBudget:
  1. Name=TotalAktual
  2. ControlSource=TotalAktual
Untuk membuat form bentuk ringkas, kita dapat mengkopi frmTrenLapRLAktual Subform1 pada Navigation pane dan paste dengan nama frmTrenLapRLAktual Subform2. Setelah itu, bukalah frmTrenLapRLAktualSubform2, isilah properti form Record Source = qryAktualTrend3, dan hapuslah combo box Deriv1 dan Deriv2.

Salinlah kode VBA di bawah ini pada masing-masing form, frmTrenLapRL AktualSubform1 dan frmTrenLapRLAktualSubform2:
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
  Dim dtTgl As Variant
  Dim i, n As Integer
  Dim ctlName As String
  dtTgl = Form_frmTrenLapRLAktual.drTglTransaksi
  n = -1
  For i = 1 To 12
    n = n + 1
    ctName = "Lbl" & CStr(i)
    If i = 1 Then
      Me.Controls(ctName).Caption = Format(dtTgl, "mmm yy")
    Else
      Me.Controls(ctName).Caption = Format(DateAdd("m", n, dtTgl), "mmm yy")
    End If
 Next i
End Sub
Membuat Laporan Trend Aktual di Report

Cara paling mudah membuat laporan bentuk lengkap di report adalah dengan mengkopi rptBudgetReport pada Navigation pane dan paste dengan nama rptTrenLapRLAktual1. Setelah itu lakukan perubahan seperti saat kita merubah properti di frmTrenLapRLAktualSubform1 di atas.
  1. Gantilah properti report Record Source = qryAktualTrend2
  2. Gantilah properti text box Name=Total Of JumlahBudget menjadi Name=TotalAktual dan ControlSource=TotalAktual
  3. Pada kolom atau text box yang properti Control Sourcenya berisi jumlah Total Of JumlahBudget (=Sum([Total Of JumlahBudget])), gantilah dengan (=Sum([TotalAktual]).
  4. Pada report control dan event procedure yang ada dalam rptTrenLapRL Aktual1, gantilah semua Control Source atau variable yang mengandung frmBudgetReport dengan frmTrenLapRLAktual, contohnya seperti Control Source pada text box drTglTransaksi, diubah dari =[Forms]![frmBudget Report]![drTglTransaksi]   menjadi =[Forms]![frmTrenLapRLAktual]![drTgl Transaksi].

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Cara Sederhana Membuat Fungsi Terbilang di MS Acess VBA

Membuat Tabel Hubungan Keluarga