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:
Tampilan akhir form beserta record yang tersimpan tampak seperti gambar di atas. Kita dapat menambahkan tombol yang diperlukan seperti preview, print, dan sebagainya.
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
Post a Comment