Skip to main content

Memasukkan Data ke Tabel Menggunakan Class Module di Form Periode

Form periode digunakan untuk memasukkan data yang berhubungan dengan periode akuntansi ke dalam tabel tblPeriode. Tidak seperti form Identitas Perusahaan yang hanya terdiri dari satu record dan dapat diedit sewaktu-waktu, form Periode dapat terdiri dari banyak record dan untuk melakukan pengeditan tidak boleh dilakukan sembarangan. Form Periode dilengkapi dengan pengecekan apakah data yang kita masukkan sudah valid atau belum. Bila data yang dimasukkan belum valid, maka data itu tidak akan tersimpan.

Cara pembuatan form pada contoh ini sama dengan pada contoh postingan sebelumnya yang berjudul Memasukkan Data ke Tabel Menggunakan Class Module di Form Identitas Perusahaan, langkah 1 sampai dengan langkah 6, tetapi menggunakan field dan properti yang berkaitan dengan tblPeriode. Tampilan Design view dari form untuk yang bersumber dari tblPeriode adalah seperti gambar berikut ini.


Setelah itu, isikan kode berikut ini pada VBA editor untuk Form_frmPeriode:
'------------------------------------------
' VERSION 1.0 CLASS
' Attribute VB_Name = "Form_frmPeriode"
' 
' Author: Bambang Subroto, 
' email: bambang.subro@gmail.com
' 
'------------------------------------------
Option Compare Database
Dim strPgnId As String
Dim dtTglAwalThn, dtTglAkhirThn, dtTglAwalBulan, dtTglAkhirBulan, dtTglAwalBulanBerikut, dtTglAkhirBulanBerikut As Date
Dim dtTglAwalBulanSebelum, dtTglAkhirBulanSebelum, dtWaktu As Date
Dim dtTglAwalThnSebelum, dtTglAkhirThnSebelum, dtTglAwalBulanThnSebelum, dtTglAkhirBulanThnSebelum As Date
Dim dtTglAwalThnBerikut, dtTglAkhirThnBerikut, dtTglAwalBulanThnBerikut, dtTglAkhirBulanThnBerikut As Date
Dim intStatusThnBerjalan, intStatusThnSebelum As Integer
Function BandingkanData()
'Memberikan nilai pembanding pada field setiap kali terjadi perubahan data yang tersimpan
  dtTglAwalThn = Nz(Me.TglAwalThn, "")
  dtTglAkhirThn = Nz(Me.TglAkhirThn, "")
  dtTglAwalBulan = Nz(Me.TglAwalBulan, "")
  dtTglAkhirBulan = Nz(Me.TglAkhirBulan, "")
  dtTglAwalBulanSebelum = Nz(Me.TglAwalBulanSebelum, "")
  dtTglAkhirBulanSebelum = Nz(Me.TglAkhirBulanSebelum, "")
  dtTglAwalBulanBerikut = Nz(Me.TglAwalBulanBerikut, "")
  dtTglAkhirBulanBerikut = Nz(Me.TglAkhirBulanBerikut, "")
  dtTglAwalThnSebelum = Nz(Me.TglAwalThnSebelum, "")
  dtTglAkhirThnSebelum = Nz(Me.TglAkhirThnSebelum, "")
  dtTglAwalBulanThnSebelum = Nz(Me.TglAwalBulanThnSebelum, "")
  dtTglAkhirBulanThnSebelum = Nz(Me.TglAkhirBulanThnSebelum, "")
  dtTglAwalThnBerikut = Nz(Me.TglAwalThnBerikut, "")
  dtTglAkhirThnBerikut = Nz(Me.TglAkhirThnBerikut, "")
  dtTglAwalBulanThnBerikut = Nz(Me.TglAwalBulanThnBerikut, "")
  dtTglAkhirBulanThnBerikut = Nz(Me.TglAkhirBulanThnBerikut, "")
  intStatusThnBerjalan = Me.StatusThnBerjalan
  intStatusThnSebelum = Me.StatusThnSebelum
End Function
Private Sub Form_Current()
  If Me.StatusThnBerjalan = 2 Then Me.AllowEdits = False
End Sub

Private Sub Simpan_Click()
'Menyimpan data dengan menggunakan Database Recordset. Jumlah record yang tersimpan
'hanya satu untuk kemudian akan diedit bila ada perubahan record.
Dim dbs As Database
Dim rs As Recordset
Dim strMsg As String
  strMsg = ""
  If Me.TglAkhirThn < Me.TglAwalThn Then
    strMsg = "Tanggal akhir tahun tidak boleh di bawah tanggal " & _
    Format(Me.TglAwalThn, "dd mmm yyyy")
    Me.TglAkhirThn.SetFocus
  ElseIf Me.TglAwalThnBerikut < Me.TglAwalThn Then
    strMsg = "Tanggal awal tahun untuk periode akuntasi berikutnya tidak boleh di bawah tanggal" & _
    Format(Me.TglAwalThn, "dd mmm yyyy")
    Me.TglAwalThnBerikut.SetFocus
  ElseIf Me.TglAkhirBulanThnSebelum <> Me.TglAkhirThnSebelum Then
    strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus sama dengan tanggal akhir tahun sebelumnya " & _
    Format(Me.TglAkhirThnSebelum, "dd mmm yyyy")
    Me.TglAkhirBulanThnSebelum.SetFocus
  ElseIf Me.TglAkhirBulanThnSebelum < Me.TglAwalBulanThnSebelum Then
    strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus di atas tanggal awal bulan " & _
    Format(Me.TglAwalBulanThnSebelum, "dd mmm yyyy")
    Me.TglAkhirBulanThnSebelum.SetFocus
  ElseIf Me.TglAkhirBulanThnSebelum + 1 <> Me.TglAwalThn Then
    strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus berlanjut ke tanggal awal tahun berjalan " & _
    Format(Me.TglAwalThn, "dd mmm yyyy")
    Me.TglAkhirBulanThnSebelum.SetFocus
  ElseIf Me.TglAwalBulanThnBerikut > Me.TglAkhirBulanThnBerikut Then
    strMsg = "Tanggal akhir bulan untuk periode akuntasi berikutnya harus di atas tanggal awal bulan " & _
    Format(Me.TglAwalBulanThnBerikut, "dd mmm yyyy")
    Me.TglAkhirBulanThnBerikut.SetFocus
  ElseIf Me.TglAwalBulanThnBerikut <> Me.TglAwalThnBerikut Then
    strMsg = "Tanggal awal bulan untuk periode akuntasi berikutnya harus sama dengan tanggal awal tahun berikut " & _
    Format(Me.TglAwalThnBerikut, "dd mmm yyyy")
    Me.TglAwalBulanThnBerikut.SetFocus
  ElseIf Me.TglAwalThnSebelum > Me.TglAwalThn Then
    strMsg = "Tanggal awal tahun untuk periode akuntasi sebelumnya tidak boleh di atas " & _
    Format(Me.TglAwalThn, "dd mmm yyyy")
    Me.TglAwalThnSebelum.SetFocus
  ElseIf (Me.TglAwalBulan < Me.TglAwalThn Or Me.TglAwalBulan > Me.TglAkhirThn) Then _
    strMsg = "Tanggal awal bulan harus berada di antara tanggal " _
    & Format(Me.TglAwalThn, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")
    Me.TglAwalBulan.SetFocus
  ElseIf Me.TglAkhirBulan > Me.TglAkhirThn Or Me.TglAkhirBulan < Me.TglAwalBulan Then _
    strMsg = "Tanggal akhir bulan harus berada di antara tanggal " _
    & Format(Me.TglAwalBulan, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")
    Me.TglAkhirBulan.SetFocus
  ElseIf Me.TglAwalBulanBerikut <> Me.TglAkhirBulan + 1 Or Me.TglAwalBulanBerikut > Me.TglAkhirThn Then _
     strMsg = "Tanggal awal bulan berikut harus berada di antara tanggal " _
    & Format(Me.TglAkhirBulan + 1, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")
    Me.TglAwalBulanBerikut.SetFocus
  ElseIf Me.TglAkhirBulanBerikut < Me.TglAwalBulanBerikut Or Me.TglAkhirBulanBerikut > Me.TglAkhirThn Then _
     strMsg = "Tanggal akhir bulan berikut harus berada di antara tanggal " _
    & Format(Me.TglAwalBulanBerikut, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")
    Me.TglAkhirBulanBerikut.SetFocus
  End If
  If strMsg <> "" Then
    MsgBox strMsg
    Exit Sub
  End If
  
  Set dbs = Application.CurrentDb
  Set rs = CurrentDb.OpenRecordset("tblPeriode")
  'Jika tabel belum berisi record, maka tambahkan record baru (AddNew) untuk disimpan.
  'Jika sudah ada satu record tersimpan, maka tampilkan record untuk diedit.
  If DCount("*", "tblPeriode") = 0 Then
    rs.AddNew
  Else
    Do While Not rs.EOF
      If rs!StatusThnBerjalan = 0 Then Exit Do
      rs.MoveNext
    Loop
    rs.Edit
  End If
  If rs!StatusThnBerjalan = 0 Then
    rs!TglAwalThn = Me.TglAwalThn
    rs!TglAkhirThn = Me.TglAkhirThn
    rs!TglAwalBulan = Me.TglAwalBulan
    rs!TglAkhirBulan = Me.TglAkhirBulan
    rs!TglAwalBulanSebelum = Me.TglAwalBulanSebelum
    rs!TglAkhirBulanSebelum = Me.TglAkhirBulanSebelum
    rs!TglAwalBulanBerikut = Me.TglAwalBulanBerikut
    rs!TglAkhirBulanBerikut = Me.TglAkhirBulanBerikut
    rs!StatusThnBerjalan = Me.StatusThnBerjalan
    rs!TglAwalThnSebelum = Me.TglAwalThnSebelum
    rs!TglAkhirThnSebelum = Me.TglAkhirThnSebelum
    rs!TglAwalBulanThnSebelum = Me.TglAwalBulanThnSebelum
    rs!TglAkhirBulanThnSebelum = Me.TglAkhirBulanThnSebelum
    rs!StatusThnSebelum = Me.StatusThnSebelum
    rs!TglAwalThnBerikut = Me.TglAwalThnBerikut
    rs!TglAkhirThnBerikut = Me.TglAkhirThnBerikut
    rs!TglAwalBulanThnBerikut = Me.TglAwalBulanThnBerikut
    rs!TglAkhirBulanThnBerikut = Me.TglAkhirBulanThnBerikut
    rs!PgnId = [TempVars]![IdPengguna]
    rs!Waktu = Now()
    Me.Waktu = rs!Waktu
    rs.Update
  End If
  'Membandingkan record yang sudah ada dan menyimpannya dalam memori sementara
  BandingkanData
  
  rs.Close
  Set rs = Nothing
  Me.PgnId = [TempVars]![IdPengguna]
  Me.PgnId.Requery
  Me.Waktu.Requery
  
  MsgBox "Data telah tersimpan.", vbOKOnly
End Sub
Private Sub Form_Open(Cancel As Integer)
'Mengisikan field yang akan ditampilkan di layar dengan field yang tersimpan
Dim dbs As Database
Dim rst As Recordset
  If IjinDitolak(Me.Name) Then
    MsgBox TampilkanLogin & " tidak bisa mengakses menu/form ini"
    Cancel = True
    Exit Sub
  End If
  Set dbs = Application.CurrentDb
  Set rst = CurrentDb.OpenRecordset("tblPeriode")
  Me.Caption = "Periode Akuntansi " & Nz(IdPerusahaan("Nama"), "")
  If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True

'Lakukan proses pengisian
  Do While Not rst.EOF
    If rst!StatusThnBerjalan = 0 Then
      Me.TglAwalThn = rst!TglAwalThn
      Me.TglAkhirThn = rst!TglAkhirThn
      Me.TglAwalBulan = rst!TglAwalBulan
      Me.TglAkhirBulan = rst!TglAkhirBulan
      Me.TglAwalBulanSebelum = rst!TglAwalBulanSebelum
      Me.TglAkhirBulanSebelum = rst!TglAkhirBulanSebelum
      Me.TglAwalBulanBerikut = rst!TglAwalBulanBerikut
      Me.TglAkhirBulanBerikut = rst!TglAkhirBulanBerikut
      Me.StatusThnBerjalan = rst!StatusThnBerjalan
      Me.TglAwalThnSebelum = rst!TglAwalThnSebelum
      Me.TglAkhirThnSebelum = rst!TglAkhirThnSebelum
      Me.TglAwalBulanThnSebelum = rst!TglAwalBulanThnSebelum
      Me.TglAkhirBulanThnSebelum = rst!TglAkhirBulanThnSebelum
      Me.StatusThnSebelum = rst!StatusThnSebelum
      Me.TglAwalThnBerikut = rst!TglAwalThnBerikut
      Me.TglAkhirThnBerikut = rst!TglAkhirThnBerikut
      Me.TglAwalBulanThnBerikut = rst!TglAwalBulanThnBerikut
      Me.TglAkhirBulanThnBerikut = rst!TglAkhirBulanThnBerikut
      Me.PgnId = rst!PgnId
      Me.Waktu = rst!Waktu
      
      BandingkanData
      Exit Sub
    End If
      
    rst.MoveNext
  Loop
'penyelesaian
  rst.Close
  Set rst = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Pada saat form akan ditutup, jika ada nilai field yang berbeda dengan nilai field yang tersimpan
'di memori sementara (atau ada perubahan data),tampilkan pesan peringatan apakah data yang tersimpan
'di memori sementara tidak perlu disimpan di database dan form langsung ditutup.
  If Me.TglAwalThn <> dtTglAwalThn Or Me.TglAkhirThn <> dtTglAkhirThn Or _
     Me.TglAwalBulan <> dtTglAwalBulan Or Me.TglAkhirBulan <> dtTglAkhirBulan Or _
     Me.TglAwalBulanBerikut <> dtTglAwalBulanBerikut Or Me.TglAkhirBulanBerikut <> dtTglAkhirBulanBerikut Then
      If MsgBox("Ada data yang berubah. Apakah anda ingin keluar tanpa manyimpan data lebih dahulu?", vbYesNo) = vbYes Then
          Cancel = False
      Else
          Cancel = True
      End If
  End If
End Sub
Private Sub Form_Close()
  Form_frmMenus.Visible = True
End Sub
Private Sub TglAwalBulan_AfterUpdate()
  If Me.TglAwalBulan = Me.TglAwalThn Then
    Me.TglAwalBulanSebelum = Me.TglAwalBulan
    Me.TglAwalBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 1, Day(Me.TglAwalBulan))
    Me.TglAkhirBulan = Me.TglAwalBulanBerikut - 1
    Me.TglAkhirBulanSebelum = Me.TglAkhirBulan
    Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 2, Day(Me.TglAwalBulan)) - 1
    Me.TglAwalBulanThnSebelum = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) - 1, Day(Me.TglAwalBulan))
    Me.TglAkhirBulanThnSebelum = Me.TglAwalBulan - 1
    Me.TglAwalBulanThnBerikut = DateSerial(Year(Me.TglAwalBulan) + 1, Month(Me.TglAwalBulan), Day(Me.TglAwalBulan))
    Me.TglAkhirBulanThnBerikut = DateSerial(Year(Me.TglAwalBulanBerikut) + 1, Month(Me.TglAwalBulanBerikut), Day(Me.TglAwalBulanBerikut)) - 1
  Else
    Me.TglAwalBulanSebelum = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) - 1, Day(Me.TglAwalBulan))
    Me.TglAkhirBulanSebelum = Me.TglAwalBulan - 1
    Me.TglAwalBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 1, Day(Me.TglAwalBulan))
    Me.TglAkhirBulan = Me.TglAwalBulanBerikut - 1
    Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 2, Day(Me.TglAwalBulan)) - 1
    If Year(Me.TglAwalBulanBerikut) <> Year(Me.TglAwalThn) Then
      Me.TglAwalBulanThnBerikut = Me.TglAwalBulanBerikut
      Me.TglAwalBulanBerikut = Me.TglAwalBulan
    End If
    If Year(Me.TglAkhirBulanBerikut) <> Year(Me.TglAwalThn) Then
      Me.TglAkhirBulanThnBerikut = Me.TglAkhirBulanBerikut
      Me.TglAkhirBulanBerikut = Me.TglAkhirBulan
    End If
  End If
    
End Sub
Private Sub TglAkhirBulan_AfterUpdate()
If Me.TglAkhirBulan = Me.TglAkhirThn Then
  Me.TglAkhirBulanBerikut = Me.TglAkhirBulan
  Me.TglAwalBulanBerikut = Me.TglAwalBulan
Else
  Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAkhirBulan), Month(Me.TglAkhirBulan) + 1, Day(Me.TglAkhirBulan))
End If
  Me.TglAkhirBulanSebelum = Me.TglAwalBulan - 1
End Sub
Private Sub TglAwalThn_AfterUpdate()
  Me.TglAwalThnSebelum = DateSerial(Year(Me.TglAwalThn) - 1, Month(Me.TglAwalThn), Day(Me.TglAwalThn))
  Me.TglAwalThnBerikut = DateSerial(Year(Me.TglAwalThn) + 1, Month(Me.TglAwalThn), Day(Me.TglAwalThn))
End Sub
Private Sub TglAkhirThn_AfterUpdate()
  Me.TglAkhirThnSebelum = DateSerial(Year(Me.TglAkhirThn) - 1, Month(Me.TglAkhirThn), Day(Me.TglAkhirThn))
  Me.TglAkhirThnBerikut = DateSerial(Year(Me.TglAkhirThn) + 1, Month(Me.TglAkhirThn), Day(Me.TglAkhirThn))
End Sub

Tampilan akhir form beserta record yang tersimpan tampak seperti gambar di atas. Kita dapat menambahkan tombol yang diperlukan seperti preview, print, dan sebagainya.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access