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

حقل Date في Odoo: الدليل الكامل للمطورين والمستخدمين

دليل مبسّط ومتكامل لحقل التاريخ في نموذج البيانات بأودو: من الاستخدامات اليومية إلى تخصيصه تقنياً
6 مارس 2026 بواسطة
حقل Date في Odoo: الدليل الكامل للمطورين والمستخدمين
Dasolo
لا توجد تعليقات بعد

مقدمة


إن سبق لك أن فتحت أمر بيع أو مهمة مشروع أو أمر تصنيع في Odoo، فربما تعاملت مع حقل التاريخ دون أن تلاحظه. مواعيد التسليم، تواريخ الاستحقاق، بداية العقود — معظم المعلومات المرتبطة بالزمان في النظام تُخزن باستخدام هذا النوع من الحقول.

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

في هذا الدليل ستجد موجزاً عملياً عن حقل التاريخ في Odoo: ما الذي يخزنه بالضبط، كيف يظهر للمستخدم، وكيفية استخدامه بفعالية في إجراءات عملك اليومية.

ما هو حقل التاريخ في Odoo


حقل التاريخ في إطار Odoo مخصص لتخزين اليوم والشهر والسنة فقط — لا يحتوي على ساعة أو دقيقة. قيمة مثل "2026-03-06" تُخزن كقيمة تاريخ نقية دون إضافة وقت اليوم.

في قاعدة البيانات PostgreSQL، يُطابق ذلك عمود من نوع DATE، وهو مختلف عن TIMESTAMP المستخدم في حقول التاريخ والوقت التي تحمل طابعاً زمنياً كاملاً.

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

مثال للاستخدام العملي

في كود Python (كمثال واقعي)، تضيف حقل تاريخ جديد على نموذج مشروع ليصبح موعداً مؤكداً للانتهاء، مصاحباً بتعريف موجز يوضح الغرض من الحقل.

في Odoo Studio يتم تسمية هذا النوع من الحقول ببساطة "Date"، ويُضاف له تلقائياً بادئة x_studio_ عند إنشائه من الواجهة. إذا أنشأته عبر كود فني فأنت تختار الاسم الفني بنفسك.

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


التفرقة بين Date و DateTime: ما الذي يتغير فعلاً

النقطة الأساسية: حقل التاريخ لا يحمل وقتاً على الإطلاق. لا توجد تحويلات زمنية أو ساعات مخفية — فقط التاريخ التقويمي ذاته.

أما حقول DateTime فتخزن وقتاً كاملاً (توقيت UTC عادة) وتُحوّل عند العرض إلى توقيت المستخدم، مما يسبب كثيراً من الالتباس عندما يُستخدم وقت غير ضروري ببيانات تعتمد فقط على اليوم.

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

السمات الأساسية للحقل

فيما يلي الخصائص المهمة التي يمكنك ضبطها على حقل التاريخ داخل إطار عمل Odoo:

  • required: يجعل الحقل إلزامياً في الواجهة وعلى مستوى النموذج، فلا يمكن حفظ السجل بدونه.
  • default: يحدد قيمة افتراضية. مثلاً fields.Date.today يعطي تاريخ اليوم كسلوك افتراضي عند إنشاء السجل.
  • index: ينشئ فهرس قاعدة بيانات لتحسين أداء عمليات البحث والتصفية على الحقل.
  • compute: يربط الحقل بدالة Python تحسب قيمته ديناميكياً عند تغير حقول معتمدة.
  • store: مع compute يسمح بحفظ النتيجة في القاعدة بحيث يمكن البحث والتجميع عليها.
  • readonly: يمنع المستخدمين من تعديل الحقل يدوياً في الواجهة.
  • copy: يحدد ما إذا كانت القيمة تنتقل عند تكرار السجل؛ الافتراضي True.

كيف يظهر الحقل في العروض

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

تنسيق العرض يتبع إعدادات لغة المستخدم — بعض البلدان تعرض الشهر أولا والبعض اليوم — بينما التخزين الداخلي دائماً بصيغة ISO (YYYY-MM-DD).

التعامل مع ORM الخاص بـ Odoo

عند قراءته برمجياً، يعيد ORM كائن datetime.date في بايثون أو False إذا كان الحقل فارغاً. وعند الكتابة يمكنك تمرير كائن datetime.date أو سلسلة بصيغة YYYY-MM-DD. عبر XML-RPC تُمرّر التواريخ كسلاسل نصية.

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

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


أمثلة عملية من الواقع

CRM: تواريخ بداية ونهاية العقود

فرق المبيعات تسجّل عادة تواريخ بدء وانتهاء العقود على الفرص أو على سجلات مخصصة لتتبع مدة التعاقد وموعد التجديد.

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

المبيعات: تواريخ التسليم المطلوبة من العميل

كثير من العملاء يطلبون يوماً محدداً للتسليم، لذا تسجيل "تاريخ طلب العميل" على أمر البيع يمنح فرق التشغيل هدفاً واضحاً للتخطيط.

استخدام حقل تاريخ بدلاً من وقت كامل يبقي الأمور بسيطة ويجنب أخطاء تحويل المناطق الزمنية بين فرق المبيعات والمستودع.

المخزون: تواريخ انتهاء الصلاحية على الدُفعات

في صناعات مثل الأغذية أو الأدوية تُخزن تواريخ انتهاء الصلاحية على دُفعات المنتجات باستخدام حقول التاريخ على سجلات stock.lot.

هذه التواريخ تغذي سياسات اختيار FEFO وتنبيهات قرب انتهاء الصلاحية، مما يحمي الجودة والامتثال دون الحاجة إلى فحوصات يدوية مستمرة.

المحاسبة: تواريخ استحقاق الفواتير

تواريخ استحقاق الفواتير مخزنة كحقول تاريخ وتحدد متى تُرسل تذكيرات الدفع وكيف تُحتسب المبالغ المتأخرة في تقارير الأرصدة.

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

الموارد البشرية: تواريخ التوظيف والشهادات

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

هذه التواريخ غالباً ما تشغّل رسائل تلقائية وتنبيهات وسياسات حسابات الأجور، لذا تحتاج إلى بيانات صحيحة ونظيفة عبر سجلات الموظفين.

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


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

باستخدام Odoo Studio (بدون كود)

Odoo Studio أسهل طريقة لإضافة حقل تاريخ دون برمجة — مناسبة للمستخدمين والاستشاريين الذين يريدون إضافة تتبع للتواريخ بسرعة:

  1. افتح Odoo Studio من القائمة الرئيسية.
  2. انتقل إلى النموذج الذي تريد إضافة الحقل إليه.
  3. اسحب حقل Date من القائمة الجانبية إلى النموذج.
  4. حدد تسمية الحقل وهل هو إلزامي وقيمة افتراضية إن رغبت.
  5. احفظ وأغلق Studio.

ستنشئ Studio الحقل مع بادئة x_studio_ وتضيفه فوراً إلى العرض دون حاجة لهجرة قاعدة بيانات يدوية من طرفك.

باستخدام بايثون في وحدة مخصصة

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

في الكود، تضيف حقلًا مثل x_customer_requested_date بتعريف يحدد الوصف والفهرس وعدم النسخ وملاحظات توضيحية حول هدف الحقل.

بعد إضافة الحقل إلى النموذج تحتاج أيضاً لوضعه في ملفات العرض (XML) حتى يظهر في الواجهة؛ عند تثبيت أو ترقية الوحدة يتولى Odoo إنشاء عمود القاعدة تلقائياً.

باستخدام واجهة XML-RPC

إذا كنت تنشر إعدادات برمجياً كجزء من أنبوب نشر أو سكربت تكوين بعيد، يمكنك إنشاء الحقول عبر XML-RPC:

في المكالمة، تحدد اسم الحقل والوصف والطراز (model_id) ونوع الحقل ttype='date' وحالته 'manual' إذا تم إنشاؤه يدويًا وليس بواسطة وحدة.

ttype للقيم التاريخية هو 'date' بينما للوقت الكامل تكون 'datetime'. وضع 'manual' يوضح أن الحقل أُنشئ يدوياً، وهو أسلوب تستخدمة فرق الاستشارات لإدارة التكوين الآلي لدى العملاء.

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


نصائح عملية (أفضل الممارسات)

1) استخدم Date وليس DateTime عندما تكون الساعة غير مهمة — ذلك يوفّر عليك تعقيدات المناطق الزمنية ويمنع أخطاء اختلاف اليوم.

2) ضع قيمة افتراضية منطقية عندما يساعد ذلك المستخدمين.

مثلاً حقول مثل "تاريخ التسليم المتوقع" يمكن أن تفترض اليوم أو اليوم + عدد أيام؛ استخدم default=fields.Date.today (بدون استدعاء) ليُقيّم التاريخ عند إنشاء السجل.

3) أضف فهرساً للحقول التي تُستخدم في التقارير والبحث

إذا كان المستخدمون يبحثون كثيراً عبر حقل التاريخ (فواتير متأخرة، تجديدات قادمة)، فإضافة index=True تحسّن الأداء على مجموعات بيانات كبيرة.

4) اجعل copy=False للتواريخ التي لا يجب نسخها

تواريخ مثل "بداية العقد" أو "انتهاء الصلاحية" لا يجب أن تنتقل عند تكرار السجل؛ copy=False يجبر المستخدم على تحديد تاريخ جديد ويمنع أخطاء صامتة.

5) أضف قيوداً عند وجود زوج تاريخ بداية/نهاية

كلما كان هناك حقلان يشكلان نطاقاً، ضع @api.constrains للتحقق أن التاريخ النهائي ليس قبل البداية — هذا يمنع مشكلات جودة البيانات التي يصعب تتبعها لاحقاً.

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


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

خلط Date مع DateTime هو الخطأ الأكثر تكراراً: DateTime يخزن UTC ويعرض بحسب توقيت المستخدم، بينما Date لا يتحول. استخدام DateTime بلا داع يؤدي إلى حالات يظهر فيها التاريخ مختلفاً لمستخدمين في مناطق زمنية مختلفة.

المبدأ: اختر أبسط نوع يلبي احتياج العمل الفعلي.

عدم مراعاة توقيت الخادم في الإجراءات المجدولة

عند بناء إجراءات مجدولة تعتمد على "اليوم"، تذكر أن fields.Date.today() يعيد تاريخ الخادم (عادة UTC). في فرق موزعة عالميًا قد تظهر فروق يومية — اختبر البرمجيات الآلية بتوزيع جغرافي متنوع عند الضرورة.

غياب قيود على أزواج التواريخ

وجود حقول "بداية" و"نهاية" بدون تحقق يسمح بدخول بيانات غير منطقية تكسر حسابات المدد والتقارير؛ ضع دائماً فحص @api.constrains لهذه الحالات.

نسيان إضافة فهرس على حقول البحث بالتاريخ

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

تخزين التواريخ كسلاسل نصية

بعض الفرق تخزن التواريخ في حقول Char للحفاظ على تنسيق مخصص — هذا يدمر قدرات الفرز والتصفية والحساب. استخدم دائماً fields.Date لأن الإطار وقاعدة البيانات يتعاملان مع التنسيق والتوطين تلقائياً.

أسئلة متكررة


ما الفرق بين حقل Date و DateTime في Odoo؟

حقل Date يخزن اليوم والشهر والسنة فقط. حقل DateTime يخزن توقيتاً كاملاً (ساعات ودقائق وثواني) ويُحفظ عادةً بUTC ثم يُحوّل لوقت المستخدم عند العرض. استخدم Date إذا كان وقت اليوم غير مهم، واستخدم DateTime إذا كنت بحاجة لتسجيل لحظة دقيقة حدثت فيها واقعة ما.

كيف أجعل التاريخ الافتراضي هو تاريخ اليوم؟

في بايثون ضع default=fields.Date.today بدون أقواس. هذا يجعل Odoo ينفّذ الدالة عند إنشاء السجل ويعطي تاريخ اليوم. في Odoo Studio اختر "Today" كقيمة افتراضية من خصائص الحقل.

هل يمكنني حساب قيمة حقل تاريخ بناءً على حقول أخرى؟

نعم. عرّف الحقل مع compute='_compute_my_date' واستخدم @api.depends(…) لذكر الحقول المسببة لإعادة الحساب. داخل الدالة استخدم datetime.date و timedelta لإجراء العمليات. أضف store=True إذا أردت حفظ الناتج لاستخدامه في البحث والتقارير.

كيف أفلتر السجلات بنطاق تاريخ في دومين Odoo؟

استخدم معاملات المقارنة القياسية في الدومين. لمعرفة السجلات التي تقع تواريخها في مارس 2026:

[
    ('x_date_field', '>=', '2026-03-01'),
    ('x_date_field', '<=', '2026-03-31')
]

سلاسل التواريخ في الدومينات يجب أن تكون بصيغة ISO: YYYY-MM-DD.

هل يمكن جعل حقل التاريخ إلزامياً في ظروف معيّنة فقط؟

واجهة Odoo تتيح استخدام attrs في XML لعرض الحقل كمطلوب حسب قيم أخرى، لكن إن أردت فرضية عند مستوى الخادم فتحتاج @api.constrains في بايثون. في حالات بسيطة توفر قواعد العرض في Odoo Studio حلاً عملياً دون كتابة كود.

خاتمة


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

خلاصة: استخدم Date وليس DateTime عندما يكفي اليوم فقط، اعتمد القيم الافتراضية والفهارس لتحسين تجربة الأداء، واضف قيوداً عندما يشكّل الحقلان نطاقاً زمنياً.

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

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

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