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.
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 FunctionAda 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.
? 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 4Hasil 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.
Comments
Post a Comment