تخطي للذهاب إلى المحتوى

حقل Company Dependent في Odoo: كيف يعمل ومتى تستخدمه

دليل عملي لواحدة من خصائص أودو الأكثر فائدةً ورغم ذلك التي يساء فهمها غالبًا
6 مارس 2026 بواسطة
حقل Company Dependent في Odoo: كيف يعمل ومتى تستخدمه
Dasolo
لا توجد تعليقات بعد

مقدمة


هناك عنصر بسيط في نموذج بيانات أودو لا يحظى بالاهتمام الكافي لكنه يغير قواعد اللعبة في بيئات الشركات المتعددة: الحقل الذي يخزن قيمة مختلفة لكل كيان قانوني داخل نفس السجل. قد يبدو بلا أهمية للوهلة الأولى، ولكنه يحل مشكلات تنظيمية وقياسية متكررة عند مشاركة سجلات بين شركات متعددة.


في التكوينات الاعتيادية، كل حقل في سجل يحمل قيمة واحدة يراها كل المستخدمين. لكن الواقع العملي يفرض اختلافات: نفس المنتج قد يحتاج رموزا داخلية مختلفة لكل شركة، أو حسابات افتراضية مختلفة عند تسجيل الإيراد. التحدي هو كيف تحتفظ بسجل مشترك بدون التضحية بإعدادات كل شركة.


هذا بالضبط ما يوفره خاصية company_dependent. سواء كنت مطوِّرا يصمم تعديلات أودو، أو مستشارا يعد هيكل بيانات لمجموعة شركات، فهم هذا النوع من الحقول يسهل إدارة القيم التي تختلف حسب الكيان القانوني دون تكرار السجلات.

ما هو الحقل المعتمد على الشركة في أودو


ببساطة، الحقل المعتمد على الشركة يخزن قيمة منفصلة لكل شركة على نفس السجل. عندما يفتح مستخدم من شركة (أ) السجل يقرأ قيمة الشركة (أ)، ومستخدم من شركة (ب) يقرأ قيمة مختلفة لنفس الحقل — وكل ذلك دون تكرار السجل نفسه.


على مستوى واجهة المستخدم لا يوجد اختلاف ملحوظ؛ يتصرف الحقل كما الحقول الاعتيادية بالنسبة للمستخدمين. الاختلاف يحدث داخليا في طريقة حفظ واسترجاع القيمة عبر طبقة ORM في أودو.


كيف يظهر في الواجهة

في واجهة أودو سيبدو الحقل تماما مثل أي حقل آخر، ولا يظهر أي مؤشر بصري يبيّن أن القيمة خاصة بكل شركة. هذا سلوك مقصود لضمان شفافية التجربة للمستخدمين النهائيين وعدم إرباكهم بمفاهيم متعددة الشركات.


من منظور المطور، يمكن تفعيل هذا السلوك على عدة أنواع حقول شائعة: نصي (Char)، منطقية (Boolean)، عدد صحيح/عشري، وصلات Many2one وغيرها. إضافة السمة company_dependent=True في تعريف الحقل هي التي تفعّل هذه الميزة داخل ORM.


في Odoo Studio بعض الحقول المعتمدة على الشركة متاحة بالفعل على نماذج قياسية — مثال حقول محاسبية على المنتج. يمكنك أيضا إنشاء حقول مخصصة تعتمد على الشركة، لكن دعم Studio لهذه الخاصية يختلف بين إصدارات أودو وقد لا يغطي كل الحالات المعقدة.

كيف يعمل الحقل


من الناحية التقنية يعمل هذا النوع من الحقول بشكل مختلف عن الحقول الاعتيادية، وفهم هذا الاختلاف يساعدك على تجنب سلوك غير متوقع عند بناء أو تصحيح التخصيصات.


التخزين في ir.property

في أودو 16 وما قبله، قيم الحقول المعتمدة على الشركة لا تُخزّن في جدول نموذج السجل نفسه، بل تُخزّن في جدول نظامي منفصل يسمى ir.property.

كل سجل في ir.property يربط بين:

  • سجل محدد (مثلا منتج ذو معرف 42)
  • حقل محدد (مثل property_account_income_id)
  • شركة معينة
  • والقيمة الخاصة بهذا المزيج

لذلك يظل السلوك شفافا للمستخدمين: الـ ORM هو الذي يقرأ ويكتب من/إلى ir.property تلقائيا بناء على سياق الشركة النشطة.


التغييرات في أودو 17 وما بعدها

ابتداءً من أودو 17 تغيرت آلية التخزين: أصبحت قيم الحقول المعتمدة على الشركة تحفظ مباشرة داخل جدول النموذج باستخدام عمود jsonb، بحيث تُخزن قيم الشركات كقاموس JSON. هذا التغيير حسّن الأداء وسهّل الاستعلامات على نطاق واسع.


الواجهة وواجهة برمجة التطبيقات للمطور لم تتغير، لكن الاستعلامات على هذه الحقول أصبحت أسرع وأكثر قابلية للتعامل في قواعد بيانات كبيرة.


القيم الافتراضية

تدعم الحقول المعتمدة على الشركة قيم افتراضية لكل شركة. إذا لم تُحدد قيمة لشركة معينة، يعود الحقل إلى القيمة الافتراضية المعرّفة على الحقل نفسه. في أودو 16 وما قبله تُدار هذه الافتراضات عبر ir.property، أما في أودو 17 فما فوق فتصبح مخزنة ومُدارة بشكل مباشر على مستوى النموذج.


التفاعل مع ORM

عند الوصول لحقل معتمد على الشركة، يلتزم الـ ORM بسياق الشركة النشطة (self.env.company). وهذا يعني:

  • قراءة الحقل تُرجع قيمة الشركة النشطة
  • الكتابة تُحدّث قيمة الشركة النشطة فقط
  • وتغيير السياق باستعمال record.with_company(company) يسمح بالقراءة والكتابة لقيمة شركة محددة

حالات استخدام تجارية


الحقل المعتمد على الشركة ليس مجرد ميزة تقنية؛ له تطبيقات عملية يومية في إعدادات الشركات المتعددة. هذه أمثلة شائعة تبين قيمته الحقيقية.


1. المحاسبة: حسابات الإيراد والمصروف لكل شركة

هذا المثال منتشر في أودو بشكل افتراضي؛ على سبيل المثال property_account_income_id و property_account_expense_id على المنتج تكون معتمدة على الشركة.


فعليا: شركتا مجموعة تبيعان نفس المنتج لكن كل منهما يملك شجرة حسابات مختلفة. بدلا من تكرار المنتج، يملك كل كيان إعداداته المحاسبية على نفس السجل المشترك، في ظل فصل المنطق المالي.


2. المبيعات وإدارة العملاء: قوائم أسعار مختلفة لكل شركة

عند وجود كيانات بيع متعددة داخل مجموعة، قد تختلف استراتيجيات التسعير. حقل قائمة السعر المعتمد على الشركة يسمح لسجل عميل مشترك أن يحمل قوائم سعر افتراضية مختلفة حسب الشركة التي تنفذ عملية البيع.


بهذا الشكل تبقى بيانات العملاء مركزية بينما تطبق كل شركة قواعدها التجارية الخاصة.


3. المخزون: طرق تقييم المخزون حسب الشركة

بعض المجموعات تدير مستودعات عبر كيانات قانونية مختلفة مع قواعد محلية متباينة. قد يحتاج المنتج إلى طريقة FIFO في بلد ومتوسط في آخر؛ الحقول المعتمدة على الشركة على المنتج أو الفئة تمنع تكرار كتالوج المنتج بالكامل.


4. التصنيع: المورد الافتراضي لكل شركة

عندما يشترى نفس المنتج من موردين مختلفين حسب الكيان، يمكن لحقل Many2one معتمد على الشركة يشير إلى res.partner أن يخزن المورد المفضل لكل شركة بشكل منفصل دون تعارض.


5. حقول مخصصة للامتثال التنظيمي

المجموعات متعددة البلدان تحتاج أحيانا حفظ مراجع امتثال مختلفة على السجلات المشتركة — مثل رموز HS أو تصنيفات ضريبية محلية. حقل Char معتمد على الشركة يقدم حلا بسيطا ومنظما دون الحاجة لإنشاء نسخ من النموذج.

إنشاء الحقل أو تخصيصه


هناك طريقتان أساسيتان لإنشاء هذه الحقول: عبر Odoo Studio أو بكتابة كود بايثون في وحدة مخصصة.


باستخدام Odoo Studio

يسمح لك Odoo Studio بإنشاء حقول بدون برمجة، لكنه لا يعرض دائما خيارا واضحا لتفعيل company_dependent في كل الإصدارات. في أودو 16 و17 قد تجده لبعض أنواع الحقول على النماذج القياسية.


للسيطرة الكاملة على السلوك يظل التطوير التقني أكثر مرونة وموثوقية. Studio مناسب للحالات البسيطة، لكنه قد لا يكفي في سيناريوهات تخصيص متقدمة.


النهج التقني: حقول بايثون

في وحدة مخصصة تعريف حقل معتمد على الشركة بسيط وواضح — هذا هو النمط المتبع عادة في تطوير حقول أودو.

مثال شائع لتوضيح الفكرة (تعريفات في بايثون مع company_dependent=True)

إضافة company_dependent=True لأي تعريف حقل كافية؛ الـ ORM يتولى التعامل مع التخزين والقراءة والكتابة بدون إعداد إضافي.


تعيين القيم الافتراضية لكل شركة

في أودو 16 وما قبله يمكنك تعيين قيمة افتراضية على مستوى الشركة عبر ir.property، مفيد لإعطاء قيمة معقولة لجميع سجلات شركة دون ضبط كل سجل على حدة.

مثال برمجي لاستدعاء _set_default على ir.property

في أودو 17+ أصبحت القيم الافتراضية تُخزن وتُدار مباشرة من على سجلات النموذج أو من تعريف الحقل نفسه.


حقول Odoo Studio وحدودها

تذكر أن الحقول المخصصة تتطلب بادئة x_ وأن سلوك company_dependent قد لا يظهر بالكامل في واجهة Studio. في كثير من الحالات تحتاج لتمكين وضع المطور والولوج إلى القوائم التقنية لضبط الخاصية بدقة.

ممارسات موصى بها


العمل مع الحقول المعتمدة على الشركة يصبح سهلًا إذا اعتمدت بعض الأنماط العملية. النصائح التالية ستوفر عليك وقتا وتجنب أخطاء شائعة.


1. استخدمها فقط عندما تختلف القيم فعلاً بين الشركات

إضافة شركة كعنصر للاسم المنطقي يزيد التعقيد. إذا كانت القيمة موحدة عبر كل الشركات فالأفضل أن تكون حقلًا عاديًا؛ احتفظ company_dependent=True للحالات التي تحتاج اختلافا حقيقيا.


2. اختبر دائما في سياق شركات متعددة

ابني اختباراتك وجرب وظائفك على الأقل مع شركتين تفعيلتين. الأخطاء التي لا تظهر في نظام شركة واحدة ستظهر فورا في بيئة متعددة الشركات.


3. استعمل with_company() عند الحاجة للعمل عبر شركات

إذا كان كودك يحتاج قراءة أو كتابة لقيم شركة غير الحالية، استخدم record.with_company(target_company) ولا تغير سياق البيئة يدويا بدون استرجاعه.


4. كن حذرا عند التصدير والاستيراد

القيم المصدرة تعكس شركة المستخدم الذي يقوم بالتصدير. واستيراد نفس الملف تحت شركة مختلفة سيعيّن القيم لتلك الشركة — أحيانا هذا مطلوب، لكن يجب توثيقه بوضوح في إجراءات ترحيل البيانات.


5. وثّق الحقول المعتمدة على الشركة

المستخدمون لا يعرفون عادة أي الحقول معتمدة على الشركة. ملاحظة قصيرة في وثائق النظام الداخلية أو دليل التدريب تمنع الالتباس عند تبديل الشركات ورؤية قيم مختلفة لنفس السجل.


6. فضّل Many2one على Char للبيانات الهيكلية

إذا كانت القيمة تشير إلى سجل آخر (حساب، قائمة أسعار، شريك) فالأفضل استخدام Many2one معتمد على الشركة بدلا من تخزين اسم كنص. هذا يحافظ على نموذج بيانات نظيف ويسهّل التقارير.


المشكلات الشائعة


حتى المطورون المخضرمون قد يصطدمون بمشكلات عند التعامل مع هذه الحقول؛ التعرف على الأخطاء المتوقعة يوفر وقتا ثمينا في التصحيح.


مشكلة 1: نسيان سياق الشركة في الإجراءات التلقائية

العمليات المجدولة والإجراءات الخادمية قد تعمل ضمن سياق شركة افتراضية (أول شركة في قاعدة البيانات) وليس الشركة التي تتوقعها. إذا كانت العملية تقرأ أو تكتب حقل معتمد على الشركة، فامنح السياق صراحة باستخدام with_company().


مشكلة 2: افتراض سلوك الحقول المحسوبة

الحقول المعتمدة على الشركة ليست حقولا محسوبة؛ لا تحتوي على دالة compute. الاختلاف يرجع للتخزين وليس للحساب. محاولة دمج compute مع company_dependent قد تؤدي لأخطاء أو سلوك غير متوقع.


مشكلة 3: البحث عبر شركات متعددة

استعلامات ORM الاعتيادية على هذه الحقول تعيد نتائج ضمن سياق الشركة الحالية فقط. إذا احتجت للبحث عبر كل الشركات يجب الاستعلام مباشرة في ir.property (أودو 16 وما قبله) أو التعامل بعناية مع عمود jsonb في أودو 17+ — وهذا مصدر شائع للارتباك في التقارير.


مشكلة 4: عدم ضبط القيم الافتراضية لكل الشركات

عند إضافة حقل معتمد على الشركة لنظام حي، السجلات القديمة ستُرجع قيمة False أو None لكل شركة لم تُحدد لها قيمة. إذا كان المنطق يتوقع افتراضا، اضبط القيمة الافتراضية لكل الشركات عبر سكريبت ترحيل.


مشكلة 5: الخلط بينها وبين صلاحيات الوصول

الحقل المعتمد على الشركة يحدد أي قيمة يُعرض، وليس من يمكنه رؤية الحقل ككل. إذا أردت إخفاء حقل عن شركات أو مستخدمين محددين استخدم قواعد السجلات أو صلاحيات الحقول، وليس company_dependent.

خلاصة


الحقل المعتمد على الشركة هو ميزة تبدو خفية حتى تحتاجها، ثم تدرك أنها لا غنى عنها. هو الأداة الصحيحة عندما يحتاج نفس السجل إلى قيم مختلفة حسب الكيان القانوني: إعدادات محاسبية، سياسات تسعير، مراجع تنظيمية، أو أي سمة تجارية تختلف باختلاف الشركة.


فهم كيفية عملها في مستوى ORM، ومعرفة الفرق بين إصدارات أودو فيما يتعلق بالتخزين، وتجنب الأخطاء الشائعة سيوفر عليك وقتا كبيرا في مشاريع متعددة الشركات. سواء صادفتها خلال دليل التطوير أو أثناء تصحيح نظام حي، إتقان هذه الخاصية يميّز المطور المتمرس.


إذا كنت تطور على أودو وتحتاج إدارة بيانات لكل شركة بشكل منظم، فخاصية company_dependent=True هي الحل العملي الذي تبحث عنه.

هل تحتاج مساعدة في تنفيذ أودو؟


في Dasolo نرافق الشركات في تنفيذ، تخصيص، وتحسين أودو عبر أحجام وتعقيدات مختلفة، بما في ذلك بيئات الشركات المتعددة. سواء احتجت لإعادة تصميم نموذج بيانات، استراتيجية حقول مخصصة، أو نشر كامل لأودو، فريقنا يجمع بين الخبرة التقنية والوظيفية لتنفيذ الحل المناسب.


إذا كانت لديك أسئلة عن الحقول المعتمدة على الشركة أو أي جانب آخر من تنفيذ أودو، يسعدنا أن نساعدك. تواصل معنا ولنتحدث عما تريد بناءه.

حقل Company Dependent في Odoo: كيف يعمل ومتى تستخدمه
Dasolo 6 مارس 2026
شارك هذا المنشور
تسجيل الدخول حتى تترك تعليقاً