Chào các ACE,
Rất mong mọi người đừng phiền khi mình hỏi nhiều như vậy, hihi.
Mình đang "mò mẫm" để xây dựng chức năng report. Thú thật cũng đã search nhiều hướng dẫn, nhưng kiến thức hạn hẹp quá chưa xây dựng report nào thành công cả.
ACE vui lòng giúp mình có hướng dẫn chi tiết nào về xây dựng report bằng querry không?
Giúp mình với, hic hic
0
2 Trả lời
Best Answer
Chào các ACE,
Rất mong mọi người đừng phiền khi mình hỏi nhiều như vậy, hihi.
Mình đang "mò mẫm" để xây dựng chức năng report. Thú thật cũng đã search nhiều hướng dẫn, nhưng kiến thức hạn hẹp quá chưa xây dựng report nào thành công cả.
ACE vui lòng giúp mình có hướng dẫn chi tiết nào về xây dựng report bằng querry không?
Giúp mình với, hic hic
Chào David,
Để xây dựng report = query, trước tiên bạn cần 1 file python (cái này chắc bạn đã biết). Trong file này bạn định nghĩa hàm lines như sau:
def lines(self, period_id): if not self.journal_ids: return [] move_state = ['draft','posted'] if self.target_move == 'posted': move_state = ['posted'] self.cr.execute('SELECT j.code, j.name, l.amount_currency,c.symbol AS currency_code,l.currency_id, ' 'SUM(l.debit) AS debit, SUM(l.credit) AS credit ' 'FROM account_move_line l ' 'LEFT JOIN account_move am ON (l.move_id=am.id) ' 'LEFT JOIN account_journal j ON (l.journal_id=j.id) ' 'LEFT JOIN res_currency c on (l.currency_id=c.id)' 'WHERE am.state IN %s AND l.period_id=%s AND l.journal_id IN %s ' + self.query_get_clause + ' ' 'GROUP BY j.id, j.code, j.name, l.amount_currency, c.symbol, l.currency_id ', (tuple(move_state), period_id, tuple(self.journal_ids))) return self.cr.dictfetchall()
Sau đó trong hàm init bạn phải khai báo hàm lines này
def __init__(self, cr, uid, name, context=None): if context is None: context = {} self.localcontext.update( { 'lines': self.lines, })
Khi đó, file report bên ngoài (rml, html,…) có thể sử dụng hàm lines:
<html> <table> % for line in lines(period_id): <tr> <td>${ line['code'] }, ${ line['name'] }</td> </tr> % endfor </table> </html>
Bạn có thể tạo ra nhiều hàm thực hiện các câu truy vấn, sau đó khai báo vào self.localcontext.update của hàm init. Khi đó các file report (rml, html,…) đều có thể sử dụng đc. Chi tiết hơn bạn tự nghiên cứu nhé. Chức may mắn!
Best Answer
Chào david, biển học là vô biên, không phải ai cũng biết hết được, bởi vậy nên bạn đừng ngại khi hỏi bất cứ điều gì cả ! :D
ERPOnline rất hoan nghênh và chào đón các câu hỏi của tất cả mọi người và sẽ cố gắng giải đáp tất cả các câu hỏi của các bạn.
Tiếp tục phát huy nhé, câu hỏi này mình sẽ chuyển cho anh Leo Tran để anh ấy giúp bạn :D