Minta Pencerahan: Cara Bikin Custom XLS Report di Odoo 11
Diposting pada 17 Jun 2026, 19:57
Ditanyakan oleh: Siska
Halo rekan-rekan praktisi Odoo di sini!
Saya Siska, kebetulan lagi handle Odoo ERP versi 11 di kantor. Sekarang ini kami butuh banget nih buat bikin laporan dalam format XLS yang datanya cukup spesifik dan nggak ada di report standar Odoo. Kebetulan ini untuk kebutuhan tim finance/operasional yang butuh analisis data lebih lanjut.
Saya sudah coba cek-cek di komunitas atau forum lain, ada beberapa opsi kayak pakai module `report_xlsx` atau `base_report_xls`, tapi jujur masih agak bingung gimana implementasinya kalau harus bikin dari nol (custom report) dengan query data yang spesifik. Khususnya untuk Odoo 11 ini, apakah ada perbedaan signifikan dengan versi yang lebih baru?
Mungkin ada rekan-rekan di sini yang punya pengalaman atau best practice gimana sih cara paling efektif untuk create custom XLS report di Odoo 11? Apakah perlu coding Python langsung, atau ada cara yang lebih 'simple' via konfigurasi tertentu yang bisa diarahkan? Barangkali ada yang mau berbagi insight atau mungkin tips-tips pentingnya dari pengalaman masing-masing.
Terima kasih banyak sebelumnya atas bantuannya!
Admin Odoo ForumAdmin & AI Support17 Jun 2026, 19:57
Halo Kak Siska! Salam kenal dan selamat bergabung di komunitas Odoo Indonesia.
Wah, saya paham sekali nih kondisi yang Kak Siska alami. Kebutuhan untuk laporan XLS yang spesifik, terutama untuk tim finance/operasional, memang sering banget muncul dan laporan standar Odoo kadang belum bisa mengakomodir semuanya. Apalagi di Odoo 11, memang ada beberapa hal yang perlu kita perhatikan.
Untuk menjawab pertanyaan Kak Siska, mari kita bedah satu per satu ya.
Pertama, terkait opsi `report_xlsx` atau `base_report_xls`. Keduanya memang modul komunitas yang sangat membantu untuk membuat laporan XLS. Di Odoo 11, modul `report_xlsx` dari Odoo Community Association (OCA) adalah pilihan yang paling direkomendasikan dan banyak digunakan. Modul ini menyediakan kerangka kerja yang solid untuk membuat laporan Excel yang kompleks dengan Python. Modul `base_report_xls` juga ada, tapi `report_xlsx` lebih populer dan lebih aktif dikembangkan untuk versi Odoo yang lebih baru.
Kedua, perbedaan signifikan dengan versi Odoo yang lebih baru. Sebenarnya, konsep dasar pembuatan custom XLS report menggunakan `report_xlsx` di Odoo 11 tidak jauh berbeda dengan versi setelahnya (misalnya Odoo 12, 13, dst.). Intinya tetap pada pengembangan modul kustom dengan Python. Yang membedakan mungkin hanya minor API changes atau struktur tertentu di Odoo itu sendiri, tapi logika utama untuk mengambil data dan menuliskannya ke file Excel akan tetap sama.
Ketiga, cara paling efektif untuk membuat custom XLS report di Odoo 11. Jujur saja, untuk laporan yang datanya spesifik dan butuh query kustom, mau tidak mau memang perlu coding Python langsung. Tidak ada cara "simple" via konfigurasi murni di Odoo 11 untuk kasus ini, karena Anda perlu mengambil data dari berbagai model, melakukan kalkulasi, atau mengaplikasikan logika bisnis yang tidak standar.
Berikut adalah gambaran langkah-langkah implementasinya secara teknis:
1. Buat Modul Kustom Baru:
Anda perlu membuat modul Odoo baru (misalnya `my_custom_reports`) di dalam direktori `addons` Anda.
Di file `__manifest__.py` modul tersebut, pastikan Anda menambahkan `report_xlsx` sebagai dependency. Contohnya: `'depends': ['base', 'report_xlsx']`.
2. Buat Model Transient (Opsional tapi Direkomendasikan):
Untuk laporan yang butuh input pengguna (misalnya rentang tanggal, filter kategori, dll.), buatlah model transient (`models.TransientModel`). Model ini akan menjadi form di mana user memasukkan kriteria sebelum laporan di-generate.
Contohnya di `models/report_wizard.py`:
```python
from odoo import models, fields
class MyReportWizard(models.TransientModel):
_name = 'my.report.wizard'
_description = 'Wizard for My Custom Report'
start_date = fields.Date(string='Start Date', required=True)
end_date = fields.Date(string='End Date', required=True)
# tambahkan field filter lain sesuai kebutuhan
```
3. Definisikan Report Action di XML:
Buat file XML (misalnya `reports/report.xml`) di dalam modul Anda.
Definisikan report action di sini. Ini akan menjadi item menu yang bisa diakses user untuk menjalankan laporan.
Yang penting adalah mengatur `report_type` menjadi `xlsx` dan menunjuk ke model Python yang akan menangani pembuatan laporan.
Contoh struktur XML:
```xml
My Custom XLS Report
my.report.wizard
xlsx
my_custom_reports.report_my_custom_xlsx
my_custom_reports.report_my_custom_xlsx
"My Custom XLS Report"
<menuitem id="menu_my_custom_xlsx_report"
name="Custom XLS Report"
parent="account.menu_finance_reports"
action="action_my_custom_xlsx_report"
sequence="10"/>
```
4. Implementasi Logic Report di Python:
Ini adalah bagian inti di mana Anda menulis kode Python untuk mengambil data dan menuliskannya ke Excel.
Buat file Python (misalnya `reports/report_xlsx_handler.py`) dan daftarkan di `__init__.py` modul Anda.
Anda akan membuat class yang mewarisi dari `report_xlsx.report.report_xlsx` dan meng-override method `generate_xlsx_report`.
Di dalam method `generate_xlsx_report` inilah Anda:
Mendapatkan data dari Odoo ORM (atau raw SQL jika sangat kompleks) berdasarkan kriteria yang diberikan oleh wizard (jika ada).
Membuat sheet baru di workbook Excel.
Menulis header kolom.
Mengiterasi data yang sudah diambil dan menuliskan setiap baris ke sel-sel Excel.
Anda bisa menerapkan formatting seperti bold, warna, atau lebar kolom di sini.
Contoh kerangka Python:
```python
from odoo import models
from odoo.tools import date_utils
import io
import json
class ReportMyCustomXlsx(models.AbstractModel):
_name = 'report.my_custom_reports.report_my_custom_xlsx' # Sesuai report_name di XML
_inherit = 'report.report_xlsx.abstract'
def generate_xlsx_report(self, workbook, data, obj):
# obj adalah instance dari my.report.wizard jika ada
# atau recordset dari model utama jika report langsung dari record
sheet = workbook.add_worksheet('Custom Report Data')
# Mendapatkan data dari obj (wizard)
start_date = obj.start_date
end_date = obj.end_date
# Contoh query data (ganti dengan query spesifik Kak Siska)
# Misalnya, mengambil invoice dalam rentang tanggal
invoices = self.env['account.move'].search([
('invoice_date', '>=', start_date),
('invoice_date', '<=', end_date),
('state', '=', 'posted'),
('move_type', '=', 'out_invoice')
])
# Menulis header
sheet.write(0, 0, 'Invoice Number', workbook.add_format({'bold': True}))
sheet.write(0, 1, 'Invoice Date', workbook.add_format({'bold': True}))
sheet.write(0, 2, 'Customer', workbook.add_format({'bold': True}))
sheet.write(0, 3, 'Total Amount', workbook.add_format({'bold': True}))
row = 1
for inv in invoices:
sheet.write(row, 0, inv.name)
sheet.write(row, 1, str(inv.invoice_date))
sheet.write(row, 2, inv.partner_id.name)
sheet.write(row, 3, inv.amount_total)
row += 1
```
Tips-tips Penting:
Pahami Odoo ORM: Kemampuan untuk melakukan `search`, `read`, `browse`, dan mengelola relasi antar model di Odoo Object-Relational Mapping (ORM) sangat krusial untuk mengambil data secara efisien.
Debugging: Gunakan metode debugging standar Python (seperti `print` atau `logging`) atau debugger jika Anda mengembangkannya di lingkungan lokal untuk melacak masalah.
Format Excel: `report_xlsx` menyediakan banyak opsi untuk formatting sel, merge cell, membuat grafik, dll. Jelajahi fiturnya untuk membuat laporan yang lebih menarik dan fungsional.
Mulai dari yang Sederhana: Jangan langsung membuat laporan yang super kompleks. Mulai dari laporan dengan data sederhana, pastikan berhasil, lalu bertahap tambahkan logika dan data yang lebih rumit.
Cek Contoh Modul OCA: Meskipun saya tidak bisa memberikan link, Kak Siska bisa coba mencari contoh modul `report_xlsx` di GitHub komunitas Odoo (OCA) untuk Odoo 11. Banyak contoh implementasi di sana yang bisa menjadi referensi.
Jadi, kesimpulannya, untuk custom XLS report dengan query data yang spesifik di Odoo 11, coding Python adalah jalan utamanya, Kak Siska. Modul `report_xlsx` akan menjadi 'senjata' utama Anda untuk mempermudah proses penulisan ke format Excel. Ini memang butuh sedikit usaha di awal, tapi setelah terbiasa, akan sangat memudahkan tim Anda dalam mendapatkan insight dari data.
Semoga pencerahan ini membantu Kak Siska ya. Kalau ada bagian yang masih membingungkan atau mau diskusi lebih lanjut, jangan sungkan bertanya lagi di sini! Semangat!