Skip to Content
Odoo Menu
  • Zaloguj się
  • Wypróbuj za darmo
  • Aplikacje
    Finanse
    • Księgowość
    • Fakturowanie
    • Wydatki
    • Arkusz kalkulacyjny (BI)
    • Dokumenty
    • Podpisy
    Sprzedaż
    • CRM
    • Sprzedaż
    • PoS Sklep
    • PoS Restauracja
    • Subskrypcje
    • Wypożyczalnia
    Strony Internetowe
    • Kreator Stron Internetowych
    • eCommerce
    • Blog
    • Forum
    • Czat na Żywo
    • eLearning
    Łańcuch dostaw
    • Magazyn
    • Produkcja
    • PLM
    • Zakupy
    • Konserwacja
    • Jakość
    Zasoby Ludzkie
    • Pracownicy
    • Rekrutacja
    • Urlopy
    • Ocena pracy
    • Polecenia Pracownicze
    • Flota
    Marketing
    • Marketing Społecznościowy
    • E-mail Marketing
    • SMS Marketing
    • Wydarzenia
    • Automatyzacja Marketingu
    • Ankiety
    Usługi
    • Projekt
    • Ewidencja czasu pracy
    • Usługi Terenowe
    • Helpdesk
    • Planowanie
    • Spotkania
    Produktywność
    • Dyskusje
    • Zatwierdzenia
    • IoT
    • VoIP
    • Baza wiedzy
    • WhatsApp
    Aplikacje trzecich stron Studio Odoo Odoo Cloud Platform
  • Branże
    Sprzedaż detaliczna
    • Księgarnia
    • Sklep odzieżowy
    • Sklep meblowy
    • Sklep spożywczy
    • Sklep z narzędziami
    • Sklep z zabawkami
    Żywienie i hotelarstwo
    • Bar i Pub
    • Restauracja
    • Fast Food
    • Pensjonat
    • Dystrybutor napojów
    • Hotel
    Agencja nieruchomości
    • Agencja nieruchomości
    • Biuro architektoniczne
    • Budowa
    • Zarządzanie nieruchomościami
    • Ogrodnictwo
    • Stowarzyszenie właścicieli nieruchomości
    Doradztwo
    • Biuro księgowe
    • Partner Odoo
    • Agencja marketingowa
    • Kancelaria prawna
    • Agencja rekrutacyjna
    • Audyt i certyfikacja
    Produkcja
    • Tekstylia
    • Metal
    • Meble
    • Jedzenie
    • Browar
    • Prezenty firmowe
    Zdrowie & Fitness
    • Klub sportowy
    • Salon optyczny
    • Centrum fitness
    • Praktycy Wellness
    • Apteka
    • Salon fryzjerski
    Transakcje
    • Złota rączka
    • Wsparcie Sprzętu IT
    • Systemy energii słonecznej
    • Szewc
    • Firma sprzątająca
    • Usługi HVAC
    Inne
    • Organizacja non-profit
    • Agencja Środowiskowa
    • Wynajem billboardów
    • Fotografia
    • Leasing rowerów
    • Sprzedawca oprogramowania
    Przeglądaj wszystkie branże
  • Community
    Ucz się
    • Samouczki
    • Dokumentacja
    • Certyfikacje
    • Szkolenie
    • Blog
    • Podcast
    Pomóż w nauce innym
    • Program Edukacyjny
    • Scale Up! Gra biznesowa
    • Odwiedź Odoo
    Skorzystaj z oprogramowania
    • Pobierz
    • Porównaj edycje
    • Wydania
    Współpracuj
    • Github
    • Forum
    • Wydarzenia
    • Tłumaczenia
    • Zostań partnerem
    • Usługi dla partnerów
    • Zarejestruj swoją firmę rachunkową
    Skorzystaj z usług
    • Znajdź partnera
    • Znajdź księgowego
    • Spotkaj się z doradcą
    • Usługi wdrożenia
    • Opinie klientów
    • Wsparcie
    • Aktualizacje
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Zaplanuj demo
  • Cennik
  • Pomoc

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Księgowość
  • Zapasy
  • PoS
  • Projekt
  • MRP
All apps
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
Wszystkie posty Osoby Odznaki
Tagi (Zobacz wszystko)
odoo accounting v14 pos v15
O tym forum
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
Wszystkie posty Osoby Odznaki
Tagi (Zobacz wszystko)
odoo accounting v14 pos v15
O tym forum
Pomoc

Forbidden Opcode in Server Action when Trying to Update Fields in Odoo 16

Zaprenumeruj

Otrzymaj powiadomienie o aktywności w tym poście

To pytanie dostało ostrzeżenie
purchasedevelopmentaccounting
2 Odpowiedzi
4360 Widoki
Awatar
AmirAkbari


Hello,

I am facing an issue with Odoo 16 when trying to implement a calculation in a Server Action for the Purchase Order Line model. I have added a custom field called "Currency Exchange Rate" (x_studio_monetary_field_atjMK) where users manually enter the exchange rate. I want to use this exchange rate to multiply the unit price (price_unit) and update the subtotal (price_subtotal) accordingly. The calculation should be:

makefileCopy codeprice_subtotal = price_unit * exchange_rate

However, I am getting the following error:

"forbidden opcode(s) in 'lambda': STORE_ATTR"

I understand that this error occurs because certain actions like direct field updates (record.price_subtotal = ...) are restricted in Server Actions for security reasons.

Here is the code I used for the Server Action:

if record.x_studio_monetary_field_atjMK:
    record.price_subtotal = record.price_unit * record.x_studio_monetary_field_atjMK
else:
    record.price_subtotal = record.price_unit

Is there any workaround or a proper way to perform this calculation and update the price_subtotal using a Server Action in Odoo 16? I would also be open to using a computed field if it helps resolve this issue.

Any help would be greatly appreciated!

Thank you.


0
Awatar
Odrzuć
Awatar
LandLogic IT s.n.c.
Najlepsza odpowiedź

Explanation and Solution:

The error occurs because Odoo restricts certain operations, such as direct field assignment (record.price_subtotal = ...), in Server Actions for security reasons. Instead, you should use one of the following approaches:

Solution 1: Use a Computed Field

Computed fields are the best approach for dynamic calculations. Here's how you can implement it:

  1. Add the Computed Field in Your Custom Module: Define a new computed field in your custom module to calculate the subtotal:
    from odoo import models, fields, api
    
    class PurchaseOrderLine(models.Model):
        _inherit = 'purchase.order.line'
    
        x_currency_exchange_rate = fields.Float(string="Currency Exchange Rate")
        x_computed_subtotal = fields.Float(
            string="Computed Subtotal",
            compute="_compute_computed_subtotal",
            store=True
        )
    
        @api.depends('price_unit', 'x_currency_exchange_rate')
        def _compute_computed_subtotal(self):
            for line in self:
                if line.x_currency_exchange_rate:
                    line.x_computed_subtotal = line.price_unit * line.x_currency_exchange_rate
                else:
                    line.x_computed_subtotal = line.price_unit
    
  2. Update the View: Add the new field (x_computed_subtotal) to the Purchase Order Line form/tree view so it is visible to users.

Solution 2: Use a Button Action or Python Script

If you need this calculation as a one-time update (e.g., triggered by a button), create a method in a custom module:

  1. Define the Button Action in Your Model:
    from odoo import models, fields
    
    class PurchaseOrderLine(models.Model):
        _inherit = 'purchase.order.line'
    
        def update_subtotal(self):
            for line in self:
                if line.x_currency_exchange_rate:
                    line.price_subtotal = line.price_unit * line.x_currency_exchange_rate
                else:
                    line.price_subtotal = line.price_unit
    
  2. Add the Button to the View: Add a button to trigger the update:
    <record id="view_purchase_order_line_form_inherit" model="ir.ui.view">
        <field name="name">purchase.order.line.form.inherit</field>
        <field name="model">purchase.order.line</field>
        <field name="inherit_id" ref="purchase.view_order_line_form"/>
        <field name="arch" type="xml">
            <button name="action_view_stock_moves" position="after">
                <button name="update_subtotal"
                        string="Update Subtotal"
                        type="object"
                        class="btn-primary"/>
            </button>
        </field>
    </record>
    

Solution 3: Use a Server Action (with Context/Write Workaround)

If you must use a Server Action, avoid direct field assignment. Use write() instead:

  1. Modify the Server Action Code: Replace direct assignment with the following:
    if record.x_studio_monetary_field_atjMK:
        new_subtotal = record.price_unit * record.x_studio_monetary_field_atjMK
    else:
        new_subtotal = record.price_unit
    record.write({'price_subtotal': new_subtotal})
    
  2. Test the Action: Ensure this action works as expected on the Purchase Order Lines.

Preferred Approach: Computed Field

The computed field approach is recommended because it keeps calculations dynamic and avoids manual intervention. It also respects Odoo's ORM structure and ensures maintainability.

1
Awatar
Odrzuć
Awatar
AmirAkbari
Autor Najlepsza odpowiedź

In Solution 3, when an automatic operation is created on the purchase order model and the Python code is registered, this does not happen in the final result (when I create a new invoice and manually fill in the currency conversion rate field created by the studio, multiply it by the unit price and then does not show in total)

0
Awatar
Odrzuć
Podoba Ci się ta dyskusja? Dołącz do niej!

Stwórz konto dzisiaj, aby cieszyć się ekskluzywnymi funkcjami i wchodzić w interakcje z naszą wspaniałą społecznością!

Zarejestruj się
Powiązane posty Odpowiedzi Widoki Czynność
Can I allow user to enter line-item extended price for Vendor Bills? Odoo 19
purchase accounting
Awatar
Awatar
Awatar
2
lis 25
277
ODOO 18.3 create vendor bill, upload vendor bill Rozwiązane
purchase accounting
Awatar
Awatar
Awatar
2
paź 25
985
Restrict QWeb Report in Print Menu to Vendor Payments Only in Odoo 17
development accounting
Awatar
Awatar
1
paź 25
572
odoo18 down payment
purchase accounting
Awatar
Awatar
Awatar
3
paź 25
2739
how to restrict the Employee from viewing the customer and vendor bill and payments and they only can do is they can genrate and create the new bills
purchase accounting
Awatar
Awatar
Awatar
4
paź 25
1074
Społeczność
  • Samouczki
  • Dokumentacja
  • Forum
Open Source
  • Pobierz
  • Github
  • Runbot
  • Tłumaczenia
Usługi
  • Hosting Odoo.sh
  • Wsparcie
  • Aktualizacja
  • Indywidualne rozwiązania
  • Edukacja
  • Znajdź księgowego
  • Znajdź partnera
  • Zostań partnerem
O nas
  • Nasza firma
  • Zasoby marki
  • Skontaktuj się z nami
  • Oferty pracy
  • Wydarzenia
  • Podcast
  • Blog
  • Klienci
  • Informacje prawne • Prywatność
  • Bezpieczeństwo Odoo
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo to pakiet aplikacji biznesowych typu open source, które zaspokoją wszystkie potrzeby Twojej firmy: CRM, eCommerce, księgowość, inwentaryzacja, punkt sprzedaży, zarządzanie projektami itp.

Unikalną wartością Odoo jest to, że jest jednocześnie bardzo łatwe w użyciu i w pełni zintegrowane.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now