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

Viewed 2

عرّفت موافقة من نوع "مع التعديل" (Update Approval) على فاتورة المشتريات لكي يطلب النظام موافقة عند أي تعديل يقوم به المستخدم على الفاتورة.

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

  • عند إنشاء سند استلام مخزني مرتبط بفاتورة المشتريات.
  • عند إنشاء سند تكاليف إضافية على الاستلام (Receipt Additional Costs) مرتبط بالفاتورة.

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

ما السبب وراء هذا السلوك؟ وكيف يمكنني منع تشغيل الموافقة في حالات التعديل التلقائي الناتج عن إجراءات داخلية في النظام، مع الإبقاء عليها عند التعديل اليدوي من قِبل المستخدم؟

1 Answers

السبب

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

  • تحديث الكميات المُستلمة على بنود الفاتورة.
  • تحديث توزيع التكلفة على بنود الفاتورة.
  • إجبار الفاتورة على إعادة حفظ سندات الاستلام الأخرى المرتبطة بها.

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

الحل: استثناء التعديلات الداخلية باستخدام applyWhenQuery

يقوم النظام بتعليم الكيانات التي يتم حفظها عبر إجراء داخلي بضبط الحقل systemIsCommiting ليصبح true خلال هذه العمليات. يمكن استغلال ذلك لمنع تشغيل الموافقة في هذه الحالات فقط، عبر إضافة الاستعلام التالي في حقل applyWhenQuery الخاص بتعريف الموافقة:

select case when {$systemIsCommiting} = 1 then 0 else 1 end

النتيجة

بهذا الإعداد:

  • التعديل اليدوي من المستخدم → الموافقة تُشغَّل كالمعتاد.
  • التعديل من سند استلام أو تكاليف إضافية → الموافقة تُتجاوز لأن systemIsCommiting = 1.

هذا يحافظ على هدف الموافقة الأصلي (مراقبة تعديلات المستخدم) دون أن يُعطّل سير عمل الاستلامات والتكاليف الإضافية.