1. 新建报告模型
from odoo import fields, models, api, _
class TxProductionMergeOrder(models.AbstractModel):
_name = 'report.tx_mrp_production.merge_order' # report.模块名+(Qweb模板)看板视图id
_description = '制造单打印'
def _get_report_values(self, docids, data=None):
docs = self.env['mrp.production'].sudo().browse(docids)
return {
'docs': docs,
}
2. 修改权限文件
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_05,report.tx.mrp.production.merge.order,model_report_tx_mrp_production_merge_order,base.group_user,1,1,1,1
3. 定义编写纸张模板
<record id="tx_production_merge_order_print" model="report.paperformat">
<field name="name">自定义标签打印(150*100)</field>
<field name="default" eval="True"/>
<!--format 打印的类型有很多种,这里使用自定义打印custom-->
<field name="format">custom</field>
<field name="page_height">150</field>
<field name="page_width">100</field>
<!--Landscape为横向打印-->
<field name="orientation">Portrait</field>
<!--内容的外边距,就是内容距离顶部的距离,如果有表头这个高度需要大于表头的高度。-->
<field name="margin_top">1</field>
<field name="margin_bottom">1</field>
<field name="margin_left">1</field>
<field name="margin_right">1</field>
<!--有表头记得设置为True并设置header_spacing,不然打印内容会在表头下方显示不出来-->
<field name="disable_shrinking" eval="False"/>
</record>
4. 定义打印动作视图
<record id="act_merge_order" model="ir.actions.report">
<field name="name">制造订单打印</field>
<field name="model">mrp.production</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">tx_mrp_production.merge_order</field><!--(主模块的文件名)模块名称+ (Qweb模板)看板视图id -->
<field name="report_file">tx_mrp_production.merge_order</field><!--(主模块的文件名)模块名称+ (Qweb模板)看板视图id -->
<field name="print_report_name">(object.name)</field>
<field name="binding_model_id"
ref="mrp.model_mrp_production"/><!--(主模块的文件名)模块名称+ csv里的模型id (model_id) 用于指定打印模板位置放置于那个模块里,如果不写,不显示 -->
<field name="binding_type">report</field><!-- 固定写法 -->
<field name="paperformat_id" ref="tx_mrp_production.tx_production_merge_order_print"/>
</record>
5. 定义Qweb模板
<template id="merge_order">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="web.basic_layout">
<table style="width:100%;">
<t t-foreach="doc.move_raw_ids" t-as="move">
<tr>
<td colspan="10" class="nowrap cell-center"
style="text-align: center; border: 1px solid black; vertical-align: middle; height:20px; width: max-content;">
<span t-field="move.product_id.name"/>
</td>
<td colspan="6" class="nowrap cell-center"
style="text-align: center; border: 1px solid black; vertical-align: middle; height:20px; width: max-content;">
<span t-field="move.product_id.product_tmpl_id.remarks"/>
</td>
<td class="nowrap cell-center" colspan="10"
style="text-align: center; border: 1px solid black; vertical-align: middle; height:20px; width: max-content;">
<span t-esc="str('%.3f' % round(move.mrp_product_qty * 1000, 3)) + 'g'"
t-if="move.operation_id.name != '基料投料'"/>
<span t-esc="str('%.3f' % round(move.mrp_product_qty, 3)) + 'kg'"
t-if="move.operation_id.name == '基料投料'"/>
</td>
</tr>
</t>
</table>
<!-- 换页 -->
<div style="page-break-after: always;"></div>
</t>
</t>
</t>
</template>
备注
注意在对应init文件引入python文件,清单文件中引入相关文件
纸张模型如无需求可不添加,打印动作视图那里移除paperformat_id一行