البحث حسب القيمة الحالية.

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

StrReplace(Number, Lev(Number, 3), "" );

عندما بحثت في مساعد بناء الجملة أعجبني كثيرًا لدرجة أنني أردت الكتابة عنه العمل مع السلاسل في 1C:Enterprise.

تشير السلسلة في 1C إلى نوع بيانات بدائي.

إذا نظرت إلى مساعدة 1C، فسنرى الوصف التالي لنوع السلسلة:
تحتوي القيم من هذا النوع على سلسلة Unicode ذات طول عشوائي.
إذا استخدمت كلماتك الخاصة حول الأوتار، فسوف ينجح الأمر. السلسلة عبارة عن ثابت يتكون من أحرف مختلفة، محاطة دائمًا بعلامات اقتباس.

تحديد الخط
التحية = "مرحبا أيها الراكب";

غالبًا ما يتم إنشاء الخطوط المتعددة الأسطر في التكوينات النموذجية باستخدام الفاصل الرأسي "|":
سلسلة = "متعدد الأسطر
|سلسلة
|اكتب
|نص";

يتم تحديد علامة الاقتباس داخل السلسلة بواسطة علامات الاقتباس المزدوجة.
String = ""النص بين علامتي اقتباس"";

هناك العديد من العمليات على السلاسل (البحث داخل السلسلة، وتحديد العمليات الأولى، وما إلى ذلك)، فمن الأفضل إلقاء نظرة على مساعد بناء الجملة.
مساعد بناء الجملة - وصف عام للغة المضمنة -> الوظائف المضمنة -> وظائف للعمل مع السلاسل.

وظائف للعمل مع السلاسل

فيما يلي ملخص موجز لوظائف العمل مع السلاسل:

فيريج(<Строка>) - تقوم الدالة بتحويل جميع الأحرف في السلسلة إلى أحرف كبيرة.

رمز الرمز(<Строка>, <НомерСимвола>) - تستقبل الوظيفة رمز الحرف الموجود في السلسلة المرسلة في الموضع بالرقم المحدد.

أسد(<Строка>, <ЧислоСимволов>) - تقوم الوظيفة باختيار الأحرف اليسرى الأولى من السلسلة.

يجد(<Строка>, <ПодстрокаПоиска>) - تعثر الوظيفة على تكرار سلسلة البحث كسلسلة فرعية في السلسلة المصدر.

نريج(<Строка>) - تقوم الدالة بتحويل كافة الأحرف في السلسلة إلى أحرف صغيرة.

يمين(<Строка>, <ЧислоСимволов>) – تختلف هذه الوظيفة عن الوظائف اليسرى من حيث أنها تقوم بتحديد الأحرف الأخيرة من يمين السلسلة.

سطر فارغ(<Строка>) - تتحقق الوظيفة من وجود أحرف مهمة في السلسلة.

رمز(<КодСимвола>) - تقوم الوظيفة بتحويل رمز الحرف إلى سلسلة تحتوي على الحرف.

أبرل(<Строка>) - تقوم الدالة بقطع الأحرف غير المهمة الموجودة على يسار الحرف الأول المهم في السلسلة.

أبرلب(<Строка>) - تقوم الوظيفة بقص الأحرف غير المهمة على يسار أول حرف مهم في السطر، والمسافات على يمين آخر حرف مهم في السطر.

أبر(<Строка>) - تقوم الدالة بقطع الأحرف غير المهمة الموجودة على يمين آخر حرف مهم في السلسلة.

الأربعاء(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - تختار الوظيفة سلسلة من الأحرف، بدءاً بالحرف<НачальныйНомер>، الرقم الإجمالي<ЧислоСимволов>.

الطول(<Строка>) - الدالة تحصل على عدد الأحرف في السطر.

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - تبحث الوظيفة عن كافة تكرارات سلسلة البحث الفرعية في السلسلة المصدر وتستبدلها بالسلسلة الفرعية البديلة.

سلسلة StrGetString(<Строка>, <НомерСтроки>) - تحصل الدالة على سلسلة متعددة الأسطر حسب الرقم.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) - تحسب الوظيفة عدد مرات تكرار سلسلة البحث الفرعية في السلسلة المصدر.

StrNumberRow(<Строка>) - تقوم الدالة بحساب عدد الأسطر في سلسلة متعددة الأسطر. في سلسلة متعددة الأسطر، يتم فصل الأسطر بأسطر جديدة.

TReg(<Строка>) - تقوم الدالة بتحويل السلسلة إلى حالة عنوان. وهذا يعني أنه يتم تحويل الحرف الأول من كل كلمة إلى حالة عنوان، أو إلى حالة كبيرة إذا لم يتم تحديد حالة عنوان للحرف. يتم تحويل الأحرف المتبقية إلى أحرف صغيرة.

نوع التحويلات
للتحويل الصريح لأنواع البيانات، هناك وظائف تحمل نفس الاسم مع نوع البيانات الذي يتم التحويل إليه: String(<Значение>)

StringFromNumbers = String(Number);

تم وصف كل هذه الوظائف بالتفصيل في مساعد بناء الجملة، وقد وصفت في المقالة كيف يمكن لمساعد بناء الجملة أن يساعد المبرمج المبتدئ.

أمثلة على العمل مع السلاسل

تحويل رقم إلى سلسلة والعودة.

للحصول على تمثيل سلسلة للسنة، استخدم الدالة Format.

السنة = التنسيق(CurrentDate(), "DF=yyyy") // السنة = "2012"

لتحويل رقم إلى سلسلة دون إدراج حرف فاصل للمجموعة (مسافة غير منقسمة)، يجب عليك استخدام الدالة Format مع المعلمة NG=0:

الرقم = 2012 Line = Format(Number, "NH=0" ); // سلسلة = "2012"

سلسلة بدون مسافات.

ابحث عن عنصر الدليل في 1ج 8ممكن بثلاث طرق:

1) البحث عن طريق الرمز

إذا كان معروفا شفرةعنصر الدليل، وتحتاج إلى الحصول على رابط له، يمكنك استخدام الطريقة فيند باي كود(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>) شفرةعنصر الدليل وستكون النتيجة إما رابطًا لعنصر الدليل أو رابطًا فارغًا إذا لم يتم العثور على عنصر به هذا الرمز. تجدر الإشارة إلى أنه إذا كان الدليل يحتوي على عدة عناصر بالرمز المحدد، فسيتم إرجاع العنصر الذي تم العثور عليه أولاً.

FoundElement = Directory.Nomenclature.FindByCode("00000011254");

وصف معلمات الطريقة FindByCode:

  • <Код>(مطلوب). النوع: رقم، سلسلة. الوصف: الكود أو السلسلة أو الرقم المطلوب، اعتمادًا على إعدادات الدليل في أداة التهيئة.
  • <ПоискПоПолномуКоду>(خياري). النوع: منطقي. الوصف: يحدد وضع البحث بالكود الكامل، صحيح - يجب تحديد الكود الذي تم البحث عنه كسلسلة تتكون من سلسلة من الرموز حسب مستويات الدليل، مفصولة بالرمز "/". القيمة الافتراضية: خطأ.
  • <Родитель>(خياري)
  • <Владелец>(خياري)

2) البحث بالاسم

إذا كان معروفا اسمعنصر الدليل وتحتاج إلى الحصول على رابط إليه، يمكنك استخدام الطريقة FindByName(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>) مدير الدليل. في أبسط الحالات، تحتاج إلى الانتقال إلى هذه الطريقة اسمعنصر الدليل وستكون النتيجة إما رابطًا لعنصر الدليل أو رابطًا فارغًا إذا لم يتم العثور على عنصر بنفس الاسم. وتجدر الإشارة إلى أنه إذا كان هناك عدة عناصر في الدليل بالاسم المحدد، فسيتم إرجاع العنصر الذي تم العثور عليه أولاً.

FoundElement = Directory.Nomenclature.FindByName( "آلة لحام");

وصف معلمات الطريقة FindByName:

  • <Наименование>(مطلوب). النوع: سلسلة. الوصف: سلسلة تحتوي على الاسم الذي تبحث عنه.
  • المطابقة التامة> (اختياري). النوع: منطقي. الوصف: يحدد وضع البحث بالمطابقة الكاملة، سيكون البحث ناجحاً إذا كانت سلسلة البحث: في حالة قيمة المعلمة كذب- سيتوافق مع الجانب الأيسر من الاسم، في حالة قيمة المعلمة حقيقي- سوف يتطابق تمامًا مع الاسم (باستثناء مسافات "الذيل" في الاسم). القيمة الافتراضية: خطأ.
  • <Родитель>(خياري). النوع: رابط الدليل. الوصف: الأصل الذي يجب إجراء البحث فيه؛ إذا لم يتم تحديده، فسيتم إجراء البحث في الدليل بأكمله.
  • <Владелец>(خياري). النوع: رابط الدليل. الوصف: المالك الذي يجب إجراء البحث فيه؛ إذا لم يتم تحديده، فسيتم إجراء البحث في الدليل بأكمله.

3) البحث عن طريق التفاصيل التعسفية

إذا كان معنى أي الدعائمالدليل وتحتاج إلى الحصول على رابط إليه، يمكنك استخدام الطريقة البحث حسب التفاصيل(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>) مدير الدليل. في أبسط الحالات، تحتاج إلى تمرير اسم السمة وقيمتها إلى هذه الطريقة، ونتيجة لذلك، ستتلقى إما رابطًا لعنصر الدليل، أو رابطًا فارغًا إذا كان العنصر بهذه القيمة المحددة لم يتم العثور على السمة. وتجدر الإشارة إلى أنه إذا كان هناك عدة عناصر في الدليل لها نفس قيمة السمة المحددة، فسيتم إرجاع العنصر الذي تم العثور عليه أولاً.

FoundElement = Directory.Nomenclature.FindByRequisites("Article"، "A-255")؛

وصف معلمات الطريقة FindByProps:

  • <ИмяРеквизита>(مطلوب). النوع: سلسلة. الوصف: اسم السمة، كما هو محدد في المكوِّن، من خلال القيمة التي يتم إجراء البحث بها. نوع القيمة: عشوائي، باستثناء ValueStorage والسلاسل ذات الطول العشوائي.
  • <ЗначениеРеквизита>(مطلوب). النوع: مجاني. الوصف: قيمة السمة التي يجب إجراء البحث من خلالها.
  • <Родитель>(خياري). النوع: رابط الدليل. الوصف: الأصل الذي يجب إجراء البحث فيه؛ إذا لم يتم تحديده، فسيتم إجراء البحث في الدليل بأكمله.
  • <Владелец>(خياري). النوع: رابط الدليل. الوصف: المالك الذي يجب إجراء البحث فيه؛ إذا لم يتم تحديده، فسيتم إجراء البحث في الدليل بأكمله.

تمت إضافة ميزات جديدة في إصدار النظام الأساسي 8.3.6.1977، لكن لا تتعجل في استخدامها حتى يتحول الجميع إلى منصات جديدة بدون وضع التوافق 8.3.5.
الميزات الجديدة مريحة - بلا شك، لكنها لن تناسب الجميع. فيما يلي قائمة بالميزات التي تحتوي على الأخطاء والخيارات القديمة التي ستعمل عبر جميع الأنظمة الأساسية.
إن استخدام الوظائف الجديدة أم لا هو أمر متروك لك، لكن رأيي الشخصي لا يستحق ذلك بعد.
الوظائف المغطاة: StrFind()، StrTemplate()، StrCompare()، StrStartsWith()، StrEndsAt()، StrDivide()، StrConnect()

تم تنفيذه في الإصدار 8.3.6.1977.

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

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

عندما تكتب عن التكوينات "الخاصة بك"، يمكنك أن تفعل ما تريد، ولكن عندما ينتقل التطوير إلى تكوين "شخص آخر"، يجب أن تفكر في الطريقة التي يجب أن تسلكها:

  • استخدام وظائف جديدة وإلزام العميل بالتبديل إلى منصة جديدة
  • التحقق من الإصدار الحالي للمنصة واستخدام الوظائف الجديدة وآليات التشغيل القديمة
  • استخدم آليات العمل القديمة فقط

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

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

وثالثا - الأكثر مثالية (رأيي الشخصي) أبسط بكثير من الخيار الثاني، ولكنه أدنى من الخيار الأول من حيث أنه لا يساعد في الترويج لمنصات جديدة للجماهير

وظيفة للعمل مع السلاسل StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>)

وظيفة يبحث عن سلسلة فرعية في اتجاهات مختلفة وليس فقط من بداية السلسلة.

Report(StrandFind("2212"،"1")); //العودة 3

حدث خطأ في وضع التوافق 8.3.5 وما دونه
(ExternalProcessing.ExternalProcessing1.ObjectModule(1,10)): لم يتم تعريف الإجراء أو الوظيفة بالاسم المحدد (Strand Find)
للإبلاغ(<>StrFind("1"،"2212"))؛

دعونا نكون راضين بما لدينا

تقرير(بحث("2212"،"1")); //العودة 3

ميزات أقل، ولكن لا يتعطل مع وجود خطأ

تبقى وظيفة Find() فقط للتوافق مع الإصدار 8.3.5 ونتوقع أنها لن تكون متاحة في المستقبل.


وظيفة للعمل مع السلاسل StrTemplate(<Шаблон>, <Значение1-Значение10>)

وظيفة يستبدل علامات أحرف البدل (مثل %1) في سلسلة قالب بقيم حقيقية.

Notify(StrTemplate("HELLO %1"،"PEACE!!!"); // يعود مرحبا بالعالم !!!

حدث خطأ في وضع التوافق
(ExternalProcessing.ExternalProcessing1.ObjectModule(3,10)): لم يتم تعريف الإجراء أو الوظيفة بالاسم المحدد (StrTemplate)
للإبلاغ(<>StrTemplate("خطأ في السطر "" %1 """،"MyString"));

وظيفة للعمل مع السلاسل StrCompare(<Строка1>, <Строка2>)

وظيفة ينفذ مقارنة معجمية غير حساسة لحالة الأحرف للسلاسل.

تقرير (StringCompare ("السطر الأول"، "السطر الثاني"))؛ //عودة 1

الخطأ الذي يحدث
(ExternalProcessing.ExternalProcessing1.ObjectModule(5,10)): لم يتم تعريف الإجراء أو الوظيفة بالاسم المحدد (StrCompare)
للإبلاغ(<>StrCompare("السطر الأول"، "السطر الثاني"));

ولكن يمكنك أن تفعل ذلك بشكل مختلف

قارن = قيم المقارنة الجديدة؛ تقرير(Compare.Compare("السطر الأول"، "السطر الثاني"));

وظيفة للعمل مع السلاسل LineStartsWith(<Строка>,<СтрокаПоиска>)

وظيفة يتحقق من أن السلسلة تبدأ بسلسلة فرعية.

سلسلة البحث = "http://"; ThisWeb = StringStartsWith("http://google.com"، SearchString)؛ تقرير (ThisWeb)؛ // إرجاع صحيح

يحدث خطأ

للإبلاغ(<>

ولكن يمكنك أن تفعل ذلك بالطريقة القديمة

سلسلة البحث = "http://"; Report(Lev("http://google.com",StringLength(SearchString))=SearchString); // العودة صحيحا


وظيفة للعمل مع السلاسل StrEndsAt(<Строка>, <СтрокаПоиска>)

وظيفة يتحقق من أن السلسلة تنتهي بسلسلة فرعية.

SearchString = "@mail.ru"; ThisMailRu = StrEndsOn(" [البريد الإلكتروني محمي]"، SearchString)؛ تقرير (ThisMailRu)؛ // إرجاع True

يحدث خطأ
(ExternalProcessing.ExternalProcessing1.ObjectModule(22,10)): لم يتم تعريف الإجراء أو الوظيفة ذات الاسم المحدد (السلسلة تبدأ بـ)
للإبلاغ(<>StringStartsWith("http://google.com", "http://"));

ولكن يمكنك أن تفعل ذلك بشكل مختلف

SearchString = "@mail.ru"; تقرير(يمين(" [البريد الإلكتروني محمي]",StrLength(SearchString))=SearchString); //يرجع صحيحًا


وظيفة للعمل مع السلاسل StrDivide(<Строка>,<Разделитель>,<ВключатьПустые>)
وظيفة للعمل مع سلاسل StrConnect(<Строки>, <Разделитель>)

الدالة StrDivide() يقسم السلسلة إلى أجزاء باستخدام المحدد المحدد.

الدالة StrConnect() يسلسل السلاسل من مجموعة من السلاسل الفرعية.

Array = StrDivide("1,2,3,4,5,6,7,8,9,10"،"،False)؛//إرجاع صف المصفوفة = StrConnect(Array،"،"،")// ترجع 1,2,3,4,5,6,7,8,9,10

ميزات مريحة، ولكن يحدث خطأ

((1,10)): لم يتم تعريف الإجراء أو الوظيفة ذات الاسم المحدد (StrDivide)
صفيف =<> StrDivide ("1،2،3،4،5،6،7،8،9،10"،،، False)؛ // إرجاع مصفوفة
((2,10)): لم يتم تعريف الإجراء أو الوظيفة بالاسم المحدد (StrConnect)
سلسلة =<> StrConnect(صفيف،"،"،")//إرجاع 1،2،3،4،5،6،7،8،9،10

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

يوفر البحث عن النص الكامل الخيارات التالية:

  • يوجد دعم للترجمة الصوتية (كتابة الكلمات الروسية باستخدام الأحرف اللاتينية وفقًا لـ GOST 7.79-2000). مثال: "عبارة روسية" = "russkaya fraza".
  • يوجد دعم للاستبدال (كتابة جزء من الأحرف بالكلمات الروسية بأحرف لاتينية ذات مفتاح واحد). مثال: "russrfz frapf" (تتم كتابة نهايات كل كلمة بأحرف لاتينية، على سبيل المثال، نتيجة لخطأ في المشغل).
  • هناك إمكانية للبحث الغامض (قد تختلف الحروف الموجودة في الكلمات الموجودة) مع الإشارة إلى العتبة الغامضة. مثال: من خلال تحديد كلمة “hello” في شريط البحث وغموض بنسبة 17%، سنجد جميع الكلمات المتشابهة مع وبدون أخطاء: “hello”، “prevet”، “prived”.
  • من الممكن تحديد نطاق البحث لكائنات البيانات التعريفية المحددة.
  • يتم إجراء فهرسة النص الكامل لأسماء الحقول القياسية ("الكود"، "الاسم"، وما إلى ذلك) بجميع لغات التكوين.
  • يتم إجراء البحث مع مراعاة مرادفات اللغات الروسية والإنجليزية والأوكرانية.
  • يحتوي القاموس المورفولوجي للغة الروسية على عدد من الكلمات المحددة المتعلقة بمجالات النشاط المؤتمتة باستخدام نظام برنامج 1C:Enterprise.
  • كمعيار قياسي، تشتمل القواميس المتوفرة على قواعد بيانات القاموس وقواميس المرادفات ومرادفات اللغات الروسية والأوكرانية والإنجليزية، والتي توفرها شركة Informatik.
  • يمكن إجراء البحث باستخدام أحرف البدل ("*")، بالإضافة إلى تحديد عوامل تشغيل البحث ("AND"، "OR"، "NOT"، "NEXT") والأحرف الخاصة.

يمكن إجراء البحث عن النص الكامل بأي تكوين على النظام الأساسي 1C:Enterprise 8

لفتح نافذة التحكم في البحث عن النص الكامل، قم بما يلي:

تطبيق منتظم- عنصر القائمة العمليات - إدارة البحث عن النص الكامل.

التطبيق المدار- عنصر القائمة القائمة الرئيسية - جميع الوظائف - قياسي -إدارة البحث عن النص الكامل.


  • تحديث الفهرس- إنشاء الفهرس/تحديث الفهرس؛
  • مسح الفهرس– إعادة ضبط الفهرس (موصى به بعد تحديث جميع البيانات)؛
  • العنصر السماح بدمج الفهرس- المسؤول عن دمج الفهرس الرئيسي والإضافي.

يتم إجراء البحث عن النص الكامل باستخدام فهرس النص الكامل. بدون فهرس، البحث عن النص الكامل على هذا النحو غير ممكن. لكي يكون البحث فعالا، يجب إدراج جميع البيانات ذات الصلة في فهرس النص الكامل. إذا قام المستخدم بإدخال بيانات جديدة في قاعدة البيانات، فيجب تضمينها في الفهرس المعني، وإلا فلن يشارك في البحث. لتجنب ذلك، تحتاج إلى تحديث فهرس النص الكامل. عند التحديث، يقوم النظام بتحليل أنواع معينة فقط من البيانات: السلسلة، بيانات النوع المرجعي (روابط إلى المستندات والأدلة)، الرقم، التاريخ، تخزين القيمة. إذا لم يكن لدى المستخدم حقوق الوصول إلى معلومات معينة، فلن يتمكن من رؤيتها في نتائج البحث. يجب أن تتذكر أيضًا أنه في خصائص الكائنات التي سيتم البحث عنها، يجب تعيين القيمة البحث عن النص الكامل – الاستخدام، والذي يتم تعيينه افتراضيًا.

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

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

عوامل التشغيل الخاصة المسموح بها عند تحديد تعبير البحث

تتيح آلية البحث عن النص الكامل كتابة جزء من أحرف الكلمة الروسية باستخدام أحرف لاتينية ذات مفتاح واحد. لن تتغير نتيجة البحث.

اثنين من المشغلين التاليين

  • مبسط. 8 كلمات متباعدة
  • NEAR/[+/-]n - ابحث عن البيانات في سمة واحدة على مسافة n-1 من الكلمات بينهما.

تشير العلامة إلى الاتجاه الذي سيتم البحث فيه من الكلمة الأولى عن الكلمة الثانية. (+ - بعد، - قبل)

لا يمكن استخدام حرف البدل "*" إلا كبديل لنهاية الكلمة

عامل التشويش "#". إذا كان التهجئة الدقيقة للاسم، الاسم غير معروف.

البرمجيات وأدوات 1C: البرمجة.

عامل المرادف "!" يتيح لك العثور على كلمة ومرادفاتها

كيفية تحديث فهرس البحث عن النص الكامل برمجياً؟

كود 1C v 8.x إجراء UpdateIndices() تصدير
FulltextSearch.UpdateIndex();
نهاية الإجراء

مثال للبحث عن بيانات النص الكامل

تعريف متغير قائمة البحث

قائمة البحث المتغيرة Code 1C v 8.x؛

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

الإجراء Code 1C v 8.x OnOpen()
SearchList = FullTextSearch.CreateList();
نهاية الإجراء

الآن، في حالة الضغط على زر بحث، سنكتب كودًا يسمح لنا بإجراء بحث وفقًا للتعبير المحدد في حقل SearchExpression

الكود 1C v 8.x إجراء FindClick(Element)
SearchList.SearchString = SearchExpression;
محاولة
SearchList.FirstPart();
استثناء
تحذير(ErrorDescription());
this.EndAttempt;
إذا كانت SearchList.FullQuantity() = 0 إذن
Form Elements.MessageOfResult.Value = "لم يتم العثور عليه"؛
عناصر النموذج. نتيجة البحث.SetText("");
خلاف ذلك
OutputSearchResult();
إنهاء إذا؛
نهاية الإجراء

أولاً في هذا الإجراء، نقوم بتعيين مصطلح البحث الذي أدخله المستخدم كسلسلة بحث للبحث عن النص الكامل. ثم نقوم بتنفيذ طريقة FirstPart()، والتي تقوم فعليًا بتشغيل بحث النص الكامل وإرجاع الجزء الأول من النتائج. بشكل افتراضي، تحتوي القطعة على 20 عنصرًا. بعد ذلك نقوم بتحليل عدد العناصر في قائمة البحث. إذا لم يكن يحتوي على أي عنصر، فإننا نعرض رسالة مقابلة في النموذج. وبخلاف ذلك، يتم استدعاء الإجراء DisplaySearchResult() الذي يعرض النتائج للمستخدم.

لنقم بإنشاء إجراء يحمل نفس الاسم في وحدة النموذج ونكتب الكود فيه:

الكود 1C v 8.x الإجراء OutputSearchResult()
Form Elements.ResultMessage.Value = "Showing" + Row(SearchList.InitialPosition() + 1) + " - " + Row(SearchList.InitialPosition() +SearchList.Quantity()) + "من " + SearchList.FullQuantity() ;
Result = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Result);
ButtonAvailability();
نهاية الإجراء

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

أخيرًا، نقوم بنقل التحكم إلى إجراء Button Availability() من أجل إتاحة أو، على العكس من ذلك، رفض الوصول إلى زري الجزء السابق والجزء التالي (اعتمادًا على أي جزء من النتائج التي تم الحصول عليها يتم عرضه). ويرد نص هذا الإجراء في المدونة

الرمز 1C v 8.x توفر زر الإجراء ()
Form Elements.NextPosition.Availability = (SearchList.FullQuantity() - SearchList.StartPosition()) > SearchList.Quantity();
Form Elements.PreviousPosition.Availability = (SearchList.StartPosition() > 0);
نهاية الإجراء

أنت الآن بحاجة إلى إنشاء معالجات الأحداث للنقر على زري PreviousPart() وNextPart().

الكود 1C v 8.x الإجراء الضغط على الجزء السابق (العنصر)
SearchList.PreviousPart();
OutputSearchResult();
نهاية الإجراء
الإجراء الضغط على الجزء التالي (العنصر)
SearchList.NextPart();
OutputSearchResult();
نهاية الإجراء

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

نتيجة البحث عن الإجراء Code 1C v 8.xclick(Element, pEvtObj)
htmlElement = pEvtObj.srcElement;
// التحقق من معرف العنصر
إذا (htmlElement.id = "FullTextSearchListItem") إذن
// احصل على اسم الملف (رقم سطر قائمة البحث)،
// الموجود في الارتباط التشعبي
NumberInList = Number(htmlElement.nameProp);
// احصل على سلسلة قائمة البحث حسب الرقم
SelectedRow = SearchList[NumberInList];
// افتح نموذج الكائن الذي تم العثور عليه
OpenValue(SelectedRow.Value);
pEvtObj.returnValue = False;
إنهاء إذا؛
نهاية الإجراء

سأخبرك في هذه المقالة عن وظيفة البحث السريع في 1C Enterprise 8. ما هو البحث السريع؟بسيط جدا. يعد البحث السريع إحدى الطرق للتنقل في قوائم كبيرة من سجلات 1C. يمكن أن تكون هذه قوائم بالمستندات والأدلة والسجلات - كل ما يتم تقديمه في الجداول.

ما هو البحث السريع؟

تعد وظيفة البحث السريع في مستندات 1C Enterprise مريحة للغاية وتسمح لك بعدم التمرير خلال كميات هائلة من البيانات (على سبيل المثال، باستخدام شريط التمرير)، ولكن للانتقال على الفور إلى المكان المطلوب في القائمة. لسوء الحظ، لا يستخدم المستخدمون المبتدئون لـ 1C Enterprise 8 (بما في ذلك 1C Accounting 8) في البداية إمكانيات البحث السريع، ويفضلون التمرير عبر قوائم المستندات يدويًا (ويمكنهم ذلك جداًكبير). ستساعدك هذه المقالة على فهم استخدام البحث السريع في 1C.

بادئ ذي بدء، تجدر الإشارة إلى أنه في تكوينات 1C Enterprise 8 المبنية على النماذج المُدارة، يعمل البحث السريع بشكل مختلف عما كان عليه في الإصدارات السابقة من 1C. لذلك، سنقوم بتحليل استخدام البحث السريع في النماذج المُدارة وفي النماذج العادية بشكل منفصل.

بحث سريع في 1C المحاسبة 8.2

في إصدارات 1C Accounting من 8.0 إلى 8.2هذه الوظيفة مخصصة خصيصًا لـ انتقالإلى الجزء المطلوب من القائمة. على سبيل المثال، انظر إلى نافذة دليل الحسابات الموضحة في الشكل.


يتم تمييز خط معين في النافذة. انتبه إلى المثلث الدقيق من الخطوط، المشار إليه بالسهم الأحمر. كما هو الحال في برامج Windows الأخرى حيث توجد قوائم (على سبيل المثال، في Explorer)، فإن موضع هذه العلامة (المثلث) يحدد فرز القائمة ككل - في العمود الذي يتم وضع العلامة فيه، سيتم فرز القائمة بأكملها حسب هذا العمود.في الشكل، توجد العلامة في عمود الرمز، وبالتالي سيتم فرز الحسابات الموجودة في دليل الحسابات حسب الرمز.

يمكن نقل العلامة من عمود إلى آخر من خلال النقر على العمود المطلوب ( على رأس العمود!) بالماوس. إذا كانت العلامة موجودة بالفعل في العمود الحالي، فسيؤدي النقر فوقها إلى تغيير اتجاه الفرز إلى الاتجاه المعاكس (أي من الكبير إلى الصغير أو العكس). هذا هو السلوك القياسي لأي برنامج يعمل بنظام Windows. ما هي خصوصية هذه العلامة في 1C Enterprise وكيف ترتبط بالبحث السريع؟

يتم إجراء بحث سريع في قوائم 1C Enterprise 8 من خلال العمود الذي توجد به العلامة.في هذه الحالة، سيتم إجراء بحث سريع في دليل الحسابات باستخدام عمود الرمز.

كان هناك جزء مهم من المقالة، لكن بدون جافا سكريبت لا يمكن رؤيته!

كيفية استخدام البحث السريع في 1C؟بسهولة! ما عليك سوى البدء في كتابة ما تريد العثور عليه في هذا العمود، أي. حيث العلامة. في المثال في الشكل أعلاه، يجب عليك إدخال رقم الحساب. على سبيل المثال، تريد العثور على الحساب 50 نقدًا. في هذه الحالة أدخل ( لا حاجة للنقر في أي مكان!) رقم 50 من لوحة المفاتيح وإذا كان هناك حساب بهذا الرقم في هذا العمود (وبالطبع يوجد حساب واحد)، فسيتم تمرير القائمة إلى هذا السطر، وسيتم تمييز السطر نفسه. وتظهر النتيجة في لقطة شاشة شجرة الحسابات أدناه.

موقع إلكتروني_

النص الذي يشير إليه السهم هو لا حاجة للغسيل بعد ذلك- سوف يختفي من تلقاء نفسه.

في المثال أعلاه، إذا بدأت بكتابة كلمة "Cashier"، سيتم إدخال النص الموجود أسفل النافذة ثم مسحه. يحدث هذا لأنه بمجرد يبدألم تعد سلسلة البحث السريع التي تم إدخالها تتطابق مع بداية سطر واحد على الأقل في هذا العمود، وتخلص 1C Enterprise إلى أنه لم يتم العثور على السلسلة التي تم البحث عنها وتقوم بمسحها تلقائيًا. ونتيجة لهذا هناك قاعدتان يجب تذكرهما.

في 1C Enterprise 8، يتم إجراء بحث سريع في بداية السطر، أي. يتم البحث في عمود عن تطابق النص المدخل مع بداية أحد أسطر هذا العمود.
يؤدي هذا إلى توصية مهمة: عند إدخال البيانات في الأدلة، قم بتسمية العناصر بحيث يمكن العثور عليها بسهولة باستخدام البحث السريع. على سبيل المثال، من الأفضل كتابة اسم الطرف المقابل باسم "Firm Name LLC" بدلاً من "Firm Name LLC". وحتى أكثر من ذلك، يجب ألا تستخدم علامات الاقتباس وغيرها من الرموز غير الضرورية في الاسم (نحن نتحدث عن ملء حقل الاسم في النماذج).

إذا بدأت بكتابة نص وتم مسحه، فإن ما تبحث عنه ليس موجودًا في هذا العمود!في هذه الحالة، تحقق من لغة الإدخال، وكذلك العمود الذي يتم فيه إجراء البحث السريع. الخطأ النموذجي هو تحديد العمود الخطأ. على سبيل المثال، يتم تعيين العلامة في عمود "الرمز"، ويتم إجراء البحث حسب اسم الحساب.

بحث سريع في 1C المحاسبة 8.3

الآن دعونا نرى كيف يختلف البحث السريع في الإصدار 1C Enterprise 8.3. الاستخدام مشابه إلى حد كبير للإصدار 8.2، ولكن هناك اختلاف رئيسي واحد يجب تذكره.

في 1C Accounting 8.3، وكذلك في أي تكوينات أخرى في النماذج المُدارة (نفس الواجهة الجديدة)، يعمل كمرشح. ببساطة، نتيجة لوظيفة البحث السريع، جزء من القائمة إخفاء.

سنكتشف الآن كيفية استخدام هذا. أولاً، انظر إلى لقطة الشاشة لنافذة مخطط الحسابات 1C Accounting 8.3 أدناه.

موقع إلكتروني_

كما ترون، نفس العلامة موجودة في أحد الأعمدة. يتم إجراء البحث أيضًا في العمود المثبت فيه العلامة. كل هذا يبقى دون تغيير. ومع ذلك، إذا بدأت في إدخال النص (رقم الحساب في المثال)، فسيحدث ما يلي.

موقع إلكتروني_

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

موقع إلكتروني_

ومن هذا يتضح أن البحث السريع في 1C Accounting 8.3 يترك ببساطة الجزء من القائمة الذي يلبي شروط البحث مرئيًا.في هذه الحالة، يختفي زر البحث، وبدلاً من ذلك تظهر عدسة بها تقاطع (تم وضع خط تحتها في الشكل)، عند النقر فوقها، تعود القائمة إلى حالتها الأصلية (يظل السطر الذي تم العثور عليه نتيجة للبحث السريع مميزًا) .

ميزة أخرى مهمة للبحث السريع في 1C Accounting 8.3— لا يتم البحث عن تطابق في بداية السطر، كما في الإصدار 8.2، ولكن يتم البحث عن تطابق مع أي جزء من السطور في العمود. وبالتالي، إذا قمت بتسمية الطرف المقابل "Firm Name LLC"، وعند البحث، ابدأ في إدخال "Firm Name LLC"، فسيظل السطر موجودًا!

استخلاص النتائج

وبالتالي، فإن البحث السريع في 1C Accounting 8.2 والإصدارات السابقة يهدف إلى تمرير القائمة إلى السطر المطلوب، وفي 1C Accounting 8.3 يعمل البحث السريع كمرشح عادي، حيث يخفي جزء القائمة الذي لا تحتاجه.