التحقق المبني على المعايير (Criteria Based Validation)
لكل منشأة قواعد لا تعرف عنها الشاشات القياسية شيئًا. «لا تسمح بحفظ صرف مخزني بكمية صفر»، «نبّه المندوب عندما يبيع بأقل من التكلفة»، «لا يستلم على مستودع البضاعة بالطريق أحد غير مشرف المخازن»، «الفاتورة التي أُرسلت إلى هيئة الضرائب لا يتغير عميلها بعد ذلك أبدًا».
التحقق المبني على المعايير هو المكان الذي تكتب فيه هذه القواعد. تختار شاشة، وتصف الحالة التي تريد اعتراضها، وتكتب الرسالة التي يجب أن يقرأها المستخدم، ومنذ تلك اللحظة يرفض النظام الحفظ (أو ينبّه، أو يطلب تأكيدًا) كلما تحققت الحالة — على كل الشاشات، ولكل المستخدمين، عبر الواجهة والتطبيق والاستيراد على حد سواء.
تجد الشاشة في الأساسيات ← الإعدادات ← تحقق بناءً على معايير.
الفكرة الأساسية: عندما … يجب أن …
سجل التحقق مجموعة صغيرة من القواعد، وكل قاعدة تُقرأ كجملة مفيدة:
عندما يكون البيع آجلًا، يجب أن يكون للعميل حد ائتماني.
ويقيّم النظام الشقّين كلًّا على حدة:
- يفحص شق عندما. فإن كانت الحالة لا تنطبق على السجل الجاري حفظه، تُتجاوَز القاعدة بالكامل ولا يحدث شيء.
- فإن تحقق شق عندما، فحص شق يجب أن. فإن تحقق هو الآخر فكل شيء سليم، وإن أخفق ظهرت رسالتك للمستخدم ورُفض الحفظ.
والشقّان اختياريان. فالقاعدة التي فيها يجب أن فقط هي اشتراط غير مشروط («الكمية لا تكون صفرًا أبدًا»)، والقاعدة التي فيها عندما فقط هي كمين («إن وُجدت هذه الحالة أصلًا فارفض») — ولهذا نجد أن كثيرًا من سجلات التحقق الواقعية لا تحتوي إلا على استعلام «عندما» يُرجع 1 حين يتحقق أمر غير مرغوب.
ولكل شق طريقتان للتعبير، ويمكن استخدامهما معًا:
- عندما / يجب أن — تختار سجل معايير محفوظًا، مبنيًا ببنّاء الفلاتر المعتاد. مقروء ولا يحتاج SQL، لكنه محدود بما يستطيع الفلتر التعبير عنه.
- استعلام عندما / استعلام يجب أن — استعلام SQL. كل ما يمكنك سؤال قاعدة البيانات عنه يمكنك التحقق منه.
والاستعلامات هي ما ينتهي إليه أغلب التطبيقات العملية، ولذلك تتركز بقية هذه الصفحة عليها.
تحديد ما يراقبه سجل التحقق
يجيب رأس السجل عن سؤال واحد: أي السجلات ينظر إليها هذا التحقق؟ ولديك ثلاث طرق متنافية للإجابة.
| الحقل | ماذا يفعل |
|---|---|
| النوع المستهدف (Target Type) | شاشة واحدة، مثل SalesInvoice أو StockIssue أو Employee. وهذا هو الاختيار المعتاد. |
| تطبق أيضًا على (Apply Also To) | سجل قائمة أنواع كيانات، ليغطي سجل تحقق واحد عائلة كاملة من الشاشات (كل مستندات المبيعات، كل ملفات الذمم…). ويمكن جمعه مع النوع المستهدف. |
| مطبق على (Applicable For) | نطاق شامل: كل الشاشات أو المستندات أو الملفات. استعمله للقواعد العامة مثل «لا يجوز ترك الفرع «عام» على أي مستند». |
«مطبق على» لا يجتمع مع غيره
إذا ملأت مطبق على فيجب ترك النوع المستهدف وتطبق أيضًا على فارغين — فالنظام يرفض الجمع بينها عند الحفظ.
وتحدد الأولوية ترتيب التنفيذ عندما يراقب أكثر من سجل تحقق الشاشة نفسها: كلما ارتفع الرقم عمل السجل أبكر. وأهميتها تظهر حين تريد أن تكون أهم رسالة هي أول ما يقرأه المستخدم.
أما رسالة الخطأ (عربي) ورسالة الخطأ (إنجليزي) في الرأس فهما تسهيل: ما تكتبه فيهما يُنسخ إلى كل سطر قاعدة عند الحفظ.
رسالة الرأس تطمس رسائل السطور
هذا النسخ ليس قيمة افتراضية بل استبدال كامل. فإن ملأت رسالة الرأس فقد كل سطر صياغته الخاصة. اترك رسالة الرأس فارغة كلما كانت سطورك تقول أشياء مختلفة.
جدول القواعد
كل سطر في الجدول قاعدة واحدة. والأعمدة:
| العمود | المعنى |
|---|---|
| عندما / يجب أن | سجلات معايير محفوظة تُستخدم شقّين للقاعدة. |
| استعلام عندما / استعلام يجب أن | صيغة SQL للشقّين نفسيهما. |
| يجب مطابقة السطور | تقييم القاعدة سطرًا سطرًا داخل المستند بدل الحكم على المستند ككل. انظر قسم «العمل مع سطور المستند» أدناه. |
| التحقق مع — الحفظ / التعديل / حفظ مسودة / المراجعة / إلغاء المراجعة / الحذف / مع الموافقة | الإجراءات التي تُشغّل هذه القاعدة. لا بد من تعليم واحد على الأقل. |
| تعريف الموافقة / خطوات الموافقة (CSV) | حصر قاعدة مع الموافقة في دورة موافقة بعينها، وفي أرقام خطوات محددة (2,3). |
| رسالة الخطأ (عربي / إنجليزي) | ما يقرأه المستخدم. ولا بد من لغة واحدة على الأقل. |
| استعلام لمحتوى رسالة الخطأ | استعلام إضافي تستطيع إدراج أعمدته داخل الرسالة. |
| حقل الخطأ / تحديد الخطأ برقم السطر | ربط الخطأ بحقل بعينه ليبرزه النظام على الشاشة. |
| نوع المعيار | خطأ أو تحذير أو تأكيد. والفراغ يعني «خطأ». |
| غير نشط | إيقاف قاعدة واحدة دون حذفها. |
| ملاحظات | ملاحظة لنفسك مستقبلًا. لا يراها غيرك. |
كتابة الاستعلامات
قاعدة الصفر والواحد
استعلام «عندما»/«يجب أن» سؤال إجابته نعم أو لا، والإجابة هي العمود الأول من السطر الأول الذي يُرجعه الاستعلام:
- 0 (أو
false) تعني لا — الشق لم يتحقق. - وأي شيء آخر —
1، أو عدّ أكبر من صفر، أو نص — يعني نعم.
ولهذا يُكتب كل سجل تحقق تقريبًا بالصيغة نفسها:
select case when <ما أريده أن يكون صحيحًا> then 1 else 0 endوفي استعلام يجب أن تصوغ الشرط بالإيجاب — «هذا يجب أن يتحقق» — ويرى المستخدم الخطأ حين يعود الاستعلام بصفر. صرف مخزني لا يجوز أن يحمل كمية صفر:
select case when {details.quantity.quantity.primeQty.value} = 0 then 0 else 1 endقراءة القيم من السجل
كل ما بين قوسين معقوفين هو معرّف حقل على السجل الجاري حفظه، ويُستبدل بقيمة ذلك السجل قبل إرسال الاستعلام إلى قاعدة البيانات. {code} و{valueDate} و{customer.id} و{details.item.item.code} و{lines.account.code} — وهي المسارات نفسها التي تراها في منتقي معرّفات الحقول في بقية النظام.
وثمة حيل في الاستبدال تستحق المعرفة:
{something.$toReal.field}— للنفاذ عبر حقل مرجع عام (حقل يمكن أن يشير إلى أنواع مختلفة) إلى السجل الذي يشير إليه فعلًا:{relatedEntity1.$toReal.id}و{employee.$toReal.hiring}.{$user.code}و**{$creationDate}** — المستخدم الذي يحفظ، ولحظة إنشاء السجل.{loginUserId}و**{loginEmployeeId}** و**{loginLegalEntityId}** و**{loginBranchId}** و**{loginSectorId}** و**{loginDepartmentId}** و**{loginAnalysisSetId}** ومشتقاتها…Codeو…Name1و…Name2— بيانات الجلسة التي دخل بها المستخدم. وهي المدخلات نفسها التي يتيحها محرك التقارير.
المقارنة بالقيمة السابقة
يعطيك {oldData.…} القيمة التي كان عليها الحقل قبل التعديل الحالي — وهو أنفع ما تفعله في قاعدة تعمل مع التعديل. لاعتراض أي تغيير في الملاحظات:
select case when {remarks} <> {oldData.remarks} then 1 else 0 endوالقيم الفارغة تُربك هذه الصيغة، لأن حقلًا كان فارغًا وصار ممتلئًا يُحسب تغييرًا. فاحتَط منها:
select case when {remarks} <> {oldData.remarks} and coalesce({oldData.remarks}, '') <> '' then 1 else 0 endومثال واقعي — الفاتورة التي أُبلغت إلى هيئة الضرائب يبقى عميلها كما هو إلى الأبد:
-- استعلام عندما: هل أُرسلت؟
select case when {taxAuthoritySysFields.taxAuthEntityStatusType} = 'Sent' then 1 else 0 end
-- استعلام يجب أن: العميل يجب أن يظل هو نفسه
select case when {oldData.customer.id} = {customer.id} then 1 else 0 endالبيانات القديمة موجودة مع التعديل فقط
عند الإضافة لا توجد نسخة سابقة، فيكون {oldData.…} فارغًا. علّم التحقق مع ← التعديل (وارفع علامة الحفظ) في القواعد المبنية عليه.
الاستعلام الذي لا يُرجع شيئًا يُحسب «نعم»
إذا لم يُرجع الاستعلام أي سطر عدّ النظام الشق متحققًا. يبدو هذا هامشيًا، لكنه في الحقيقة اختصار محبوب: أضِف جملة where لا تسمح بمرور السطر إلا في الحالة التي تعنيك، فتختفي القاعدة بهدوء فيما عداها.
select case when datediff(day, {startDate}, getdate()) > -1 then 0 else 1 end
where {vacationType.code} = 'VT00001'فمع كل نوع إجازة آخر لا يُرجع الاستعلام شيئًا، ولا يُرفع أي خطأ.
العمل مع سطور المستند
هنا الجزء الذي يفاجئ الناس. حين يشير أحد المتغيرات إلى جدول — {details.item.item.id} أو {lines.amount.value.amount} — لا يُنفَّذ الاستعلام مرة واحدة، بل مرة لكل سطر، بقيم ذلك السطر. وما يفعله النظام بعد ذلك بهذه الإجابات يتوقف على يجب مطابقة السطور.
مع إيقاف «يجب مطابقة السطور» يُحكم على المستند ككل:
- شق عندما يتحقق فقط إذا لم يُرجع أي سطر صفرًا؛
- وشق يجب أن يُعد مخالفًا بمجرد أن يُرجع أي سطر صفرًا.
ومع تفعيلها يُحكم على كل سطر على حدة. فيتحقق شق «عندما» إذا أجاب سطر واحد على الأقل بغير الصفر، ويُرفع الخطأ لتلك السطور بالضبط التي اجتازت عندما وأخفقت في يجب أن. وهذا ما تريده مع أي قاعدة صيغتها «لا يجوز لأي سطر أن…»، وهو الإعداد الأشيع بفارق كبير في التطبيقات الواقعية.
إخبار المستخدم بأي سطر
بمجرد أن تعمل القاعدة لكل سطر يعرف النظام أرقام السطور المخالفة ويسلّمها لك في {$map.errorLines}:
سعر البيع أقل من التكلفة — السطر {$map.errorLines}ويتحول المتغير إلى قائمة أرقام سطور مفصولة بفواصل تبدأ من 1. ويُبلَّغ عن 50 سطرًا كحد أقصى، وما زاد يُقتطع حتى لا يغرق المستخدمَ استيرادٌ خاطئ من خمسة آلاف سطر برسائل لا تنتهي.
إبراز الحقل نفسه
بدلًا من ذكر رقم السطر في النص — أو إضافةً إليه — يمكنك ربط الخطأ بحقل فتقفز إليه الشاشة وتلوّنه:
- حقل الخطأ — معرّف الحقل المراد إبرازه، مثل
details.price.unitPrice. - تحديد الخطأ برقم السطر — علّمه حين يكون حقل الخطأ داخل جدول. عندئذ يرفع النظام خطأً لكل سطر مخالف، مربوطًا بخانة ذلك السطر.
الإعدادان متلازمان
حقل داخل جدول بدون تحديد الخطأ برقم السطر يُرفض عند حفظ سجل التحقق، وتعليم تحديد الخطأ برقم السطر بلا حقل خطأ يُرفض كذلك. ولا بد أن يكون الحقل موجودًا فعلًا على الشاشة المستهدفة — والخطأ المطبعي يُكتشف عند الحفظ لا وقت التشغيل.
رسالة تستحق القراءة
«بيانات غير صحيحة» لا تفيد أحدًا. وثلاث أدوات تجعل الرسالة محددة.
حقول السجل تُدرج مباشرة في النص:
المستخدم ({firstAuthor.name1}) غير مسموح له بالاستلام إلى مخزن ({toWarehouse.name1})واستعلام لمحتوى رسالة الخطأ يجلب معلومات من مكان آخر. فكل عمود يختاره الاستعلام يصير متغيرًا باسم ذلك العمود، صالحًا للاستعمال في الرسالتين. لإخبار المندوب بقيمة الحد الائتماني فعلًا:
-- استعلام لمحتوى رسالة الخطأ
select c.limitValue, c.paymentPeriod from Customer c where c.id = {customer.id}هذا العميل له حد ائتماني بقيمة {limitValue} وأقصى مدة سداد {paymentPeriod}والرابط القابل للنقر إلى السجل المخالف يحوّل الشكوى إلى اختصار. اختر نوع السجل ومعرّفه وكوده في استعلام المحتوى ثم لُفّها:
-- استعلام لمحتوى رسالة الخطأ
select top 1 entityType, id, code from MissionDocument
where employee_id = {employee.id} and id <> {id}الموظف له سند مأمورية بالفعل {titledlink(entityType,id)}{code}{endlink}والرسائل قوالب Tempo كاملة، فبقية تلك الصيغة متاحة كذلك.
خطأ أم تحذير أم تأكيد
يحدد نوع المعيار مقدار الصرامة.
خطأ هو الافتراضي وهو الرفض القاطع: تظهر الرسالة ولا يُحفظ شيء.
تحذير يسمح بمرور الحفظ ويُظهر الرسالة على أي حال. استعمله لما يكون خطأً في الغالب لكنه يقع لأسباب مشروعة أحيانًا — «يوجد عميل آخر مسجل بنفس الرقم الضريبي»، «مدة عمل الموظف أقل من ثلاثة أشهر».
تأكيد يتوقف ويسأل. فيقرأ المستخدم الرسالة ثم إما يؤكد ويكمل وإما يتراجع. وهو الخيار الصحيح لمواضع التقدير: البيع بأقل من التكلفة، أو جعل رصيد العميل بالسالب، أو إنشاء سند مأمورية ثانٍ في الفترة نفسها.
التأكيد يعمل مع الحفظ والحذف فقط
لا توجد نافذة تأكيد خلف حفظ المسودة ولا المراجعة ولا إلغاء المراجعة ولا خطوة الموافقة، ولذلك لا يجوز لقاعدة من نوع تأكيد أن تعلّم حفظ مسودة أو المراجعة أو إلغاء المراجعة أو مع الموافقة — والنظام يرفض حفظ السجل إن فعلت. كما تُتجاوز التأكيدات أثناء الاستيراد.
متى يعمل التحقق
أعمدة التحقق مع هي ما يربط القاعدة بالإجراء. علّم ما تقصده فقط:
- الحفظ — السجل يُعتمد لأول مرة.
- التعديل — سجل معتمد من قبل يُعتمد من جديد.
- حفظ مسودة — المستخدم يحفظ مسودة. ارفع العلامة إن كانت المسودات مساحة عمل مؤقتة عندكم.
- الحذف — المستخدم يحذف السجل. وهنا تحمي البيانات المرتبطة: «هذه المهمة مدرجة في مستند محضر اجتماع ولا يمكن حذفها».
- المراجعة / إلغاء المراجعة — المستند يُعلَّم كمُراجَع، أو تُزال العلامة.
- مع الموافقة — أحدهم يتصرف في خطوة موافقة. اجمعها مع تعريف الموافقة وخطوات الموافقة (CSV) لتعمل داخل دورة بعينها وعند خطوات بعينها. انظر الموافقات.
التحقق لا يعمل في الخلفية
طلبات الأعمال التي تُعالَج في الخلفية — الأثر المحاسبي والمخزني للمستند — لا تمر أبدًا على التحقق المبني على المعايير. فالتحقق يحدث بينما يحفظ إنسان (أو استيراد) السجل، لا أثناء معالجة آثاره لاحقًا.
حصر التحقق في أشخاص بعينهم
القاعدة أحيانًا تتعلق بالصلاحية: الجميع ملزمون بها إلا مدير الفرع، أو لا يخضع لها إلا مستخدما إدخال البيانات. ولهذا وُجد السياسة وجدول قائمة المختارين.
املأ الجدول بـمستخدمين أو مجموعات مستخدمين أو بروفايلات أمان — بأي خليط — ثم اختر:
- تطبيق على المختارين فقط — القاعدة تخص من في القائمة وحدهم.
- تطبيق على الكل عدا المختارين — القاعدة تخص كل من عداهم.
واترك الجدول فارغًا فتنطبق القاعدة على الجميع مهما كانت السياسة.
فضّل المجموعات والبروفايلات على قوائم المستخدمين
سرد المستخدمين فردًا فردًا يعمل، وأنظمة كثيرة حية تفعله — لكن كل موظف جديد يعني عندئذ تعديل سجل التحقق. أما مجموعة المستخدمين أو بروفايل الأمان فيبقي القاعدة ثابتة.
التحقق فقط عندما يتغير شيء بالفعل
جدول عندما تتغير الحقول الآتية في الأسفل مرشّح على التعديل. اذكر فيه بضعة معرّفات حقول فيُتجاوَز سجل التحقق عند التعديل ما لم يتغير أحدها على الأقل. أما الإضافة والحذف والمراجعة فلا تتأثر — فالقاعدة تعمل معها دائمًا.
وهو الدواء لسجل التحقق الذي يظل يعطّل مستندًا بسبب حالة لم يمسّها أحد في هذا التعديل. فإن كانت القاعدة تخص خانة «يعمل مع المجاني» في الصنف، فاذكر details.item.item.b1 وتتوقف القاعدة عن الاعتراض على تعديل عنوان التسليم.
طرق الإيقاف
ثلاثة مفاتيح منفصلة على ثلاثة مستويات:
- غير نشط في الرأس يُخرج سجل التحقق كله من الخدمة — ويعلّم كذلك، تسهيلًا، غير نشط على كل سطر من سطوره عند الحفظ.
- غير نشط على السطر يعطّل تلك القاعدة وحدها.
- غير نشط مع Replication يُبقي سجل التحقق فعالًا للمستخدمين العاديين ويتجاوزه أثناء وصول البيانات عبر الـ Replication — وهو مفيد حين تكون القاعدة عن انضباط إدخال البيانات لا عن سلامتها، وقد طبّقها الموقع المرسِل فعلًا.
أما تجاهل التحقق عند الموافقة في الرأس فيفعل شيئًا أضيق: يتجاوز سجل التحقق كله عندما يُعتمد السجل نتيجةً لانتهاء دورة موافقة. فالمستند قد فُحص أصلًا عند تقديمه، وهذا يمنع الشكوى نفسها من تعطيل المعتمِد.
حقول السكربت متقاعدة
ما زالت سكربت التحقق وسكربت التأثير وسكربت الحذف تظهر على السجلات القديمة لكن لم يعد استعمالها ممكنًا — فحفظ سجل تحقق يملؤها يفشل برسالة تطلب استبدالها بـمسار كيان.
أمثلة عملية
الأنماط التالية مأخوذة من تطبيقات حية، مع تعميم الأكواد.
اشتراط قيمة
أبسط سجل تحقق نافع: لا يحمل أي سطر في الصرف المخزني كمية صفر.
- النوع المستهدف:
StockIssue - التحقق مع: الحفظ، حفظ مسودة
- استعلام يجب أن:
select case when {details.quantity.quantity.primeQty.value} = 0 then 0 else 1 end- الرسالة: يجب إدخال كمية لكل صنف.
اشتراط قيمة في حالة بعينها فقط
عندما تكون الدولة «أخرى» يصير اسم الدولة النصي إلزاميًا.
- النوع المستهدف:
Employee - استعلام عندما:
select case when {contactInfo.address.country} = 'Other' then 1 else 0 end- استعلام يجب أن:
select case when {description4} = '' then 0 else 1 end- الرسالة: عند اختيار «أخرى» يجب كتابة اسم الدولة.
منع التكرار
لا يشترك موظفان في حساب بنكي واحد، ولا مستندان في رقم يدوي واحد. والصيغة دائمًا عدٌّ على الجدول نفسه مع id <> {id} حتى لا يصطدم السجل بنفسه.
- النوع المستهدف:
PurchaseInvoice - استعلام يجب أن:
select case when count(1) > 0 then 0 else 1 end
from PurchaseInvoice e where e.manualRef1 = {manualRef1} and e.id <> {id}- استعلام لمحتوى رسالة الخطأ:
select top 1 code from PurchaseInvoice e where e.manualRef1 = {manualRef1} and e.id <> {id}- الرسالة: رقم المستند اليدوي مستخدم بالفعل في الفاتورة {code}.
منع التغيير بعد نقطة اللاعودة
بمجرد إبلاغ الفاتورة إلى هيئة الضرائب يُجمَّد العميل. وقد عُرض المثال كاملًا في قسم «المقارنة بالقيمة السابقة» أعلاه.
اعتراض سطر مخالف والإشارة إليه
لا يُباع أي سطر بأقل من متوسط تكلفته — بالإبلاغ على مستوى السطر، وكتأكيد لا كمنع قاطع، لأن الإدارة توافق عليه أحيانًا.
- النوع المستهدف:
SalesInvoice - يجب مطابقة السطور: مُعلَّم
- نوع المعيار: تأكيد
- استعلام عندما:
select top 1 case when coalesce(q.avgCost, 0) > {details.price.unitPrice} then 1 else 0 end
from ItemDimensionCost q where q.item_id = {details.item.item.id}- استعلام يجب أن — الخدمات بلا تكلفة، فاستثنِها:
select case when {details.item.item.itemType} = 'Service' then 1 else 0 end- الرسالة: سعر البيع أقل من التكلفة في السطر {$map.errorLines}.
حصر عملية في أشخاص بعينهم
لا يستلم على كل مخزن إلا مجموعة مسمّاة من المستخدمين. قاعدة لكل مخزن، وكلها في سجل تحقق واحد.
- النوع المستهدف:
ReceiptStockTransfer - استعلام عندما:
select case when {toWarehouse.code} = 'W0103' then 1 else 0 end- استعلام يجب أن:
select case when {firstAuthor.code} in ('10428', '10431', '10045') then 1 else 0 end- الرسالة: المستخدم ({firstAuthor.name1}) ليس مسموحًا له بالاستلام على مخزن ({toWarehouse.name1}).
فرض قاعدة عامة على كل المستندات
المحددات التحليلية يجب أن تُملأ على كل مستند في النظام، عدا مستندات شؤون الموظفين التي تعمل على المحدد العام بحق.
- مطبق على: المستندات
- استعلام عندما:
select case when {entityType} in
('SalarySheet','TimeAttendance','LeavePermission','MissionDocument','VacationDocument')
then 0 else 1 end- استعلام يجب أن:
select case when {analysisSet.code} = 'PUBLIC' then 0 else 1 end- الرسالة: من فضلك اختر المشروع.
حماية الحذف
المهمة التي كُتبت في محضر اجتماع لا تختفي ببساطة.
- النوع المستهدف:
WorkTask - التحقق مع: الحذف
- استعلام عندما:
select case when count(1) > 0 then 1 else 0 end
from MeetingRemarkLine mrl where mrl.ref1id = {id}- استعلام لمحتوى رسالة الخطأ:
select top 1 mr.code as mr_code, mr.remarkDate as mr_remarkDate
from MeetingRemarkLine mrl
left join MeetingRemark mr on mr.id = mrl.meetingRemark_id
where mrl.ref1id = {id}- الرسالة: هذه المهمة مدرجة في مستند المهام {mr_code} بتاريخ {mr_remarkDate} ولا يمكن حذفها.
التنبيه دون المنع
السياسة الضريبية للعميل غير محددة — يستحق التنبيه، ولا يستحق رفض البيع.
- النوع المستهدف:
SalesInvoice - نوع المعيار: تحذير
- استعلام يجب أن:
select case when {customer.taxPlan} is not null then 0 else 1 end- الرسالة: برجاء مراجعة السياسة الضريبية في ملف العميل.
ما يفحصه النظام في سجل التحقق نفسه
يُفحص سجل التحقق نفسه عند حفظه، وهذا يلتقط أغلب الأخطاء قبل أن يلقاها أي مستخدم. فكل سطر لا بد أن يحمل رسالة بلغة واحدة على الأقل، وأن يملأ واحدًا على الأقل من خانات «عندما / يجب أن» الأربع، وأن يعلّم إجراءً واحدًا على الأقل في التحقق مع. والرأس لا بد أن يحدد نوعًا مستهدفًا أو قائمة «تطبق أيضًا على» أو نطاق «مطبق على» — ولا يجوز الجمع بين «مطبق على» والاثنين الآخرين. وحقل الخطأ لا بد أن يكون موجودًا على الشاشة المستهدفة، وسطر التأكيد لا يُربط بالمسودة ولا المراجعة ولا إلغاء المراجعة ولا الموافقة.
صفحات ذات صلة
- المعايير من محلل النصوص — صيغة الفلاتر خلف سجلات المعايير المحفوظة.
- Tempo — صيغة القوالب المستخدمة في رسائل الخطأ.
- مسارات الكيانات — حين تحتاج أن تفعل شيئًا لا أن ترفض شيئًا.
- الموافقات — دورات الموافقة وتعريفاتها وخطواتها.
- التحقق من المدخلات في أعدادات الحقول و الشاشات — للقواعد التي تخص شكل حقل واحد لا معنى المستند. فجدول صيغ الحقول هناك يفرض «الرقم الضريبي خمسة عشر رقمًا» أو «رقم الجوال يبدأ بـ 05» دون استعلام، ويمكن ربط كل سطر بسجل معايير فلا تسري الصيغة إلا في الحالات التي تختارها.