Szeto Consultants

Perlu Pencerahan: Inherit Template QWeb untuk Kustomisasi Laporan di Odoo 16

Perlu Pencerahan: Inherit Template QWeb untuk Kustomisasi Laporan di Odoo 16

Diposting pada 10 Mar 2026, 19:54
Ditanyakan oleh: Arif

Halo rekan-rekan Odoo di forum!

Perkenalkan, saya Arif, kebetulan handle IT di kantor yang pakai Odoo 16. Saat ini kami sedang ada kebutuhan untuk kustomisasi tampilan laporan, contohnya laporan Sales Order atau Invoice yang standar dari Odoo.

Niatnya, saya ingin menambahkan beberapa informasi baru atau mengubah sedikit layout-nya tanpa harus menyentuh modul bawaan Odoo langsung. Setahu saya, pendekatan yang benar adalah dengan melakukan inherit pada template QWeb yang terkait.

Yang jadi pertanyaan saya, bagaimana ya cara paling efektif dan 'best practice' untuk melakukan inherit template di Odoo 16 ini? Apakah cukup dengan menggunakan `xpath` saja? Atau ada metode lain yang lebih fleksibel, terutama kalau perubahan yang ingin dilakukan lumayan signifikan, bukan cuma sekedar penambahan satu atau dua field saja?

Saya juga penasaran, ada tips khusus nggak ya untuk menemukan `id` atau `name` dari template QWeb bawaan yang mau di-inherit dengan cepat? Kadang suka bingung nyarinya di mana.

Mungkin teman-teman yang sudah sering kustomisasi Odoo bisa sharing pengalamannya, atau kalau ada contoh sederhana implementasinya, akan sangat membantu sekali. Jujur, agak deg-degan juga kalau salah langkah, takut nanti pas ada update Odoo malah jadi masalah.

Terima kasih banyak sebelumnya atas pencerahan dan bantuannya!

Balasan (1)

Admin Odoo ForumAdmin & AI Support10 Mar 2026, 19:55
Halo Mas Arif! Senang sekali Anda bertanya di komunitas Odoo Indonesia. Pertanyaan Anda ini sangat relevan dan sering sekali jadi topik bahasan para praktisi Odoo, terutama yang suka utak-atik laporan.

Betul sekali Mas, pendekatan Anda untuk melakukan inherit template QWeb adalah cara yang paling tepat dan merupakan best practice di Odoo 16 (dan versi Odoo lainnya) untuk kustomisasi laporan. Dengan begitu, modul bawaan Odoo tetap bersih dan kustomisasi Anda ada di modul terpisah, meminimalisir masalah saat update Odoo.



Mari kita bahas satu per satu ya, Mas.



1. Metode Inherit Template QWeb: `xpath` dan Lebih Dari Itu

Untuk melakukan inherit, Anda akan membuat sebuah custom module baru (atau menambahkan ke module kustom yang sudah ada) dan menambahkan file XML yang berisi definisi inherit Anda.

Menggunakan `xpath` untuk Perubahan Minor (Tambah/Ubah/Hapus Elemen)
`xpath` adalah metode yang paling umum dan fleksibel untuk inject atau modifikasi bagian tertentu dari template. Anda bisa menentukan posisi dan aksi yang ingin dilakukan:
`position="after"`: Menambahkan elemen baru setelah elemen yang ditargetkan.
`position="before"`: Menambahkan elemen baru sebelum elemen yang ditargetkan.
`position="inside"`: Menambahkan elemen baru sebagai anak pertama dari elemen yang ditargetkan.
`position="replace"`: Mengganti elemen yang ditargetkan dengan elemen baru yang Anda definisikan. Ini sangat berguna jika Anda ingin mengubah secara signifikan suatu bagian kecil.
`position="attributes"`: Mengubah atau menambahkan atribut pada elemen yang ditargetkan.
`position="delete"`: Menghapus elemen yang ditargetkan.

Untuk perubahan yang "lumayan signifikan, bukan cuma sekedar penambahan satu atau dua field saja", Anda masih bisa menggunakan kombinasi `xpath` dengan `replace` atau `delete` di beberapa titik. Misalnya, Anda ingin mengubah total bagian header laporan, Anda bisa `xpath` ke elemen header dan menggunakan `position="replace"` untuk menimpa seluruh kontennya.



Mengganti Seluruh Template (Overriding)
Jika perubahan yang Anda inginkan benar-benar sangat signifikan dan hampir tidak ada lagi struktur template asli yang tersisa, ada dua pendekatan yang bisa dipertimbangkan:
Full Override dengan `inherit_id`: Anda bisa membuat template baru dengan `inherit_id` yang sama, tapi Anda mendefinisikan ulang seluruh struktur `t-name` atau `qweb-template` tanpa menggunakan `xpath` di dalamnya. Odoo akan secara otomatis mengganti template lama dengan template baru Anda jika `id` template baru Anda adalah `id` template asli. Namun, ini bisa agak riskan karena Anda harus mendefinisikan ulang semuanya dan kehilangan manfaat dari pembaruan template asli di versi Odoo mendatang.
Membuat Template dan Report Baru: Ini adalah pilihan paling ekstrem. Jika layout laporan asli sudah tidak bisa dipakai sama sekali, Anda bisa membuat QWeb template laporan yang benar-benar baru dari nol. Kemudian, Anda perlu mendefinisikan `ir.actions.report` yang baru di modul Anda, yang menunjuk ke template QWeb baru tersebut. Biasanya, ini dilakukan jika ada kebutuhan laporan dengan data atau tampilan yang sangat berbeda dari standar Odoo.

Pilihan `xpath` dengan `replace` di beberapa area kunci biasanya lebih disukai daripada full override, karena masih menjaga "benang merah" dari template asli dan lebih mudah di-maintain.



2. Tips Cepat Menemukan `id` atau `name` Template QWeb Bawaan

Ini seringkali jadi bagian yang paling bikin pusing, Mas Arif, saya paham! Tapi ada beberapa trik jitu:

Mode Pengembang (Developer Mode): Ini adalah sahabat terbaik kita.
1. Aktifkan Mode Pengembang di Odoo (biasanya dari Settings -> Activate the developer mode).
2. Buka laporan yang ingin Anda kustomisasi (misalnya, preview Sales Order).
3. Saat preview laporan muncul, lihat bagian URL. Biasanya ada parameter `report_name` atau `report_file`. Ini bisa memberikan petunjuk nama report.
4. Tekan tombol "Debug View" (gambar kumbang di pojok kanan atas) dan pilih "Edit View". Ini akan langsung membawa Anda ke definisi XML dari template yang sedang Anda lihat. Di sana, Anda bisa menemukan `XML ID` dari template tersebut.
5. Jika "Edit View" tidak langsung muncul atau menunjuk ke view yang salah (misalnya view form, bukan report), coba inspect elemen di browser Anda (klik kanan -> Inspect/Periksa). Cari atribut `data-oe-id` atau `data-oe-xpath` pada elemen HTML yang menarik perhatian Anda. Atribut `data-oe-id` ini seringkali adalah ID dari view XML yang Anda cari.

Menu "Views" di Technical Settings:
1. Setelah Mode Pengembang aktif, masuk ke menu Settings -> Technical -> User Interface -> Views.
2. Di sini, Anda bisa mencari template berdasarkan nama (`Name`), deskripsi, atau bahkan langsung di kolom `Arch / XML` jika Anda ingat sedikit teks dari template tersebut.
3. Contoh untuk Sales Order: Coba cari `sale.report_saleorder_document` atau `report_saleorder`.
4. Contoh untuk Invoice: Coba cari `account.report_invoice_document` atau `report_invoice`.
5. `XML ID` yang Anda cari akan ada di kolom "XML ID".

Melihat Kode Sumber Odoo: Jika Anda punya akses ke server Odoo atau kode sumbernya, Anda bisa menjelajahi direktori modul `sale` atau `account` (di folder `addons`). Biasanya, template laporan diletakkan di dalam folder `views` dengan nama file seperti `report_saleorder.xml` atau `report_invoice.xml`. Di dalam file XML tersebut, Anda akan menemukan definisi `` dengan `id` yang spesifik.



Contoh Sederhana Implementasi `xpath` (Konseptual)

Misalkan Anda ingin menambahkan paragraf "Informasi Tambahan Penting" di bawah judul "Sales Order" pada laporan Sales Order standar Odoo. Setelah Anda menemukan `XML ID` template laporan Sales Order adalah `sale.report_saleorder_document`, Anda bisa melakukannya seperti ini di custom module Anda:


<!-- File: custom_module/views/report_saleorder_inherit.xml -->
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Inherit template laporan Sales Order -->
<template id="report_saleorder_document_custom" inherit_id="sale.report_saleorder_document">
<!-- Target elemen h2 yang berisi judul Sales Order -->
<xpath expr="//div[@class='page']/h2" position="after">
<!-- Tambahkan paragraf baru setelah judul -->
<p style="color: red; font-weight: bold;">
<b>Informasi Tambahan Penting</b>: Silakan cek detail pengiriman.
</p>
</xpath>
</template>
</data>
</odoo>


Jangan lupa daftarkan file XML ini di `__manifest__.py` custom module Anda, di bagian `data`.



Tips Khusus agar Aman saat Update Odoo

Buat Modul Kustom Terpisah: Ini yang paling penting. Jangan pernah menyentuh file XML bawaan Odoo langsung.
Pahami Struktur Template Asli: Sebelum melakukan `xpath`, luangkan waktu untuk memahami struktur HTML/QWeb dari template asli. Ini membantu Anda membuat `xpath expr` yang lebih presisi dan menghindari efek samping yang tidak diinginkan.
Gunakan `xpath expr` yang Spesifik: Hindari `xpath` yang terlalu umum. Gunakan atribut (`id`, `class`), atau struktur hierarki yang spesifik untuk menargetkan elemen dengan tepat. Ini akan mengurangi risiko `xpath` Anda rusak jika struktur template asli sedikit berubah di update Odoo berikutnya.
Uji Coba Menyeluruh: Setelah melakukan kustomisasi, selalu uji coba laporan dengan berbagai skenario untuk memastikan tidak ada yang terlewat atau rusak.
Dokumentasikan Perubahan: Catat perubahan apa saja yang Anda lakukan dan di mana. Ini akan sangat membantu di masa depan jika ada masalah atau jika Anda perlu melakukan migrasi ke versi Odoo yang lebih baru.



Semoga pencerahan ini membantu Mas Arif untuk memulai kustomisasi laporan di Odoo 16 dengan percaya diri dan sesuai best practice ya! Jangan ragu bertanya lagi kalau ada yang kurang jelas atau butuh pendalaman lebih lanjut. Semangat, Mas!

Berikan Tanggapan

⚠️ Anti-Spam Aktif: Dilarang menyertakan tautan/URL di dalam form ini.
Butuh Konsultasi Odoo? 👋
Scroll to Top