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