【发布时间】:2012-03-17 16:51:47
【问题描述】:
我不知道我是否应该在这里问这个问题(我现在想也许版主会将其移至 stackoverflow),但我在 openerp 或启动板论坛上没有得到答案。
在 OpenERP 6.0.1 中,当在发票表单中放置一个按钮来执行它时,以下函数会执行它应该做的事情:
class account_invoice(osv.osv):
_inherit = "account.invoice"
""" Function to update all lines on invoice """
def update_invoice(self, cr, uid, ids, context=None):
if context is None:
context = {}
line_obj = self.pool.get('account.invoice.line')
invoice_ids = self.browse(cr, uid, ids, context)
for invoice in invoice_ids:
for line in invoice.invoice_line:
if line.product_id:
res = line_obj.product_id_change(cr, uid, [line.id], (line.product_id and line.product_id.id or False), uom=(line.uos_id and line.uos_id.id or False), qty=(line.quantity or 0),
name=(line.name or ''), type=(invoice.type or False), partner_id=invoice.partner_id.id, fposition_id=invoice.fiscal_position.id, price_unit=(line.price_unit or 0),
address_invoice_id=(invoice.address_invoice_id and invoice.address_invoice_id.id or False), currency_id=(invoice.currency_id and invoice.currency_id.id or False), context=context)
price_unit = res['value']['price_unit']
discount = res['value']['discount']
line_obj.write(cr, uid, [line.id], {'price_unit': price_unit})
line_obj.write(cr, uid, [line.id], {'discount': discount})
return True
account_invoice()
也就是说,当在表单中单击此按钮时,会更新发票行的价格单位和折扣。
我正在尝试为“python 代码”类型的对象“发票”创建一个服务器操作,该操作在菜单项的所有发票上执行此功能。在python代码框中,我写道:
inv = self.pool.get('account.invoice')
line_obj = self.pool.get('account.invoice.line')
for invoice in inv.browse(cr, uid, ids):
for line in invoice.invoice_line:
res = line_obj.product_id_change(cr, uid, [line.id], (line.product_id and line.product_id.id or False), uom=(line.uos_id and line.uos_id.id or False), qty=(line.quantity or 0), name=(line.name or ''), type=(invoice.type or False), partner_id=invoice.partner_id.id, fposition_id=invoice.fiscal_position.id, price_unit=(line.price_unit or 0), address_invoice_id=(invoice.address_invoice_id and invoice.address_invoice_id.id or False), currency_id=(invoice.currency_id and invoice.currency_id.id or False), context=context)
price_unit = res['value']['price_unit']
discount = res['value']['discount']
line_obj.write(cr, uid, [line.id], {'price_unit': price_unit})
line_obj.write(cr, uid, [line.id], {'discount': discount})
但它不起作用。我做错了什么?
编辑: 谁能帮我写一个更新所有发票行的函数,类似于 /account/wizard/account_invoice_state.py 中的那些?
【问题讨论】:
-
你能更准确地说“它不起作用”部分吗?
-
好吧,如果我在语法上犯了错误,我会在双击菜单项时得到相应的错误。现在它不会导致错误,所以它只被执行,发票不会改变。好像该功能在错误的地方执行并且没有应用于任何实际发票。希望我足够清楚
-
@3a2roub:你应用了什么样的调试?如果可能,您可以使用
print等输出功能或 GUI 交互来跟踪函数以检查问题所在。 -
@NiklasB。对正在发生的事情进行一些调试的唯一方法是在 GUI 中使用 debug_sql 日志级别,正如您所知,单击一下会留下很长的输出。但是,没有显示错误,也许有人尝试将实际上通过按钮在表单中工作的函数
update_invoice转换为python代码类型的服务器操作会更容易。我确定我的在某种程度上是有缺陷的!我想我只需要正确的语法即可将这几行应用于所有发票上的所有行。 -
你的函数在你按下按钮时被调用?