Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
Hotfix release available: 2023-04-04a "Jack Jackrum". upgrade now! [54.1] (what's this?)
New release available: 2023-04-04 "Jack Jackrum". upgrade now! [54] (what's this?)
Hotfix release available: 2022-07-31b "Igor". upgrade now! [53.1] (what's this?)
Hotfix release available: 2022-07-31a "Igor". upgrade now! [53] (what's this?)
New release available: 2022-07-31 "Igor". upgrade now! [52.2] (what's this?)
New release candidate 2 available: rc2022-06-26 "Igor". upgrade now! [52.1] (what's this?)
New release candidate available: 2022-06-26 "Igor". upgrade now! [52] (what's this?)
Hotfix release available: 2020-07-29a "Hogfather". upgrade now! [51.4] (what's this?)
it:openerp:general

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
it:openerp:general [2026/03/13 12:29]
47.128.46.82 old revision restored (2025/06/24 06:09)
it:openerp:general [2026/03/15 08:42] (current)
47.128.47.104 old revision restored (2025/11/07 09:15)
Line 1: Line 1:
 ====== OpenERP ====== ====== OpenERP ======
  
-====== kontextsensitive Hilfe ====== +===== zu klärende Fragen zum Einstieg ===== 
-Über context_help kann man eine beliebige Hilfe-Seite angeben.+  * wie werden gelöschte Datensätze behandelt? (aus Tabelle gelöscht und wohin?) 
 +  * Anbindung an OpenOffice 
 +  * Zuordnung Users zu partners 
 +    * res.partner's Feld 'user_id' welches auf den Salesman verweist scheint hierfür genutzt zu werden.
  
-====== Images in __openerp__ hinterlegbar für Demo ====== +====== OpenERP Entwicklung ====== 
-Man kann eine Voransicht auf sein Modul als Screenshot hinterlegen und dieses über den Key __images__ einbinden:+[[openerp:pitfalls]]
  
-<code xml> +===== Standardmäßig extended view für admin setzen =====
-    ... __openerp__.py +
-    'images': ['images/g1.png', 'images/g2.png', 'images/g3.png'], +
-    ... +
-</code> +
- +
-====== Server Konfigurationsdatei ====== +
-  * Damit kann man scheinbar einen Login hinterlegen - praktisch +
-  * Auto-Save für Formulare +
-  * [[http://doc.openerp.com/v6.0/developer/1_1_Introduction/3_configuration.html]] +
- +
-====== Standardmäßig extended view für admin setzen ======+
 <code xml> <code xml>
 <!-- Set Extended View for Administrator --> <!-- Set Extended View for Administrator -->
Line 26: Line 18:
 </code> </code>
  
-====== Felder anhand von Status sperren ======+===== Felder anhand von Status sperren =====
 <code python> <code python>
 'reference': fields.char('Reference', size=128, required=1, states={'done': [('readonly', True)]}), 'reference': fields.char('Reference', size=128, required=1, states={'done': [('readonly', True)]}),
Line 32: Line 24:
                  
                  
-====== Spalten Create_Date und Write_Date einblenden: ======+===== Spalten Create_Date und Write_Date einblenden: =====
 <code python> <code python>
 _columns = { _columns = {
Line 40: Line 32:
 </code> </code>
  
-====== Encoding ======+===== Encoding =====
 Unbedingt alle Python Dateien mit UTF-8 explizit kodieren, um ASCII-Konvertierungsfehler zu vermeiden. Unbedingt alle Python Dateien mit UTF-8 explizit kodieren, um ASCII-Konvertierungsfehler zu vermeiden.
 <code python> <code python>
Line 46: Line 38:
 </code> </code>
  
-====== Domain Filter auf one2many Spalte ======+===== Domain Filter auf one2many Spalte =====
 [[http://www.openerp.com/forum/topic23503.html]] [[http://www.openerp.com/forum/topic23503.html]]
-====== Active Spalte ======+===== Active Spalte =====
  
 Legt man eine Bool-Spalte namens "active" an, wird dieses standardmäßig in Domains abgefragt. Legt man eine Bool-Spalte namens "active" an, wird dieses standardmäßig in Domains abgefragt.
  
-====== Message an ui ======+===== Message an ui =====
  
  
Line 63: Line 55:
 </code> </code>
  
-===== Übersetzung der message =====+=== Übersetzung der message ===
 In der .po Datei In der .po Datei
 <code> <code>
Line 76: Line 68:
 "die Produktmengeneinheit (ME) des Einkaufs befindet" "die Produktmengeneinheit (ME) des Einkaufs befindet"
 </code> </code>
- +===== einen String übersetzen =====
-====== einen String übersetzen ======+
 <code python> <code python>
 from tools.translate import _ from tools.translate import _
Line 85: Line 76:
  
 </code> </code>
-====== summmen von float fields im tree ====+===== summmen von float fields im tree ====
 <code xml> <code xml>
 <field name="residual" sum="Residual Amount"/> <field name="residual" sum="Residual Amount"/>
 </code> </code>
-====== ein browse-objekt per xml-id holen ======+===== ein browse-objekt per xml-id holen =====
 <code python> <code python>
 print pool.get("ir.model.data").get_object(cr, uid, "cp_crm", "salutation_1").title print pool.get("ir.model.data").get_object(cr, uid, "cp_crm", "salutation_1").title
 </code> </code>
  
-====== kontextsensitive Suchformulare ======+===== kontextsensitive Suchformulare =====
  
 <code> <code>
Line 120: Line 111:
         return{'domain':d}         return{'domain':d}
 </code> </code>
- +==== Context => auf übergeordnete Felder zugreifen ===
-====== Context => auf übergeordnete Felder zugreifen =====+
 <code xml> <code xml>
 <field name="product_id" colspan="4" context="partner_id=parent.partner_id,quantity=product_qty,pricelist=parent.pricelist_id,uom=product_uom,warehouse=parent.warehouse_id"/> <field name="product_id" colspan="4" context="partner_id=parent.partner_id,quantity=product_qty,pricelist=parent.pricelist_id,uom=product_uom,warehouse=parent.warehouse_id"/>
Line 139: Line 129:
 </code> </code>
  
-====== Spezifischen View in Field durch context verwenden ======+===== Spezifischen View in Field durch context verwenden =====
 <code xml> <code xml>
 #zur Verfügung stehen search_view_ref, form_view_ref und tree_view_ref #zur Verfügung stehen search_view_ref, form_view_ref und tree_view_ref
Line 145: Line 135:
 </code> </code>
  
-====== Filter durch Context setzen ======+===== Filter durch Context setzen =====
 <code xml> <code xml>
  
Line 155: Line 145:
 # 1 = filter an, 0 = filter aus # 1 = filter an, 0 = filter aus
 </code> </code>
- +===== SQL Constraints =====
-====== SQL Constraints ======+
  
 Im Modul res.groups habe folgende Anweisung entdeckt: Im Modul res.groups habe folgende Anweisung entdeckt:
Line 168: Line 157:
 und nicht zwei. und nicht zwei.
  
-====== xml_id in id umwandeln ======+===== xml_id in id umwandeln =====
 <code xml> <code xml>
 <record id="server_action_assign_task" model="ir.actions.server"> <record id="server_action_assign_task" model="ir.actions.server">
Line 188: Line 177:
  
  
-====== domain in action window mit xml_id ======+===== domain in action window mit xml_id =====
 <code xml> <code xml>
 <field name="domain" eval="[('user_id','=',ref('base.user_root'))]"/> <field name="domain" eval="[('user_id','=',ref('base.user_root'))]"/>
 </code> </code>
  
-====== lambda Ausdrücke in defaults columns ======+===== lambda Ausdrücke in defaults columns =====
 <code python> <code python>
  
Line 215: Line 204:
      }      }
 </code> </code>
- +===== defaults überschreiben =====
-====== defaults überschreiben ======+
 Hiermit wird der default Wert des Feldes date überschrieben.  Hiermit wird der default Wert des Feldes date überschrieben. 
 <code xml> <code xml>
 <field name="works" colspan="4" nolabel="1" mode="tree,form" context="{'default_date': date_current + time.strftime(' %%H:%%M:%%S')}"> <field name="works" colspan="4" nolabel="1" mode="tree,form" context="{'default_date': date_current + time.strftime(' %%H:%%M:%%S')}">
 </code> </code>
- +==== Praktische Parameter der openerp_server.py ====
-====== Praktische Parameter der openerp_server.py ======+
 Um nur ein spezifisches Modul beim start neu zu laden: Um nur ein spezifisches Modul beim start neu zu laden:
  
Line 228: Line 215:
      
   -----------------   -----------------
- +===== Model Ebene ===== 
-====== Felder: one2many - was wird angezeigt ======+== Felder ==
 Wenn das Feld related auf ein one2many Feld zeigt, dann wird dort das erste Element verwendet Wenn das Feld related auf ein one2many Feld zeigt, dann wird dort das erste Element verwendet
 unter Beachtund der Sortierung (_order). unter Beachtund der Sortierung (_order).
  
-====== Erweitern von Standard Selection Fields ======+== Erweitern von Standard Selection Fields ==
  
 Beispielsweise gibt es bei res.partner ein Auswahlfeld für den Adresstyp. Um diesen  Beispielsweise gibt es bei res.partner ein Auswahlfeld für den Adresstyp. Um diesen 
 zu erweitern, muss im __init__.py der eigenen Klasse per Programmcode die neuen Selections zu erweitern, muss im __init__.py der eigenen Klasse per Programmcode die neuen Selections
 hinzugefügt werden. Geht so: hinzugefügt werden. Geht so:
- 
-<note important>Miki hat herausgefunden, dass die alten Selection-Werte erhalten bleiben. Damit ist  
-folgendes Vorgehen eigentlich nicht mehr so notwendig und vereinfacht sich so, dass nur ein weiteres 
-selection-Feld hinzugefügt werden muss. Dieses ergänzt dann die Auswahlwerte.</note> 
  
 <code python> <code python>
Line 254: Line 237:
 </code> </code>
  
-====== Feldattribute in Abhängigkeit vom Status setzen, z.B. readonly nur bei Draft ======+== Readonly nur bei bestimmten Status True ==
 <code python> <code python>
  
Line 264: Line 247:
 <group attrs="{'readonly': [('field_name', '=', 'value')]}"> <group attrs="{'readonly': [('field_name', '=', 'value')]}">
 </code> </code>
- +==== Many2Many Felder Füllen ====
-====== Many2Many Felder Füllen ======+
 <code> <code>
         Note: The type of field values to pass in vals for relationship fields is specific:         Note: The type of field values to pass in vals for relationship fields is specific:
Line 337: Line 319:
  
  
-====== Aus einem Tree oder From View einen anderen View per Python-Code öffnen ====== +===== View Ebene ===== 
 +=== View öffnen === 
 +Aus einem Tree oder From View einen anderen View öffnen
  
 <code python> <code python>
 #wizard erstellen #wizard erstellen
-class open_ref_wizard(osv.osv_memory):+class open_ref_wizard(wizard.interface):
          
     def open_ref(self, cr, uid, data, context):     def open_ref(self, cr, uid, data, context):
Line 348: Line 331:
         return {         return {
             'name': 'test',             'name': 'test',
-            'context': context,  
             'view_type': 'form',             'view_type': 'form',
-            'view_mode': 'form,tree,calendar',+            'view_mode': 'form,tree',
             'res_model': model,             'res_model': model,
-            'res_id': id,+            'res_id': int(id),
             'view_id': False,             'view_id': False,
             'type': 'ir.actions.act_window',             'type': 'ir.actions.act_window',
             'target': 'new',             'target': 'new',
-            #weitere parameter: +        } 
-            'nodestroy': True  #keine Ahnung was der macht +         
-            'views': [(view_id_cal, 'calendar'), (view_id_form, 'form'), (view_id_tree, 'tree')],+    states = { 
 +        'init': { 
 +            'actions': [], 
 +            'result':
 +                'type': 'action', 
 +                'action': open_ref, 
 +                'state':'end', 
 +            }
         }         }
     }     }
- +open_ref_wizard('cp_cash.open_ref')
-open_ref_wizard()+
 </code> </code>
  
-<note tip>res_id ist die Instanz-ID von res_model und **muss ein int** sein (kein List, Tuple, Array) </note> 
- 
-<note warning>Das hat nicht funktioniert: wenn man in view_id eine Liste oder Int setzt, dann kommt zwar der web-client damit klar, aber nicht der GUI Client. Mit dem Parameter views gehts.</note> 
- 
-====== Old-Style Wizards ====== 
 <code xml> <code xml>
 <!-- wizard definieren --> <!-- wizard definieren -->
Line 377: Line 360:
 <button string="Open Ref" name="%(open_ref)d" type="action" icon="gtk-open" /> <button string="Open Ref" name="%(open_ref)d" type="action" icon="gtk-open" />
 </code> </code>
-====== Message an UI ======+=== Message an UI ===
 <code python> <code python>
 raise osv.osv.except_osv("Message", Values_For_Message, exc_Type) raise osv.osv.except_osv("Message", Values_For_Message, exc_Type)
 </code> </code>
  
-====== Events in Feldern ======+== Events ==
 Felder in Views haben ein "onchange" event Attribut: Felder in Views haben ein "onchange" event Attribut:
 [[http://doc.openerp.com/v6.0/developer/2_6_views_events/events/events.html#on-change]] [[http://doc.openerp.com/v6.0/developer/2_6_views_events/events/events.html#on-change]]
Line 402: Line 385:
  
  
-====== Objekt-ID per XML-ID holen ====== 
-<code python> 
-xml_id = "message_new_allocation" 
-try: 
-  _, id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, xml_id) 
-except: 
-  id = None 
-</code> 
  
-@Miki: wo ist die get_object Methode??? +==== Links ====
-====== menue.xml ====== +
-<code xml> +
-<openerp> +
- <data> +
-        <record model="ir.actions.act_window" id="ACTION_ID"> +
-            <field name="name">Label of the window</field> +
-            <field name="res_model">cp_base.the_cool_entity</field> +
-            <field name="view_mode">tree,form,graph</field> +
-        </record> +
- <record model="ir.actions.server" id="ACTION_ID"> +
-            <field name="name">Label</field> +
-            <field name="model_id" search="[('name', '=', 'cp_base.irgendwas')]" /> +
-            <field name="type">ir.actions.server</field> +
-            <field name="state">code</field> +
-            <field name="code"> +
-            #method must have params(self, cr, uid, *args) +
-            obj.a_cool_method() +
-             +
-            </field> +
-        </record> +
-  +
-  +
-        <menuitem name="Label" icon="terp-project" parent="base.menu_administration" id="menu1"/> +
-        <menuitem name="SubmenuLabel" parent="menu1" id="menu2" action="ACTION_ID" type="server"/> +
-         +
- </data> +
-</openerp> +
-</code>+
  
-====== view.xml ====== +[[it:infrastruktur:server:openerp]]
-<code xml> +
-<openerp> +
-    <data> +
-        <record id="view_payment_tree" model="ir.ui.view"> +
-            <field name="name">cp_cash.payment.tree</field> +
-            <field name="model">cp_cash.payment</field> +
-            <field name="type">tree</field> +
-            <field name="arch" type="xml"> +
-                <tree string="Payment"> +
- <field name="pay_date" /> +
-                    <field name="income" /> +
-                    <field name="amount" /> +
-                    <field name="name" /> +
- <field name="invoice_date" /> +
- <field name="due_date" /> +
-               <field name="recurring_monthly" /> +
-               <field name="recurring_until" /> +
-               <field name="partner_id" /> +
-               <field name="company_id" /> +
-                </tree> +
-            </field> +
-        </record> +
-        <record id="view_payment_search" model="ir.ui.view"> +
-        <field name="name">cp_cash.payment.search</field> +
-        <field name="model">cp_cash.payment</field> +
-        <field name="type">search</field> +
-        <field name="arch" type="xml"> +
-        <search string="Search"> +
-        <filter string="Recurring Monthly" domain="[('recurring_monthly', '=', True)]" help="Recurring Monthly True" icon="terp-project"/> +
-        </search> +
-        </field> +
-        </record>+
  
-        <record id="view_payment_form" model="ir.ui.view"> +[[it:openerp:client| OpenERP Client]
-            <field name="name">cp_cash.payment.form</field> +==== Schnittstellen ====
-            <field name="model">cp_cash.payment</field> +
-            <field name="type">form</field> +
-            <field name="arch" type="xml"> +
-                <form string="Payment"> +
-                <field name="name"/> +
-                <field name="partner_id"/> +
-                <field name="recurring_monthly"/> +
-                <field name="recurring_until"/> +
-                <group colspan="4" col="6"> +
-                <separator string="Amounts and Dates" colspan="6"/> +
-                <group colspan="6" col="4"> +
-                 <field name="income"/> +
-                 <field name="amount"/> +
-                <field name="pay_date"/> +
-                </group> +
-                <separator string="Invoice Details" colspan="6"/> +
-                 <group colspan="4" col="6"> +
-                 <field name="invoice_date"/> +
-                  <field name="due_date"/> +
-                </group> +
-                </group> +
-                <separator string="Notes" colspan="4"/> +
-                <field name="notes" colspan="4" nolabel="1"/> +
-                </form> +
-            </field> +
-        </record> +
-         +
-        <record model="ir.ui.view" id="view_payments_line_graph"> +
-    <field name="name">payments.line.graph</field> +
-    <field name="model">cp_cash.payment</field> +
-    <field name="type">graph</field> +
-    <field name="arch" type="xml"> +
-          <graph string="Payments"> +
-               <field name="pay_date" group="1" /> +
-               <field name="amount" operator="+" /> +
-         </graph> +
-     </field> +
- </record> +
-    </data> +
-</openerp+
-</code> +
- +
-====== Action-Button und Methode aus Model ====== +
- +
-**Methode in Model**: +
-<code python> +
-def assign_task_to_me(self, cr, uid, ids, *args): +
-    +
-=======    ... +
-       return True #or raise Exception +
-</code> +
- +
-**View XML**: +
-<code xml> +
-<button name="assign_task_to_me" string="Assign task to me" type="object" icon="gtk-execute" /> +
-</code> +
-====== Kontextbezogenes Editieren ====== +
-<code xml> +
-<field name="works" colspan="4" nolabel="1" mode="tree,form" context="{'default_date': date_current + time.strftime(' %%H:%%M:%%S')}"> +
-</code> +
- +
-====== SQL Constraints in Python-Klassen ====== +
-<code python> +
-     _sql_constraints = [ +
-         ('type_value', "CHECK( (holiday_type='employee' AND employee_id IS NOT NULL) or (holiday_type='category' AND category_id IS NOT NULL))", "You have to select an employee or +
-         ('date_check', "CHECK ( number_of_days_temp > 0 )", "The number of days must be greater than 0 !"), +
-         ('date_check2', "CHECK ( (type='add') OR (date_from < date_to))", "The start date must be before the end date !") +
-     ] +
- +
- +
-</code> +
- +
-====== Tree Farben ====== +
-<code xml> +
-<tree colors="red:state in ('refuse');blue:state in ('draft');black:state in ('confirm','validate','validate1')" string="Leaves"+
-</code>+
  
 +=== Agenda ===
  
 +== Offene Posten ==
  
 +[[it:openerp:schnittstellen_agenda]]
  
it/openerp/general.1773404989.txt.gz · Last modified: 2026/03/13 12:29 by 47.128.46.82