البحث المنسّق (FMS) في SAP Business One: صياغة $[$38.1.0] و7 أمثلة عملية والتحديث التلقائي
بقلم زين عباس, كودينوفا · آخر تحديث
ما هو البحث المنسّق
البحث المنسّق، ويُسمّى عادةً 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) قبل الاعتماد على أي رقم.
كيف تجد معرّفات العناصر والأعمدة
- في SAP Business One، افتح عرض > معلومات النظام (View > System Information).
- افتح النموذج ومرّر المؤشر فوق الحقل.
- اقرأ شريط الحالة في الأسفل. يعرض العنصر والعمود، وللحقول المرتبطة بقاعدة البيانات اسم الجدول والحقل.
تحقق من كل معرّف على إصدارك ونموذجك. قد تختلف أرقام الأعمدة بين أنواع المستندات وحزم التوطين. ويساعدك مرجع جداول SAP B1 في أسماء الجداول والحقول.
كيف تربط بحثًا منسّقًا بحقل
- احفظ استعلامك في مدير الاستعلامات، ويُفضّل في فئة باسم “FMS”.
- افتح النموذج المستهدف وانقر داخل الحقل.
- اضغط Alt+Shift+F2. تفتح نافذة البحث المنسّق.
- اختر البحث في القيم المعرّفة من قِبل المستخدم الموجودة وفقًا لاستعلام محفوظ (Search in Existing User-Defined Values according to Saved Query) واختر استعلامك.
- حدد متى يعمل:
- دون تحديث تلقائي: يضغط المستخدم Shift+F2 أو ينقر على أيقونة العدسة.
- التحديث التلقائي عند تغيّر الحقل (Auto Refresh When Field Changes): اختر الحقل المُشغِّل، مثل رمز الصنف. يعمل الاستعلام عندما يغادر المستخدم ذلك الحقل.
- عرض القيم المحفوظة (Display Saved Values): يحتفظ بالقيمة المخزنة في المستند بدل إعادة تشغيل الاستعلام في كل مرة يُفتح فيها المستند.
- انقر تحديث (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.
جاهز لبناء واحد؟ افتح منشئ البحث المنسّق، واختر النموذج والحقل، وانسخ الاستعلام. وإذا كانت مستنداتك بطيئة أو كنت تحتاج إلى قواعد لا يستطيع البحث المنسّق فرضها، تواصل معنا وسنراجع إعداداتك.
المصادر
- SAP: كيفية تعريف البحث المنسّق واستخدامه (دليل SAP Business One، PDF)
- SAP: كيفية تعريف عمليات البحث المنسّق واستخدامها (مستضاف لدى Vision33)
- SAP Community: بحث منسّق لحساب الخصم على SAP B1 HANA
- أرشيف SAP Community: مراجع الحقول في البحث المنسّق ومعلومات النظام
- SAP Community: ظهور Internal error (-1003) occurred [Message 131-183] عند تنفيذ بحث منسّق
- Packt: العمل مع القيم المعرّفة من قِبل المستخدم في SAP Business One
خدمات ذات صلة
أسئلة شائعة
ماذا تعني $[$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 ساعة.
