2014-01-22 65 views
0

我在销售订单中创建了两个自定义字段,但这些字段未显示在发票表单中。我还添加了发票表单视图和列并更新了服务器,但是此值未显示在发票中。 如何在发票表单中显示这些值。这里是我的视图文件:如何从OpenERP获得发票中的销售订单字段值

<record id="view_invoice_line_form" model="ir.ui.view"> 
     <field name="name">account.invoice.line.form</field> 
     <field name="model">account.invoice.line</field> 
     <field name="arch" type="xml"> 
      <form string="Invoice Line" version="7.0"> 
       <group> 
        <group> 
         <field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/> 
         <label for="quantity"/> 
         <div> 
          <field name="quantity" class="oe_inline"/> 
          <field name="uos_id" class="oe_inline" groups="product.group_uom" 
           on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/> 
         </div> 
         <field name="purchase_order"/> 
         <field name="amt_total"/> 
         <field name="price_unit"/> 
         <field name="discount" groups="sale.group_discount_per_so_line"/> 
        </group> 
        <group> 
         <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)" groups="account.group_account_user"/> 
         <field name="invoice_line_tax_id" context="{'type':parent.type}" domain="[('parent_id','=',False),('company_id', '=', parent.company_id)]" widget="many2many_tags"/> 
         <field domain="[('type','&lt;&gt;','view'), ('company_id', '=', parent.company_id)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/> 
         <field name="company_id" groups="base.group_multi_company" readonly="1"/> 
        </group> 
       </group> 
       <label for="name"/> 
       <field name="name"/> 
      </form> 
     </field> 
    </record> 

和两个字段.py文件添加它们是:

'purchase_order':fields.many2one('purchase.order', 'Old Gold', ondelete="cascade"), 
'amt_total':fields.related('purchase_order', 'amount_total', type='float', relation='purchase.order', string="Amount", readonly=True), 

,我创建了功能

def _amount_all(self, cr, uid, ids, field_name, arg, context=None): 
    cur_obj = self.pool.get('res.currency') 
    res = {} 

    for order in self.browse(cr, uid, ids, context=context): 


     res[order.id] = { 
      'amount_untaxed': 0.0, 
      'amount_tax': 0.0, 
      'amount_total': 0.0, 
      'amt_total':0.0 
     } 
     val = val1 = 0.0 
     cur = order.pricelist_id.currency_id 
     for line in order.order_line: 
      val1 += line.price_subtotal 

      val += self._amount_line_tax(cr, uid, line, context=context) 
     res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val) 
     res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1) 

     res[order.id]['amount_untaxed'] -= order.amt_total 
     res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] 
    return res 

在这里,我能减去amt_totaltotal_amount,但在发票中,我不能从total_amount减去amt_total

当我在开票形式执行相同的操作它给了我一个错误:

ProgrammingError: column account_invoice_line.amt_total does not exist 
LINE 1: ...ne."partner_id",account_invoice_line."product_id",account_in... 
+0

你可以请出示您的视图文件中的字段? –

+1

Geez ...我觉得我在阅读这个问题时会跑掉我的屁股...... [Interpuntion,任何人?](http://en.wikipedia。org/wiki /标点符号) – Kraay89

+1

这是我在account_invoice中的自定义字段的视图,这里amt_total是sale.order –

回答

2

由于@archetipo说,最好的方法是创建一个新的自定义模块。

您的解决方案

鉴于例如,试试这个,

  • 新建模块,并创建account_invoice_line的对象像

    class account_invoice_line(osv.Model): 
        _inherit = 'account.invoice.line' 
        _columns = { 
         'purchase_order': fields.char('Purchase Order'), 
         'amt_total': fields.float('Amout Total'), 
        } 
    

你应该给你的字段中键入根据您的要求。例如,在对产品进行描述之后,将视角放在上面的领域。

<record id="view_account_order_extend1_form" model="ir.ui.view"> 
    <field name="name">account.order.form.price.extend</field> 
    <field name="model">account.invoice</field> 
    <field name="inherit_id" ref="account.invoice_form" /> 
    <field name="arch" type="xml"> 
     <xpath expr="//page[@string='Invoice Lines']/field[@name='invoice_line']/tree[@string='Invoice Lines']/field[@name='name']" position="after"> 
      <field name="purchase_order"/> 
      <field name="amt_total"/> 
     </xpath> 
    </field> 
</record> 

希望这会帮助你理解。

0

嗨,你有2个办法在视图中添加一个字段:

1)直接修改原模块,非常糟糕的方式

2)创建包含模块的新的声明,你继承你自己的自定义模块,原模块即

class account_invoice_line(orm.Model) #osv.osv is deprecated 
    _inherit='account.invoice.line' 
    _column={ your new field here...} 

为视图继承建议此链接Openerp Book

所以,如果你有使用第一个选项,删除所有,并创建自己的自定义模块,因为在OpenERP的的下一次更新,你可能会失去你的工作

0

使用此功能在sale.order

def _prepare_invoice(self, cr, uid, order, lines, context=None): 
    """Prepare the dict of values to create the new invoice for a 
     sales order. This method may be overridden to implement custom 
     invoice generation (making sure to call super() to establish 
     a clean extension chain). 

     :param browse_record order: sale.order record to invoice 
     :param list(int) line: list of invoice line IDs that must be 
           attached to the invoice 
     :return: dict of value to create() the invoice 
    """ 
    if context is None: 
     context = {} 
    journal_ids = self.pool.get('account.journal').search(cr, uid, 
     [('type', '=', 'sale'), ('company_id', '=', order.company_id.id)], 
     limit=1) 
    if not journal_ids: 
     raise osv.except_osv(_('Error!'), 
      _('Please define sales journal for this company: "%s" (id:%d).') % (order.company_id.name, order.company_id.id)) 
    invoice_vals = { 
     'name': order.client_order_ref or '', 
     'origin': order.name, 
     'type': 'out_invoice', 
     'reference': order.client_order_ref or order.name, 
     'account_id': order.partner_id.property_account_receivable.id, 
     'partner_id': order.partner_invoice_id.id, 
     'journal_id': journal_ids[0], 
     'invoice_line': [(6, 0, lines)], 
     'currency_id': order.pricelist_id.currency_id.id, 
     'comment': order.note, 

     'amt_total':order.amt_total, 
     'qty_related':order.qty_related, 

     'payment_term': order.payment_term and order.payment_term.id or False, 
     'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id, 
     'date_invoice': context.get('date_invoice', False), 
     'company_id': order.company_id.id, 
     'user_id': order.user_id and order.user_id.id or False, 


    } 

    # Care for deprecated _inv_get() hook - FIXME: to be removed after 6.1 
    invoice_vals.update(self._inv_get(cr, uid, order, context=context)) 
    return invoice_vals 

,并创建形式发票

相关问题