Skip to content
English

الترقيم التلقائي للملفات

الملفات الرئيسية تحتاج أكوادًا. العملاء والأصناف والموردون والمخازن والموظفون — كل واحد منها يحمل كودًا، ومن المفترض أن يتبع كل كود عرفًا اتفق عليه أحدهم في الشركة منذ سنوات. وعمليًا، إذا كان من يُنشئ السجل هو من يكتب الكود بيده فإن هذا العرف لا يصمد أكثر من شهر: مستخدم يكتب CUST-001، والتالي يكتب cust 2، وثالث يعيد استخدام كود مأخوذ بالفعل.

جدول التكويد الالي للملفات (Files Auto Coding) يسحب القلم من يد المستخدم. تصف الكود مرة واحدة في صورة صيغة، فيبنيه النظام عند حفظ السجل — فيخرج العميل الذي فُتح في فرع الرياض سنة 2026 بالكود RYD-2026-00147 في كل مرة، دون أن يحتاج أحد إلى تذكّر القاعدة. ونفس الجدول يستطيع بناء الاسم العربي والاسم الإنجليزي والكود البديل بنفس النوع من الصيغ.

في تبويب الرئيسية يظهر الجدول بعنوان التكويد الآلي (Automatic Coding)، بينما تحمل شاشة العرض والبحث الخاصة به اسم التكويد الالي للملفات (Files Auto Coding).

ما لا يشمله هذا الجدول

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

لو وضعت نوع مستند في عمود للنوع فلن يُستخدم السطر أصلًا.

اختيار السطر الذي يُنفَّذ

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

العمودماذا يفعل
للنوع (For Type)نوع الكيان الوحيد الذي يرقّمه السطر، مثل عميل أو مخزن.
قائمة الأنواع (Entity List)قائمة مسماة قابلة لإعادة الاستخدام من أنواع الكيانات، ليغطي سطر واحد عدة ملفات.
المعايير (Criteria Definition)سجل معايير محفوظ؛ لا يُنفَّذ السطر إلا إذا طابقه السجل الجاري حفظه.
معيار عدم التفيذ (Reversed Criteria Definition)العكس: يُتخطى السطر إذا طابق السجلُ هذه المعايير.
تطبيق عند التوافق مع الاستعلام (Apply When Query)استعلام؛ لا يُنفَّذ السطر إلا إذا أعاد الاستعلام نتيجة للسجل الجاري حفظه.
منع التطبيق عند التوافق مع الاستعلام (Do Not Apply When Query)العكس: يُتخطى السطر إذا أعاد هذا الاستعلام نتيجة.
غير نشط (Inactive)يوقف هذا السطر وحده دون حذفه.

المطابقة تتم بنوع الكيان. عند حفظ ملف رئيسي يبحث النظام عن السطور التي يذكر عمود للنوع أو قائمة الأنواع فيها هذا النوع. والسطر الذي لا يحمل نوعًا ولا قائمة أنواع هو الافتراضي على مستوى النظام — يُستخدم لأي ملف رئيسي لم يطالب به سطر أكثر تحديدًا.

لا يُستخدم إلا أول سطر مطابق لنوع الكيان

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

لذلك فمجموعة السطور البديلة لنفس النوع — سطر لكل فرع، أو سطر لكل تصنيف — لا تعمل بالشكل الذي تبدو عليه؛ فالسطر الثاني وما بعده لا يُقرأ أبدًا. اجمع البدائل في صيغة واحدة (فالصيغة تستطيع قراءة الفرع أو التصنيف من السجل مباشرة)، أو ضعها في معايير السطر الوحيد الذي يُنفَّذ.

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

اجمع إعدادات النوع الواحد في سجل واحد

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

أعمدة الصيغ

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

العمودالغرض
صيغة حساب الكود (Code Calculation Formula)يبني كود السجل — الجزء الثابت الذي يسبق الرقم المتسلسل.
Code Validity Query (Skip code if 1 is returned, and calculate next)استعلام يفحص الكود الذي حُسب للتو ويرفضه، فيُجرَّب الرقم التالي.
صيغة حساب الاسم العربي (Name1 Calculation Formula)يبني الاسم العربي.
صيغة حساب الاسم الإنجليزي (Name2 Calculation Formula)يبني الاسم الإنجليزي.
صيغه الكود البديل (Alternate Code Formula)يبني الكود البديل في الملفات التي تحتوي عليه.
صيغة حساب الكود للإصدارات (Revision Code Calculation Formula)يبني كود سجلات إصدارات الصنف.
صيغة حساب الكود للمقاس و اللون (Size And Color Code Calculation Formula)يبني كود سجلات المقاس واللون للصنف.
صيغة تكويد اسم 1 للون والمقاس (Name 1 Encoding Formula For Colour And Size)الاسم العربي لسجل المقاس واللون.
صيغة تكويد اسم 2 للون والمقاس (Name 2 Encoding Formula For Colour And Size)الاسم الإنجليزي لسجل المقاس واللون.
صيغة تكويد اسم 1 للاصدارة (Name 1 Encoding Formula For Revision)الاسم العربي لسجل الإصدارة.
صيغة تكويد اسم 2 للاصدارة (Name 2 Encoding Formula For Revision)الاسم الإنجليزي لسجل الإصدارة.
بادئة حساب التسلسل (Code Sequence Prefix)تحدد أي عدّاد يُؤخذ منه الرقم التالي.
طول لاحقة الكود (Code Suffix Length)عدد الخانات التي يُستكمل بها الرقم المتسلسل.
أول رقم في لاحقة الكود (Suffix First Number)الرقم الذي يبدأ منه العدّاد.
عدم تحديث الكود مع التعديل (Do Not Reset Code With Update)يُبقي الكود الحالي بدلًا من إعادة حسابه عند تعديل السجل.
تحديث الإصدار إذا كان فارغا فقط (Update Revision If Empty Only)يملأ كود الإصدارة فقط إذا تُرك فارغًا.
تحديث اللون والمقاس إذا كانا فارغين فقط (Update Color and Size If Empty Only)يملأ كود المقاس واللون فقط إذا تُرك فارغًا.

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

ليست كل الأعمدة ظاهرة على الشاشة

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

كتابة الصيغة

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

لغة القوالب Tempo

إذا لم تحتوِ الصيغة على ${ فإن النص كله يُعامَل كقالب Tempo: نص عادي بداخله عناصر نائبة بين قوسين { } تقرأ حقول السجل الجاري حفظه.

ITM-{category1.code}-

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

ما تريدهما تكتبه
حقل من السجل نفسه{name1}
حقل من سجل مرتبط{branch.code} أو {group.code} أو {category1.name2}
سنة إنشاء السجل{creationDate.$format."yyyy"}
كود المستخدم الذي أنشأ السجل{$user.code}
أول حروف حقل{left(name2, 3)}
قوس معقوف كنص صريح\{

دليل لغة Tempo يوثّق الصياغة كاملة؛ وكل ما يذكره لقوالب الإشعارات والطباعة يصلح هنا أيضًا ما دامت النتيجة كودًا معقولًا.

الاستبدال المبسّط ${ }

إذا احتوت الصيغة على ${ في أي موضع فإن النظام ينتقل إلى وضع أبسط بكثير: كل ${field} يُستبدل بقيمة ذلك الحقل، ولا يُفسَّر أي شيء آخر.

${branch.code}-${category1.code}-
العنصر النائبيُستبدل بـ
${code} و ${name1} و ${name2}حقل من السجل الجاري حفظه.
${branch.code} و ${group.code} و ${category1.code}حقل يُوصل إليه عبر مرجع — أي مسار منقوط يدعمه السجل.

وهناك ثلاثة سلوكيات يجدر معرفتها في هذا الوضع:

  • أي قيمة يبدأ نصها بعلامة # تُعامَل كقيمة فارغة.
  • المسافات المزدوجة في الناتج تُختصر إلى مسافة واحدة.
  • اسم الحقل الخاطئ لا يُنتج رسالة خطأ — بل يُستبدل بـ @error@ متبوعًا بالاسم الذي كتبته. فإذا خرج أول سجل تنشئه بكود مثل @error@brnch.code@-00001 فهذا خطأ إملائي في الصيغة وليس خللًا في النظام.

أي الوضعين أستخدم؟

استخدم Tempo. فالوضع المبسّط ${ } بلا دوال ولا تنسيق ولا شروط، وهو يُخفي الأخطاء بدل الإبلاغ عنها، وإنما بقي من أجل الإعدادات القديمة. والشيء الوحيد الذي يجب تذكّره أنه لا يمكن الخلط بينهما: فبمجرد ظهور ${ في أي موضع من النص تُقرأ الصيغة كلها بالوضع المبسّط وتبقى عناصر { } نصًا صريحًا.

الرقم المتسلسل

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

بادئة حساب التسلسل هي هوية العدّاد. فالسجلان يأخذان من نفس العدّاد عندما تنتج بادئة حساب التسلسل لديهما نفس النص — أي أن {branch.code}- يعطيك عدّادًا مستقلًا لكل فرع، بينما تعطي بادئة ثابتة مثل CUST- عدّادًا واحدًا للشركة كلها. والبادئة نفسها صيغة تُكتب بنفس اللغة. واتركها فارغة ليقوم الكود المحسوب نفسه مقام البادئة، وهو الأنسب غالبًا.

طول لاحقة الكود هو عدد الخانات المضافة، مستكملة بالأصفار من اليسار: القيمة 5 تحوّل العميل رقم 147 إلى 00147.

ترك طول لاحقة الكود فارغًا يعني ألا يُضاف رقم أصلًا

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

أول رقم في لاحقة الكود هو نقطة بداية العدّاد الجديد. اتركه فارغًا فيكون أول سجل هو 1، أو اضبطه على 1000 فيكون أول سجل هو 1000.

ولمعرفة الرقم التالي يأخذ النظام آخر سجل موجود تتطابق بادئة تسلسله، ويحذف البادئة من كوده، ويقرأ الباقي كرقم ثم يضيف واحدًا. ويترتب على ذلك أمران:

  • إذا أعطى أحدهم يدويًا سجلًا كودًا يبدأ ببادئة التسلسل وينتهي بما ليس رقمًا، فسيفشل الحفظ التالي برسالة تذكر ذلك السجل. صحّح كود السجل ثم أعد الحفظ.
  • وإذا تجاوز الرقم طول لاحقة الكود — كأن تصل لاحقة من ثلاث خانات إلى 1000 — فسيفشل الحفظ برسالة تفيد بتجاوز البادئة أقصى عدد لها. وسّع اللاحقة (وهي مرفوضة عند الحفظ إن تجاوزت 20 خانة) أو ابدأ بادئة جديدة.

استعلام صلاحية الكود

أحيانًا لا يكفي "الرقم الحر التالي"، بل يجب فحص الكود مقابل شيء آخر قبل قبوله، وهذا هو دور عمود Code Validity Query. يُكتب الكود المرشح على السجل أولًا ثم يُنفَّذ الاستعلام؛ والمطلوب منه أن يُرجع 1 لرفض الكود (فيزيد النظام العدّاد واحدًا ويحاول من جديد) و0 لقبوله.

والاستعلام استعلام Nama عادي، فهو يقرأ السجل بعناصر { } تمامًا كاستعلامات التحقق بالمعايير — بما في ذلك {code} الذي يحمل عندها الكود الجاري اختباره:

sql
select case when exists
  (select 1 from Customer c where c.code = {code} and c.id <> {id})
then 1 else 0 end

يجب أن يكون الاستعلام قادرًا على إرجاع 0

الاستعلام الذي لا يُرجع شيئًا، أو الذي يُرجع 1 دائمًا، لن يسمح لأي كود بالمرور؛ فيستمر النظام في زيادة العدّاد حتى 99,999 محاولة ثم يفشل الحفظ. اختبر الاستعلام على بيانات حقيقية قبل الاعتماد عليه، واكتبه دائمًا بحيث يعطي 0 للكود المقبول.

أمثلة عملية

كود عميل متسلسل مسبوق بكود الفرع

تريد الشركة ترقيم العملاء لكل فرع على حدة: RYD-00001 و RYD-00002 و JED-00001.

العمودالقيمة
للنوععميل
صيغة حساب الكود{branch.code}-
بادئة حساب التسلسل(فارغة — الكود المحسوب هو العدّاد)
طول لاحقة الكود5

ولأن الكود نفسه يحتوي على الفرع فإن كل فرع يحصل تلقائيًا على عدّاده الخاص. فالعميل رقم 147 المفتوح في الرياض يُحفظ بالكود RYD-00147.

نفس الكود مع إضافة السنة

بإضافة السنة يبدأ العدّاد من جديد كل يناير تلقائيًا، لأن بادئة التسلسل تتغير:

العمودالقيمة
صيغة حساب الكود{branch.code}-{creationDate.$format."yyyy"}-
طول لاحقة الكود5

فيكون الناتج RYD-2026-00147. وأول عميل يُنشأ في 2027 يصبح RYD-2027-00001 دون أن يلمس أحد الإعدادات — فالبادئة الجديدة لا سجل سابق لها، فيبدأ العدّاد من أول رقم في لاحقة الكود.

بناء الاسم مع الكود

سجل مخازن يُراد أن تُكتب أسماؤه بنفس الطريقة دائمًا:

العمودالقيمة
للنوعمخزن
صيغة حساب الكودWH-{branch.code}-
صيغة حساب الاسم العربيمخزن {branch.name1}
صيغة حساب الاسم الإنجليزي{branch.name2} Warehouse
طول لاحقة الكود3

وصيغ الأسماء لا تستبدل الأسماء إلا إذا أنتجت شيئًا؛ فالصيغة التي تنتج فراغًا تترك ما كتبه المستخدم كما هو.

كود صنف مبني على تصنيفه

الأصناف هي الملف الوحيد الذي يأخذ صيغته من مكان آخر عادة (راجع القسم التالي)، لكن نص الصيغة واحد أينما وضعته:

العمودالقيمة
صيغة حساب الكود{category1.code}-
طول لاحقة الكود4
أول رقم في لاحقة الكود1

فيُنشأ الصنف في التصنيف BEV بالكود BEV-0001، والذي يليه BEV-0002، بينما يبدأ صنف في التصنيف SNK سلسلته الخاصة من SNK-0001.

تثبيت الكود بعد إعطائه

الكود يُعاد حسابه افتراضيًا في كل مرة يُحفظ فيها السجل. وهذا غير ضار غالبًا — فالصيغة تنتج نفس النص، والعدّاد يتعرف على رقم السجل الحالي — لكنه ليس ما تريده حين تقرأ الصيغة حقلًا يستطيع المستخدم تغييره. فلو نقلت عميلًا إلى فرع آخر لأُعيد بناء كوده المبني على الفرع تحت الفرع الجديد، وتيتّمت كل المستندات التي تذكر كوده القديم.

فعّل عدم تحديث الكود مع التعديل فيُتخطى الحساب كله للسجلات التي سبق حفظها: يبقى الكود والأسماء والكود البديل كما هي تمامًا، ولا يُرقَّم إلا السجل الجديد تمامًا.

الأكواد الواردة عبر Replication لا يُعاد حسابها

عندما يصل سجل إلى قاعدة البيانات هذه عن طريق Replication فإنه يحتفظ بالكود الذي يحمله. والصيغة لا تُنفَّذ إلا حيث يُنشأ السجل فعلًا.

للأصناف إعدادات ترقيم خاصة بها

الأصناف لا تبدأ من هذا الجدول. فعند حفظ صنف ينظر النظام أولًا إلى قسم الصنف (Item Section) — صيغة الترقيم الخاصة بالقسم، أو أول سطر من سطور معاييره يطابق الصنف. فإن لم يكن هناك شيء معرّف رجع إلى صيغة ترقيم الأصناف الموجودة في الإعدادات العامة، ولا ينزل إلى سطر من سطور التكويد الالي للملفات إلا إذا كان الاثنان فارغين.

أعمدة الإصدارات والمقاس واللون لا تعمل من هذا الجدول

كود الإصدارة، وكود المقاس واللون، وصيغ الأسماء الأربع الخاصة بهما، ومفتاحا "إذا كان فارغًا فقط"، كلها تُطبَّق على مسار ترقيم الصنف الخاص — أي قسم الصنف وصيغة ترقيم الأصناف في الإعدادات العامة. أما سطر التكويد الالي للملفات الذي يُستخدم كملاذ أخير فيرقّم سجل الصنف نفسه لا غير، وتبقى أعمدة المتغيرات فيه بلا أثر.

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

كما يمكن ضبط القسم على منع التكويد الالي، وعندها لا تُرقَّم أصنافه تلقائيًا مهما كانت هذه الإعدادات.

متى تسري الإعدادات

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

صفحات ذات صلة