Pemrosesan secara batch adalah sekelompok transaksi yang dikumpulkan dalam jumlah tertentu, dalam periode waktu tertentu, dan kemudian diproses bersamaan. Proses transaksi secara batch dilakukan karena alasan efisiensi waktu. Jumlah jurnal transaksi yang banyak dengan pola jurnal yang seragam akan lebih efisien diproses secara batch. Proses ini bisa dilakukan secara harian, mingguan, atau bahkan bulanan, tergantung pada skala perusahaan. Biasanya, posting dilakukan secara batch jika transaksi sudah mencapai lebih dari 50.
Pada sofware akuntansi yang terintegrasi dengan bagian lain, seperti bagian piutang, utang, dan sebagainya, proses jurnal transaksi secara batch cocok untuk diterapkan. Sistem pencatatan piutang misalnya, jurnal yang dibuat di bagian piutang sudah didesain sesuai dengan standar pencatatan jurnal piutang. Jadi, bila tagihan sudah melalui proses verifikasi dan validasi oleh otoritas piutang, maka catatan yang terkait dengan piutang akan langsung diterima oleh bagian akuntansi dalam bentuk jurnal khusus piutang. Dalam kasus ini, proses secara batch akan lebih efiesien dari pada proses secara real time.
Pada sofware akuntansi yang kita buat ini, pemrosesan secara batch dilakukan lewat menu posting, yaitu dengan membuka form posting, yang di dalamnya terdapat subform yang berisi ringkasan dari setiap jurnal yang akan diposting. Untuk membuat form posting, ikutilah langkah-langkah di bawah.
- Buatlah form dengan menggunakan Blank Form.
- Pada bagian detail, taruhlah control berupa 4 buah combo box dengan properti sebagai berikut:
- Combo box 1:
- Name=drTgllTransaksi
- Row Source = SELECT TglTransaksi FROM tblTempTrans Journal_Parent GROUP BY TglTransaksi HAVING TglTransaksi Between CekPeriode("TglAwalBulan") And CekPeriode( "TglAkhirBulan");
- Format = Short Date
- Bound Column=1
- Label Caption untuk combo ini = Dari Tanggal
- After Update = [Event Procedure]:
Private Sub drTglTransaksi_AfterUpdate()
Me.sdTglTransaksi.Requery
Me.drTipeJurnal.Requery
Me.sdTipeJurnal.Requery
End Sub
- Combo box 2:
- Name=sdTgllTransaksi
- Row Source = SELECTTglTransaksi FROM tblTempTrans Journal_Parent GROUP BY TglTransaksi HAVING TglTransaksi Between [Forms]![frmPosting]![drTglTransaksi] And CekPeriode( "TglAkhirBulan");
- Format = Short Date
- Bound Column=1
- Label Caption untuk combo ini = Sampai Tanggal
- After Update = [Event Procedure]:
Private Sub sdTglTransaksi_AfterUpdate()
Me.drTipeJurnal.Requery
Me.sdTipeJurnal.Requery
End Sub
- Combo box 3:
- Name= drTipeJurnal
- Row Source = SELECT TipeJurnal FROM tblTempTrans Journal_Parent GROUP BY TipeJurnal ORDER BY TipeJurnal;
- Width=1”
- Label Caption untuk combo ini = Dari Tipe Jurnal
- Combo box 4:
- Name= sdTipeJurnal
- Row Source = SELECT TipeJurnal FROM tblTempTransJournal _Parent GROUP BY TipeJurnal HAVING TipeJurnal>=[ Forms]![frmPosting]![drTipeJurnal] ORDER BY TipeJurnal;
- Width=1”
- Label Caption untuk combo ini = Sampai Tipe Jurnal
- After Update = [Event Procedure]:
Private Sub drTipeJurnal_AfterUpdate()
Me.sdTipeJurnal.Requery
End Sub
- Buatlah tombol perintah dengan properti Name=Command1, Caption=Lihat Jurnal, dan On Click=[Event Procedure]:
Private Sub Command1_Click()
Me.frmPostingSubForm.Requery
End Sub
- Simpanlah lebih dahulu form yang telah dibuat ini dengan nama frmPosting, lalu bukalah dengan Form view.
|
Gambar 1 |
- Buatlah query dengan tblTempTransJournal_Parent sebagai sumber tabel dan simpanlah dengan nama qryPosting. Design view ada di Gambar 1, sedangkan SQL view seperti ini:
SELECT Proses, JurnalId, TipeJurnal, NoJurnal, Tgl Transaksi, Ref, NoRef, DibuatOleh, SetujuOleh FROM tblTemp TransJournal_Parent WHERE TipeJurnal Between [Forms]! [frmPosting]![drTipeJurnal] And [Forms]![frmPosting]! [sdTipeJurnal] AND TglTransaksi Between [Forms]! [frmPosting]![drTglTransaksi] And [Forms]![frmPosting]! [sdTglTransaksi];
- Pada Navigation pane, sorotlah query qryPosting di atas, lalu pada menu Create, klik More Forms dan pilih Datasheet untuk membuat subform dengan nama frmPostingSubForm.
- Melalui Design view, gantilah text box Proses dengan check box, dan isikan properti check box itu, Name= ProsesCheck. Tampilan terakhir frmPosting SubForm harus seperti Gambar 2.
|
Gambar 2 |
- Ubahlah tampilan frmPosting dari Form view ke Design view.
- Tariklah form frmPostingSubForm pada Navigation pane persis ke bawah tombol perintah Lihat Jurnal. Buanglah label dari frmPostingSubForm karena tidak diperlukan.
- Persis di bawah subform frmPostingSubForm, buatlah sebuah check box dengan properti Name=ProsesSemua dan After Update = [Event Procedure]:
Private Sub PilihSemua_AfterUpdate()
Application.SetOption ("Confirm Action Queries"), False
If Me.PilihSemua = -1 Then
DoCmd.RunSQL "UPDATE qryPosting SET qryPosting.Proses = -1;"
Me.PilihSemuaLbl.Caption = "Jangan Pilih Semua"
Else
DoCmd.RunSQL " UPDATE qryPosting SET qryPosting.Proses = 0;"
Me.PilihSemuaLbl.Caption = "Pilih Semua"
End If
Me.frmPostingSubForm.Requery
Application.SetOption ("Confirm Action Queries"), True
End Sub
- Buatlah tombol perintah dengan properti Name= Posting dan Caption= Posting ke Buku Besar, dan On Click=[Event Procedure]:
Private Sub Posting_Click()
Dim dbs As Database
Dim rst As Recordset
Dim NoJurnal As Integer
Dim dtTanggal As String
Me.frmPostingSubForm.Requery
Set dbs = CurrentDb
strSQL = "SELECT JurnalId, TipeJurnal, NoJurnal, TglTransaksi, Ref, NoRef, DibuatOleh, SetujuOleh, Proses " _
& "FROM tblTempTransJournal_Parent WHERE (TglTransaksi between #" & Me.drTglTransaksi & "# and #" _
& Me.sdTglTransaksi & "#) and (TipeJurnal between '" & Me.drTipeJurnal & "' and '" & Me.sdTipeJurnal & "')"
Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Application.SetOption ("Confirm Action Queries"), False
'Lakukan proses pengisian
Do While Not rst.EOF
NoJurnal = TampilkanNoJurnalPermanen(rst!TipeJurnal, rst!TglTransaksi)
If rst!Proses = -1 Then
If Round(DSum("[Debit]", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId) - _
DSum("[Kredit]", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId), 2) <> 0 Then
MsgBox "Total Debit tidak sama dengan Total Kredit: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If IsNull(rst!TipeJurnal) Or rst!TipeJurnal = "" Then
MsgBox "Tipe Jurnal tidak boleh kosong: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If DCount("*", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId & " and [Debit]=0 and [Kredit]=0") > 0 Then
MsgBox "Ada satu atau lebih ayat jurnal di mana kolom debit dan kredit tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If DCount("*", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId & " and [Debit]>0 and [Kredit]>0") > 0 Then
MsgBox "Ada satu atau lebih ayat jurnal di mana kolom debit dan kredit semuanya terisi: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If DCount("*", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId & " and [Deskripsi] is null") > 0 Then
MsgBox "Ada satu atau lebih ayat jurnal di mana Deskripsi tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If DCount("*", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId & " and [KodeRek] is null") > 0 Then
MsgBox "Ada satu atau lebih ayat jurnal di mana Kode Rekening Utama tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
If DCount("*", "tblTempTransJournal_Child", "[JurnalId]=" & rst!JurnalId) = 0 Then
MsgBox "Detail pada jurnal ini tidak boleh kosong: JurnalId #" & rst!JurnalId, vbOKOnly
Exit Sub
End If
End If
strSqla = "INSERT INTO tblPermTransJournal_Parent ( JurnalIdTemp, TipeJurnal, NoJurnal, TglTransaksi, Ref, NoRef, " _
& "DibuatOleh, SetujuOleh, Proses ) SELECT JurnalId, TipeJurnal, " _
& NoJurnal & ", " _
& "TglTransaksi, Ref, NoRef, DibuatOleh, '" & [TempVars]![IdPengguna] & "' as Setuju, 1 AS expr1 FROM tblTempTransJournal_Parent " _
& "WHERE JurnalId=" & rst!JurnalId & " and Proses =-1"
DoCmd.RunSQL strSqla
DoCmd.RunSQL "INSERT INTO tblPermTransJournal_Child ( RefDetail, KodeRek, Deskripsi, Deriv1, Deriv2, Kuantitas, SU, HargaSatuan, TotalJumlah, Debit, Kredit, JthTempo, JurnalId) SELECT " _
& "tblTempTransJournal_Child.RefDetail, tblTempTransJournal_Child.KodeRek, tblTempTransJournal_Child.Deskripsi, tblTempTransJournal_Child.Deriv1, tblTempTransJournal_Child.Deriv2, tblTempTransJournal_Child.Kuantitas, tblTempTransJournal_Child.SU, tblTempTransJournal_Child.HargaSatuan, tblTempTransJournal_Child.TotalJumlah, tblTempTransJournal_Child.Debit, tblTempTransJournal_Child.Kredit, tblTempTransJournal_Child.JthTempo, tblPermTransJournal_Parent.JurnalId " _
& "FROM tblPermTransJournal_Parent INNER JOIN tblTempTransJournal_Child ON tblPermTransJournal_Parent.JurnalIdTemp = tblTempTransJournal_Child.JurnalId " _
& "WHERE tblPermTransJournal_Parent. JurnalIdTemp=" & rst!JurnalId _
& " ORDER BY tblTempTransJournal_Child. NoUrut;"
DoCmd.RunSQL "DELETE tblTempTransJournal_Child.* FROM tblTempTransJournal_Child WHERE JurnalId = " & rst!JurnalId
DoCmd.RunSQL "DELETE tblTempTransJournal_Parent.* FROM tblTempTransJournal_Parent WHERE JurnalId = " & rst!JurnalId & " and Proses =-1"
rst.MoveNext
Loop
Application.SetOption ("Confirm Action Queries"), True
'penyelesaian
rst.Close
Set rst = Nothing
Me.frmPostingSubForm.Requery
End Sub
- Pada bagian form header dari frmPosting, sisipkan text box status login pengguna, tanggal, waktu, dan judul. Mengenai caranya, silakan lihat pada bab yang terdahulu.
- Aturlah properti form frmPosting:
- Record Selectors = No
- Navigation Buttons = No
- On Open=[Event Procedure]:
Private Sub Form_Open(Cancel As Integer)
Me.Caption = "Posting ke Buku Besar " & Nz(IdPerusahaan("Nama"), "")
If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True
End Sub
- On Close=[Event Procedure]:
Private Sub Form_Close()
Form_frmMenus.Visible = True
End Sub
|
Gambar 3 |
Hasil akhir form frmPosting dalam Design view tampak pada Gambar 3, sedangkan Gambar 4 adalah Form view. Pemrosesan jurnal secara batch, seperti telah dijelaskan dimuka, akan mengelompokkan jurnal berdasarkan urutan waktu tertentu dan tipe jurnal tertentu, seperti tampak pada Gambar 4.
|
Gambar 4 |
Pada saat menekan tombol Posting ke Buku Besar, Access akan melakukan pemeriksaan satu per satu, apakah jurnal yang masuk dalam daftar dapat diproses atau tidak. Pemeriksaan itu dilakukan melalui prosedur Private Sub Posting_Click(). Jika ada ketidakberesan, maka Access akan menampilkan pesan kesalahan, dan proses dibatalkan. Sebaliknya, jika pemeriksaan Jurnal Transaksi Temporer tidak menemukan ketidakberesan, maka jurnal akan diproses dan dipindahkan ke (tabel) Jurnal Transaksi Permanen, data Jurnal Transaksi Temporer yang sudah diposting kemudian dihapus. Di Jurnal Transaksi Permanen, jurnal sudah dikunci sehingga tidak dapat diedit dan dihapus. Jika ingin melakukan pembetulan, kita harus membuat jurnal baru.
Comments
Post a Comment