Satu masalah yang muncul saat kita menggunakan Access dalam hal data yang bertingkat adalah mengukur level kedalaman hirarki (tingkat) organisasi atau data. Data bertingkat ini mempunyai pola seperti orang tua yang beranak cucu cicit, istilahnya parent dan child. Nah, pada bagian ini, kita akan menggunakan rekursi untuk membuat fungsi yang dapat menentukan level kedalaman hirarki organisasi atau data, terutama data yang terdapat dalam sebuah tabel yang mempunyai pola parent dan child.
Misalkan, ada sebuah hirarki organisasi seperti pada gambar di bawah ini.
Struktur organisasi di atas mempunyai empat level, Level 1 adalah Presiden Direktur, sedangkan Level 4 adalah Manajer Jaringan. Umumnya, data struktur organisasi seperti di atas dimasukkan ke dalam sebuah tabel dalam field atau kolom yang terdiri dari Id organisasi, Nama Departemen, dan Parent. Field Id merupakan field yang unik yang menunjukkan identitas suatu departemen/bagian/divisi. Field Nama Departemen menjelaskan field Id, sedangkan field Parent menunjukkan kepada departemen/bagian/divisi manakah suatu bagian yang ditunjukkan oleh field Id itu bertanggung jawab.
Pada gambar di atas, Presiden Direktur adalah bagian tertinggi yang ada di Level 1, Id-nya adalah 1, Dalam hal ini bagian ini tidak punya Parent. Di Level 2, misalnya Direktur Operasional, Id-nya 4, mempunyai Parent 1. Artinya, Direktur Operasional bertanggungjawab langsung ke Presiden Direktur. Untuk Level 3, Manajer Pendukung Teknis dengan Id 7 bertanggunjawab ke Direktur Operasional (Parent 4). Selanjutnya, pada Level 4, Manajer Jaringan dengan Id 9 bertanggungjawab ke Manajer Pendukung Teknis (Parent 7). Secara tabel, bentuknya adalah sebagai berikut. Field NamaDept adalah Nama Departemen.
Dari gambar struktur organisasi di atas, kita tahu bahwa 4 level merupakan kedalaman struktur organisasi. Namun demikian, pada tabel tblOrgaisasi, kita tidak bisa melihat ada berapa level dalam struktur organisasi itu. Nah, dari sini, kita bisa membuat kode VBA untuk mengukur level kedalaman struktur organisasi. Caranya adalah sebagai berikut: Buatlah tabel dengan nama tabel dan field seperti di atas. Isikan datanya sekalian sebagai sarana uji coba. Setelah itu, salin kode VBA berikut pada modul standar.
Ada dua fungsi yang digunakan, yaitu fungsi Rekursi dan mengukurKedalamanHirarki. Fungsi Rekursi digunakan untuk melakukan semacam iterasi pada tabel tblOrganisasi dari record pertama sampai record terkahir serta untuk menghitung level organisasi. Sedangkan fungsi mengukurKedalamanHirarki untuk menampilkan hasil perhitungan. Untuk menjalankannya, kita hanya perlu memanggil fungsi mengukurKedalamanHirarki seperti pada Immediate Window berikut ini.
Hasil perhitungan bisa kita lihat pada angka tertinggi di kolom Level. Di situ angka tertinggi adalah 4. Jadi, tabel tblOrganisasi mempunyai level kedalaman hirarki organisasi = 4.
Kita dapat melakukan pemeriksaan silang hasil perhitungan fungsi mengukurKedalamanHirarki dengan gambar struktur organisasi di atas. Level 4 pada hasil perhitungan sama dengan level 4 pada gambar, yaitu ada di bagian Manajer Jaringan (Id 9). Demikian pula untuk level 3 yang terdiri dari empat bagian, yaitu Manajer Keuangan, Manajer Akuntansi, Manajer Pendukung Teknis, dan Manajer Teknis.
Misalkan, ada sebuah hirarki organisasi seperti pada gambar di bawah ini.
![]() |
Gambar Struktur Organisasi |
Pada gambar di atas, Presiden Direktur adalah bagian tertinggi yang ada di Level 1, Id-nya adalah 1, Dalam hal ini bagian ini tidak punya Parent. Di Level 2, misalnya Direktur Operasional, Id-nya 4, mempunyai Parent 1. Artinya, Direktur Operasional bertanggungjawab langsung ke Presiden Direktur. Untuk Level 3, Manajer Pendukung Teknis dengan Id 7 bertanggunjawab ke Direktur Operasional (Parent 4). Selanjutnya, pada Level 4, Manajer Jaringan dengan Id 9 bertanggungjawab ke Manajer Pendukung Teknis (Parent 7). Secara tabel, bentuknya adalah sebagai berikut. Field NamaDept adalah Nama Departemen.
Id | NamaDept | Parent |
---|---|---|
1 | President Direktur | 0 |
2 | Direktur Pemasaran | 1 |
3 | Direktur Umum dan Keuangan | 1 |
4 | Direktur Operasional | 1 |
5 | Manajer Keuangan | 3 |
6 | Manajer Akuntansi | 3 |
7 | Manajer Pendukung Teknis | 4 |
8 | Manajer Teknis | 4 |
9 | Manajer Jaringan | 7 |
- 'Tempatkan type berikut ini di bagian paling atas dari modul, di bawah Option Explicit
- Type HirarkiRekursi
- ID As Long
- Level As Integer
- NamaDept As String
- Parent As Long
- End Type
- 'Tempatkan deklarasi berikut ini di bawah Type HirarkiRekursi
- Dim Hirarki() As HirarkiRekursi
- Function mengukurKedalamanHirarki() As Integer
- Dim intMax As Integer
- Dim strSql, strsql1, strsql2, strsql3 As String
- ReDim Hirarki(0)
- Call Rekursi(0, 1)
- Dim x As Integer
- Debug.Print "Id " & "Parent " & "Level " & "NamaDept"
- For x = 1 To UBound(Hirarki)
- With Hirarki(x)
- Debug.Print .ID & " " & .Parent & " " & .Level & " " & .NamaDept
- End With
- Next x
- intMax = 0
- For x = 1 To UBound(Hirarki)
- If Hirarki(x).Level > intMax Then intMax = Hirarki(x).Level
- Next x
- Debug.Print vbNewLine & "Kedalaman= " & intMax
- mengukurKedalamanHirarki = intMax
- End Function
- Function Rekursi(intParent As Integer, ByVal intLevel As Integer)
- Dim rs As Recordset
- Dim strSql As String
- strSql = "Select Id, NamaDept From tblOrganisasi Where Parent = " & intParent & ";"
- Set rs = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
- Do While Not rs.EOF
- ReDim Preserve Hirarki(UBound(Hirarki) + 1)
- Hirarki(UBound(Hirarki)).ID = rs!ID
- Hirarki(UBound(Hirarki)).Parent = intParent
- Hirarki(UBound(Hirarki)).NamaDept = rs!NamaDept
- Hirarki(UBound(Hirarki)).Level = intLevel
- Call Rekursi(rs!ID, intLevel + 1)
- rs.MoveNext
- Loop
- rs.Close
- End Function
- ? mengukurKedalamanHirarki
- Id Parent Level NamaDept
- 1 0 1 President Direktur
- 2 1 2 Direktur Pemasaran
- 3 1 2 Direktur Umum dan Keuangan
- 5 3 3 Manajer Keuangan
- 6 3 3 Manajer Akuntansi
- 4 1 2 Direktur Operasional
- 7 4 3 Manajer Pendukung Teknis
- 9 7 4 Manajer Jaringan
- 8 4 3 Manajer Teknis
- Kedalaman= 4
- 4
Kita dapat melakukan pemeriksaan silang hasil perhitungan fungsi mengukurKedalamanHirarki dengan gambar struktur organisasi di atas. Level 4 pada hasil perhitungan sama dengan level 4 pada gambar, yaitu ada di bagian Manajer Jaringan (Id 9). Demikian pula untuk level 3 yang terdiri dari empat bagian, yaitu Manajer Keuangan, Manajer Akuntansi, Manajer Pendukung Teknis, dan Manajer Teknis.
Comments
Post a Comment