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.
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:
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.
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 |
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.
pembahasan detail mengenai jurnal penutup , terima kasih artikelnya
ReplyDelete