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