تحقق بناءا علي معايير -تساوي سطور مع قيمة

Viewed 14

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

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

n1=mlsql(
select count(l.ref1Id)
from invitem i
LEFT JOIN ItemDimensionsDetail l on l.invItem_id = i.id
where i.id={id})endmlsql

select case when {n1} <> cast({primConversionLines.toValue} as decimal(20,0)) then 1 else 0 end

1 Answers

لا حاجة لاستخدام mlsql أو أي استعلام لعدّ السطور، فهناك معامل جاهز يعطي عدد سطور أي جريد مباشرة وهو $size.

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

الحل — استبدل سطر mlsql كاملًا بالتالي في خريطة الحقول (Field Map) الخاصة بالتحقق:

n1=details.$size

ثم اترك سطر المعايير كما هو:

select case when {n1} <> cast({primConversionLines.toValue} as decimal(20,0)) then 1 else 0 end

ويمكن أيضًا الاستغناء عن المتغير الوسيط n1 واستخدام $size مباشرة داخل الاستعلام:

select case when {details.$size} <> cast({primConversionLines.toValue} as decimal(20,0)) then 1 else 0 end

ملاحظات مهمة

  • details هنا هو اسم الجريد المطلوب عدّ سطوره في شاشة الصنف (جريد محددات الصنف). استبدله باسم الجريد الذي تريده إن كان مختلفًا، مثل primConversionLines.$size أو primaryUnits.$size.
  • $size يعمل مع أي مجموعة سطور وفي أي كيان، وليس شاشة الصنف فقط.
  • primConversionLines.toValue هو حقل داخل جريد أيضًا، لذلك القيمة المستخدمة في المقارنة تأتي من أحد سطور ذلك الجريد وليست قيمة واحدة ثابتة في رأس الشاشة. إن كان المقصود قيمة واحدة للصنف كله فيفضّل مقارنتها بحقل في رأس الشاشة (مثل أحد الحقول الرقمية الإضافية) حتى تكون النتيجة مؤكدة.