You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo V10薪资模块新增页签不显示,求助表格实现方案

嘿,我帮你梳理下问题所在,你的代码有两个关键问题导致页签不显示且表格无法正常工作,咱们一步步来修正:

一、先解决页签不显示的核心问题

你的XML视图结构犯了一个基础错误:原hr_payroll.view_hr_payslip_form本身就是一个完整的form视图,你却在<xpath expr="//page[1]" position="after">里嵌套了另一个<form>标签,这直接破坏了原视图的渲染结构,导致新页签根本无法被加载。

正确的做法是直接把新页签插入到原视图的<notebook>组件中,不需要额外嵌套form标签。

二、实现类似销售订单行的表格(关键改动)

销售订单行的表格是通过One2Many关联子模型实现的——主模型(销售订单)关联多个子模型行(订单明细)。而你现在直接在hr.payslip上定义普通字段,根本无法用tree组件渲染成行式表格。我们需要创建一个薪资明细子模型,再通过One2Many字段关联到主薪资单模型。

修正后的Python代码

from openerp import models, fields, api

# 新建薪资明细子模型,对应销售订单的sale.order.line
class HrPayslipLine(models.Model):
    _name = 'hr.payslip.line'
    _description = '薪资明细行'

    # 关联到主薪资单模型,级联删除确保明细行随薪资单一起删除
    payslip_id = fields.Many2one('hr.payslip', string='关联薪资单', required=True, ondelete='cascade')
    item_name = fields.Char(string='薪资项目', required=True)
    amount = fields.Integer(string='金额', required=True)
    # 可根据需求扩展字段,比如项目类型、备注等

# 继承hr.payslip模型,添加One2Many字段关联明细行
class HrPayslipInherit(models.Model):
    _inherit = 'hr.payslip'

    # 关联薪资明细行的核心字段
    payslip_line_ids = fields.One2many('hr.payslip.line', 'payslip_id', string='薪资明细')

修正后的XML视图代码

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_hr_payslip_inherit_form_extended" model="ir.ui.view">
<field name="name">hr.payslip.inherit.form</field>
<field name="model">hr.payslip</field>
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form" />
<field name="arch" type="xml">
    <!-- 找到原视图的notebook组件,在内部插入新页签 -->
    <xpath expr="//notebook" position="inside">
        <page string="Pendapatan Karyawan">
            <!-- 用One2Many字段配合tree widget实现可编辑表格 -->
            <field name="payslip_line_ids" colspan="4" nolabel="1">
                <tree string="薪资明细行" editable="bottom">
                    <field name="item_name"/>
                    <field name="amount"/>
                </tree>
            </field>
        </page>
    </xpath>
</field>
</record>
</data>
</openerp>

三、最后要注意的细节

  • 确保你的模块在__openerp__.py的depends列表中添加了'hr_payroll',否则会找不到原视图
  • 升级模块后,记得刷新浏览器(必要时清空缓存)才能看到新页签
  • 如果需要保留你原来定义的gaji_pokok和t_lembur字段,可以把它们迁移到子模型中,或者作为主模型的单独字段放在页签的group组件里

这样修改后,你就能看到新增的「Pendapatan Karyawan」页签,里面会出现和销售订单行一样的可编辑表格,支持新增、删除、修改薪资明细行。

内容的提问来源于stack exchange,提问作者Ffs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:07