Odoo11添加打印选项及自定义报表

       今天研究Odoo中选中一条数据进行打印,如何创建对应的打印按钮,以及点击相应的按钮显示相应的要打印的界面,具体如下图所示:

 

首先需要在模块中创建report目录,例如官方文件所示:

     

       其实点击看看官方的模块式怎么写的就大概明白怎么回事了。这里我用自己的模块大概说一下,也方便以后忘记了可以随时回来看到,report目录结构都基本类似。在bn_oracle_report_pzqweb.py中写了个测试的

其中get_report_values()方法是必须写的,因为在对应的xml文件中需要用到报表所需的数据,方法中的docids就是你选择需要打印的数据的id集合。

用self.env.cr.execute()这个方法执行了原生的SQL语句。

return self._cr.dictfetchall() #返回字典型结果集。

return self._cr.fetchall() #返回列表型结果集。

bn_oracle_report_pzqweb.xml中

<!--测试-->
    <report
            id="action_bn_oracle_report_pzqweb3"
            string="凭证报表测试"
            model="bn.oracle.interface.pz.master"
            report_type="qweb-html"
            name="bn_oracle.report03"
            file="bn_oracle.report03"/>

string: 在打印按钮那里的显示名称 

id:外id标识

name: 完整主模板名称 模块名.主板模名称  用于管理和调用

file: 完整模板文件名 模块名.模板文件名  用于更好地关联模板

model:相关的模型显示在那个模块进行打印报表 通常在各视图中的打印那里会出现

report_type: 报表类型 是 qweb-pdf 或 qweb-html

       还要有一个对应的报表模板,即点击凭证报表测试后显示的要打印的界面。可以看到其中用到head.xxx,lines_data.xxx都是同过之前py文件获得并返回的数据。

<!--测试-->
    <template id="report03">
        <t t-call="web.html_container">
            <t t-call="web.external_layout">
                <div class="page">
                    <table width="80%">
                        <tbody>
                            <tr>
                                <td>凭证编号:
                                    <t t-esc="heard.pz_sequence"/>
                                </td>
                                <td>日期:
                                    <t t-esc="heard.throw_date" t-options='{"widget": "date"}'/>
                                </td>
                            </tr>

                            <tr>
                                <td>Oracle凭证号:
                                    <t t-esc="heard.strjournalname"/>
                                </td>
                                <td>抛转状态:
                                    <t t-esc="heard.oracle_state"/>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <br/>
                    <table class="table table-condensed" width="100%">
                        <thead>
                            <th width="15%">科目</th>
                            <th width="12%">部门</th>
                            <th width="10%">人员</th>
                            <th width="8%">项目</th>
                            <th width="5%">借方</th>
                            <th width="5%">贷方</th>
                            <th width="45%">摘要</th>
                        </thead>
                        <tbody>
                            <t t-foreach="lines_data" t-as="o">
                                <tr>
                                    <td>
                                        <t t-esc="o[2]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[3]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[4]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[5]"/>
                                    </td>
                                    <td>
                                        <t t-esc="o[6]" t-options='{"widget": "float", "precision": 2}'/>
                                    </td>
                                    <td>
                                        <t t-esc="o[7]" t-options='{"widget": "float", "precision": 2}'/>
                                    </td>
                                    <td>
                                        <t t-esc="o[8]"/>
                                    </td>
                                </tr>
                            </t>
                            <tr>
                                <td>

                                </td>
                                <td>
                                    <strong>合 计:</strong>
                                </td>
                                <td>

                                </td>
                                <td>

                                </td>
                                <td>
                                    <strong>
                                        <t t-esc="sum(line[6] for line in lines_data)"
                                           t-options='{"widget": "float", "precision": 2}'/>
                                    </strong>
                                </td>
                                <td>
                                    <strong>
                                        <t t-esc="sum(line[7] for line in lines_data)"
                                           t-options='{"widget": "float", "precision": 2}'/>
                                    </strong>
                                </td>
                                <td>

                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </t>
        </t>
    </template>

到这里基本就ok了,可能写的比较模糊,刚开始写博客,有什么疑问可以大家讨论~

对了,还可以设置打印的纸张,这个可以再odoo运行后用管理员登录,然后选择激活开发者模式,在设置中报告中设置。

        可以在纸张类型中选择想打印的纸张格式,纸张格式也可以用自带的也可以自己设置,但只有在报表类型选择为PDF时才显示,html类型想用A4横向的话可以先切换为PDF类型,选择了对应的纸张格式后再把报表类型改回html也可生效。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值