Skip to main content

Pemrosesan Secara Batch (Batch Processing)

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.
  1. Buatlah form dengan menggunakan Blank Form.
  2. Pada bagian detail, taruhlah control berupa 4 buah combo box dengan properti sebagai berikut:
    1. Combo box 1:
      1. Name=drTgllTransaksi
      2. Row Source = SELECT TglTransaksi FROM tblTempTrans Journal_Parent GROUP BY TglTransaksi HAVING TglTransaksi Between CekPeriode("TglAwalBulan") And CekPeriode( "TglAkhirBulan");
      3. Format = Short Date
      4. Bound Column=1
      5. Label Caption untuk combo ini = Dari Tanggal
      6. After Update = [Event Procedure]:
        1. <pre class="vb" name="code">Private Sub drTglTransaksi_AfterUpdate()  
        2.   Me.sdTglTransaksi.Requery  
        3.   Me.drTipeJurnal.Requery  
        4.   Me.sdTipeJurnal.Requery  
        5. End Sub</pre>  
    2. Combo box 2:
      1. Name=sdTgllTransaksi
      2. Row Source = SELECTTglTransaksi FROM tblTempTrans Journal_Parent GROUP BY TglTransaksi HAVING TglTransaksi Between [Forms]![frmPosting]![drTglTransaksi] And CekPeriode( "TglAkhirBulan");
      3. Format = Short Date
      4. Bound Column=1
      5. Label Caption untuk combo ini = Sampai Tanggal
      6. After Update = [Event Procedure]:
        1. Private Sub sdTglTransaksi_AfterUpdate()  
        2.    Me.drTipeJurnal.Requery  
        3.    Me.sdTipeJurnal.Requery  
        4. End Sub  
    3. Combo box 3:
      1. Name= drTipeJurnal
      2. Row Source = SELECT TipeJurnal FROM tblTempTrans Journal_Parent GROUP BY TipeJurnal ORDER BY TipeJurnal;
      3. Width=1”
      4. Label Caption untuk combo ini = Dari Tipe Jurnal
      5. Combo box 4:
      6. Name= sdTipeJurnal
      7. Row Source = SELECT TipeJurnal FROM tblTempTransJournal _Parent GROUP BY TipeJurnal HAVING TipeJurnal>=[ Forms]![frmPosting]![drTipeJurnal] ORDER BY TipeJurnal;
      8. Width=1”
      9. Label Caption untuk combo ini = Sampai Tipe Jurnal
      10. After Update = [Event Procedure]:
        1. Private Sub drTipeJurnal_AfterUpdate()  
        2.         Me.sdTipeJurnal.Requery  
        3. End Sub  
  3. Buatlah tombol perintah dengan properti Name=Command1, Caption=Lihat Jurnal, dan On Click=[Event Procedure]:
    1. Private Sub Command1_Click()  
    2.    Me.frmPostingSubForm.Requery  
    3. End Sub  
  4. Simpanlah lebih dahulu form yang telah dibuat ini dengan nama frmPosting, lalu bukalah dengan Form view.
  5. Gambar 1
  6. 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];
  7. Pada Navigation pane, sorotlah query qryPosting di atas, lalu pada menu Create, klik More Forms dan pilih Datasheet untuk membuat subform dengan nama frmPostingSubForm.
  8. 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
  9. Ubahlah tampilan frmPosting dari Form view ke Design view.
  10. Tariklah form frmPostingSubForm pada Navigation pane persis ke bawah tombol perintah Lihat Jurnal. Buanglah label dari frmPostingSubForm karena tidak diperlukan.
  11. Persis di bawah subform frmPostingSubForm, buatlah sebuah check box dengan properti Name=ProsesSemua dan After Update = [Event Procedure]:
    1. Private Sub PilihSemua_AfterUpdate()  
    2.   Application.SetOption ("Confirm Action Queries"), False   
    3.   If Me.PilihSemua = -1 Then  
    4.     DoCmd.RunSQL "UPDATE qryPosting SET qryPosting.Proses = -1;"  
    5.     Me.PilihSemuaLbl.Caption = "Jangan Pilih Semua"  
    6.   Else  
    7.     DoCmd.RunSQL " UPDATE qryPosting SET qryPosting.Proses = 0;"  
    8.     Me.PilihSemuaLbl.Caption = "Pilih Semua"  
    9.   End If  
    10.   Me.frmPostingSubForm.Requery  
    11.   Application.SetOption ("Confirm Action Queries"), True  
    12. End Sub  
  12. Buatlah tombol perintah dengan properti Name= Posting dan Caption= Posting ke Buku Besar, dan On Click=[Event Procedure]:
    1. Private Sub Posting_Click()  
    2.   Dim dbs As Database  
    3.   Dim rst As Recordset  
    4.   Dim NoJurnal As Integer  
    5.   Dim dtTanggal As String  
    6.   Me.frmPostingSubForm.Requery  
    7.   Set dbs = CurrentDb  
    8.   strSQL = "SELECT JurnalId, TipeJurnal, NoJurnal, TglTransaksi, Ref, NoRef, DibuatOleh, SetujuOleh, Proses " _  
    9.           & "FROM tblTempTransJournal_Parent WHERE (TglTransaksi between #" & Me.drTglTransaksi & "# and #" _  
    10.           & Me.sdTglTransaksi & "#) and (TipeJurnal between '" & Me.drTipeJurnal & "' and '" & Me.sdTipeJurnal & "')"  
    11.   Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)  
    12.   Application.SetOption ("Confirm Action Queries"), False   
    13. 'Lakukan proses pengisian  
    14.   Do While Not rst.EOF  
    15.   NoJurnal = TampilkanNoJurnalPermanen(rst!TipeJurnal, rst!TglTransaksi)  
    16.   If rst!Proses = -1 Then  
    17.     If Round(DSum("[Debit]""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId) - _  
    18.     DSum("[Kredit]""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId), 2) <> 0 Then  
    19.       MsgBox "Total Debit tidak sama dengan Total Kredit: JurnalId #" & rst!JurnalId, vbOKOnly  
    20.       Exit Sub  
    21.     End If  
    22.     If IsNull(rst!TipeJurnal) Or rst!TipeJurnal = "" Then  
    23.       MsgBox "Tipe Jurnal tidak boleh kosong: JurnalId #" & rst!JurnalId, vbOKOnly  
    24.       Exit Sub  
    25.     End If  
    26.     If DCount("*""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId & " and [Debit]=0 and [Kredit]=0") > 0 Then  
    27.       MsgBox "Ada satu atau lebih ayat jurnal di mana kolom debit dan kredit tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly  
    28.       Exit Sub  
    29.     End If  
    30.     If DCount("*""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId & " and [Debit]>0 and [Kredit]>0") > 0 Then  
    31.       MsgBox "Ada satu atau lebih ayat jurnal di mana kolom debit dan kredit semuanya terisi: JurnalId #" & rst!JurnalId, vbOKOnly  
    32.       Exit Sub  
    33.     End If  
    34.     If DCount("*""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId & " and [Deskripsi] is null") > 0 Then  
    35.       MsgBox "Ada satu atau lebih ayat jurnal di mana Deskripsi tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly  
    36.       Exit Sub  
    37.     End If  
    38.     If DCount("*""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId & " and [KodeRek] is null") > 0 Then  
    39.       MsgBox "Ada satu atau lebih ayat jurnal di mana Kode Rekening Utama tidak terisi: JurnalId #" & rst!JurnalId, vbOKOnly  
    40.       Exit Sub  
    41.     End If  
    42.     If DCount("*""tblTempTransJournal_Child""[JurnalId]=" & rst!JurnalId) = 0 Then  
    43.       MsgBox "Detail pada jurnal ini tidak boleh kosong: JurnalId #" & rst!JurnalId, vbOKOnly  
    44.       Exit Sub  
    45.     End If  
    46.   End If  
    47.   strSqla = "INSERT INTO tblPermTransJournal_Parent ( JurnalIdTemp, TipeJurnal, NoJurnal, TglTransaksi, Ref, NoRef, " _  
    48.           & "DibuatOleh, SetujuOleh, Proses ) SELECT JurnalId, TipeJurnal, " _  
    49.           & NoJurnal & ", " _  
    50.           & "TglTransaksi, Ref, NoRef, DibuatOleh, '" & [TempVars]![IdPengguna] & "' as Setuju, 1 AS expr1 FROM tblTempTransJournal_Parent " _  
    51.           & "WHERE JurnalId=" & rst!JurnalId & " and Proses =-1"  
    52.   DoCmd.RunSQL strSqla  
    53.   DoCmd.RunSQL "INSERT INTO tblPermTransJournal_Child ( RefDetail, KodeRek, Deskripsi, Deriv1, Deriv2, Kuantitas, SU, HargaSatuan, TotalJumlah, Debit, Kredit, JthTempo, JurnalId) SELECT " _  
    54.              & "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 " _  
    55.              & "FROM tblPermTransJournal_Parent INNER JOIN tblTempTransJournal_Child ON tblPermTransJournal_Parent.JurnalIdTemp = tblTempTransJournal_Child.JurnalId " _  
    56.              & "WHERE tblPermTransJournal_Parent. JurnalIdTemp=" & rst!JurnalId _  
    57.              & " ORDER BY tblTempTransJournal_Child. NoUrut;"  
    58.   DoCmd.RunSQL "DELETE tblTempTransJournal_Child.* FROM tblTempTransJournal_Child WHERE JurnalId = " & rst!JurnalId  
    59.   DoCmd.RunSQL "DELETE tblTempTransJournal_Parent.* FROM tblTempTransJournal_Parent WHERE JurnalId = " & rst!JurnalId & " and Proses =-1"  
    60.    rst.MoveNext  
    61.   Loop  
    62.   Application.SetOption ("Confirm Action Queries"), True   
    63. 'penyelesaian  
    64.   rst.Close  
    65.   Set rst = Nothing  
    66.   Me.frmPostingSubForm.Requery  
    67. End Sub  
  13. Pada bagian form header dari frmPosting, sisipkan text box status login pengguna, tanggal, waktu, dan judul. Mengenai caranya, silakan lihat pada bab yang terdahulu.
  14. Aturlah properti form frmPosting:
    1. Record Selectors = No
    2. Navigation Buttons = No
    3. On Open=[Event Procedure]:
      1. Private Sub Form_Open(Cancel As Integer)  
      2.    Me.Caption = "Posting ke Buku Besar " & Nz(IdPerusahaan("Nama"), "")  
      3.    If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True  
      4. End Sub  
    4. On Close=[Event Procedure]:
      1. Private Sub Form_Close()  
      2.     Form_frmMenus.Visible = True  
      3. 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

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access