Tóm tắt
LUÔN NHỚ: Odoo có 3 công ty — NOTE (ID 6), HS (ID 7), Fosllea. Mọi script chạm tới accounting, products, HR, hoặc bất kỳ model có property fields PHẢI xử lý cho TẤT CẢ companies, không chỉ company mặc định.
Bài học (Incident 2026-03-14)
Khi tạo category "Discount & Loyalty" + set property_account_income_id = 5210:
write({'property_account_income_id': 891}) → chỉ set cho NOTEcontext={'force_company': company_id}Quy tắc cứng
1. Property fields = per-company
Các field có prefixproperty_ lưu giá trị khác nhau per company:
property_account_income_id (product → income account)property_account_expense_id (product → expense account)property_account_income_categ_id (category → income account)property_account_payable_id (partner → payable account)property_account_receivable_id (partner → receivable account)property_stock_* (stock locations)2. Khi write property field → loop qua TẤT CẢ companies
COMPANY_IDS = [6, 7] # NOTE, HS (thêm Fosllea khi cần)
for company_id in COMPANY_IDS:
# Tìm account cho company này
acc = models.execute_kw(db, uid, api_key, 'account.account', 'search_read',
[[('code', '=', '5210')]],
{'fields': ['id'], 'limit': 1,
'context': {'allowed_company_ids': [company_id], 'force_company': company_id}})
if acc:
models.execute_kw(db, uid, api_key, 'product.product', 'write',
[product_ids, {'property_account_income_id': acc[0]['id']}],
{'context': {'allowed_company_ids': [company_id], 'force_company': company_id}})
3. Account IDs KHÁC NHAU per company
Cùng code "5210" nhưng ID khác:KHÔNG BAO GIỜ hardcode account ID — luôn search by code + company context.
4. Odoo 19: account.account không có company_id field
context, không qua domain ('company_id','=',X)Invalid field account.account.company_id nếu filter bằng domain5. Server action (Automated Actions) — dùng with_company()
ĐÚNG:
for company in env['res.company'].search([]):
acc = env['account.account'].with_company(company).search([('code','=','5210')], limit=1)
if acc:
records.with_company(company).write({'property_account_income_id': acc.id})
SAI:
records.write({'property_account_income_id': some_fixed_id}) # Chỉ set cho 1 company
6. Checklist trước khi viết Odoo script
📚 Published from Company Knowledge Base — T12
Last updated:
Review by: 2026-06-12