2014-11-03 3 views
1

hr_expenses 양식의 특정 필드를 내 custom 모듈 purchase_orders로 복사하려고했습니다. 나 확장 hr_expenses.py 파일에서이 작업을 수행하기 위해 아래의 방법은 기록 된OpenERP - 다른 테이블의 새 레코드에 데이터 복사 - 비용/PO

:

def po_generator(self, cr, uid, ids, arg, context=None): 
      res = {} 

      for expense in self.browse(cr, uid, ids, context=context): 
       expense_line = self.pool.get('hr.expense.line') 
       purchase_orders = self.pool.get('purchase.orders') 

       for line in expense.line_ids: 
        expense_line_record = expense_line.search(cr, uid, [('id', '=', line.id)], context=context) 
        # pdb.set_trace() 
        purchase_orders.create(cr, uid, 
         { 
          'submitted_employee_name':expense.employee_id, 
          'dateofexpense':expense_line.date_value, 
          'project_id_expense':expense_line.project_id, 
          'Description':expense_line.name, 
          'netamount':expense_line.product_exc_VAT, 
          'raised_employee_name':expense.employee_id, 
          'project_id_account_type':expense_line.project_id_account_type, 
         }, 
         context 
        ) 

      return res 

을 그러나, 나는이 코드 조각을 실행하는 트루 경우는, OpenERP는 나에게와의 'AttributeError를'제공 추적 :

File "/opt/openerp/custom_modules/legacy_expense_po/legacy_expense.py", line 121, in po_generator 'dateofexpense':expense_line.date_value, AttributeError: 'hr.expense.line' object has no attribute 'date_value'

여기에는 비용 양식의 line_ids 필드와 관련이 있다고 가정합니다. line_ids에서 각 행을 가져 와서 purchase_orders 테이블에 새 레코드로 입력하려고합니다.

감사합니다.

+1

비용 라인이 개체 인 경우 fieldName을 사용하여 점을 찍어 개체에서 값을 가져올 수 없습니다. –

답변

1

@Sagar Mohan

여기서는 다양한 기본 실수를하고 있습니다.

는 는 는 이미 문 말해서 찾아 기록에 루핑

for line in expense.line_ids: 

당신은 이미 문 expense_line_record = expense_line.search(cr, uid, [('id', '=', line.id)], context=context)를 작성하여 다시 검색 할 필요가 없습니다 모든 관련 O2M 기록을 끌어 expense.line_ids이 말을 할 때 당신은 알고 있어야합니다 v7에서 검색 한 다음 일치하는 ID의 정수 ID 만 반환하십시오 (recordset 또는 browse record이 아님).

def po_generator(self, cr, uid, ids, arg, context=None): 
     res = {} 
     purchase_orders = self.pool.get('purchase.orders') 
     for expense in self.browse(cr, uid, ids, context=context): 
      expense_line = self.pool.get('hr.expense.line') 
      purchase_orders = self.pool.get('purchase.orders') 
      for line in expense.line_ids: 
       purchase_orders.create(cr, uid, 
        { 
         'submitted_employee_name':line.employee_id.name, 
         'dateofexpense': line.date_value, 
         'project_id_expense': line.project_id.id, 
         'Description': line.name, 
         'netamount': line.product_exc_VAT, 
         'raised_employee_name': expense.employee_id.name, 
         'project_id_account_type': line.project_id_account_type, 
        }, 
        context 
       ) 
     return res 

이 코드는 필요에 따라 보정을해야 할 수도 있습니다하지만 당신은 당신이 단지에 필요하므로 그 라인은 직접 찾아 변수 참조 : 올바른 코드입니다. 필드에 액세스하십시오.

그리고 코드를 무겁게하는 루프 내부에서 self.pool.get을 사용하지 마십시오.

감사합니다.