1C العثور على موقف في السلسلة. خيارات التحسين لا حصر لها

مرحبا بالجميع
اليوم، سألوني عند طباعة وثيقة تنفيذ، وليس لإخراج بادئة الوثيقة، قررت المهمة على النحو التالي.

أولاد (رقم، الأسد (الرقم، 3)، ")؛

عندما نظرت إلى بناء الجملة، اعجبني أنني أردت أن أكتب العمل مع الصفوف في "1C: Enterprise".

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

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

سلسلة المهام
الاستئناف \u003d "مرحبا الراكب"؛

غالبا ما يتم إنشاء خطوط متعددة الخطوط في التكوينات النموذجية باستخدام فاصل عمودي "|":
خط \u003d "خط متعدد
| سلسلة
| اكتب
| نص "؛

يتم تعيين اقتباس داخل السلسلة بواسطة علامات اقتباس مزدوجة.
صف \u003d "نص اقتباسات" "؛

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

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

هنا في شكل موجز، سأقدم وظائف للعمل مع الصفوف:

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

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

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

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

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

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

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

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

سوكريل (<Строка>) - تعمل الوظيفة على تخفيضات الشخصيات الضئيلة إلى يسار حرف معنى الأول في الصف.

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

COPP (<Строка>) - تعمل الوظيفة من الشخصيات غير القانونية إلى اليمين في آخر رمز مهم في الصف.

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

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

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

Plotchikstka (<Строка>, <НомерСтроки>) - تحصل الوظيفة على سلسلة من سلسلة متعددة الخط حسب الرقم.

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

strokelost (<Строка>) - تعتبر الوظيفة عدد الصفوف في سلسلة متعددة الخطوط. في سلسلة متعددة الخطوط، يتم تقسيم السلاسل إلى رموز ترجمة السلسلة.

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

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

مسار سلسلة \u003d صف (رقم)؛

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

أمثلة للعمل مع الصفوف

تحويل الرقم في السلسلة والظهر.

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

السنة \u003d التنسيق (CurrentData ()، "DF \u003d YYYY") // السنة \u003d "2012"

لتحويل رقم إلى سلسلة دون إدراج رمز فاصل المجموعة (مساحة لا مثيل لها)، يجب عليك تطبيق وظيفة التنسيق مع NG \u003d 0 المعلمة:

رقم \u003d 2012 صف \u003d تنسيق (الرقم، "чHG \u003d 0")؛ // الصف \u003d "2012"

الصف دون مسافات.

اسمي بافل البركيت، وأنا أعمل في Softpoint. لأكثر من 10 سنوات، كنا نحل مهام تحسين الأداء. وعلى الرغم من العدد الكبير من المشاكل المحللة، لا يتم تخفيض عددهم، ولكن ينمو في تقدم هندسي. زيادة حجم البيانات، والمهام لتحسين العمل مع هذه البيانات معقدة. هذه العملية أمر لا مفر منه.

موضوع المقال - النهج غير التخلية للتحسينوبعد سيتم النظر في جانبين:

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

البحث عن الإجهاد

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

البحث عن الأحرف الأولية

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

يتم تطبيق البحث عن الأحرف الأولية في 1C باستخدام فريق مثل (أو في إصدار اللغة الإنجليزية، مثل)، مما يدل على القيمة ب "٪" في النهاية ("٪" يدل على تسلسل من أي شخصيات أخرى). على سبيل المثال، نحن نبحث عن:

اسم مثل "إيفانو٪"

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

حالة "مثل شريط البحث" تعادل البحث في نطاق القيموبعد في حالة معينة، عندما نبحث عن "ivano٪" - هذا يعادل البحث في نطاق الألقاب، والذي يبدأ في "إيفانو"، وإنهاء "Ivanp" (لأن الرمز "P" يذهب بعد الرمز "O").

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

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

البحث عن دخول

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

عند تحويل هذا الاستعلام في SQL، نرى أن تغييرات الأمر فقط (في القيمة هناك بالفعل اثنين "٪").

النظر في تفاصيل خطة التنفيذ. هنا نرى نفس الفهرس يسعى، ولكن في هذه الحالة لا يعمل بكفاءة.

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

  • الأول منهم هو الفاصل المحاسبي.
  • مزيد مباشرة يذهب حقل البحث.

وبالتالي، عندما يتم عرض "الفهرس يسعى" من حيث التنفيذ، فهذا يعني ذلك يتم البحث في مجال الفاصل الأول - على الشريحة أعلاه يمكنك أن ترى ذلك البحث في قيمة Desc المرغوبة لدينا غير مستخدم تماما.

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

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

نهج غير أولي لحل مهمة العثور على فرعية

دعونا الآن نعتبر نهج غير خيالي لحل هذه المهمة.

تشير إلى عدد من التحمل:

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

مثال على الخط المطلوب "ALEXE" تم تسجيله في النموذج وسيختبره معه.

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

  • في الخطوة الثانية، نحن نحن نكتب هذه المجموعات في هيكل منفصل (يمكن أن يكون هذا طاولة وسجل معلومات، إلخ.) واحصل على عينة تقوم فيها جزء معين بتناول قيم مختلفة.

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

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

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

في الممارسة العملية، اتضح قصة مثيرة للاهتمام للغاية - التسارع في العشرات، مئات المراتوبعد علاوة على ذلك، كل هذا يمكن القيام به مع الوسائل 1C، وهو لطيف جدا. لن تحتاج إلى إعادة كتابة المنطق، وسوف يفرح المستخدم أن استعلام البحث تسارع. في المثال، تسريع من 4 ثوان إلى 0.05 ثانية، وإذا كان لدينا طلب في البداية لمدة دقيقتين، فسوف ينفذ بأقل من ثانية.

الآلية التي أظهرتها لك ليس بعض المثال التجريبي، فإنها تعمل بالفعل للعملاء الحقيقيين.

الأنشطة التحضيرية

الآن سأخبرك بالأنشطة التحضيرية.

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

يمكن إجراء ملء السجل كلاهما 1C و SQL.

أستطيع أن أقول إن ملء هذا الهيكل لمدة 17 مليون قيم تحتل في مكان ما 20-25 دقيقة. بطبيعة الحال، يجب ألا يغير المستخدمون في هذه المرحلة قيم الدليل.

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

الحاجة إلى مراعاة إحصاءات شعبية الشظايا

هل هذه الطريقة تعمل دائما بسرعة؟

هذا يتأثر إحصائيات شظايا شعبية.

  • على سبيل المثال، لديك جزء "أليكس"، والتي يمكن أن تدخل اسم أليكسي، إلى الاسم الأوسط Alekseevich، باسم Alekseenko، إلخ. يمكن أن يكون هذا الجزء 50-100 ألف إدخالات.
  • ونادرا ما تستخدم شظايا.

وبالتالي، تظهر إحصاءات الشعبية في شظايا.

لاحظ أن إذا كانت شعبية الشظايا منخفضة (100 عنصر)، فنحن نحصل على تسريع - 0.1 ثانية.

إذا كانت السلسلة الفرعية تحظى بشعبية كبيرة (50 ألف عنصر)، فنحن نحصل على تدهوروأكبر بكثير مما لو لم يكن هناك تحسين.

في هذا الطريق، من الضروري إجراء مخطط تنفيذ الاستعلام المحسنحيث نتلقى أولا قيمة شعبية Sacquery. يتم ذلك من قبل ثلاثة خمسة خطوط في 1C. في الوقت نفسه، نعرف بالضبط أنه إذا كانت السلسلة لا تحظى بشعبية، فستذهب في الفرع الأول، وإذا كانت شعبية، ثم في الثانية.

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

والآن دعونا نلقي نظرة على كيفية إجراء طلب SQL على خادم SQL.

تقدم الشريحة مخططا مبسطا:

  • طلب المحسن؛
  • نحن ننظر إلى الإحصاءات الميدانية المستخدمة في الطلب؛
  • نختار خطة التنفيذ التي يجب استخدامها، أي تحديد استراتيجية تنفيذ الاستعلام (على سبيل المثال، الدورة المستثمرة).

ما هو المخطط المنفذ من قبلنا؟

  • لقد صنعنا الخاصة بك فهرسوبعد ليس مؤشر SQL قياسي، وليس فهرس 1C، ولكن مؤشره اللازم لحل هذه المشكلة؛
  • علاوة على ذلك، اصطدمت بما يحتاج إليه الإحصاء;
  • وتحتاج الخاصة بك محسنالتي وفقا لهذه الإحصاءات تقرر أي موضوع للاختيار.

بناء على هذا المنطق، يمكن القول أن هذه العملية تكشف عن معنى ما هي المؤشرات والإحصائيات والمحسن بالنسبة لنا.

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

إذا لم يكن هناك فهرس - سنقوم بفحص جميع القيم.

وبالتالي، أنشأنا على الأقل بدائية، ولكن محسن الخاص بك. يمكننا أن نقول أنها تتبعت "على الأصابع" كيف تعمل MS SQL وغيرها من DBMS، وإنشاء هياكلها الخاصة.

تسريع الوثائق "الكبيرة"

سأذهب إلى الموضوع الثاني - تسريع المستندات الكبيرة.

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

أقترح العودة إلى القصة والنظر في كيفية القيام بذلك في 1C، بدءا من 8.0 إلى 8.3 - تم ذلك حسب الخطوبعد قام SQL Server بتحليل الطلب في كل مرة، معالجته، وإنشاء خطة التنفيذ، وأضاف، أرسل الأمر إلى 1C من النجاح واستلم الطلب التالي. ومظهر هذه الخطوة بخطوة من خادم تطبيقات 1C إلى MS SQL.

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

في 1C، بدءا من 8.3، يتم إجراء التحسينات. الآن يتم إعداد الطلب الإدراج في الجداول المؤقتة وفي سجلات المعلومات على خادم SQL، ويحدث تنفيذ مزيد من المساعدة بمكالمات Classic RPC، حيث موفر الوصول إلى 1C نفسه (الأصلي أو OLE DB) مجموعات مجموعات وإدراجها بواسطة سلاسل N (عادة 100 خطوط).

وبالتالي، يتم تحقيق تسريع من 30٪ إلى 300٪. لكنه لا يزال غير كاف، لأن لديك اليوم لديك 10 ألف خط، غدا هو 20 ألف خط. هذا ليس حلا أساسيا للمشكلة، وما زلت تأتي عبرها، ولكن ستة أشهر فقط في السنة.

ماذا او ما أسرع inset. في SQL Server، وفي الواقع في أي DBMS؟

هو - هي إدراج بالجملة.وبعد في 1C إدراج بالجملة يستخدم، ولكن لمهام أخرى. ترغب في العمل مع وثائق "كبيرة" أيضا تسريع من خلال دمج إدراج إدراجات وإضافة إدخالات مع صفيف واحد إلى قاعدة بيانات SQL Server.

دعونا نرى ما يتم تحقيق تأثير. في هذا المثال تلقى التسارع في مكان ما 5 مرات، ولكن يمكنك تسريع و 10 مراتوبعد من الناحية النظرية المشكلة الرئيسية بحيث يسرع هو أقوى بكثير - هذه هي سرعة القرص. القرص يمكن أن يكون عنق الزجاجة.

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

على أي حال، تسمح هذه الطريقة لتحقيق تأثير 5-10 مرات.

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

خيارات التحسين لا حصر لها

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

****************

تتم كتابة هذه المقالة وفقا لتقرير التقرير () قرأت في مؤتمر مجتمع INFostart 2017.

الخطوط في 1C 8.3 في لغة 1C المدمجة هي القيم البدائية خطوبعد تحتوي قيم هذا النوع على سلسلة في تنسيق Unicode طول تعسفيا. متغيرات السلسلة هي مجموعة من الأحرف المغلقة في علامات الاقتباس.

مثال 1. إنشاء متغير سلسلة مع النص.

صف خالي \u003d "Hello World!"؛

وظائف العمل مع خطوط في 1C 8.3

سيحتوي هذا القسم على وظائف أساسية تتيح لك تغيير الأسطر في 1C، أو تحليل المعلومات الواردة فيها.

ستروتينا

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

مثال 2. احسب عدد الأحرف في سلسلة "Hello World!".

صف \u003d "مرحبا العالم!"؛ martensumless \u003d stondin (سلسلة)؛ تقرير (استدعاء)؛

ستظهر نتيجة تنفيذ هذا الرمز عدد أحرف السلسلة: 11.

سوكريل

سوكريل (<Строка>) وبعد يقطع من الشخصيات الضئيلة إلى يسار رمز المعنى الأول في الصف.
رموز غير مقصورة:

  • الفضاء؛
  • مساحة غير إعفاء؛
  • جدولة؛
  • عودة النقل.
  • ترجمة الخطوط
  • ترجمة النموذج (الصفحات).

مثال 3. قم بإزالة جميع المسافات على الجانب الأيسر من الخط "العالم"! ونعلق عليه الخط "مرحبا".

خط \u003d سوكريل ("السلام!")؛ الصف \u003d "مرحبا" + خط؛ تقرير (سلسلة)؛

ستكون نتيجة تنفيذ هذا الرمز إخراج الشاشة "مرحبا مير!".

SOCRP.

COPP (<Строка>) وبعد يقطع من الشخصيات الضئيلة إلى يمين رمز المعنى الأول في الصف.

مثال 4. لتشكيل من الصف "مرحبا" و "السلام!" عبارة "مرحبا العالم!"

صف \u003d Cropp ("مرحبا") + "" + سوكريل ("السلام!")؛ تقرير (سلسلة)؛

sokrlp.

sokrlp (<Строка>) وبعد التخفيضات من الشخصيات الضئيلة إلى يمين رمز المعنى الأول في الصف، كما تخفض الشخصيات غير القانونية إلى اليسار من الطابع الهادف الأول في الصف. يتم استخدام هذه الوظيفة في كثير من الأحيان أكثر من السابقين، لأنها أكثر تنوعا.

مثال 5. قم بإزالة الأحرف غير القانوني التي تقف على اليسار واليمين باسم الطرف المقابل.

Counterparty \u003d المراجع. proteces. enti-moving ("نزل"، "0777121211")؛ الطرف المقابل \u003d الطرف المقابل. كائن البخار ()؛ الطرف المقابل. Name \u003d Coolp (Counterparty. الاسم)؛ الطرف المقابل. للتجنيد ()؛

أسد

أسد(<Строка>, <ЧислоСимволов>) وبعد الحصول على أحرف السلسلة الأولى، يتم الإشارة إلى عدد الأحرف في المعلمة slovesmiths.

مثال 6. اسمحوا في الهيكل الموظف تحتوي على اسم، اسم اللقب والاسم الأوسط للموظف. الحصول على سلسلة مع اللقب والنحائي.

البيانات الأولية \u003d الأسد (الموظف. أقصد، 1)؛ النهج \u003d الأسد (الموظف. حساسية، 1)؛ الوفاء \u003d الموظف .FAMILIA + "" + الأولي و "". ". + النهائية + "."؛

حق

الحقوق (<Строка>, <ЧислоСимволов>) وبعد يتلقى أحدث رموز السلسلة، يتم الإشارة إلى عدد الأحرف في المعلمة slovesmiths. إذا تجاوز عدد الأحرف المحدد طول السطر، فسيتم إرجاع السلسلة بأكملها.

مثال 7. دع التاريخ بتنسيق "gghhmdd" يتم تسجيله في نهاية متغير السلسلة، للحصول على خط مع التاريخ وتحويله إلى النوع تاريخ.

خط \u003d "التاريخ الحالي: 20170910"؛ strfedate \u003d الحقوق (السلسلة، 8)؛ تاريخ \u003d تاريخ (strfewar)؛

وسائط

البيئات (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) وبعد يحصل على فرعية من الصف المنقول في المعلمة خطبدءا من رقم الحرف المحدد في المعلمة أبدء والطول المنقول إلى المعلمة slovesmiths.يبدأ ترقيم الأحرف في السلسلة ب 1. إذا في المعلمة أبدء القيمة أقل أو تساوي الصفر، تتطلب المعلمة القيمة 1. إذا كانت المعلمة nizalsimvol. غير محدد، ثم يتم تحديد الرموز حتى نهاية السطر.

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

خط \u003d "المنطقة: 99 موسكو"؛ المنطقة \u003d وسائل الإعلام (السلسلة، 9، 2)؛

سترنت

سترنت<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) وبعد يبحث البحث عن السلسلة الفرعية المحددة في السلسلة، وإرجاع عدد موضع الحرف الأول الذي تم العثور عليه البحث عنه. النظر في معلمات هذه الميزة:

  • خطوبعد خط المصدر
  • تيار فرعيوبعد الفرعية المرغوبة؛
  • اتجاهوبعد يحدد اتجاه البحث في السلسلة الفرعية في الصف. يمكن أن تأخذ القيم:
    • اتجاه;
    • اتجاه;
  • ركودوبعد يحدد الموضع في السلسلة التي يبدأ البحث منها؛
  • تعليقوبعد يشير إلى رقم الدخول من السلسلة الفرعية المرغوبة في خط المصدر.

مثال 9. في الخط "مرحبا العالم!" تحديد موضع الإدخال الأخير من الرمز "و".

DIZE \u003d STRNET ("مرحبا مير!"، "و" الاتجاه من .Sconsion)؛ تقرير (وحدة التغذية)؛

ستكون نتيجة تنفيذ هذا الرمز إخراج إلى رقم الشاشة من آخر إدخال الرمز "و": 9.

ضوء

vrega (<Строка>) وبعد يحول جميع أحرف السلسلة المحددة في 1C 8 إلى السجل العلوي.

مثال 10. تحويل الخط "مرحبا مير!" إلى أعلى السجل.

rangered \u003d تأخر ("مرحبا العالم!")؛ تقرير (التجديف)؛

ستكون نتيجة تنفيذ هذا الرمز إخراجها إلى شاشة الخط "Hello World!"

nreg.

nrega (<Строка>) وبعد يحول جميع أحرف السلسلة المحددة في 1C 8 إلى السجل السفلي.

مثال 11. تحويل سلسلة "مرحبا مير!" لخفض السجل.

strochanneg \u003d nreg ("hello pee!")؛ تقرير (التجديف)؛

ستكون نتيجة إعدام هذا الرمز إخراج إلى شاشة خط "Hello Peace!"

treg.

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

مثال 12. اجعل رؤساء الأحرف الأولى من الكلمات في الخط "مرحبا العالم!".

تنذها \u003d TREG ("Hello Peace!")؛ تقرير (ينتقد)؛

ستكون نتيجة إعدام هذا الرمز إخراج إلى شاشة خط "Hello Peace!"

رمز

رمز(<КодСимвола>) وبعد الحصول على رمز على الكود في ترميز Unicod.

مثال 13. أضف إلى اليسار واليمين إلى الخط "مرحبا العالم!" رمز ★.

سلسلة المقاطع \u003d رمز ("9733") + "Hello World!" + رمز ("9733")؛ تقرير (مؤخرات السلسلة)؛

سيتم عرض نتيجة تنفيذ هذا الرمز على شاشة السلسلة "★ مرحبا السلام! ★"

Kodsimvol.

كوديمفول (<Строка>, <НомерСимвола>) وبعد الحصول على رمز رمز في ترميز Unicode من سلسلة محددة في المعلمة الأولى الموجودة في الموضع المحدد في المعلمة الثانية.

مثال 14. تعرف على رمز الرمز الأخير في خط "Hi World!".

صف \u003d "مرحبا العالم!"؛ CodeImvol \u003d CodeImvol (سلسلة، Stringle (سلسلة))؛ تقرير (كوديمفول)؛

نتيجة تنفيذ هذا الرمز ستكون الإخراج إلى رمز الرمز "!" - 33.

خط فارغ

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

مثال 15. تحقق مما إذا كانت السلسلة الفارغة تتكون من ثلاث مسافات.

فارغة \u003d utted ("")؛ تقرير (فارغ)؛

ستكون نتيجة تنفيذ هذا الرمز إخراج الشاشة "نعم" (تعبير السلسلة عن القيمة المنطقية حقيقي).

ابتزاز

ابتزاز (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) وبعد يجد في السطر الأصلي جميع إدخالات Search Substring ويحل محلها بدليل الاستبدال.

مثال 16. في الخط "مرحبا العالم!" استبدل كلمة "العالم" على كلمة "أصدقاء".

الصف \u003d أولاد ("مرحبا مير!"، "MIR"، "الأصدقاء")؛ تقرير (سلسلة)؛

سيكون نتيجة إعدام هذا الرمز إخراج الشاشة "مرحبا أصدقاء!"

strostroke.

strokelost (<Строка>) وبعد يسمح لك بحساب عدد الصفوف في سلسلة متعددة الخطوط. للذهاب إلى سلسلة جديدة في 1C 8، يتم استخدام الرمز. ملاحظة. (رمز الترجمة السلسلة).

مثال 17. تحديد عدد الصفوف في النص:
"السطر الأول
السلسلة الثانية
السطر الثالث »

رقم \u003d سلة مكافحة الرموز ("الصف الأول" + الرموز. الكمبيوتر الشخصي + "السطر الثاني" + الأحرف. الكمبيوتر الشخصي + "السلسلة الثالثة")؛ تقرير (الرقم)؛

ستكون نتيجة تنفيذ هذا الرمز إخراج إلى عدد الصفوف في النص: 3

البرنامج المساعد

Plotchikstka (<Строка>, <НомерСтроки>) وبعد الحصول على سلسلة في سلسلة متعددة الخط من رقمها. ترقيم الصف يبدأ مع 1.

مثال 18. احصل على السلسلة الأخيرة في النص:
"السطر الأول
السلسلة الثانية
السطر الثالث »

نص \u003d "السطر الأول" + الأحرف. الكمبيوتر + "السطر الثاني" + أحرف. FS + "الصف الثالث"؛ lastesttright \u003d plisproktriktka (النص، strokelock (نص))؛ تقرير (آخر مرة)؛

ستكون نتيجة تنفيذ هذا الرمز إخراج شاشة "الصف الثالث".

مدمر

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

مثال 19. تحديد عدد المرات التي تدخل السلسلة في 1C 8.3 و 8.2. الرسالة "C"، بغض النظر عن سجلها.

الصف \u003d "الصفوف في 1C 8.3 و 8.2"؛ الأرقام \u003d التسمية (تأخر (سلسلة)، "C")؛ تقرير (الأرقام)؛

سيكون نتيجة تنفيذ هذا الرمز إخراج عدد الإدخالات: 2.

المقرر

رون (<Строка>, <СтрокаПоиска>) وبعد يتحقق ما إذا كانت السلسلة مرت في المعلمة الأولى، من الصف في المعلمة الثانية.

مثال 20. تحديد ما إذا كان النزل من نظيره المحدد قد بدأ مع الرقم 1. اسمحوا في المتغير الطرف المقابل المقابلات.

نزل \u003d counterparty.inn؛ يبدأ معا \u003d Rrinced (Inn، "1")؛ إذا كان يبدأ عند ذلك، انتهت رمزك؛

strazanacivna.

خطوة (<Строка>, <СтрокаПоиска>) وبعد يتحقق ما إذا كانت السلسلة انتهت في المعلمة الأولى، على السطر في المعلمة الثانية.

مثال 21. تحديد ما إذا كان إن نزل النظير المحدد ينتهي إلى الشكل 2. اسمحوا في المتغير الطرف المقابلرابط مخزن لعنصر الدليل المقابلات.

نزل \u003d counterparty.inn؛ الصمامات المنطقية \u003d Strasting (Inn، "2")؛ إذا انتهيت من ذلك، انتهى // رمزك؛

حزام

أضنى<Строка>, <Разделитель>, <ВключатьПустые>) وبعد أجزاء السلسلة من جانبها وفقا لرموز فاصل المحددة وتسجيل السلاسل الناتجة في صفيف. في المعلمة الأولى، يتم تخزين سطر المصدر، في السطر الثاني الذي يحتوي على الفاصل، في الثالث يشير إلى ما إذا كان سيتم تسجيل خطوط فارغة إلى الصفيف (افتراضيا حقيقي).

مثال 22. دعونا لدينا سلسلة تحتوي على الأرقام المنفصلة بواسطة رمز "؛"، احصل على مجموعة من الأرقام من السلسلة.

الصف \u003d "1؛ 2؛ 3"؛ صفيف \u003d حزام (سلسلة "؛")؛ ل Sch \u003d 0 بواسطة صفيف. رقم () - مجموعة محاولات دورة واحدة [SCH] \u003d الرقم (CROLP (صفيف [SCH]))؛ استثناء صفيف [SCH] \u003d 0؛ الإنترابكتة الوصفية؛

نتيجة للتنفيذ، سيتم الحصول على صفيف بالأرقام من 1 إلى 3.

ضربة

stroj<Строки>, <Разделитель>) وبعد يحول مجموعة من الصفوف من المعلمة الأولى إلى السلسلة التي تحتوي على جميع عناصر الصفيف من خلال الفاصل المحدد في المعلمة الثانية.

مثال 23. باستخدام مجموعة من الأرقام من المثال السابق، للحصول على السلسلة الأصلية.

بالنسبة إلى SCH \u003d 0 بواسطة صفيف. رقم () - صفيف دورة واحدة [SCH] \u003d سلسلة (صفيف [SCH])؛ ننطف خط \u003d السكتة الدماغية (صفيف، "؛")؛

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

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

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

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

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

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


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

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

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

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

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

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

النص الذي يشير إليه السهم، لست بحاجة إلى غسل - سوف يختفي.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

نرسم استنتاجات

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