Skip to main content

Membuat Form Jurnal Penutup

Jurnal penutup adalah jurnal yang digunakan untuk memindahkan semua saldo yang ada pada rekening pendapatan dan biaya ke suatu rekening yang disebut rekening ringkasan pendapatan (income summary account). Jurnal penutup ini hanya dilakukan pada saat akhir periode akuntansi, yaitu untuk menutup periode akuntansi berjalan dan memulai periode akuntansi yang baru atau berikutnya.

Dalam ringkasan pendapatan ini, rekening pendapatan dan biaya dipertemukan, sehingga akan diketahui saldo akhir dari ringkasan pendapatan. Saldo akhir ini, yang juga merupakan laba atau rugi bersih selama satu periode akuntansi, kemudian dipindahkan ke rekening laba ditahan.

Dengan ditutupnya satu periode akuntansi, maka semua transaksi keungan selama satu periode itu dianggap telah dicatat dalam jurnal, termasuk segala jurnal koreksi dan penyesuaian yang mungkin ada. Bagian Akuntansi dan Pencatatan tidak bisa lagi membuat jurnal apa pun dalam periode akuntansi yang telah ditutup.

Dengan menggunakan teknologi, maka jurnal penutup juga dapat dilakukan secara otomatis. Komputer akan menghitung setiap saldo akhir dari rekening pendapatan dan biaya, memindahkannya ke rekening ringkasan pendapatan, lalu memindahkan saldo akhir ringkasan pendapatan itu ke rekening laba ditahan.
Gambar 1
Untuk membuat form jurnal penutup, Kita hanya perlu menambahkan satu buah tombol perintah dalam form jurnal penutup untuk mengeksekusi penutupan dalam satu periode akuntansi. Pada properti tombol itu, isikan Name= ProsesJurnalPenutup dan Caption=Proses Tutup Buku, seperti pada Gambar 1. Simpanlah form jurnal penutup dengan nama frmJurnalPenutup.

Berikut ini adalah kode VBA untuk event procedure dan eksekusi penutupan yang ada di form frmJurnalPenutup:
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
    Me.Caption = "Proses Tutup Buku " & Nz(IdPerusahaan("Nama"), "")
    If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True
End Sub
Private Sub ProsesJurnalPenutup_Click()
  If MsgBox("Satu periode akuntansi akan ditutup. Pada periode ini, " & vbCrLf & _
  "anda tidak akan bisa membuat jurnal transaksi apa pun." & vbCrLf & _
  "Anda yakin untuk menutup periode ini?", vbYesNo) = vbNo Then Exit Sub
  HitungSaldoPenutupan
  HitungSaldoPenutupan (True)
  MulaiTahunBerikut
End Sub
Private Function MulaiTahunBerikut()
  Dim dtAwalTahunBerjalan As Date
  DoCmd.SetWarnings False
  dtAwalTahunBerjalan = DateSerial(Year(CekPeriodeTanggal(TglAwalThn)) + 1, Month(CekPeriodeTanggal(TglAwalThn)), Day(CekPeriodeTanggal(TglAwalThn)))
  dtAkhirTahunBerjalan = DateSerial(Year(CekPeriodeTanggal(TglAkhirThn)) + 1, Month(CekPeriodeTanggal(TglAkhirThn)), Day(CekPeriodeTanggal(TglAkhirThn)))
  dtAwalBulanBerjalan = DateSerial(Year(CekPeriodeTanggal(TglAwalBulan)) + 1, Month(CekPeriodeTanggal(TglAwalBulan)), Day(CekPeriodeTanggal(TglAwalBulan)))
  dtAkhirBulanBerjalan = DateSerial(Year(CekPeriodeTanggal(TglAkhirBulan)) + 1, Month(CekPeriodeTanggal(TglAkhirBulan)), Day(CekPeriodeTanggal(TglAkhirBulan)))
  dtAwalBulanBerikut = DateSerial(Year(CekPeriodeTanggal(TglAwalBulanBerikut)) + 1, Month(CekPeriodeTanggal(TglAwalBulanBerikut)), Day(CekPeriodeTanggal(TglAwalBulanBerikut)))
  dtAkhirBulanBerikut = DateSerial(Year(CekPeriodeTanggal(TglAkhirBulanBerikut)) + 1, Month(CekPeriodeTanggal(TglAkhirBulanBerikut)), Day(CekPeriodeTanggal(TglAkhirBulanBerikut)))
  dtAwalBulanSebelum = DateSerial(Year(CekPeriodeTanggal(TglAwalBulanSebelum)) + 1, Month(CekPeriodeTanggal(TglAwalBulanSebelum)), Day(CekPeriodeTanggal(TglAwalBulanSebelum)))
  dtAkhirBulanSebelum = DateSerial(Year(CekPeriodeTanggal(TglAkhirBulanSebelum)) + 1, Month(CekPeriodeTanggal(TglAkhirBulanSebelum)), Day(CekPeriodeTanggal(TglAkhirBulanSebelum)))
  dtAwalTahunSebelum = DateSerial(Year(CekPeriodeTanggal(TglAwalThnSebelum)) + 1, Month(CekPeriodeTanggal(TglAwalThnSebelum)), Day(CekPeriodeTanggal(TglAwalThnSebelum)))
  dtAkhirTahunSebelum = DateSerial(Year(CekPeriodeTanggal(TglAkhirThnSebelum)) + 1, Month(CekPeriodeTanggal(TglAkhirThnSebelum)), Day(CekPeriodeTanggal(TglAkhirThnSebelum)))
  dtAwalBulanThnSebelum = DateSerial(Year(CekPeriodeTanggal(TglAwalBulanThnSebelum)) + 1, Month(CekPeriodeTanggal(TglAwalBulanThnSebelum)), Day(CekPeriodeTanggal(TglAwalBulanThnSebelum)))
  dtAkhirBulanThnSebelum = DateSerial(Year(CekPeriodeTanggal(TglAkhirBulanThnSebelum)) + 1, Month(CekPeriodeTanggal(TglAkhirBulanThnSebelum)), Day(CekPeriodeTanggal(TglAkhirBulanThnSebelum)))
  dtAwalTahunBerikut = DateSerial(Year(CekPeriodeTanggal(TglAwalThnBerikut)) + 1, Month(CekPeriodeTanggal(TglAwalThnBerikut)), Day(CekPeriodeTanggal(TglAwalThnBerikut)))
  dtAkhirTahunBerikut = DateSerial(Year(CekPeriodeTanggal(TglAkhirThnBerikut)) + 1, Month(CekPeriodeTanggal(TglAkhirThnBerikut)), Day(CekPeriodeTanggal(TglAkhirThnBerikut)))
  dtAwalBulanThnBerikut = DateSerial(Year(CekPeriodeTanggal(TglAwalBulanThnBerikut)) + 1, Month(CekPeriodeTanggal(TglAwalBulanThnBerikut)), Day(CekPeriodeTanggal(TglAwalBulanThnBerikut)))
  dtAkhirBulanThnBerikut = DateSerial(Year(CekPeriodeTanggal(TglAkhirBulanThnBerikut)) + 1, Month(CekPeriodeTanggal(TglAkhirBulanThnBerikut)), Day(CekPeriodeTanggal(TglAkhirBulanThnBerikut)))
  DoCmd.RunSQL "INSERT INTO tblPeriode ( TglAwalThn, TglAkhirThn, TglAwalBulanSebelum, TglAkhirBulanSebelum, " & _
               "TglAwalBulan, TglAkhirBulan, TglAwalBulanBerikut, TglAkhirBulanBerikut, TglAwalThnSebelum, " & _
               "TglAkhirThnSebelum, TglAwalBulanThnSebelum, TglAkhirBulanThnSebelum, TglAwalThnBerikut, " & _
               "TglAkhirThnBerikut, TglAwalBulanThnBerikut, TglAkhirBulanThnBerikut, PgnId, Waktu, StatusThnSebelum ) VALUES " & _
               "(#" & dtAwalTahunBerjalan & "#,#" & dtAkhirTahunBerjalan & "#,#" & dtAwalBulanSebelum & "#,#" & dtAkhirBulanSebelum & "#,#" & _
               dtAwalBulanBerjalan & "#,#" & dtAkhirBulanBerjalan & "#,#" & dtAwalBulanBerikut & "#,#" & dtAkhirBulanBerikut & "#,#" & _
               dtAwalTahunSebelum & "#,#" & dtAkhirTahunSebelum & "#,#" & dtAwalBulanThnSebelum & "#,#" & dtAkhirBulanThnSebelum & "#,#" & _
               dtAwalTahunBerikut & "#,#" & dtAkhirTahunBerikut & "#,#" & dtAwalBulanThnBerikut & "#,#" & dtAkhirBulanThnBerikut & "#, '" & _
               [TempVars]![IdPengguna] & "', #" & Now & "#," & 2 & ");"
  DoCmd.RunSQL "UPDATE tblPeriode SET StatusThnBerjalan = 2, StatusThnSebelum = 2 WHERE TglAwalThn = #" & dtAwalTahunSebelum & "# AND TglAkhirThn=#" & dtAkhirTahunSebelum & "#;"
  DoCmd.SetWarnings True
End Function
Private Function HitungSaldoPenutupan(Optional blSaldo As Boolean = False)
  Dim dbs As Database
  Dim rst As Recordset
  Dim intNoRef, intJurnalId As Long
  Dim strDeriv1, strDeriv2, dtTanggal As String
  Dim strSQL, strSqla, strSqlb, strSqlc, strJurnalPenutup, strLabaDitahan, strRingkasanPendapatan As String
  Dim dblSaldo, dblDebit, dblKredit As Double
  Set dbs = CurrentDb
  intNoRef = Round(Rnd() * 1000000, 0)
  strJurnalPenutup = PreferensSistem("JurnalPenutup")
  strRingkasanPendapatan = PreferensSistem("Ringkasan Pendapatan")
  strLabaDitahan = PreferensSistem("LabaDitahan")
  If PreferensSistem("NoJurnalKeAwal") = True Then
    dtTanggal = " and [TglTransaksi] between #" & CekPeriode("TglAwalThn") & "# and #" & CekPeriode("TglAkhirThn") & "#"
  Else
    dtTanggal = ""
  End If
  Application.SetOption ("Confirm Action Queries"), False 
  strSQL = "INSERT INTO tblPermTransJournal_Parent (TipeJurnal, NoJurnal, TglTransaksi, Ref, NoRef, " & _
              "DibuatOleh, SetujuOleh, Proses ) VALUES ('" & strJurnalPenutup & "', " & _
              DCount("[TipeJurnal]", "tblPermTransJournal_Parent", "[TipeJurnal]='" & _
              strJurnalPenutup & "'" & dtTanggal & "") + 1 & ", #" & CekPeriode("TglAkhirThn") & "#,''," & intNoRef & _
              ", '" & [TempVars]![IdPengguna] & "', '" & [TempVars]![IdPengguna] & "',1);"
  DoCmd.RunSQL strSQL
  intJurnalId = DLookup("[JurnalId]", "tblPermTransJournal_Parent", "[NoRef]=" & intNoRef)
  strSqla = "SELECT KodeRek, Deriv1, Deriv2, IIf([TransNetos]>0,[TransNetos],0) AS Debit, " _
           & "IIf([TransNetos]<0,-[TransNetos],0) AS Kredit, Sum([JmlhDebit]-[jmlhKredit]-[PenyesKredit]+[PenyesDebit]) AS TransNetos " _
           & "FROM qryPermTransJurnal WHERE (Proses=1 AND TglTransaksi Between CekPeriode(""TglAwalThn"") And CekPeriode(""TglAkhirThn"")) " _
           & "GROUP BY KodeRek, Deriv1, Deriv2, Grup HAVING (((Sum([JmlhDebit]-[jmlhKredit]-[PenyesKredit]+[PenyesDebit]))<>0) " _
           & "AND ((Grup)='4' Or (Grup)='5'));"
  Set rst = dbs.OpenRecordset(strSqla, dbOpenSnapshot)
  If blSaldo = True Then
    dblSaldo = HitungSaldoAkhir(HanyaKodeRekUtama, strRingkasanPendapatan, CekPeriode("TglAkhirThn")) ' SaldoAkhir(strRingkasanPendapatan, CekPeriode("TglAkhirThn"))
    If dblSaldo < 0 Then
      dblDebit = 0
      dblKredit = -dblSaldo
    Else
      dblDebit = dblSaldo
      dblKredit = 0
    End If
    strSqlb = "INSERT INTO tblPermTransJournal_Child (KodeRek, Deskripsi, Debit, Kredit, JurnalId) " _
            & "VALUES ('" & strRingkasanPendapatan & "', 'Jurnal Penutup Periode: " & strLabaDitahan & "'," _
            & dblKredit & ", " & dblDebit & ", " & intJurnalId & ");"
    strSqlc = "INSERT INTO tblPermTransJournal_Child (KodeRek, Deskripsi, Debit, Kredit, JurnalId) " _
            & "VALUES ('" & strLabaDitahan & "', 'Jurnal Penutup Periode: " & strRingkasanPendapatan & "'," _
            & dblDebit & ", " & dblKredit & ", " & intJurnalId & ");"
    If dblDebit > 0 Then
      DoCmd.RunSQL strSqlc: DoCmd.RunSQL strSqlb
    Else
      DoCmd.RunSQL strSqlb
      DoCmd.RunSQL strSqlc
    End If
  Else
    Do While Not rst.EOF
      strDeriv1 = "'" & rst!Deriv1 & "' AS Expr3, "
      strDeriv2 = "'" & rst!Deriv2 & "' AS Expr4, "
      If IsNull(rst!Deriv1) Then strDeriv1= "Null AS Expr3, "
      If IsNull(rst!Deriv2) Then strDeriv2= "Null AS Expr4, "
      strSqlb = "INSERT INTO tblPermTransJournal_Child (KodeRek, Deskripsi, Deriv1, Deriv2, Debit, Kredit, JurnalId) " _
              & "SELECT '" & rst!KodeRek & "' AS Expr1, 'Jurnal Penutup' AS Expr2, " & strDeriv1 _
              & strDeriv2 & rst!Kredit & " AS Expr5, " & rst!Debit & " AS Expr6, " _
              & intJurnalId & " AS Expr7;"
      strSqlc = "INSERT INTO tblPermTransJournal_Child (KodeRek, Deskripsi,  Debit, Kredit, JurnalId) " _
              & "VALUES ('" & strRingkasanPendapatan & "', 'Jurnal Penutup Kode Rek Utama: " & rst!KodeRek & "', " _
              & rst!Debit & ", " & rst!Kredit & ", " & intJurnalId & ");"
      If rst!Debit > 0 Then
        DoCmd.RunSQL strSqlc: DoCmd.RunSQL strSqlb
      Else
        DoCmd.RunSQL strSqlb
        DoCmd.RunSQL strSqlc
      End If
      rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
  End If
  DoCmd.RunSQL "UPDATE tblPermTransJournal_Parent SET Proses = 2 " _
             & "WHERE TglTransaksi Between CekPeriode(""TglAwalThn"") And CekPeriode(""TglAkhirThn"");"
  Application.SetOption ("Confirm Action Queries"), True 
End Function

Segera setelah proses jurnal penutup selesai dilakukan, maka periode akuntansi langsung berganti periode berikutnya. Dengan selesainya jurnal penutup, maka satu siklus akuntansi telah berakhir dan dimulai dengan siklus akuntansi yang baru.

Comments

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access