البحث المنسّق (FMS) في SAP Business One: صياغة $[$38.1.0] و7 أمثلة عملية والتحديث التلقائي

بقلم زين عباس, كودينوفا · آخر تحديث

الإجابة المختصرةالبحث المنسّق (FMS) استعلام محفوظ مرتبط بحقل في SAP Business One، يملأ الحقل أو يعرض قائمة اختيار. داخل الاستعلام تقرأ القيم من النموذج المفتوح بالصيغة $[$Item.Column.Type]، مثل $[$38.1.0] لرمز الصنف في سطر المستند. تربطه بالحقل عبر Alt+Shift+F2 وتختار ما إذا كان يعمل عند الطلب، أو عند تغيّر حقل آخر، أو في كل مرة.

ما هو البحث المنسّق

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

يحبه المستخدمون لأنه يوفّر عليهم الكتابة. ويحبه المطورون لأنه لا يحتاج إلى أي إضافة. يمكنك ملء حقل UDF في السطر بالاسم الأجنبي للصنف، أو عرض المخزون في مستودع السطر، أو تقديم قائمة منسدلة من جدول معرّف من قِبل المستخدم.

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

الصياغة

هناك طريقتان لقراءة القيم من النموذج المفتوح.

الصيغةمثالمتى تُستخدم
$[$Item.Column.Type]$[$38.1.0]تقرأ الحقل حسب موقعه في النموذج. تعمل عبر المستندات المتشابهة.
$[TABLE.Field]$[OINV.CardCode]تقرأ حسب اسم الجدول والحقل. تعمل فقط في النماذج المبنية على ذلك الجدول.

في الصيغة الأولى:

  • Item هو رقم عنصر النموذج. في مستندات المبيعات والمشتريات، 38 هو مصفوفة الأسطر و 4 هو رمز العميل أو المورّد.
  • Column هو عمود المصفوفة. استخدم 0 لحقول الرأس.
  • Type يحدد طريقة إرجاع القيمة:
    • 0 يعيد القيمة كما هي. استخدمه للرموز والنصوص وأرقام المستندات.
    • NUMBER يعيد رقمًا دون العملة أو الوحدة. استخدمه للحسابات.
    • CURRENCY يعيد رمز العملة أو وحدة القياس فقط.
    • DATE يعيد تاريخًا يمكنك إضافة أيام إليه.

يوصي دليل SAP نفسه بصيغة الأرقام، لأن $[$4.0.0] تعمل في أي مستند تسويقي، بينما $[OINV.CardCode] تعمل فقط في فواتير المبيعات.

تستخدم الحقول المعرّفة من قِبل المستخدم اسمها مكان العمود: $[$38.U_Discount.NUMBER].

لا تريد البحث عن معرّفات العناصر والأعمدة يدويًا؟ منشئ البحث المنسّق يكتب المتغير للحقل الذي تختاره.

مرجع سريع

المتغيرما الذي يعيده
$[$38.1.0]رمز الصنف في السطر الحالي: العنصر 38 هو مصفوفة الأسطر، والعمود 1 هو رقم الصنف، و 0 تعني أن الحقل يحمل قيمة واحدة.
$[$38.17.NUMBER]رقم حقل سعر أو إجمالي دون رمز العملة، جاهز للحسابات.
$[$38.17.CURRENCY]رمز العملة (أو وحدة القياس) لذلك الحقل فقط.
$[$10.0.DATE]تاريخ في الرأس يمكنك الحساب به، مثل $[$10.0.DATE] + 20. حقول الرأس تستخدم العمود 0.
$[$4.0.0]رمز العميل أو المورّد في أي مستند مبيعات أو مشتريات.
$[ORDR.CardCode]، $[RDR1.ItemCode]اسم الجدول والحقل. تعمل فقط في النافذة المبنية على ذلك الجدول (هنا أمر البيع).
$[$38.U_Discount.NUMBER]حقل معرّف من قِبل المستخدم في السطر: اكتب دائمًا البادئة U_، وإلا أعاد SAP B1 الخطأ -1003.

قد تختلف أرقام العناصر والأعمدة بين الإصدارات والنماذج. تحقق منها عبر عرض ← معلومات النظام (View → System Information) قبل الاعتماد على أي رقم.

كيف تجد معرّفات العناصر والأعمدة

  1. في SAP Business One، افتح عرض > معلومات النظام (View > System Information).
  2. افتح النموذج ومرّر المؤشر فوق الحقل.
  3. اقرأ شريط الحالة في الأسفل. يعرض العنصر والعمود، وللحقول المرتبطة بقاعدة البيانات اسم الجدول والحقل.

تحقق من كل معرّف على إصدارك ونموذجك. قد تختلف أرقام الأعمدة بين أنواع المستندات وحزم التوطين. ويساعدك مرجع جداول SAP B1 في أسماء الجداول والحقول.

كيف تربط بحثًا منسّقًا بحقل

  1. احفظ استعلامك في مدير الاستعلامات، ويُفضّل في فئة باسم “FMS”.
  2. افتح النموذج المستهدف وانقر داخل الحقل.
  3. اضغط Alt+Shift+F2. تفتح نافذة البحث المنسّق.
  4. اختر البحث في القيم المعرّفة من قِبل المستخدم الموجودة وفقًا لاستعلام محفوظ (Search in Existing User-Defined Values according to Saved Query) واختر استعلامك.
  5. حدد متى يعمل:
    • دون تحديث تلقائي: يضغط المستخدم Shift+F2 أو ينقر على أيقونة العدسة.
    • التحديث التلقائي عند تغيّر الحقل (Auto Refresh When Field Changes): اختر الحقل المُشغِّل، مثل رمز الصنف. يعمل الاستعلام عندما يغادر المستخدم ذلك الحقل.
    • عرض القيم المحفوظة (Display Saved Values): يحتفظ بالقيمة المخزنة في المستند بدل إعادة تشغيل الاستعلام في كل مرة يُفتح فيها المستند.
  6. انقر تحديث (Update) واختبر على مستند جديد.

يذكر دليل SAP أيضًا خيار «التحديث المنتظم» (Refresh Regularly)، ويحذّر من استخدامه إلا بحذر لأنه قد يبطئ النماذج ويغيّر المستندات المحفوظة عند تصفحها.

7 أمثلة عملية

كل الأمثلة بصياغة SQL Server. وتأتي ملاحظات HANA بعدها.

1. حقل صنف في السطر. الاسم الأجنبي لصنف السطر في حقل UDF على السطر (الجدول OITM).

SELECT T0.FrgnName
FROM OITM T0
WHERE T0.ItemCode = $[$38.1.0]

2. حقل شريك أعمال في الرأس. الائتمان المتاح للعميل المختار (الجدول OCRD).

SELECT T0.CreditLine - T0.Balance
FROM OCRD T0
WHERE T0.CardCode = $[$4.0.0]

3. المخزون في مستودع السطر. العمود 24 هو المستودع في كثير من نماذج المستندات. تأكد منه عبر معلومات النظام. والمخزون حسب المستودع موجود في OITW.

SELECT T0.OnHand
FROM OITW T0
WHERE T0.ItemCode = $[$38.1.0]
  AND T0.WhsCode = $[$38.24.0]

4. آخر سعر بيع لهذا العميل. مفيد للمراجعة بجانب عمود السعر (فواتير المبيعات في OINV).

SELECT TOP 1 T1.Price
FROM OINV T0
INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
WHERE T0.CardCode = $[$4.0.0]
  AND T1.ItemCode = $[$38.1.0]
  AND T0.CANCELED = 'N'
ORDER BY T0.DocDate DESC, T0.DocEntry DESC

5. وزن السطر. وزن البيع للوحدة مضروبًا في كمية السطر (العمود 11).

SELECT T0.SWeight1 * $[$38.11.NUMBER]
FROM OITM T0
WHERE T0.ItemCode = $[$38.1.0]

6. قائمة منسدلة من جدول معرّف من قِبل المستخدم. إرجاع عمودين يعطي المستخدم قائمة يختار منها.

SELECT T0.Code, T0.Name
FROM [@REGIONS] T0
ORDER BY T0.Name

7. تاريخ اليوم. يملأ حقل UDF من نوع تاريخ عند إنشاء المستند.

SELECT GETDATE()

الفروق في HANA

على SAP Business One لـ HANA يبقى المنطق نفسه لكن SQL يتغير:

  • ضع أسماء الجداول والأعمدة بين علامتي اقتباس مزدوجتين: T0."ItemCode" و "@REGIONS".
  • أسماء حقول UDF داخل المتغير تحتاج أيضًا إلى اقتباس: $[$38."U_Discount".NUMBER].
  • عبارة SELECT دون جدول تحتاج إلى FROM DUMMY.
  • استبدل دوال SQL Server: تصبح GETDATE() هي CURRENT_DATE، وتصبح ISNULL هي IFNULL.

المثال 7 على HANA:

SELECT CURRENT_DATE FROM DUMMY

المثال 1 على HANA:

SELECT T0."FrgnName"
FROM OITM T0
WHERE T0."ItemCode" = $[$38.1.0]

إذا كنت تنقل استعلامات كثيرة، فالصقها في محوّل SQL إلى HANA ثم اختبر كل واحد منها.

أخطاء البحث المنسّق الشائعة وطريقة حلها

العَرَضالسبب المعتادالحل
يظهر Internal error (-1003) occurred عند تشغيل البحثفشل SQL عندما شغّله SAP Business One: خطأ في الصياغة، أو قوس ناقص، أو مرجع حقل لا يمكن حلّهشغّل الاستعلام في مدير الاستعلامات، أو شغّل SQL المترجَم في SQL Server Management Studio، وأصلح الخطأ الذي يظهر. ثم تحقق من كل مرجع $[...] عبر عرض > معلومات النظام.
الاستعلام يعمل على SQL Server لكنه يفشل على HANAأسماء أعمدة بأحرف مختلطة دون اقتباس، أو SELECT دون جدولضع أسماء الجداول والأعمدة بين علامتي اقتباس مزدوجتين وأضف FROM DUMMY. انظر الفروق في HANA.
لم يُعثر على حقل معرّف من قِبل المستخدمكُتب الحقل دون البادئة U_اكتب الاسم كاملًا دائمًا، مثل $[$38.U_Discount.NUMBER].
القيمة لا تتغير عندما يتغير الحقل المُشغِّلالتحديث التلقائي عند تغيّر الحقل غير مفعّل، أو يشير إلى حقل خاطئفعّل التحديث التلقائي واختر الحقل الذي يجب أن يشغّل الاستعلام. بدونه لا يعمل الاستعلام إلا عبر Shift+F2.
تُعاد حساب القيمة عند فتح مستند قديم، أو لا تتحدّث أبدًااختيار خيار تحديث خاطئعرض القيم المحفوظة يعرض ما حُفظ مع المستند. أما التحديث المنتظم فيعيد تشغيل الاستعلام في كل مرة تتصفح فيها المستند، وتحذّر SAP من أنه قد يبطئ المستندات ويغيّر قيمًا لم تقصد تغييرها.

ولا يعمل التحديث التلقائي أيضًا على الحقول التي لم يعد ممكنًا تغييرها، مثل رقم الصنف في مذكرة تسليم قائمة.

نصائح للأداء

  • عمليات البحث على مستوى الأسطر تتضاعف. البحث الذي يتحدّث تلقائيًا عند تغيّر رمز الصنف يعمل مرة لكل سطر. في أمر من 200 سطر، هذا يعني 200 استعلام. أضف ثلاث عمليات بحث كهذه وسيشعر المستخدمون بالبطء.
  • صفِّ على المفاتيح. استعلم حسب ItemCode و CardCode و DocEntry. وتجنّب LIKE '%x%' والدوال على الأعمدة داخل جملة WHERE.
  • تجنّب عمليات الربط الثقيلة على جداول المستندات. المثال 4 يمسح سجل الفواتير. هذا مقبول لبضع مئات الآلاف من الأسطر، وبطيء للملايين. فكّر في فهرس أو جدول ملخّص.
  • فضّل التشغيل عند الطلب للاحتياجات النادرة. إذا كان المستخدمون يحتاجون القيمة من حين لآخر فقط، فاترك التحديث التلقائي مطفأً ودعهم يضغطون Shift+F2.
  • استخدم عرض القيم المحفوظة لأي قيمة يجب ألا تتغير بعد حفظ المستند.

متى تستخدم شيئًا آخر

البحث المنسّق يملأ الحقول، لكنه لا يفرض القواعد. يستطيع المستخدم الكتابة فوق القيمة، وعمليات الاستيراد عبر DI API أو Service Layer لا تشغّله.

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

يملأ البحث المنسّق الحقول أثناء كتابة المستخدمين؛ أما لإعداد التقارير على البيانات نفسها، فتعرّف على طريقة بناء لوحة معلومات SAP Business One بدون Power BI.

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

المصادر

خدمات ذات صلة

الأسئلة الشائعة

أسئلة شائعة

ماذا تعني $[$38.1.0] في SAP Business One؟

تقرأ قيمة من النموذج المفتوح. 38 هو رقم عنصر مصفوفة أسطر المستند، و1 هو العمود (رقم الصنف)، و0 هو النوع الذي يعيد القيمة كما هي. إذن $[$38.1.0] هي رمز الصنف في السطر الحالي.

ما الفرق بين 0 و NUMBER و DATE في البحث المنسّق؟

يعيد 0 قيمة الحقل كما هي، وهو مناسب للرموز والنصوص. ويعيد NUMBER قيمة رقمية دون العملة أو الوحدة، فيمكنك إجراء الحسابات بها. ويعيد DATE تاريخًا يمكنك استخدامه في حسابات التواريخ.

كيف أجد رقم العنصر ورقم العمود لحقل ما؟

فعّل عرض > معلومات النظام (View > System Information)، ثم مرّر المؤشر فوق الحقل. يعرض شريط الحالة رقم العنصر والعمود، وللحقول المرتبطة بقاعدة البيانات اسم الجدول والحقل.

هل يعمل البحث المنسّق على SAP Business One لـ HANA؟

نعم، لكن يجب أن يتبع SQL قواعد HANA. ضع أسماء الجداول والأعمدة بين علامتي اقتباس مزدوجتين، واستخدم FROM DUMMY عند اختيار قيمة دون جدول، واستبدل دوال SQL Server مثل GETDATE() بدوال HANA مثل CURRENT_DATE.

لماذا يعطي البحث المنسّق الخطأ Internal error (-1003)؟

عمليًا يعني ذلك أن SQL فشل عندما شغّله SAP Business One: خطأ في الصياغة، أو مرجع حقل خاطئ، أو حقل معرّف من قِبل المستخدم مكتوب دون U_. شغّل الاستعلام نفسه في مدير الاستعلامات، أو شغّل SQL المترجَم في SQL Server Management Studio، واقرأ الخطأ الحقيقي وأصلحه هناك. ثم تحقق من كل مرجع $[...] عبر عرض > معلومات النظام.

لماذا أصبحت مستنداتي بطيئة بعد إضافة عمليات بحث منسّق؟

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

جاهز للبدء؟

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