Reporting
Sistem: lintas modul. Report bukan modul. Report adalah registri entri menu yang menunjuk ke dalam modul-modul, ditambah tipe privilege tersendiri. Kode report-nya sendiri tersebar di sebelas folder modul. Halaman ini petanya.
Cara halaman ini diverifikasi
Ditulis dari master pada 2026-09-06 dan dibandingkan dengan big five di hari yang sama. Tidak ada halaman sebelumnya.
Apa itu report di INACT
Report adalah satu baris di ts_modules_report. Baris itu memberinya kode, label, grup menu dan URL. URL-nya menunjuk ke layar modul yang sudah ada dalam mode cetak, atau ke skrip unduhan mandiri. Tidak ada mesin report: setiap report adalah apa pun yang dirender layar tujuannya.
ts_modules_report
├── report_id (PK)
├── report_code mis. mdr_report_2, dipakai sebagai kunci privilege
├── report_desc label menu
├── report_parent nesting legacy, tidak dipakai menu lagi
├── report_url "window|..." atau "direct_download_report|...", lihat di bawah
├── report_sort urutan di dalam grupnya
├── report_is_installed 1 = tampil di menu
└── modules_parent grup menu: dms, procurement atau budgetDi-seed oleh DefaultTsModulesReport.php. Master men-seed 64 baris, 17 di antaranya terpasang. 47 lainnya adalah report legacy (Activity, Tender, Hazop, Commission, Shipping Mark, dan seterusnya) yang tetap di registri dalam keadaan mati.
Cara menu dibangun
_menu.php merender tipe modul Report di samping modul biasa. Entrinya berasal dari getModuleReportList() di reference_function.inc.php, yang me-join ts_modules_report ke ts_module_parent pada modules_parent. Tiga hal mengikuti:
- Baris dengan
modules_parent = NULLtidak pernah muncul, apa pun flag terpasangnya. Begitulah 47 baris legacy tetap tersembunyi. - Baris dikelompokkan menurut
modules_parent. SeedDefaultTsModuleSidebarTypeParent.phpmendefinisikan grup untuk tipereport:dms,procurement,budgetdanmaster_stamp. Inilah judul DMS, Procurement dan Cost and Budget di sidebar. - Nesting
report_parentlama sudah mati. Kode yang menelusuri report anak di bawah induk dikomentari. Setiap baris terpasang dirender datar di bawah grupnya. Dua baris seed,budgetdanprocurement, adalah sisa nesting itu: terpasang, tetapireport_url-nya kata polos (reportBudget,reportProc) bukan URL sungguhan, jadi dirender sebagai item daftar kosong.
Setiap entri hanya tampil kalau report_is_installed = 1 dan pengguna lolos pemeriksaan privilege, lihat Privilege. Grup admin melewati pemeriksaan. Sebelum merender, menu menambahkan &report_code=<md5 dari report_code> ke URL; class Base di src/basic/Base.php membacanya kembali untuk tahu report mana yang sedang disajikan halaman.
Tata bahasa URL
report_url adalah string yang dipisahkan pipa. Segmen pertama menyatakan cara membukanya; sisanya digabung menjadi query string oleh onButtonClick() di master.htm.
| Segmen pertama | Membuka | Contoh |
|---|---|---|
window | jendela dhtmlx di dalam aplikasi | window|main.php?page=member&cid=<md5 modul>|&show=report&print=due&view=custom |
direct_download_report | tab browser baru | dipakai untuk unduhan mandiri |
Di balik bentuk window ada tiga tujuan:
| Tujuan | Query | Ditangani oleh |
|---|---|---|
| Mode cetak modul | print=browse&print_browse=all&view=custom&type=<code> | *_handler_print_browse.inc.php milik modul. Tujuh modul punya: documents_master, expedite, package_order, packing_list, purchase_order, sales_order, dan satu lagi di sales_order. |
| Mode report modul | show=report&print=<code>&view=custom | cabang show=report modul, misalnya routing (print=due) dan budget (print=bvcm). |
| Report unduhan langsung | page=member&direct_download_report=<name>&get_form_filter=1 | member.php meng-include modules/member/direct_download_report/<name>.inc.php dan <name>.php, lalu keluar. |
cid adalah md5 kode modul tujuan, itu sebabnya URL-nya terlihat tidak jelas.
Report yang terpasang di master
| Grup | Kode | Label | Tujuan |
|---|---|---|---|
| DMS | documents | Documents Library | modul documents, cmd=print_costume |
| DMS | routing_01 | Routing Overdue | modul routing, show=report&print=due |
| DMS | mdr_report_2 | MDR Report | mode cetak documents_master, type=mdr_report_2, dirender oleh documents_master_handler_print_mdr_report_2.php sebagai template HTML |
| DMS | mdr_report_summary | MDR Report Summary | sama, dirender oleh documents_mater_handler_print_mdr_report_summary.php. Perhatikan typo nama file, mater. |
| Procurement | procurement_status_report | Procurement Status Report | unduhan langsung, .xlsx lewat PhpSpreadsheet |
| Budget | cost_summary_report | Cost Report Summary (Accrual) | modul procurement, cmd=print&print=cost_summary_report |
| Budget | cost_summary_report_actual | Cost Report Summary (Actual) | handler yang sama, angka aktual |
| Budget | budget_03 | Budget versus Current Month | modul budget, show=report&print=bvcm |
| Budget | procurement_05 | Contract Payment Summary | mode report modul procurement |
| Budget | procurement_05_1 | Contract Payment Summary (WBS) | sama |
| Budget | procurement_06 | Contract Invoices Balance Report | sama |
| Budget | procurement_07 | AFE Accrual Report | sama |
| Budget | procurement_14 | Finance Accrual Report | sama |
| Budget | procurement_16 | Contract, Commitment and Expenditure | sama |
| Budget | procurement_17 | Contract Balance Report, Expenditure | sama |
| Budget | budget, procurement | header grup legacy | tanpa URL, dirender kosong |
Dua skrip unduhan langsung di modules/member/direct_download_report/ adalah procurement_status_report dan cost_summary_report. Keduanya membangun .xlsx dengan PhpSpreadsheet, mengambil project dari project yang dipilih pengguna, dan membaca filternya dari form yang ditampilkan langkah get_form_filter=1 lebih dulu.
Privilege
Report punya tipe privilege sendiri. havePrivilegesReportResource($groupid, $reportCode, 'view') di tracking_function.inc.php meng-query ts_privileges_resource dengan priv_type = 'report' dan modules_code = <report_code>. Tabel yang sama dan model resource group yang sama dengan privilege modul, lihat Users dan Privilege, hanya priv_type-nya yang berbeda.
Admin memberikannya di Reference, Group Privileges, tab Report (group_privileges.php?show=report): grid resource group terhadap setiap report terpasang, satu checkbox masing-masing. Mencentang memasukkan baris view dengan priv_type='report'; menghapus centang menghapusnya. Wizard setup pertama punya grid yang sama di setup_privileges_report.php.
Menyalakan atau mematikan report
Reference, Report Register (report_register.php) adalah editor referensi generik yang terikat ke ts_modules_report lewat MODULE_REFERENCE_TABLE_CONFIG["report_register"]. Ia mengedit kode, label dan flag report_is_installed. Menyalakan salah satu dari 47 baris legacy membuatnya muncul di menu hanya kalau modules_parent-nya terisi; baris legacy men-seed NULL di sana, jadi edit database juga dibutuhkan. Perlakukan pengaktifan ulang report legacy sebagai perubahan kode: layar tujuannya mungkin sudah tidak ada.
Tabel terkait
| Tabel | Dipakai oleh | Berisi |
|---|---|---|
ts_modules_report | menu, privilege, Report Register | registri |
ts_module_parent, ts_module_type | menu | grup dan tipe report |
ts_privileges_resource (priv_type='report') | menu, group privileges | siapa boleh melihat report mana |
ts_report_settings | procurement, expedite | setting report tersimpan per project, per orang (type, name) |
ts_report_snapshot, ts_map_report_snapshot | procurement | snapshot akrual AFE: jumlah CBS untuk tahun lalu, sekarang dan depan, dengan komentar |
ts_cm_report | procurement | satu kolom, report_title |
TODO: untuk apa
ts_cm_reportdants_cm_report_comments. Keduanya di-seed (TsCmReport.php) tetapi grep tidak menemukan pembaca di luar procurement.
Hal yang perlu diwaspadai
- Report yang hilang biasanya soal privilege atau
modules_parent, bukan bug. Periksareport_is_installed,modules_parentdan privilegereportresource group sebelum membaca kode. report_codeadalah kunci privilege danmodules_codedipakai ulang untuknya. Report dan modul dengan kode yang sama akan bertabrakan dits_privileges_resource;priv_typesatu-satunya yang memisahkan keduanya.- Handler report MDR merender HTML, bukan Excel. Ekspor Excel MDR adalah fungsi Documents Master yang terpisah.
- Skrip unduhan langsung berjalan di luar pemeriksaan privilege modul. Ia dicapai lewat
page=member, jadi hanya privilegereportdan login yang melindunginya.
Perbedaan antar instance
Diperiksa pada 2026-09-06.
| Instance | Perbedaan |
|---|---|
| Medco | Menambah routing_04, Comment Summary, terpasang di bawah DMS, menunjuk ke routing dengan print=commentsummary. 18 terpasang. |
| Timas | Menambah overdue_report, Overdue, terpasang di bawah DMS, menunjuk ke mode cetak documents_master. 18 terpasang. |
| JOTRE | Seed sama dengan master, tetapi _menu.php-nya masih memakai pohon buatan tangan yang lama dengan array $_REPORT dan daftar grup hard-coded. Menambah skrip unduhan langsung jotre_procurement_status_report dan mencantumkannya berdasarkan nama di grup Procurement. |
| Jadestone | Identik dengan master. |
Terkait
- Users dan Privilege: model resource group tempat tipe privilege
reportberada. - Import MDR dan Upload: data yang dibaca report MDR.