Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Hướng dẫn report và wizard trong Openerp

Ảnh đại diện
david

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

Ảnh đại diện
Huỷ
2 Trả lời
0
Ảnh đại diện
Leo Tran
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!
1 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Cám ơn Leo nhiều,
Cái này là bí kíp của mình rồi. Mình làm liền.

0
Ảnh đại diện
Vũ Thành Luâ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

Ảnh đại diện
Huỷ

Trả lời của bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.