Kali ini, kita akan membuat form dengan tblMenus sebagai record source. Tampilan Design view tampak seperti Gambar 1, sedangkan tampilan dalam bentuk Form view ada di Gambar 2 sebelah kanan. Simpanlah form itu dengan nama frmMenuPengaturan. Selanjutnya, hilangkan properti Record Selectors dan Navigation Buttons agar form lebih enak dilihat.
Penjelasan dari masing-masing field/form control adalah sebagai berikut:
Untuk memudahkan pemahaman, kita dapat memasukkan data pada Tabel di atas ke dalam form frmMenuPengaturan. Kolom IdForm berisi nama-nama form yang sudah kita buat. Kecuali nilai Null (kosong), IdForm ini tidak boleh ada duplikasi nama, karena akan mengacaukan menu yang akan dibuka. Kolom NamaForm adalah antarmuka yang digunakan untuk memudahkan kita membuka form. Kolom NamaIjin adalah persyaratan yang diperlukan untuk membuka form pada IdForm. Tanda “,” berarti semua persyaratan harus dipenuhi, sedangkan tanda “|” berarti salah satu persyaratan bisa dipenuhi. Kolom Induk menunjukkan pada Id nomor berapakah sebuah form/menu/submenu itu menjadi bagian dari menu lainnya. Sebagai contoh, nilai 0 berarti suatu menu berada di Menu Utama, sedangkan nilai 1 berarti menu itu merupakan bagian dari menu Id 1 yang bernama Rekening. Kolom NoUrut adalah urutan yang akan ditampilkan pada menu/submenu.
Membuat Form Dialog Daftar Ijin
Form dialog daftar ijin berisi field yang berasal dari tblAdminPengguna dengan dua huruf pertama berawalan “p_”. Kode “p_” ini merupakan tanda bahwa field itu adalah sebuah syarat untuk memperoleh ijin mengakses form tertentu atau melakukan tindakan tertentu. Seperti telah dijelaskan melalui posting dengan judul Membuat Form Admintrasi Pengguna dan tabel di atas, pengguna yang membuka form tertentu harus memperoleh ijin akses tertentu dari administrator. Field-field dengan tanda “p_” itulah yang akan ditampilkan.
Buatlah form kosong dengan Design view seperti Gambar 3 di atas. Form control yang diperlukan adalah:
Simpanlah form itu dengan nama frmMenuPermisi. Setelah itu, salinlah kode VBA di bawah ini ke dalam modul form yang barus saja disimpan. Form view dari frmMenuPermisi tampak pada Gambar 4.
Gambar 1 |
- Text box Id adalah nomor identitas menu yang merupakan kunci utama (primary key).
- Combo box IdForm adalah form control yang properti Row Source-nya diambil dari sistem yang dimiliki oleh Access. Fungsinya untuk menampilkan nama form seperti yang ada pada Navigation pane. Row source IdForm itu adalah query dari tabel sistem, bernama MsysObjects, yang tersembunyi. Query lengkapnya seperti ini:
SELECT Name FROM MsysObjects WHERE Left$([Name],1)<>"~" AND Type=-32768 ORDER BY MsysObjects.Name;
Ada banyak tipe object di tabel MsysObjects dan -32768 adalah tipe form pada tabel MsysObjects. Tipe lain tidak diperlukan karena kita hanya ingin mengelola menu melalui form yang ada di Navigation pane.
- Text box NamaForm digunakan untuk menampilkan nama yang akan ditampilkan di menu sebagai antar muka pengguna. Tujuannya, untuk memudahkan pengguna mengingat menu.
- Text box NamaIjin adalah form control yang nilainya, benar (diijinkan) atau salah (ditolak), diambil dari tblAdminPengguna. Field ini digunakan sebagai variabel syarat yang menentukan hak akses seorang pengguna terhadap form atau tombol. Seorang pengguna yang ingin mengakses form tertentu atau melakukan tindakan tertentu harus mempunyai paling tidak satu ijin akses yang tercantum di tblAdminPengguna. Bila ijin itu tidak ada, maka form tidak akan ditampilkan di menu atau form tidak bisa dibuka. Isi dari NamaIjin ini mempunyai ciri yang unik, yaitu diawai dengan “p_” dan hanya terdiri dari tanda “,” (koma) atau “|” (pipa) sebagai pemisah.
Text box NamaIjin ini tidak bisa kita edit secara manual, tetapi harus melalui form dialog. Jadi, untuk mengedit, menambahkan, atau mengurangkan ijin apa saja yang diperbolehkan, buatlah tombol perintah seperti pada gambar di atas (dengan tanda “+/-“ pada Caption) dengan properti Name = LihatDaftar dan Event On Click = =BukaForm("frmMenu Permisi"). Bila tombol perintah “+/-“ diklik, maka akan muncul form yang berisi daftar ijin yang bisa diaplikasikan ke dalam form. Tampilan form itu sendiri tampak seperti pada Gambar 4.
Ijin yang akan diisikan ke dalam field NamaIjin minimal terdiri dari satu. Bila berisi dua atau lebih, maka pemisahan harus menggunakan tanda pisah seperti telah disebutkan di atas. Bila ada dua atau lebih ijin yang dipisahkan dengan tanda koma, berarti, untuk membuka sebuah form, dua atau lebih ijin itu harus dipenuhi. Bila ada dua atau lebih ijin yang dipisahkan dengan tanda pipa, berarti, untuk membuka sebuah form, minimal harus memenuhi salah satu ijin yang ada. Contohnya seperti Gambar 2:
Gambar 2
- Combo box Induk digunakan bila sebuah form akan ditampilkan di submenu. Pada gambar di atas, tampak bahwa Menu Induk Jurnal Permanen adalah submenu Jurnal (gambar sebelah kiri), yang terdiri dari beberapa menu.
- Text box No Urut digunakan untuk mengurutkan menu/submenu. Seperti tampak pada gambar, Jurnal Permanen berada pada nomor 2.
Id | IdForm | NamaForm | NamaIjin | Induk | No Urut |
---|---|---|---|---|---|
1 | Rekening | p_RekUtama|p_RekDeriv1| p_RekDeriv2 | 0 | 1 | |
2 | frmRekUtama | Kode Rekening Utama | p_RekUtama | 1 | 1 |
3 | frmRekDerivatif1 | Kode Rekening Derivatif 1 | p_RekDeriv1 | 1 | 2 |
4 | frmRekDerivatif2 | Kode Rekening Derivatif 2 | p_RekDeriv2 | 1 | 3 |
5 | Administrasi Sistem | p_IdPerusahaan| p_AdminPengguna| p_Periode|p_SistemPreferens | 0 | 2 | |
6 | frmAdminPengguna | Admin Pengguna | p_AdminPengguna | 5 | 1 |
7 | frmIdentitasPerusahaan | Identitas Perusahaan | p_IdPerusahaan | 5 | 2 |
8 | frmPeriode | Periode Akuntansi | p_Periode | 5 | 3 |
9 | frmSistemPref | Sistem Preferens | p_SistemPreferens | 5 | 4 |
10 | Jurnal | p_JurnalTempEdit| p_JurnalTempLihat| p_JurnalTempPosting| p_JurnalPermEdit| p_JurnalPermLihat | 0 | 3 | |
11 | frmTempTransJournal_ Parent | Jurnal Transaksi Temporer | p_JurnalTempEdit| p_JurnalTempLihat| p_JurnalTempPosting | 10 | 1 |
12 | frmPermTransJournal_ Parent | Jurnal Transaksi Permanen | p_JurnalPermEdit| p_JurnalPermLihat | 10 | 2 |
13 | frmPosting | Posting Batch | p_JurnalTempPosting | 10 | 3 |
14 | frmJurnalPenutup | Jurna Penutup | p_JurnalTempEdit| p_JurnalTempPosting | 10 | 4 |
15 | Budget | p_BudgetLihat|p_BudgetEdit| p_BudgetImpor | 0 | 4 | |
16 | frmBudget | Pemasukkan Data Budget | p_BudgetEdit | 15 | 1 |
17 | frmBudgetReport | Laporan Budget Trend Bulanan | p_BudgetLihat|p_BudgetEdit | 15 | 2 |
18 | frmImporBudget | Impor Data Budget | p_BudgetImpor | 15 | 3 |
19 | Laporan | p_NeracaLajur|p_BukuBesar| p_ResponBiaya | 0 | 5 | |
20 | frmNeracaLajur | Neraca Lajur | p_NeracaLajur | 19 | 1 |
21 | frmBukuBesar | Buku Besar | p_BukuBesar | 19 | 2 |
22 | frmResponBiaya | Laporan Pertanggung jawaban | p_ResponBiaya | 19 | 4 |
23 | frmTrenLapRLAktual | Trend Bulanan Laporan | p_BukuBesar | 19 | 3 |
Untuk memudahkan pemahaman, kita dapat memasukkan data pada Tabel di atas ke dalam form frmMenuPengaturan. Kolom IdForm berisi nama-nama form yang sudah kita buat. Kecuali nilai Null (kosong), IdForm ini tidak boleh ada duplikasi nama, karena akan mengacaukan menu yang akan dibuka. Kolom NamaForm adalah antarmuka yang digunakan untuk memudahkan kita membuka form. Kolom NamaIjin adalah persyaratan yang diperlukan untuk membuka form pada IdForm. Tanda “,” berarti semua persyaratan harus dipenuhi, sedangkan tanda “|” berarti salah satu persyaratan bisa dipenuhi. Kolom Induk menunjukkan pada Id nomor berapakah sebuah form/menu/submenu itu menjadi bagian dari menu lainnya. Sebagai contoh, nilai 0 berarti suatu menu berada di Menu Utama, sedangkan nilai 1 berarti menu itu merupakan bagian dari menu Id 1 yang bernama Rekening. Kolom NoUrut adalah urutan yang akan ditampilkan pada menu/submenu.
Membuat Form Dialog Daftar Ijin
Form dialog daftar ijin berisi field yang berasal dari tblAdminPengguna dengan dua huruf pertama berawalan “p_”. Kode “p_” ini merupakan tanda bahwa field itu adalah sebuah syarat untuk memperoleh ijin mengakses form tertentu atau melakukan tindakan tertentu. Seperti telah dijelaskan melalui posting dengan judul Membuat Form Admintrasi Pengguna dan tabel di atas, pengguna yang membuka form tertentu harus memperoleh ijin akses tertentu dari administrator. Field-field dengan tanda “p_” itulah yang akan ditampilkan.
Gambar 3 |
- List box kosong, properti:
- Name=ijinAdminPengguna
- Row Source Type=Value List
- Row Source kosong.
- List box kosong, properti:
- Name= listSeleksi
- Row Source Type=Value List
- Row Source kosong.
- Di antara dua list box itu, sisipkan dua buah tombol perintah untuk menambahkan ke dan mengurangkan dari listSeleksi. Properti untuk tombol pertama:
- Name=Tambahkan
- Caption=> (tanda lebih besar)
- Name=Kurangkan
- Caption=< (tanda lebih kecil)
- Di bawah list box ijinAdminPengguna, sisipkan text box dengan properti:
- Control Source= =TampilkanDataIjin(Nz([ijinAdminPengguna],""))
- Enabled=No
- Locked=Yes
- Di bawah text box di atas, sisipkan combo box, dengan properti:
- Name= logikaIjin
- Row Source Type=Value List
- Row source= ",";dan;|;atau, column count=2, bound column=1.
- Di bawah list box listSeleksi, sisipkan text box dengan properti:
- Control Source= =TampilkanDataIjin(Nz([listSeleksi],""))
- Enabled=No
- Locked=Yes
- Di bawah combo box logikaIjin, sisipkan text box untuk menampung sementara, hasil seleksi yang ada di listSeleksi. Properti:
- Name=daftarIjin
- Enabled=no
- Locked=yes
- berilah warna yang berbeda.
- Di bawah text box daftarIjin, sisipkan dua buah tombol perintah untuk persetujuan dan pembatalan. Properti untuk tombol pertama:
- Name= OKTambah
- Caption=OK
- Name= Batalkan
- Caption= Batalkan
Gambar 4 |
Option Compare Database Function ResArray(arrSatu, arrDua As Variant) As Variant 'arrSatu adalah array yg lengkap 'arrDua adalah array yg ada di arrSatu Dim i, x, n, pos As Long Dim intpos() As String ReDim intpos(25) Dim adaKodeSama As Boolean pos = 0 For i = LBound(arrSatu) To UBound(arrSatu) For n = LBound(arrDua) To UBound(arrDua) adaKodeSama = False If arrDua(n) = arrSatu(i) Then adaKodeSama = True Exit For End If Next n If Not adaKodeSama Then intpos(pos) = arrSatu(i) pos = pos + 1 End If Next i ReDim Preserve intpos(pos - 1) ResArray = intpos End Function Private Sub Batalkan_Click() DoCmd.Close End Sub Private Sub Form_Open(Cancel As Integer) Dim tdf As DAO.TableDef Dim fld As DAO.Field2 Dim strp() As String ReDim strp(30) Dim x, i, n As Integer Dim strNamaIjin, strSymbol, strSplit As String 'menampilkan row source pada kotak list yang dipilih strNamaIjin = Nz(Forms("frmMenuPengaturan").NamaIjin, "") For n = 1 To Len(strNamaIjin) strSymbol = Mid(strNamaIjin, n, 1) If strSymbol = "," Or strSymbol = "|" Then strSplit = strSymbol Me.logikaIjin = strSplit Exit For End If Next n Me.listSeleksi.RowSource = Join(Split(strNamaIjin, Me.logikaIjin), ";") 'menampilkan row source pada kotak list lengkap yang diambil dari tblAdminPengguna Set dbs = CurrentDb() Set tdf = dbs.TableDefs("tblAdminPengguna") i = 0 For Each fld In tdf.Fields If Left(fld.Name, 2) = "p_" Then i = i + 1 End If Next fld ReDim strp(i - 1) n = 0 For Each fld In tdf.Fields If Left(fld.Name, 2) = "p_" Then strp(n) = fld.Name n = n + 1 End If Next fld strSymbol = ResArray(strp, Split(strNamaIjin, Me.logikaIjin)) If strSplit = "" Then strSplit = Me.logikaIjin Me.ijinAdminPengguna.RowSource = Join(strSymbol, ";") Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin) End Sub Private Sub Kurangkan_Click() Dim i, p, n As Integer Dim pstring As String Dim strp() As String ReDim strp(20) Dim strv() As String ReDim strv(20) Dim strLista As Variant If IsNull(Me.listSeleksi) Then Exit Sub If IsNull(Me.listSeleksi.ItemsSelected) Then Exit Sub If Me.listSeleksi.RowSource = "" Then Exit Sub p = Me.listSeleksi.ItemsSelected(0) If Me.ijinAdminPengguna.RowSource <> "" Then Me.ijinAdminPengguna.RowSource = Me.ijinAdminPengguna. RowSource & ";" & Me.listSeleksi Else Me.ijinAdminPengguna.RowSource = Me.listSeleksi End If strLista = Split(Me.listSeleksi.RowSource, ";") If UBound(strLista) - 1 = -1 Then Me.listSeleksi.RowSource = "" Me.daftarIjin = "" Exit Sub End If i = 0 For n = LBound(strLista) To UBound(strLista) If n <> p Then strp(i) = strLista(n) i = i + 1 End If Next n ReDim Preserve strp(UBound(strLista) - 1) Me.listSeleksi.RowSource = Join(strp, ";") If p < Me.listSeleksi.ListCount Then Me.listSeleksi = Me.listSeleksi.ItemData(p) Else Me.listSeleksi = Me.listSeleksi.ItemData(Me.listSeleksi. ListCount - 1) End If Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin) End Sub Private Sub logikaIjin_Change() Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin) End Sub Private Sub OKTambah_Click() Forms("frmMenuPengaturan").NamaIjin = Me.daftarIjin DoCmd.Close End Sub Private Sub Tambahkan_Click() Dim i, p, n As Integer Dim pstring As String Dim strp() As String ReDim strp(20) Dim strv() As String ReDim strv(20) Dim strLista As Variant If IsNull(Me.ijinAdminPengguna) Then Exit Sub If Me.ijinAdminPengguna.RowSource = "" Then Exit Sub strLista = Split(Me.ijinAdminPengguna.RowSource, ";") p = Me.ijinAdminPengguna.ItemsSelected(0) If Me.listSeleksi.RowSource <> "" Then Me.listSeleksi.RowSource = Me.listSeleksi.RowSource & ";" & Me.ijinAdminPengguna Else Me.listSeleksi.RowSource = Me.ijinAdminPengguna End If If UBound(strLista) - 1 = -1 Then Me.ijinAdminPengguna.RowSource = "" Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin) Exit Sub End If ReDim strp(UBound(strLista) - 1) i = 0 For n = LBound(strLista) To UBound(strLista) If strLista(n) <> Me.ijinAdminPengguna Then strp(i) = strLista(n) i = i + 1 End If Next n Me.ijinAdminPengguna.RowSource = Join(strp, ";") ReDim strLista(i) strLista = strp If p < Me.ijinAdminPengguna.ListCount Then Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(p) Else Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(Me. ijinAdminPengguna.ListCount - 1) End If Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin) End Sub
Comments
Post a Comment