مفكرة للمبرمج. استخدام التوجيه "مسموح به" تقييد الوصول على مستوى السجل


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

لغة الاستعلام 1 المؤسسة 8 - حدد هيكل المشغل

ضع في اعتبارك هيكل مشغل SELECT (يشار إلى الأجزاء الاختيارية للمشغل بين قوسين مربعين). توفر لغة الاستعلام 1C مجموعة واسعة من الأدوات لإنشاء عينات البيانات.

حدد [مسموح] [مختلف] [FIRST A] [Field1] [AS Alias1] ، [Field2] [AS Alias2] ، ... [FieldM] [AS AliasB] [PUT TempTableName] [من Table1 AS TableAliasTable1 [[INTERJOIN] [LEFT JOIN] [FULL JOIN] Table2 AS Table2 Alias ​​[[INNER JOIN] [LEFT JOIN] [FULL JOIN] TableC AS TableC Alias ​​TO Expression1 [AND Expression2] ... [AND ExpressionD]] ... ... TO Expression1 [AND Expression2] ... [And ExpressionE]] ... [TableF AS TableF Alias] ...] [GROUP BY GroupingField1 [،] ... [GroupingFieldG]] [WHERE Expression1 [AND Expression2 ] ... [والتعبير H]] [الجمع بين الكل ...] [؛ ...] [INDEX BY Alias1 ... AliasB] [TOTALS [AggregateFunction (Field1)] [،] [AggregateFunction (Field2)] [،] ... [AggregateFunction (FieldI)] BY [GENERAL] [،] [ GroupingField1] [،] ... [GroupingFieldj]]

كلمات رئيسية وكتل للعمل مع الحقول

  • يختار- كلمة أساسية تدل على بداية المشغل ؛
  • مسموحيشير إلى أن الاختيار يجب أن يشمل سجلات الجداول التي يُسمح بوصول قراءتها للمستخدم المحدد ؛
  • مختلفيشير إلى أن أحواض مختلفة فقط (لكل الحقول) يجب أن تقع ضمن التحديد. بمعنى آخر ، سيتم استبعاد الصفوف المكررة من التحديد ؛
  • اولاإذا حددت هذه الكلمة الأساسية ، فسيتم تضمين أول الصفوف التي حددها الاستعلام فقط في التحديد ، حيث A هو رقم طبيعي ؛
  • كتلة المجال- في هذه الكتلة ، يشار إلى الحقول التي يجب تضمينها في التحديد. هذه الحقول ستكون أعمدة التحديد. في أبسط صوره ، يبدو الحقل كما يلي: TableAlias.TableFieldName AS FieldAlias

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

كلمات رئيسية وكتل للعمل مع الجداول

  • ضع TempTableName- كلمة رئيسية وضعتم تصميمه لإنشاء جدول مؤقت باسم محدد ، والذي سيتم تخزينه في ذاكرة الوصول العشوائي في جلسة 1C 8 هذه حتى ينتهي أو حتى يتم إتلاف الجدول المؤقت. وتجدر الإشارة إلى أنه لا ينبغي تكرار أسماء الجداول المؤقتة في جلسة واحدة 1C 8 ؛
  • كتلة الجداول والروابط- تحتوي الكتلة على جميع الجداول المستخدمة في هذا الاستعلام ، بالإضافة إلى الروابط بينها. تبدأ الكتلة بكلمة رئيسية من،متبوعًا بالاسم والاسم المستعار للجدول الأول. إذا كان هذا الجدول مرتبطًا بجداول أخرى ، فيتم الإشارة إلى الارتباطات. تحتوي لغة الاستعلام 1C على مجموعة أنواع العلاقات التالية:
    • صلة داخلية- سيتم تضمين سجل من الجدول الأيسر في التحديد فقط إذا تم استيفاء شرط الارتباط ، سيتم تضمين سجل من الجدول الأيمن في التحديد فقط إذا تم استيفاء شرط الارتباط ؛
    • الانضمام إلى اليسار- سجل من الجدول الأيسر يقع في التحديد في أي حال ، وسندرج من الجدول الأيمن في التحديد فقط إذا تم استيفاء شرط الارتباط ؛
    • اتصال كامل- سيتم تضمين سجل من الجدول الأيسر في التحديد أولاً في أي حال ، وبعد ذلك فقط في حالة استيفاء شرط الارتباط ، سيتم تضمين سجل من الجدول الأيمن في التحديد أولاً على أي حال ، ثم فقط إذا كان شرط الارتباط استوفيت. في الوقت نفسه ، يتم استبعاد الصفوف المكررة الناتجة عن العلاقة من التحديد.

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

كتل الكلمات الأساسية وتحويل البيانات

  • كتلة التجمع- تستخدم هذه الكتلة لتجميع صفوف الجدول. يتم دمج الصفوف في صف واحد إذا تم تحديد قيم الحقول بعد الكلمة الأساسية مجموعة منتتحول إلى أن تكون هي نفسها. في هذه الحالة ، يتم تلخيص كافة الحقول الأخرى أو تحديد متوسطها أو تكبيرها أو تصغيرها باستخدام الدالات التجميعية. تُستخدم الدوال المُجمَّعة في كتلة من الحقول. مثال: Max (TableAlias.TableFieldName) AS FieldAlias
  • كتلة الشرط- في هذه الكتلة بعد الكلمة الأساسية أينيشار إلى التعبيرات الشرطية المفصولة بالعوامل المنطقية و ، أو، لكي يتم تضمين أي من الصفوف المحددة في التحديد ، من الضروري أن تحتوي جميع الشروط في الإجمالي على القيمة حقيقي.
  • اتحدوا الكل- تستخدم هذه الكلمة الأساسية في الجمع بين الاستعلامات (عوامل التشغيل يختار). تسمح لك لغة الاستعلام 1C بدمج استعلامات متعددة في واحد. لكي يتم دمج الطلبات ، يجب أن يكون لديهم نفس مجموعة الحقول ؛
  • «;» - تُستخدم الفاصلة المنقوطة لفصل العبارات المستقلة عن بعضها البعض يختار؛
  • فهرس حسب- يتم استخدام الكلمة الأساسية لفهرسة الحقول المحددة بعدها ؛
  • الكتلة الإجمالية- تستخدم لبناء اختيارات شبيهة بالأشجار. لكل من حقول التجميع المحددة بعد الكلمة الأساسية على،سيتم إنشاء صف منفصل في التحديد. في هذا السطر ، باستخدام الوظائف الإجمالية ، سيتم حساب القيم الإجمالية للحقول المحددة بعد الكلمة الأساسية النتائج.

هل تريد الاستمرار في تعلم لغة الاستعلام 1s 8؟ ثم اقرأ المقال التالي.

   

17 قاعدة لتجميع الطلب الأمثل لبيانات قاعدة بيانات 1C

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

نص الطلب هو التعليمات التي يجب على أساسها تنفيذ الطلب. نص الطلب يصف:

  • تستخدم جداول قاعدة المعلومات كمصادر بيانات الاستعلام ؛
  • حقول الجدول التي يجب معالجتها في الاستعلام ؛
  • قواعد التجمع
  • نتائج الفرز
  • إلخ.

يتم تجميع التعليمات بلغة خاصة - لغة الاستعلام وتتكون من أجزاء منفصلة - أقسام وجمل وكلمات رئيسية ووظائف وعوامل حسابية ومنطقية وتعليقات وثوابت ومعلمات.

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

توصيات لكتابة استعلامات قاعدة البيانات بلغة استعلام النظام الأساسي 1C:

1) يمكن أن يحتوي نص الطلب على بيانات تكوين محددة مسبقًا مثل:

  • تعداد القيم
  • البيانات المحددة مسبقًا:
  • الدلائل.
  • خطط أنواع الخصائص ؛
  • مخططات الحسابات
  • خطط لأنواع الحسابات ؛
  • روابط فارغة
  • قيم نقاط الطريق للعمليات التجارية.

أيضًا ، قد يحتوي نص الطلب على قيم تعداد النظام التي يمكن تعيينها للحقول في جداول قاعدة البيانات: AccumulationMotionType و AccountType و AccountingMovementType. تشير الطلبات إلى بيانات التكوين المحددة مسبقًا وقيم تعداد النظام باستخدام حرفية لنوع الدالة VALUE. تعمل هذه الحرفية على تحسين قابلية قراءة الاستعلام وتقليل عدد معامِلات الاستعلام.

مثال على استخدام الحرف المعنى:

  • أين المدينة = VALUE (Directory.Cities.Moscow)
  • أين المدينة = VALUE (المرجع.المدينة.المرجع الفارغ)
  • WHEREItemType = VALUE (Enumeration.ProductTypes.Service)
  • WHEREMovementType = VALUE (MovementTypeAccumulation.Income)
  • حيث RoutePoint = VALUE (BusinessProcess.BusinessProcess1.RoutePoint.Action1

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

الترتيب التلقائي للأعمال وفقًا للمبادئ التالية:

  • إذا تم تحديد عبارة ORDER BY في الاستعلام ، فسيتم استبدال كل مرجع للجدول في هذه الفقرة بالحقول التي يتم فرز الجدول وفقًا لها افتراضيًا (بالنسبة للأدلة ، هذا هو الرمز أو الاسم ، للمستندات ، التاريخ من الوثيقة). إذا كان حقل الطلب يشير إلى دليل هرمي ، فسيتم تطبيق الترتيب الهرمي حسب هذا الدليل.
  • إذا لم يكن هناك عبارة ORDER BY في الاستعلام ، ولكن هناك جملة TOTALS ، فسيتم فرز نتيجة الاستعلام حسب الحقول الموجودة في عبارة RESULTS بعد الكلمة الأساسية BY ، في نفس التسلسل ، وإذا تم حساب الإجماليات بواسطة الحقول - الروابط ، ثم حسب حقول الفرز افتراضيًا للجداول التي تم الرجوع إليها.
  • إذا لم يكن هناك جمل ORDER BY و TOTAL في الاستعلام ، ولكن هناك عبارة GROUP BY ، فسيتم فرز نتيجة الاستعلام حسب الحقول الموجودة في الجملة في نفس التسلسل ، وإذا تم التجميع بواسطة الحقول - الروابط ، ثم بشكل افتراضي جداول حقول الفرز التي تمت الإشارة إليها.
  • إذا كان الاستعلام لا يحتوي على الجمل و ORDER BY و TOTAL و GROUP BY ، فسيتم ترتيب النتيجة حسب حقول الفرز الافتراضية للجداول التي يتم تحديد البيانات منها ، بالترتيب الذي تظهر به في الاستعلام.
  • إذا كان الاستعلام يحتوي على جملة TOTAL ، فسيتم ترتيب كل مستوى من الإجماليات بشكل منفصل.

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

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

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

يوجد سجل لتراكم بقايا السلع ، حيث يوجد في حقل المسجل نوع مركب. في الطلب ، يتم تحديد تاريخ ورقم مستندات استلام البضائع ، بينما لا يؤدي الوصول إلى تفاصيل المستند من خلال حقل المسجل إلى العديد من الاتصالات اليسرى لجدول سجل التراكم مع جداول مستندات التسجيل.

الكود 1C v 8.x SELECT
EXPRESS (ما تبقى من البضائع.المستند المسجل AS ، استلام البضائع) ، رقم AS ، رقم الاستلام ،
EXPRESS (ما تبقى من البضائع ، مستند المسجل AS ، استلام البضائع) ، تاريخ AS ، تاريخ الاستلام
من
سجل التراكم بقايا البضائع كما تبقى من السلع

إذا اعتبرت أن المدلى بها غير ممكن ، فإن نتيجة المدلى بها هي القيمة لا شيء.

5) لا تنسى التعليمات مسموح، مما يعني أن الاستعلام سيحدد فقط السجلات التي يمتلك المستخدم الحالي أذونات لها. إذا لم يتم تحديد هذه الكلمة ، ففي الحالة التي يحدد فيها الاستعلام السجلات التي ليس للمستخدم حقوق لها ، سيعمل الاستعلام مع وجود خطأ.

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

Code 1C v 8.x // حدد الحقول العدد والتكوين
// من جدول افتراضي Document.Invoice
اختر المرجع ، الرقم ، الفراغ. (الاسم ، Tov ، الكمية) كتكوين
من المستند
اتحدوا الكل
حدد الارتباط ، الرقم ، التركيب. (رقم الخط ، المنتج ، الكمية)
من المستند ، مستند الفاتورة ، الفاتورة ، التكوين. *

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

Code 1C v 8.x // من الضروري معرفة الأطراف المقابلة
// تم شحن البضائع عن الفترة.
حدد متنوع
الوثيقة ، الفاتورة ، المقاول

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

الكود 1C v 8.x SELECT
استلام البضائع والخدمات (الكمية) ، التسمية) ،
استلام البضائع والخدمات.
استلام البضائع والخدمات الطرف المقابل
من
الوثيقة استلام السلع والخدمات AS استلام البضائع والخدمات
مجموعة من
استلام البضائع والخدمات (التسمية)

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

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

مثال (البحث عن المستندات التي تحتوي على منتج معين في قسم الجداول):

ميزة هذا الاستعلام على الاستعلام في الجدول الفرعي Incoming.Goods هي أنه في حالة وجود تكرارات في المستندات ، فإن نتيجة الاستعلام سترجع فقط المستندات الفريدة دون استخدام الكلمة الأساسية DISTINCT.

11) أحد المتغيرات المثيرة للاهتمام للمشغل B هو التحقق من حدوث مجموعة مرتبة في مجموعة هذه المجموعات (Field1 ، Field2 ، ... ، FieldN) B (Field1 ، Field2 ، ... ، FieldN).

الكود 1C v 8.x SELECT
المقاولون
أين
(Contractors.Link ، Goods.Link)
(حدد المبيعات ، العميل ، المبيعات ، المنتج
من سجل التراكم. المبيعات كمبيعات)
من
الدليل.
الدليل. المنتجات

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

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

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

ليس من الممكن دائمًا للمطور الوصول إلى البيانات التي يمكن للنظام الوصول إليها.

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

موفر Microsoft OLE DB لـ SQL Server: تحذير: تعذر على معالج الاستعلام إنتاج خطة استعلام من المحسن لأن الطول الإجمالي لكافة الأعمدة في جملة GROUP BY أو ORDER BY يتجاوز 8000 بايت.

HRESULT = 80040E14 ، SQLSTATE = 42000 ، أصلي = 8618

14) استخدم بعناية أوفي البناء أين، نظرًا لأن استخدام شرط مع OR يمكن أن "يثقل" طلب البحث بشكل كبير. يمكن حل المشكلة عن طريق التصميم اتحدوا الكل. مثال:

الكود 1C v 8.x SELECT

من

أين
_DemoContractors.Link = Link1
اتحدوا الكل
يختار
_Demo Counterparties.Name كامل
من
Directory._DemoContractors HOW _DemoContractors
أين
_DemoContractors.Link = Link2

15) الشرط ليس فيفي البناء أينيزيد من وقت تنفيذ الطلب ، فهو نوع من ليس (OR1 OR2 ... ORn)، لذلك حاول استخدام الجداول الكبيرة LEFT JOIN مع شرط IS NULL. مثال:

الكود 1C v 8.x SELECT
_DemoContractors.Link
من
Directory._DemoContractors HOW _DemoContractors
وثيقة الانضمام اليسرى. _ DemoBuyerOrder AS _DemoBuyerOrder
البرنامج _DemoContractors.Link = _BuyerDemoOrder.Contractor
أين
_الطلب التجريبي للمشتري. الطرف المقابل هو NULL

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

إذا قمت بوضع البيانات في جدول مؤقت مفهرس مبدئيًا في بعض الحقول ، فلن يكون هناك فهرس لهذه الحقول في الجدول المؤقت.

17) إذا كنت لا تستخدم مدير الجدول المؤقت، فلا داعي لحذف الجدول المؤقت صراحة ، سيتم حذفه بعد اكتمال تنفيذ الاستعلام الدفعي ، وإلا يجب حذف الجدول المؤقت بإحدى الطرق التالية: عن طريق الأمر هدمفي الطلب ، اتصل بالطريقة مدير جدول مؤقت. إغلاق ().

بالإضافة إلى الفيديو من Evgeny Gilev: أخطاء نموذجية عند كتابة طلبات 1C:

لغة الاستعلام هي إحدى الآليات الأساسية لـ 1C 8.3 للمطورين. بمساعدة الاستعلامات ، يمكنك الحصول بسرعة على أي بيانات مخزنة في قاعدة البيانات. تركيبها مشابه جدًا لـ SQL ، ولكن هناك بعض الاختلافات.

المزايا الرئيسية للغة الاستعلام 1C 8.3 (8.2) على SQL:

  • إلغاء الإشارة إلى الحقول المرجعية (تحويل نقطة واحدة أو أكثر إلى سمات الكائن) ؛
  • العمل مع النتائج مريح للغاية ؛
  • القدرة على إنشاء جداول افتراضية ؛
  • يمكن كتابة الطلب باللغتين الإنجليزية والروسية ؛
  • القدرة على حجب البيانات لتجنب الجمود.

عيوب لغة الاستعلام في 1C:

  • على عكس SQL ، في استعلامات 1C لا تسمح لك بتغيير البيانات ؛
  • نقص الإجراءات المخزنة
  • استحالة تحويل سلسلة إلى رقم.

ضع في اعتبارك البرنامج التعليمي الصغير الخاص بنا حول التركيبات الأساسية للغة الاستعلام 1C.

نظرًا لأن الطلبات في 1C تسمح لك فقط بتلقي البيانات ، يجب أن يبدأ أي طلب بكلمة "SELECT". بعد هذا الأمر ، يشار إلى الحقول التي تريد الحصول على البيانات منها. إذا حددت "*" ، فسيتم اختيار جميع الحقول المتاحة. يُشار إلى المكان الذي سيتم اختيار البيانات منه (المستندات ، والسجلات ، والأدلة ، وما إلى ذلك) بعد كلمة "من".

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

يختار
التسمية. الاسم AS الاسم التسمية
من
الدليل. التسمية AS التسمية

بجانب الأمر "SELECT" ، يمكنك تحديد الكلمات الرئيسية:

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

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

للتغيير

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

في أغلب الأحيان ، يتم استخدام عبارة "FOR CHANGE" عند تلقي الأرصدة. في الواقع ، عندما يعمل العديد من المستخدمين في البرنامج في نفس الوقت ، بينما يتلقى أحدهم الأرصدة ، يمكن للآخر تغييرها. في هذه الحالة ، لن يكون الرصيد الناتج صحيحًا. إذا قمت بحظر البيانات بهذا الاقتراح ، فحينئذٍ حتى يتلقى الموظف الأول الرصيد الصحيح ويقوم بجميع التلاعبات اللازمة به ، سيتعين على الموظف الثاني الانتظار.

يختار
التسويات المتبادلة.
التسويات المتبادلة المبلغ رصيد التسويات المتبادلة
من
سجل التراكم التسويات المتبادلة مع الموظفين أرصدة التسويات المتبادلة
للتغيير

أين

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

فيما يلي مثال لطلب الحصول على أشخاص اتصال ذوي منصب معين. معلمة التحديد لها التنسيق التالي: & اسم المعلمة (اسم المعلمة تعسفي).

اختيار (حالة)

يسمح لك البناء بتحديد الشروط مباشرة في نص الطلب.

في المثال أدناه ، سيحتوي "حقل إضافي" على نص بناءً على ما إذا كان المستند قد تم نشره أم لا:

يختار
القبول T & U.Link ،
خيار
متى
ثم "تم نشر المستند!"
ELSE "لم يتم نشر المستند ..."
إنهاء كـ حقل إضافي
من
الوثيقة.استلام خدمات البضائع كإيصالات T & C

انضم

يربط بين جدولين بشرط ارتباط معين.

انضمام يسار / يمين

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

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

يختار
استلام تسمية T&U.
الأسعار السعر
من
الوثيقة.استلام السلع والخدمات
صلة داخلية
في استلام الأسئلة والأجوبة والتسمية = الأسعار

في اليمين ، كل شيء عكس ذلك تمامًا.

اتصال كامل

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

عند استخدام الصلة الكاملة في المثال السابق ، سيتم تحديد جميع عناصر العناصر من مستند استلام البضائع والخدمات وجميع الأسعار الأخيرة من سجل أسعار السلع. ستكون قيم السجلات غير الموجودة ، في كل من الجدول الأول والثاني ، خالية.

صلة داخلية

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

مجموعة من

يتيح لك التجميع في استعلامات 1C طي صفوف الجدول (حقول التجميع) وفقًا لميزة مشتركة معينة (حقول التجميع). يمكن عرض حقول التجميع فقط باستخدام وظائف مجمعة.

ستكون نتيجة الاستعلام التالي قائمة بأنواع العناصر مع أسعارها القصوى.

يختار
,
MAX (Price.Price) AS السعر
من

مجموعة من
الأسعار ، التسمية ، النوع ، التسمية

النتائج

على عكس التجميع ، عند استخدام الإجماليات ، يتم عرض جميع السجلات وإضافة الصفوف الإجمالية إليها بالفعل. يعرض التجميع السجلات المعممة فقط.

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

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

يختار
الأسعار. التسمية. نوع التسمية AS نوع التسمية ،
الأسعار السعر كما السعر
من
تسجيل المعلومات. الأسعار. التسمية. آخر سعر
النتائج
الحد الأقصى (السعر)
على
اكتب التسمية

نأخذ

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

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

يختار

MAX (Price.Price) AS السعر
من
تسجيل المعلومات. الأسعار. التسمية. آخر سعر
مجموعة من
الأسعار ، التسمية ، النوع ، التسمية
نأخذ
الحد الأقصى (الأسعار ، السعر)> 1000

صنف حسب

يفرز عامل التشغيل "ORDER BY" نتيجة الاستعلام. لضمان إخراج السجلات بترتيب متسق ، يتم استخدام AUTO-ORDER. يتم فرز الأنواع البدائية وفقًا للقواعد المعتادة. يتم فرز أنواع المراجع بواسطة GUID.

مثال على الحصول على قائمة الموظفين مرتبة حسب الاسم:

يختار
الموظفون. اسم AS الاسم
من
دليل الموظفين كموظفين
صنف حسب
اسم
طلب تلقائي

الإنشاءات الأخرى للغة الاستعلام 1C

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

ميزات لغة الاستعلام

  • التضمينيقطع سلسلة من موضع محدد بعدد محدد من الأحرف.
  • سنة ... الثانيةتسمح لك بالحصول على القيمة المحددة للنوع الرقمي. معلمة الإدخال هي تاريخ.
  • بداية الفترة ونهايتهاتستخدم عند العمل مع التواريخ. يتم تحديد نوع الفترة (DAY ، MONTH ، YEAR ، إلخ) كمعامل إضافي.
  • إضافة تاريخيسمح لك بإضافة أو طرح الوقت المحدد لنوع معين من التاريخ (ثانية ، دقيقة ، يوم ، إلخ).
  • فارق التاريخيحدد الفرق بين تاريخين ، مع تحديد نوع قيمة الإخراج (DAY ، YEAR ، MONTH ، إلخ.).
  • باطليستبدل القيمة المفقودة بالتعبير المحدد.
  • روابط العرض التقديميالحصول على تمثيل السلسلة للحقل المحدد. يتم استخدامها لأي قيم والقيم المرجعية فقط ، على التوالي.
  • TYPE ، VALUE TYPEتستخدم لتحديد نوع معلمة الإدخال.
  • حلقة الوصلهو عامل مقارنة منطقي لنوع قيمة السمة.
  • التعبيريستخدم لتحويل القيمة إلى النوع المطلوب.
  • التاريخ الوقتيحصل على قيمة من النوع "التاريخ" من القيم الرقمية (السنة ، الشهر ، اليوم ، الساعة ، الدقيقة ، الثانية).
  • المعنىفي طلب 1C ، يتم استخدامه لتحديد القيم المحددة مسبقًا - الدلائل والتعدادات وخطط أنواع الخصائص. مثال على الاستخدام: " حيث LegalIndividual = القيمة (Enumeration.LegalIndividual.Individual)«.

منشئ الاستعلام

لإنشاء استعلامات باستخدام 1C ، توجد آلية مضمنة مريحة للغاية - مصمم الاستعلام. يحتوي على علامات التبويب الرئيسية التالية:

  • "الجداول والحقول" - تحتوي على الحقول المطلوب تحديدها ومصادرها.
  • "الروابط" - تصف شروط بناء CONNECTION.
  • "التجميع" - يحتوي على وصف لتركيبات المجموعات والحقول الملخصة بواسطتها.
  • "الشروط" - مسؤول عن اختيار البيانات في الطلب.
  • "متقدم" - معامِلات طلب البحث الإضافية ، مثل الكلمات الرئيسية لأمر "SELECT" ، إلخ.
  • "الصلات / الأسماء المستعارة" - يشار إلى إمكانيات الانضمام إلى الجداول وتعيين الأسماء المستعارة (بناء "كيف").
  • "ترتيب" - مسؤول عن فرز نتيجة الاستفسارات.
  • "الإجماليات" - تشبه علامة التبويب "التجميع" ، ولكنها تُستخدم لبناء "TOTALS".

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


وحدة تحكم الاستعلام

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

يمكنك تنزيل وحدة تحكم الاستعلام على قرص ITS ، أو بواسطة.

20.09.2014

يوجد توجيه "مسموح به" في لغة الاستعلام. الغرض منه هو استخدامه بواسطة إطار العمل لتصفية السجلات التي لا يمتلك المستخدم حقوقًا لها عند تعيين حد على مستوى سجل قاعدة البيانات.

يبدو أنه من الأفضل دائمًا استخدام هذا التوجيه في الاستعلامات. سوف أزعم أن هذا ليس هو الحال. سأجادل أيضًا أنه إذا أمكن ، يجب عليك تجنب استخدامه ، ولهذا السبب.

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

"يختار

منظمة،

الفرد

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

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

"يختار

منظمة،

الفرد

(يختار

منظمة

فرد)

من سجل التراكم التسويات المتبادلة

(أين

منظمة

فرد)

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

يمكنك أن تسأل مرة أخرى - "لماذا لا تستخدم التوجيه المسموح به" ، فهذا يفرض تحديدًا على الفور ، ويحفظ المستخدم من الرسائل التي لا يحتاجها!

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

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

ولكن كيف لا يزال بإمكانك تجنب خطأ "الوقوع" في البرنامج مع عدم وجود حقوق؟

نعم ، الأمر بسيط للغاية ، فأنت بحاجة إلى استخدام الأمر "جرِّب" ، وإليك مثالاً:

محاولة

طلب. تنفيذ () ؛

استثناء

تقرير (ErrorDescription ()) ؛

نهاية المحاولة

في التقارير التي تستخدم ACS ، يجب كتابة رمز البرنامج الخاص بتنفيذ التقرير يدويًا ، وأيضًا من خلال محاولة.

نتيجة لذلك ، لن يتلقى المستخدم بيانات غير صحيحة وسيتلقى رسالة خطأ عاقل.

يمكنك التعرف على الفروق الدقيقة في وضع RLS في أقسام منفصلة في مقالتنا.

يمنح كائن التكوين "الدور" مجموعة من الحقوق للعمليات (الإجراءات) على كائنات التكوين.

دور "كامل الحقوق".

هذا مجرد دور (غير محدد مسبقًا) يحتوي على مربعات اختيار لجميع أنواع الحقوق في جميع كائنات التكوين.

اختلافها عن الأدوار الأخرى هو وجود حق "الإدارة".

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

تقييد الوصول على مستوى التسجيل

أمان مستوى الصف (RLS) - تقييد على مستوى التسجيل.

تتيح لك آلية قيود الوصول إلى البيانات إدارة حقوق الوصول ليس فقط على مستوى كائنات البيانات الوصفية ، ولكن أيضًا على مستوى كائنات قاعدة البيانات. يمكن استخدام الكائنات التالية لتقييد الوصول إلى البيانات:

  • الأدوار
  • خيارات الجلسة ،
  • خيارات وظيفية
  • وحدات مشتركة مميزة ،
  • الكلمة الأساسية مسموح بها في لغة الاستعلام.

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

التنفيذ الفني لقيود الوصول في 1C

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


ستعمل هذه الآلية لأي طلب من العميل:

  • في التقارير
  • في القوائم الديناميكية ونماذج القوائم العادية
  • في الطلبات العشوائية.

مثل هذا التنفيذ للآلية يؤثر بشكل كبير على الأداء.

طرق لتجاوز قيود الوصول.

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

لكن) وحدة مميزة هي وحدة نمطية مشتركة مع علامة "الامتياز" في الخصائص.

تكمن خصوصيته في حقيقة أن الكود الموجود فيه يتم تنفيذه دون أي تحكم في الوصول ، بما في ذلك RLS.


ب) أيضا ذو امتيازيمكن تمكين الوضع لوحدات كائن المستند. يتم ذلك في خصائص الوثيقة ، العلم

  • الوضع المميز عند الضغط
  • الوضع المميز عند إلغاء الجدولة


ج) الطريقة SetPrivilegedMode ()

أمر نظام يسمح لك بامتياز جزء من رمز أي وحدة نمطية.

من السطر التالي من التعليمات البرمجية ، سيكون وضع التنفيذ المميز ساري المفعول.

سيعمل حتى سطر تعطيل هذا الوضع أو حتى نهاية الإجراء / الوظيفة

(حقيقي)؛

// سيتم تنفيذ أي رمز هنا بدون التحكم في الحقوق و RLS

SetPrivilegedMode(يكذب )؛ // أو نهاية الإجراء / الوظيفة

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

إذا كان في إجراء أو وظيفة طريقة المكالمات SetPrivilegedMode(خطأ) تم إجراء أكثر من استدعاءات الأسلوب SetPrivilegedMode(صحيح) ثم سيتم طرح استثناء

دور PrivilegedMode() تعيد True إذا كان الوضع المميز لا يزال ممكّنًا ، و False إذا تم تعطيل الوضع المميز تمامًا. لا يقوم بتحليل عدد إعدادات الوضع المميز في وظيفة معينة.

سيتم أيضًا تنفيذ جميع الإجراءات والوظائف التي تم استدعاؤها في الوضع المميز.


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


السؤال الذي يطرح نفسه بشكل طبيعي: لماذا ، إذن ، وضع قيود الوصول على الإطلاق ، إذا كان يمكن تجاوزها بسهولة؟

الوضع الآمن.

نعم ، من الممكن كتابة معالجة خارجية مع وضع تنفيذ متميز وتفريغ / بيانات تالفة. لمنع هذا ، النظام لديه طريقة السياق العام

تعيين SafeMode().

يتجاهل الوضع الآمن ، من بين أمور أخرى ، الوضع المتميز.

يجب تعيينه قبل استدعاء المعالجات الخارجية برمجيًا أو إجراءات ووظائف التصدير من الوحدات النمطية الخاصة بهم.

يطرح استثناء عند إجراء عمليات محظورة في وقت التشغيل.

بالإضافة إلى ذلك ، بالنسبة للمستخدمين ، يمكنك إيقاف تشغيل القدرة على التشغيل التفاعلي للتقارير الخارجية والمعالجة على مستوى إعدادات الدور.

إعداد تقييد الوصول

يمكن تكوين RLS للحقوق فقط:

  • قراءة (حدد)
  • إضافة (إدراج)
  • تغيير (تحديث)
  • حذف (حذف)

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

لعملية الإضافةيجب أن يتوافق تقييد الوصول إلى البيانات مع الكائن المخطط لكتابته في قاعدة البيانات.

لعملية التغييريجب أن يتطابق تقييد الوصول إلى البيانات مع الكائن قبل التغيير (من أجل قراءة الكائن) وبعد التغيير (حتى تتم كتابة الكائن).

بالنسبة لكافة الحقوق الأخرى ، لا يتوفر هذا الخيار.

دعنا نضيف قيدًا جديدًا على حق "القراءة" في الكتاب المرجعي "التسمية". سيتم فتح قائمة الحقول التي يمكنك تكوين التقييد المضافة لها.

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

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


* الميزة: للحصول على حقوق الإضافة والتغيير والحذف:

  • لا يمكن تكوين التقييد إلا لجميع الحقول.
  • يمكن أن يكون هناك حد واحد فقط.

بالنسبة إلى حق "القراءة" ، يمكنك تعيين عدة شروط ، وسيتم دمجها مع عامل التشغيل المنطقي "AND".

في القيود المفروضة على كائنات قاعدة البيانات من الأنواع التالية ، لا يمكن استخدام جميع حقول كائن البيانات الرئيسي للتقييد:

  • في سجلات التراكم ، يمكن أن تحتوي قيود الوصول فقط على قياسات الكائن الرئيسي للتقييد ؛
  • في سجلات المحاسبة في القيود ، يمكنك فقط استخدام قياسات التوازن للكائن الرئيسي للقيد

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

آلية لفرض قيود الوصول.

أي عملية على البيانات المخزنة في قاعدة البيانات في 1C: تؤدي المؤسسة في النهاية إلى الوصول إلى قاعدة البيانات مع بعض الطلبات لقراءة البيانات أو تعديلها. أثناء تنفيذ الاستعلامات في قاعدة البيانات ، تفرض الآليات الداخلية لـ 1C: Enterprise قيودًا على الوصول. حيث:

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

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

يتم دمج القيود المشتقة من نفس الدور مع عملية AND.

يتم دمج القيود المتلقاة من أدوار مختلفة مع العملية OR.

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


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

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

كل الطريق.

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

يظهر فرض قيود الوصول بواسطة طريقة "الجميع" بشكل تخطيطي في الشكل:


طريقة "مسموح بها".

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


يتم فرض قيود الوصول إلى البيانات على كائنات قاعدة البيانات عندما يصل 1C: Enterprise إلى قاعدة البيانات.

في إصدار خادم العميل من 1C: Enterprise ، يتم تطبيق القيود على 1C: خادم Enterprise.

ومع ذلك ، لن يعمل هذا الخيار (مسموح) إذا أشرنا إلى جدول في الاستعلام لم يتم تكوين قيود الوصول من أجله ، ولكن توجد فيه روابط لصفوف الجدول ذات القيود المكونة. في هذه الحالة ، ستكون نتيجة الاستعلام "<Объект не найден>... ... "بدلاً من قيمة الحقل المرجعي.


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

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

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

الممارسة 1. منشئ الاستعلام في إعدادات RLS.

دعنا نؤلف نص قسم "WHERE" في الاستعلام إلى الدليل. يمكنك استخدام منشئ الاستعلام.
المنشئ مقطوع.


جدولة "جداول"

سيكون الجدول الرئيسي هو جدول الكائن الذي يتم تكوين القيد من أجله.

يمكنك أيضًا تحديد جداول أخرى وإعداد علاقات مختلفة بينها في علامة التبويب "العلاقات".

علامة التبويب "الشروط"

هنا يمكنك تكوين الشروط الفعلية لتقييد الوصول.

دعنا نضيف شروطًا لسمة "السعر" في دليل قائمة الأسهم لحق "القراءة" لجميع حقول الجدول.

"التسمية حيث التسمية. السعر> 500"

دعونا نرى كيف تعمل هذه القاعدة البسيطة. يحتوي الجدول المرجعي على العناصر التالية:


بعد تعيين قيود الوصول ، سيعرض الجدول فقط العناصر التي تفي بالشرط:


كما اختفت المجموعات. تغيير نص القيد

"التسمية حيث التسمية. السعر> 500

أو التسمية. هذه مجموعة "

حسنًا ، هذا ما تحتاجه الآن.


إذا قمت بإزالة عرض حقل "الرمز" في إعدادات القائمة ، فسيتم عرض جميع عناصر الدليل ، أي القيد لم يعمل. إذا قمت بتعيين عرض حقل "الرمز" ، فسيعمل التقييد.


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


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


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

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

بعد إعداد تقييد الوصول ، تغير عرض السطر في قائمة الحقوق - أصبح رماديًا وظهرت أيقونة.

قيود تكوين الوصول (RLS).

  • لا يوجد قسم ملخص ؛
  • لا يمكنك الوصول إلى جداول التسجيل الافتراضية ؛
  • لا يمكنك استخدام المعلمات بشكل صريح ؛
  • يمكن استخدام الاستعلامات الفرعية أي> / span> مرافق لغة الاستعلام ، باستثناء:
    • المشغل في التسلسل الهرمي ؛
    • يقدم النتائج ؛
    • نتائج الاستعلام المتداخلة يجب ألا يحتوي على أجزاء مجدولة> / span> ؛
    • الجداول الافتراضية، ولا سيما الأرصدة والدوران

ممارسة 2. التسمية مع السعر الحالي.

قم بعمل تقييد وصول إذا كنت بحاجة إلى عرض عنصر بالسعر الحالي أكبر من قيمة معينة ، على سبيل المثال ، 100.

المحلول:

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


قوالب تقييد الوصول.

الممارسة 3. القيد على "المقاولين" من حيث القيمة بشكل ثابت.

قم بإعداد قيود الوصول إلى دليل الأطراف المقابلة بالقيمة المخزنة في الثابت.

بالإضافة إلى ذلك ، تحتاج إلى إعداد قيد لجميع الكائنات التي تستخدم دليل "المقاولون" في التفاصيل.

المحلول

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

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

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

دعونا ننسخ ونعدل قليلاً نص شرط RLS من دليل "Counterparties". يجب أن يتم ذلك عدة مرات حيث توجد أشياء.

أو استخدم نمط تقييد الوصول لتجنب مشاكل تكرار التعليمات البرمجية.

يتم تكوين قوالب تقييد الوصول على مستوى الدور ويمكن استخدامها لأي كائن ضمن الدور المحرر.

يمكنك وضع أي جزء من نص تقييد الوصول في القالب. يتم استدعاء القالب من خلال رمز "#". على سبيل المثال ، #TemplateContractor.

من خلال # في 1C ، تتم كتابة التعليمات إلى المعالج. في سياق تنفيذ إعدادات تقييد الوصول ، يستبدل النظام الأساسي نص استدعاء القالب بنص القالب.

دعنا ننقل النص بعد الكلمة WHERE إلى قالب "TemplateContractor" ، باستثناء النص حول ThisGroup.

المعلمات في قوالب تقييد الوصول.

دعنا نواصل حل المشكلة 2.

المشكلة الآن هي أن الجدول الرئيسي في الدليل يسمى "الطرف المقابل" ، في المستند "الفاتورة". يسمى الحقل المحدد في الدليل "ارتباط" ، في المستند - "الطرف المقابل".

تغيير اسم الجدول الرئيسي في نص القالب إلى "#CurrentTable"

"#CurrentTable" هي معلمة محددة مسبقًا.

ومن خلال النقطة نشير إلى رقم معلمة الإدخال - ". # Parameter (1)

"#Parameter" هي أيضًا قيمة محددة مسبقًا. قد تحتوي على عدد عشوائي من معلمات الإدخال. يشار إليهم بالرقم التسلسلي.

في نص تقييد الوصول للدليل ، نشير إلى ما يلي:

بالنسبة للمستند ما يلي:

"بيع البضائع حيث #TemplateContractor (" المقاول ")"

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

الجدول الرئيسي - التسمية

نص النموذج هو:

#CurrentTable WHERE # CurrentTable. # Parameter (1) = #Parameter (2)

يحتوي نص القالب على جزء من النص في لغة تقييد الوصول إلى البيانات وقد يحتوي على معلمات مميزة برمز "#".

يمكن أن يتبع الحرف "#":

  • إحدى الكلمات الرئيسية:
    • معلمة متبوعة برقم المعلمة في القالب بين قوسين ؛
    • CurrentTable - يعني إدخال الاسم الكامل للجدول الذي تم إنشاء التقييد من أجله في النص ؛
    • CurrentTableName- تشير إلى الإدخال في نص الاسم الكامل للجدول (كقيمة سلسلة ، بين علامتي اقتباس) التي يتم تطبيق التعليمات عليها ، في الإصدار الحالي من اللغة المضمنة ؛
    • NameCurrentPermission- يحتوي على اسم الحق الذي يتم تنفيذ التقييد الحالي من أجله: قراءة / قراءة ، إضافة / إدراج ، تعديل / تحديث ، حذف / حذف ؛
  • اسم معلمة القالب - يعني إدخال تقييد معلمة القالب المقابلة في النص ؛
  • الرمز "#" - يشير إلى إدخال رمز واحد "#" في النص.

يمكن أن يحتوي تعبير تقييد الوصول على:

  • نمط تقييد الوصول المحدد في التنسيق #TemplateName ("قيمة معلمة القالب 1" ، "قيمة معلمة القالب 2" ، ...). يتم وضع كل معلمة قالب في علامتي اقتباس مزدوجتين. إذا كنت بحاجة إلى تحديد حرف اقتباس مزدوج في نص المعلمة ، فاستخدم علامتي اقتباس مزدوجتين.
  • تحتوي الوظيفة على (المكان الذي نبحث عنه ، ما نبحث عنه). تم تصميم الوظيفة للبحث عن تكرارات WhatLooking for في سلسلة WhereLooking for. إرجاع صحيح إذا تم العثور على تطابق ، خطأ خلاف ذلك.
  • عامل + لسلسلة السلسلة.

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

لا يمكن تثبيتها باستخدام setParameter ()أو شيئا من هذا القبيل.

في هذه الحالة ، المعلمات هي:

  • خيارات الجلسة
  • الخيارات الوظيفية

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

الممارسة 4. الوصول إلى "الأطراف الخاصة بك"

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

يوجد دليل "المستخدمون" ، دليل "الأطراف المقابلة" ، المستندات ذات "الطرف المقابل" المطلوب.

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

الاتصال يحتاج أيضا إلى التكوين.

الخيارات الممكنة:

إنشاء روابط المستخدم + الطرف المقابل

  • التفاصيل في النظراء الدليل
  • سجل المعلومات

الحلول الممكنة للمشكلة:

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

المحلول.

دعنا ننشئ معلمة جلسة جديدة "CurrentUser" ونكتب ملئها في وحدة الجلسة.

لنقم بإنشاء سجل للمعلومات "مراسلات المديرين والأطراف المقابلة"

لنقم بإنشاء دور جديد وفيه قيد وصول جديد لمستند "فاتورة الإيصال".

في نص الاستعلام ، سنقوم بتوصيل الجدول الرئيسي بسجل المعلومات بواسطة Contractor = Contractor and Manager = & CurrentUser. نوع الاتصال داخلي.

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

نتحقق - القيود تعمل

* الميزة: إذا قمت بتغيير قائمة الأطراف المقابلة للمستخدم في السجل ، فسيتم تفعيل قيود الوصول على الفور دون إعادة تشغيل جلسة المستخدم.

الممارسة 5. تاريخ عدم التغيير.

من الضروري تطبيق القيد على تحرير البيانات في وقت أبكر من التاريخ المحدد لحظر التغييرات.
يجب أن يكون المستخدمون محدودون.

دعونا ننشئ معلومات "ChangeBarDateDate" تسجل مع البعد المستخدم ، مورد RestrictedDate.

دعونا نبني منطق الحل بهذه الطريقة:

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

من الواضح أنه يمكن تكوين مثل هذا الحد لكائنات قاعدة البيانات التي لها موقع معين على محور الوقت. يمكن أن يكون

  • المستندات
  • سجلات المعلومات الدورية

لنقم بإنشاء دور جديد "RestrictionsBy ChangeProhibitionDate".

في ذلك ، بالنسبة إلى مستند "فاتورة الاستلام" من أجل "التغيير" الصحيح ، سنضيف قيد وصول جديد.

تم تحديد الإعداد لجميع الحقول.

نص التقييد هو:

فاتورة الاستلام من المستند فاتورة الاستلام كفاتورة

ChangeProhibitionDates.ProhibitionDate AS تاريخ الحظر
من

INNER JOIN (حدد
MAXIMUM (ChangeProhibitionDate.User) مستخدم
من
سجل المعلومات تواريخ حظر التغييرات كتاريخ حظر التغييرات
أين
(ChangeProhibitionDates.User = & CurrentUser
ORChangeProhibitionDate.User = VALUE (Reference.users.NullReference))) AS OT_User
BYChangeProhibitedDate.User = OT_User.User) استعلام فرعي
فاتورة الفاتورة. التاريخ> NestedRequest.BanDate

نتحقق - يعمل التقييد.

استخدام تعليمات المعالج المسبق

#If Condition1 # ثم

طلب جزء 1

#ElseIf Condition2 # ثم

طلب جزء 2

#خلاف ذلك

طلب جزء 3

#إنهاء إذا

في ظل الظروف ، يمكنك استخدام العمليات المنطقية (و. أو لا ، وما إلى ذلك) والوصول إلى معلمات الجلسة.

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

الجانب السلبي هو أن مُنشئ الاستعلام لن يعمل مع مثل هذا النص.

* خصوصية:

على عكس التعليمات إلى 1C: المعالج المسبق للمؤسسات في نصوص تقييد الوصول ، اسبق عامل التشغيل Then بعلامة التجزئة - #Then

الممارسة 6. تبديل "استخدام RLS"

دعنا نكمل نظام التقييد الخاص بنا بمفتاح يمكّن / يعطل استخدام التقييد على مستوى السجل.

للقيام بذلك ، قم بإضافة معلمة ثابتة ومعلمة جلسة تسمى "UseRLS".

دعنا نكتب في وحدة الجلسة لتحديد قيمة معلمة الجلسة من قيمة الثابت.

أضف الكود التالي إلى جميع نصوص تقييد الوصول:

"#If & UseRLS # ثم… .. #EndIf"

نتحقق - كل شيء يعمل.

ومع ذلك ، الآن بعد تشغيل علم "استخدام الرادار" ، لن تسري التغييرات على الفور. لماذا ا؟

لأنه يتم تعيين معلمة الجلسة عند بدء الجلسة.

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


نهاية الجزء الأول.

اختيار المحرر
في عام 2012 ، تم إطلاق برنامج طويل الأجل بعنوان "كيف تصبح مزارعًا من الصفر" في روسيا ، بهدف تطوير القطاع ...

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

فكرة العمل لفتح النادي الرياضي الخاص بك ليست جديدة ، ولكن أهميتها زادت على مر السنين. اليوم ، عدد متزايد ...

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