Skip to main content

Membuat Form Buku Besar

Seperti sudah dijelaskan di posting sebelumnya, buku besar yang kita buat sebenarnya berasal dari jurnal transaksi permanen. Dengan menggunakan query qryPermTransJurnal seperti di subbab sebelumnya, buku besar dalam bentuk apa pun yang kita inginkan dapat dihasilkan. Dari query inilah, kita kemudian mengurutkan transaksi berdasarkan kode rekening dan kronologi.

Buatlah form dengan Design view seperti Gambar 1. Kotak dengan nama “Dari”, “Sampai Dengan”, “Periode”, “Bentuk”, dan “Tampilkan Hasilnya di:” adalah kriteria yang digunakan dalam proses penyajian buku besar (lihat pada bagian yang diarsir). Simpan form itu dengan nama frmBukuBesar.
Gambar 1
Berikut ini adalah penjelasan dari gambar di atas:
  1. Pada bagian identitas login pengguna di pojok kiri atas, tanggal, dan waktu di pojok kanan atas, kita tentu sudah tahu cara membuatnya. Jika belum, silakan baca lagi bab sebelumnya. Demikian juga dengan judul Buku Besar tidak perlu dijelaskan di sini.
  2. Buatlah frame option group dengan memilih tab Design dan pilih Option Group pada grup Controls. Atur properti frame itu: Name=Frame20. Pada label frame itu, beri nama properti Caption=Dari. Dalam Frame20 sisipkan form control berikut ini:
    1. Combo box dengan properti:
      1. Name=drKodeRek
      2. Column Count=2
      3. Bound Column-1
      4. Column Width=1”;2.5”
      5. List Width=3.5”
      6. Row Source=tblRekUtama
    2. Persis di bawah combo box drKodeRek, buatlah text box tanpa label dengan properti:
      1. Name=drKodeRekNama
      2. Control Source= =[drKodeRek].[column](1)
    3. Di samping combo box drKodeRek, sisipkan combo box dengan properti:
      1. Name= drDeriv1
      2. Column Count=2
      3. Bound Column-1
      4. Column Width=1”;2.5”
      5. List Width=3.5”
      6. Row Source= tblRekDerivatif1
    4. Persis di bawah combo box drDeriv1, buatlah text box tanpa label dengan properti:
      1. Name= drDeriv1Nama
      2. Control Source= =[drDeriv1].[column](1)
    5. Di samping combo box drDeriv1, sisipkan combo box dengan properti:
      1. Name= drDeriv2
      2. Column Count=2
      3. Bound Column-1
      4. Column Width=1”;2.5”
      5. List Width=3.5”
      6. Row Source= tblRekDerivatif2
    6. Persis di bawah combo box drDeriv1, buatlah text box tanpa label dengan properti:
      1. Name= drDeriv2Nama
      2. Control Source= =[drDeriv2].[column](1)
  3. Kopilah Frame20 bersama seluruh control yang ada di dalamnya ke samping.
    1. Gantilah label Caption dari “Dari” menjadi “Sampai Dengan”.
    2. Gantilah semua properti Name dari combo box: drKodeRek, drDeriv1, dan drDeriv2 menjadi sdKodeRek, sdDeriv1, dan sdDeriv2 berurutan.
    3. Lakukan dengan cara  nomor 2 di atas untuk semua properti Control Source dari text box menjadi =[sdKodeRek].[column](1), =[sdDeriv1]. [column](1), dan [sdDeriv2].[column](1) berurutan.
  4. Sisipkan 2 buah control berupa text box untuk memasukkan tanggal, dengan kedua properti Name itu adalah drTglTransaksi dan sdTglTransaksi, sedangkan Formatnya adalah short date atau medium date.
  5. Di bawah text box drTglTransaksi, sisipkanlah combo box tanpa label dengan properti:
    1. Name=PeriodeAkuntansi
    2. Row Source= SELECT TglAwalThn, TglAkhirThn FROM tblPeriode ORDER BY TglAwalThn;
    3. Row Source Type=Table/Query
    4. Bound Column=1
    5. Limit To List=Yes
    6. Default Value= =CekPeriode("TglAwalThn")
    7. Column Count=2
    8. Column Widths= 1.5";1.5"
    9. Column Heads=Yes
  6. Di samping combo box PeriodeAkuntansi, sisipkan text box dengan properti:
    1. Control Source= ="Dari " & Format([PeriodeAkuntansi].[column] (0),"dd mmm yyyy") & " sampai " & Format([PeriodeAkuntansi]. [column](1),"dd mmm yyyy")
    2. Enabled=No
    3. Locked=Yes
  7. Di samping combo box PeriodeAkuntansi, sisipkan text box dengan properti:
    1. Name= txtPeriodeAkuntansi
    2. Control Source= ="??"
    3. Is Hyperlink= Yes
    4. Locked=Yes
  8. Buatlah option group dengan properti Name=FrameBukuBesar dan Default Value=1. Caption untuk label pada option group = Bentuk. Dalam option group ini, buatlah 2 buah option button:Bentuk buku besar yang ringkas tidak memasukkan rekening derivatif 1 (Deriv1) dan rekening derivatif 2 (Deriv2) sebagai satu kesatuan kode rekening. Namun demikian, Deriv1 dan Deriv2 ditampilkan di bagian detail dari buku besar. Bentuk ringkas seperti ini biasanya digunakan untuk keperluan internal bagian akuntansi/keuangan. Sebaliknya, bentuk buku besar lengkap memasukkan Deriv1 dan Deriv2 sebagai satu kesatuan kode rekening. Bentuk lengkap seperti ini didistribusikan ke departemen/bagian lain yang berkepentingan karena di dalam kode rekening itu tercantum kode departemen sebagai pusat pertanggungjawaban.
    1. Option button 1, properti:
      1. Name=Option33
      2. Option Value=1
      3. Caption untuk label option ini=Lengkap, termasuk kode derivatif 1 dan 2.
    2. Option button 2, properti:
      1. Name=Option31
      2. Option Value=0
      3. Caption untuk label option ini= Ringkas, hanya kode rekening utama saja.
  9. Buatlah tombol perintah untuk menampilkan hasil melalui form atau report dengan properti:
    1. Name= SubformBukuBesar
    2. Caption= Subform Buku Besar
    3. Control Tip Text = Hanya bisa digunakan bila kode rekening, deriv1, dan deriv2 pada kotak sampai dengan sama dengan kotak dari
  10. Buatlah tombol perintah untuk menampilkan hasil hanya melalui report dengan properti:
    1. Name= ReportBukuBesar
    2. Caption= Laporan Buku Besar
  11. Buatlah tombol perintah untuk menampilkan hasil hanya melalui report dengan properti:
    1. Name= PrintBukuBesar
    2. Caption= Print Preview
    Pada prinsipnya, tombol ReportBukuBesar dan PrintBukuBesar sebenarnya sama dengan tombol SubformBukuBesar. Perbedaannya, bila criteria kode rekening dalam kotak “Sampai Dengan:” sama dengan kotak “Dari:” (artinya hanya ada satu kode rekening yang ingin ditampilkan), maka buku besar akan ditampilkan di subform (melalui SubformBukuBesar) dan report (melalui ReportBukuBesar). Sedangkan tombol ReportBukuBesar untuk kriteria kode rekening dalam kotak “sampai Dengan:” tidak sama dengan kotak “Dari:”. Access tidak bisa menampilkannya dalam sebuah subform.
  12. Buatlah Subform di bagian form detail dengan memilih tab Create Subform/Subreport pada grup Controls. Isikan properti Name= frmBukuBesarDetail. Subform ini digunakan untuk menampilkan buku besar untuk satu rekening tertentu dengan menggunakan tombol SubformBukuBesar. Isi dari SubformBukuBesar dijelaskan di bagian lain dari subbab ini di bawah.
  13. Untuk mengarahkan form sesuai dengan keinginan, tulislah kode VBA berikut ini dalam Form_frmBukuBesar:
    Option Compare Database
    Dim blReport As Boolean
    Private Sub Form_Close()
      Me.frmBukuBesarDetail.SourceObject = ""
      HapusObjekYgTidakPerlu "tblBukuBesar"
      HapusQueryNeracaLajur
    End Sub
    Private Sub drKodeRek_AfterUpdate()
      Me.sdKodeRek.Requery
    End Sub
    Private Sub drDeriv1_AfterUpdate()
      sdKodeRek_AfterUpdate
    End Sub
    Private Sub Form_Open(Cancel As Integer)
      Caption = "Buku Besar " & Nz(IdPerusahaan("Nama"), "")
      Me.drTglTransaksi = CekPeriodeTanggal(TglAwalBulan)
      Me.sdTglTransaksi = CekPeriodeTanggal(TglAkhirBulan)
      If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True
      Me.frmBukuBesarDetail.SourceObject = ""
      If globNeracaLajur <> "" Then
        Me.Modal = True
        If globNeracaLajur = "frmNeracaLajurLengkap" Then
          Me.drDeriv1 = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![Deriv1]
          Me.drDeriv2 = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![Deriv2]
          Me.sdDeriv1 = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![Deriv1]
          Me.sdDeriv2 = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![Deriv2]
        End If
        Me.drKodeRek = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![KodeRek]
        Me.sdKodeRek = Forms![frmNeracaLajur]![frmNeracaLajur Detail].Form![KodeRek]
        Me.drTglTransaksi = Form_frmNeracaLajur.drTglTransaksi
        Me.sdTglTransaksi = Form_frmNeracaLajur.sdTglTransaksi
        Me.FrameBentuk = Form_frmNeracaLajur.FrameBentuk
        SubformBukuBesar_Click
        globNeracaLajur = ""
        Exit Sub
      End If
    End Sub
    Private Sub PrintBukuBesar_Click()
      Dim rst As Recordset
      Dim strSqlx, strSqla, strSqlb, Deriv1, Deriv2, strDerivs1, strDerivs2 As String
      Dim dblSaldoAwal, dblDebit, dblKredit As Double
      Dim intCounter As Integer
      Dim dtInitVal As Date
      If Me.drKodeRek & Me.drDeriv1 & Me.drDeriv2 > Me.sdKodeRek & Me.sdDeriv1 & Me.sdDeriv2 Then
        MsgBox "Kriteria ""Dari"" Kode Rekening tidak boleh lebih besar daripada kriteria ""Sampai Dengan"" Kode Rekening"
        Exit Sub
      End If
      If Me.drTglTransaksi > Me.sdTglTransaksi Then
        MsgBox "Kriteria ""Dari Tanggal"" tidak boleh lebih besar daripada kriteria ""Sampai Tanggal"""
        Exit Sub
      End If
      Me.frmBukuBesarDetail.SourceObject = ""
      BuatQueryNeracaLajur Me.drTglTransaksi, Me.sdTglTransaksi, Me.drKodeRek, Me.drDeriv1, Me.drDeriv2, Me.sdKodeRek, Me.sdDeriv1, Me.sdDeriv2
      BuatTabelBukuBesar
      If Me.FrameBentuk = 1 Then
        strSqlx = "qryNeracaLajurGabung1"
      Else
        strSqlx = "qryNeracaLajurGabung0"
      End If
      Set dbs = CurrentDb
      Set rst = dbs.OpenRecordset(strSqlx)
      Do While Not rst.EOF
        If Me.FrameBentuk = 1 Then
          BuatSemuaBB Lengkap, rst!KodeRek, Me.drTglTransaksi, Me.sdTglTransaksi, Nz(rst!Deriv1, ""), Nz(rst!Deriv2, "")
        Else
          BuatSemuaBB HanyaKodeRekUtama, rst!KodeRek, Me.drTglTransaksi, Me.sdTglTransaksi
        End If
          rst.MoveNext
      Loop
      rst.Close
      Set rst = Nothing
      If Me.FrameBentuk = 1 Then
        If blReport = True Then PreviewUnRefresh "rptBukuBesarLengkap", True Else PreviewUnRefresh "rptBukuBesarLengkap"
      Else
        If blReport = True Then PreviewUnRefresh "rptBukuBesarRingkas", True Else PreviewUnRefresh "rptBukuBesarRingkas"
      End If
      blReport = False
    End Sub
    Private Sub sdDeriv1_GotFocus()
      sdKodeRek_AfterUpdate
    End Sub
    Private Sub sdKodeRek_AfterUpdate()
      If Me.sdKodeRek = Me.drKodeRek Then
        Me.sdDeriv1.RowSource = "SELECT KodeDeriv1, NamaDeriv1 FROM tblRekDerivatif1 WHERE KodeDeriv1>='" & Me.drDeriv1 & "';"
      Else
        Me.sdDeriv1.RowSource = "tblRekDerivatif1"
      End If
      Me.sdDeriv1.Requery
    End Sub
    Private Sub sdDeriv2_GotFocus()
      sdDeriv1_AfterUpdate
    End Sub
    Private Sub drDeriv2_AfterUpdate()
      sdDeriv1_AfterUpdate
    End Sub
    Private Sub sdDeriv1_AfterUpdate()
      If Me.sdKodeRek = Me.drKodeRek And Me.drDeriv1 = Me.sdDeriv1 Then
        Me.sdDeriv2.RowSource = "SELECT KodeDeriv2, NamaDeriv2 FROM tblRekDerivatif2 WHERE KodeDeriv2>='" & Me.drDeriv2 & "';"
      Else
        Me.sdDeriv2.RowSource = "tblRekDerivatif2"
      End If
      Me.sdDeriv2.Requery
    End Sub
    Private Sub ReportBukuBesar_Click()
      blReport = True
      PrintBukuBesar_Click
    End Sub
    Private Sub SubformBukuBesar_Click()
      If Me.drKodeRek & Me.drDeriv1 & Me.drDeriv2 > Me.sdKodeRek & Me.sdDeriv1 & Me.sdDeriv2 Then
        MsgBox "Kriteria ""Dari"" Kode Rekening tidak boleh lebih besar daripada kriteria ""Sampai Dengan"" Kode Rekening"
        Exit Sub
      End If
      If IsNull(Me.drTglTransaksi) Or IsNull(Me.sdTgl Transaksi) Then
        MsgBox "Kriteria ""Dari Tanggal"" atau ""Sampai Tanggal"" tidak boleh kosong"
        Exit Sub
      End If
      If Me.drTglTransaksi > Me.sdTglTransaksi Then
        MsgBox "Kriteria ""Dari Tanggal"" tidak boleh lebih besar daripada kriteria ""Sampai Tanggal"""
        Exit Sub
      End If
      Me.frmBukuBesarDetail.SourceObject = ""
      BuatTabelBukuBesar
      Me.frmBukuBesarDetail.SourceObject= "frmBukuBesarDetail"
      If Me.drKodeRek <> Me.sdKodeRek Then
        ReportBukuBesar_Click
        Exit Sub
      End If
      If Me.FrameBentuk = 0 Then
        BuatSemuaBB HanyaKodeRekUtama, Me.drKodeRek, Me.drTglTransaksi, Me.sdTglTransaksi
        Form_frmBukuBesarDetail.KodeDeriv1.ColumnHidden = False
        Form_frmBukuBesarDetail.KodeDeriv2.ColumnHidden = False
      Else
        If (Me.drKodeRek & Me.drDeriv1 & Me.drDeriv2 <> Me.sdKodeRek & Me.sdDeriv1 & Me.sdDeriv2) Then
          ReportBukuBesar_Click
          Exit Sub
        End If
        BuatSemuaBB Lengkap, Me.drKodeRek, Me.drTglTransaksi, Me.sdTglTransaksi, Nz(Me.drDeriv1, ""), Nz(Me.drDeriv2, "")
        Form_frmBukuBesarDetail.KodeDeriv1.ColumnHidden = True
        Form_frmBukuBesarDetail.KodeDeriv2.ColumnHidden = True
      End If
      Me.frmBukuBesarDetail.Requery
    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
    
Membuat Subform Buku Besar

Subform buku besar yang ada dalam buku besar diawali dengan pembuatan tabel yang bernama tblBukuBesar. Tabel ini dibuat melalui eksekusi kode VBA, yaitu menjalankan fungsi BuatTabelBukuBesar yang berada di dalam modul mdlTransJurnal. Untuk mengetahui lebih detail isi desain tabel tblBukuBesar silakan buka modul itu, dan cari fungsi BuatTabelBukuBesar pada posting dengan judul Modul Untuk Mengelola Aktivitas Akuntansi. Setelah pembuatan tabel itu, langkah selanjutnya adalah membuat query yang berisi tabel tblBukuBesar. SQL view selengkapnya seperti ini:

SELECT IIf([tblBukuBesar]![JurnalId]=0,Null,[tblBukuBesar]! [JurnalId]) AS JurnalId, [tblRekUtama]![KodeRek] & [KodeDeriv1] & [Kodederiv2] AS Kode, tblTipeJurnal.TipeId, tblTipeJurnal.TipeId AS TipeJurnal, IIf([tblBukuBesar]![NoJurnal]=0,Null,[tblBukuBesar]![NoJurnal]) AS NoJurnal, tblBukuBesar.TglTransaksi, tblBukuBesar.Ref, tblBukuBesar.NoRef, tblBukuBesar.NoUrut, tblBukuBesar.RefDetail, tblRekUtama.KodeRek, tblRekDerivatif1.KodeDeriv1, tblRekDerivatif2.KodeDeriv2, tblBukuBesar.Deskripsi, tblBukuBesar.SU, tblBukuBesar.Kuantitas, tblBukuBesar.HargaSatuan, tblBukuBesar.TotalJumlah, tblBukuBesar.Debit, tblBukuBesar.Kredit, tblBukuBesar.SaldoAkhir, tblBukuBesar.JthTempo, tblBukuBesar.Deriv1, tblBukuBesar.Deriv2 FROM tblTipeJurnal RIGHT JOIN (tblRekDerivatif1 RIGHT JOIN (tblRekDerivatif2 RIGHT JOIN (tblBukuBesar INNER JOIN tblRekUtama ON tblBukuBesar.KodeRek = tblRekUtama.KodeRek) ON tblRekDerivatif2.KodeDeriv2 = tblBukuBesar.Deriv2) ON tblRekDerivatif1.KodeDeriv1 = tblBukuBesar.Deriv1) ON tblTipeJurnal.TipeId = tblBukuBesar.TipeJurnal;

Simpanlah query di atas dengan nama qryBukuBesar. Design view untuk query di atas dapat dilihat pada Gambar 2, yang hanya memuat relasi antar tabel. Query inilah yang diisikan dalam subform sebagai record sourcenya.
Gambar 2
Setelah selesai pembuatan query qryBukuBesar, kita mendesain form (atau subform) frmBukuBesarDetail. Pembuatannya cukup mudah, sorotlah qryBukuBesar yang ada di Navigation pane – Queries, lalu pilih tab Create, pada grup Forms, pilih More Forms dan klik Datasheet. Simpanlah form itu dengan nama frmBukuBesarDetail. Adapaun Design view dari form itu tampak seperti pada Gambar 3. Pada bagian text box NoJurnal atur kembali propertinya:
  1. Format = 00000
  2. Is Hyperlink = Yes
  3. On Click=[Event Procedure]:
    Private Sub NoJurnal_Click()
      If IsNull(Me.TipeId) Or Me.TipeId = "" Then Exit Sub
      globSumberBukuBesar = "TglTransaksi=#" & Me.TglTransaksi & "# and TipeJurnal='" & Me.TipeId & "' and NoJurnal=" & Me.NoJurnal
      BukaForm "frmPermTransJournal_Parent"
    End Sub
     
Gambar 3

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access