Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

[代码分析] 财务报表中的部分变量是如何定义和赋值的?



  • [color=blue][u][size=10pt]account\report\common_report_header.py[/size][/u][/color]

    [code]
    import pooler
    from tools.translate import _

    class common_report_header(object):

        def _sum_debit(self, period_id=False, journal_id=False):
            if journal_id and isinstance(journal_id, int):
                journal_id = [journal_id]
            if period_id and isinstance(period_id, int):
                period_id = [period_id]
            if not journal_id:
                journal_id = self.journal_ids
            if not period_id:
                period_id = self.period_ids
            if not (period_id and journal_id):
                return 0.0
            self.cr.execute('SELECT SUM(debit) FROM account_move_line l '
                            'WHERE period_id IN %s AND journal_id IN %s ' + self.query_get_clause + ' ',
                            (tuple(period_id), tuple(journal_id)))
            return self.cr.fetchone()[0] or 0.0
    [/code]
    找了半天,不知道 [color=red][b]self.journal_ids,self.period_ids,self.query_get_clause[/b][/color]这几个变量在哪里定义,其值从何而来。其子类,比如[color=blue][size=10pt][u]account_balance_sheet.py[/u][/size][/color]也没有找到定义。

    请大家帮忙分析一下,谢谢!



  • [color=blue][u][size=10pt]account\report\common_report_header.py[/size][/u][/color]

    [code]
    import pooler
    from tools.translate import _

    class common_report_header(object):

        def _sum_debit(self, period_id=False, journal_id=False):
            if journal_id and isinstance(journal_id, int):
                journal_id = [journal_id]
            if period_id and isinstance(period_id, int):
                period_id = [period_id]
            if not journal_id:
                journal_id = self.journal_ids
            if not period_id:
                period_id = self.period_ids
            if not (period_id and journal_id):
                return 0.0
            self.cr.execute('SELECT SUM(debit) FROM account_move_line l '
                            'WHERE period_id IN %s AND journal_id IN %s ' + self.query_get_clause + ' ',
                            (tuple(period_id), tuple(journal_id)))
            return self.cr.fetchone()[0] or 0.0
    [/code]
    找了半天,不知道 [color=red][b]self.journal_ids,self.period_ids,self.query_get_clause[/b][/color]这几个变量在哪里定义,其值从何而来。其子类,比如[color=blue][size=10pt][u]account_balance_sheet.py[/u][/size][/color]也没有找到定义。

    请大家帮忙分析一下,谢谢!



  • 这只是一个class 的定义. 具体的 self.journal_ids 要看这个 class 的子class.

    EP:
    \addons\account\report\account_general_journal.py
    [code]

    ....
    class journal_print(report_sxw.rml_parse, common_report_header):

        def init(self, cr, uid, name, context=None):
            if context is None:
                context = {}
            super(journal_print, self).init(cr, uid, name, context=context)
            self.period_ids = []
            self.journal_ids = []
    ...
    [/code]



  • Shelly, 你说的这个class的确查询到了上面提到的3个变量。

    但 同一目录下的account_profit_loss.py中
    [code]
    import time
    import pooler
    from report import report_sxw
    from common_report_header import common_report_header
    from tools.translate import _

    class report_pl_account_horizontal(report_sxw.rml_parse, common_report_header):

        def init(self, cr, uid, name, context=None):
            super(report_pl_account_horizontal, self).init(cr, uid, name, context=context)
            self.result_sum_dr = 0.0
            self.result_sum_cr = 0.0
            self.res_pl = {}
            self.result = {}
            self.result_temp = []
            self.localcontext.update( {
    [/code]
    和同一目录下的 account_balance_sheet.py中
    [code]
    import time
    import pooler
    from report import report_sxw
    from account.report import account_profit_loss
    from common_report_header import common_report_header
    from tools.translate import _

    class report_balancesheet_horizontal(report_sxw.rml_parse, common_report_header):
        def init(self, cr, uid, name, context=None):
            super(report_balancesheet_horizontal, self).init(cr, uid, name, context=context)
            self.obj_pl = account_profit_loss.report_pl_account_horizontal(cr, uid, name, context=context)
            self.result_sum_dr = 0.0
            self.result_sum_cr = 0.0
            self.result = {}
            self.res_bl = {}
            self.result_temp = []
            self.localcontext.update({
    [/code]
    都没有查询到,不知道是怎么关联起来的。



  • 如果 class A 里某个方法有个特别的变量


    而你 class B 继承于 class A 但不使用 class A里的那个方法.. 是不是不用管那个变量呢?

    仅供参考....



  • 是的。
    被wizard窗口中的过滤字段误导了。
    大致过程应该是这样的:
    account\account.py
    [code]
            'balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Balance', multi='balance'),
            'credit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Credit', multi='balance'),
            'debit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Debit', multi='balance'),
    [/code]
    在这个方法__compute里,层层调用才刚刚开始,多少明白一点了。
    谢谢Shelly, Jeff,继续往下看。。。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待