قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  تعليمتم ضبط الوضع الآمن / 1s 8. فتح المعالجة الخارجية برمجياً

تم ضبط 1c 8 على الوضع الآمن. فتح المعالجة الخارجية برمجياً

اكتشاف برمجي المعالجة الخارجيةيتم تنفيذ ذلك باستخدام كائن السياق العام ExternalProcessing ، والذي له النوع مدير المعالجة الخارجية... لكل وضع تشغيل لمنصة 1C (وضع التطبيق العادي و تطبيق مُدار) يستخدم أساليب كائن مختلفة للعمل مع المعالجة الخارجية.

ابدأ المعالجة الخارجية في وضع التطبيق العادي

الخامس تطبيق عادييجب عليك استخدام طريقة Create () الخاصة بالكائن ExternalProcessing ، والتي تمرر الاسم الكامل لملف المعالجة الخارجية. تقوم الطريقة بإرجاع كائن من النوع المعالجة الخارجية، هذا الكائن هو المعالجة الخارجية التي يتم فتحها. إذا كنت بحاجة إلى فتح نموذج معالجة خارجي ، فقم باستدعاء طريقة GetForm () على الكائن الناتج ، والذي سيعيد النموذج الرئيسي ، ثم استدعاء طريقة Open () لفتحه.


معالجة = ExternalProcessing.Create (FullFileName) ،
Processing.GetForm (). فتح () ،

في المعالجات الخارجية ، يجب أن يكون النموذج الرئيسي دائمًا نموذجًا عاديًا ، ويجب أن يكون النموذج المُدار دائمًا نموذجًا إضافيًا ، وإلا فلن تعمل طريقة GetForm () في وضع التطبيق العادي.

بدء المعالجة الخارجية في وضع التطبيق المدار

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

& على الخادم
دالة GetExternalProcessingName (BinaryData)
AddressToTustainStorage = PutToTemporalStore (BinaryData) ،
إرجاع ExternalProcessing.Connect (AddressInTuableStorage) ؛
وظيفة النهاية

& على العميل
FullFileName = "" ؛ // الاسم الكامل لملف المعالجة الخارجية.
FileData = New BinaryData (FullFileName) ؛
ExternalProcessingName = GetExternalProcessingName (FileData) ،
OpenForm ("معالجة خارجية." + ExternalProcessingName + ".Form") ؛

الوضع الآمن للعلاجات الخارجية

أساليب Create () و Connect () لكائن ExternalProcessing لها معلمة إدخال SafeMode - علامة على توصيل المعالجة الخارجية في الوضع الآمن. إذا لم يتم تحديد المعلمة ، فسيتم إجراء الاتصال في الوضع الآمن.
الوضع الآمنتم تصميم العمل لحماية النظام من تنفيذ كود برنامج "غير موثوق به" على الخادم. المخاطر المحتملة هي العلاجات الخارجية أو كود البرنامجأدخلها المستخدم للاستخدام في طريقتي Execute () و Calculate ().
الوضع الآمن له القيود التالية:
  • يتم إلغاء الوضع المميز إذا تم ضبطه ؛
  • يتم تجاهل محاولات الدخول إلى الوضع المتميز ؛
  • يحظر العمليات باستخدام كائنات COM ؛
  • يحظر تحميل وتوصيل المكونات الخارجية ؛
  • رفض الوصول إلى نظام الملفات(باستثناء الملفات المؤقتة) ؛
  • تم رفض الوصول إلى الإنترنت.
لا يتم تنفيذ العمليات المفتوحة بشكل تفاعلي في الوضع الآمن ، لذلك يوصى بتنفيذ آلية لفتح المعالجات الخارجية في الوضع الآمن ، وكذلك لمنع المستخدم من فتح المعالجات الخارجية بشكل تفاعلي على مستوى الحقوق.
لمنع الفتح التفاعلي للمعالجة ، في جميع الأدوار المخصصة للمستخدم ، يجب عليك إزالة حق "فتح المعالجة الخارجية بشكل تفاعلي" (انظر الشكل 1).
الشكل 1. حقوق الافتتاح التفاعلي للعمليات / التقارير الخارجية
لا يؤثر حق المعالجات الخارجية المفتوحة بشكل تفاعلي على كائن ExternalProcessing بأي شكل من الأشكال.

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

الحقيقة هي أنه عند استخدام إصدار خادم العميل لعملية 1C ، يتم فتح المعالجة / التقارير الخارجية في الوضع الآمن ، حيث يُحظر استخدام الوضع المميز. ويتم استخدام الوضع المتميز كثيرًا في التكوينات النموذجية: التكوين استمارات مطبوعة، الشيكات الرسمية المختلفة (تسجيل البورصات) ، إلخ. نتيجة لذلك ، حتى استخدام تقرير منتظم عن ACS بدون نموذج (بشكل افتراضي ، يتم استخدام النموذج العام "نموذج التقرير") والاحتفاظ إعدادات مخصصةتقرير (إلى المرجع المقابل) ، ستتلقى خطأ حول حقوق الوصول غير الكافية إلى الثوابت المختلفة ومعلمات الجلسة المستخدمة لأغراض الخدمة بعد السطر SetPrivilegedMode (صواب) ،

يتمثل الحل "الصحيح" في توصيل المعالجات الخارجية والتقارير من خلال آليات "التقارير الإضافية والمعالجة" الخاصة بـ BSP مع تعطيل الوضع الآمن أو إضافة أذونات (في رأيي ، باستخدام إصدارات BSP 2.2.2.1). ولكن إذا كان من الضروري لسبب ما استخدام بالضبط ملفات خارجيةالتقارير / المعالجة ، يمكنك تكوين ملف تعريف أمان الكتلة الذي يتم استخدامه كملف تعريف أمان الوضع الآمن لقاعدة معلومات معينة.

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

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

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

ملاحظة. اعتقدت أن ملفات تعريف الأمان تعمل فقط عند استخدام التراخيص للنظام الأساسي والخادم بمستوى CORP ، ولكن يتم تحقيق هذه الوظيفة أيضًا على النظام الأساسي 1C: Enterprise 8.3 (بشروط ، يمكنك استدعاء PROF عن طريق القياس مع التكوينات النموذجية Basic / PROF / CORP )

مع إصدار المنصة 8.3.9.2033 ظهر آلية جديدة "الحماية من الأعمال الخطرة".

بفضل هذا الابتكار ، بدأت شركة 1C -ka أقسم عند افتتاح المعالجة (وليس فقط):

تحذير الأمان

يفتح "معالجتي الخارجية" من ملف "My_External_Processing.epf"

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

هل تريد السماح بفتح هذا الملف؟

لذا قررت شركة 1C محاربة التعليمات البرمجية الخبيثة!

أين هذا " كود خبيث"المشروع لا يزال لغزا)

تشمل الإجراءات التي يحتمل أن تكون خطرة ما يلي:

  • تحميل تقرير خارجي أو معالجة التهيئة أو توسيعها.
  • تحميل أو تحديث التكوين / التمديد.
  • الوصول من تقرير / معالجة خارجي أو ملحق إلى الميزات التالية:
  • تنفيذ أوامر نظام التشغيل.
  • إدارة المستخدم (تسجيل أو حذف المعلومات الخاصة بمستخدم قاعدة المعلومات).
  • استدعاء طريقة Connect () لمدير المعالجات الخارجية (التقارير).
  • استدعاء طريقة ConfigurationExtension.Write ().
  • العمل مع كائنات COM.

كيف يمكن إيقاف هذه "المعجزة"؟

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

هناك طرق أخرى لإيقاف هذا:

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

في هذه المعلمة ، يمكنك تحديد عدة أقنعة مفصولة بالرمز "؛" ، على سبيل المثال:

DisableUnsafeActionProtection = اختبار _. * ؛ المرحلة _. * ؛

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

  • حماية المعلمة من الإجراءات الخطيرة للطرق Connect () مديري المعالجة الخارجية (التقارير)
  • خاصية HazardousActionProtection للكائنConfigurationExtension قبل استدعاء أسلوب Write () لهذا الكائن.

يتم التحقق من الحاجة إلى استخدام الحماية ضد الإجراءات الخطرة بالترتيب التالي:

1. إذا تم مسح مربع الاختيار "الحماية من الإجراءات الخطيرة" للمستخدم الحالي ، فإن الحماية تعتبر معطلة.

2. إذا كانت سلسلة الاتصال مع قاعدة المعلوماتيطابق أحد القوالب المحددة في المعلمة DisableUnsafeActionProtection لملف conf.cfg ، تعتبر الحماية معطلة.

3. إذا تم تعطيل الحماية بشكل صريح باستخدام معلمة AntiDangerousActions معالجة خارجية أو تقرير.

4. إذا تم تعطيل الحماية بشكل صريح باستخدام خاصية ملحق AntiDangerousActions.

طباعة (Ctrl + P)

كائنات التكوين

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

في الوضع الآمن:

  • الوضع المميز ألغيت.
  • الدخول في وضع الامتياز تجاهله.
  • يحظرالعمليات المؤدية إلى استخدام الأموال الخارجية فيما يتعلق بـ 1C: منصة المؤسسة (بما في ذلك نظائرها غير المحظورة للطرق المذكورة أعلاه):
  • آليات COM:
    • كائن COM () ؛
    • GetCOMObject () ،
    • غلاف HTMLDocument.GetCOMObject ().
  • تحميل المكونات الخارجية:
    • تحميل المكون الخارجي () ؛
    • قم بتوصيل المكون الخارجي ().
  • الوصول إلى نظام الملفات:
    • ValueInFile () ،
    • نسخة ارشيف ()؛
    • CombineFiles () ،
    • انقل الملف ()؛
    • ملف الانقسام ()؛
    • إنشاء دليل ()؛
    • حذف الملفات ()؛
    • ملف جديد؛
    • xBase جديد ؛
    • HTMLWrite.OpenFile () ،
    • قراءة HTML.OpenFile () ؛
    • قراءة XML.OpenFile () ؛
    • XMLWrite.OpenFile () ،
    • ReadingFastInfoset.OpenFile () ،
    • WriteFastInfoset.OpenFile () ،
    • CanonicalXMLWriter.OpenFile () ،
    • ConversionXSL.LoadFromFile () ،
    • WriteZipFile.Open () ،
    • قراءة ملف ZipFile.Open () ؛
    • NewTextReader () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • ReadText.Open () إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • NewWriteText () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • WriteText.Open () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • NewExtractText () ،
    • تغيير خاصية RetrieveText.FileName ؛
    • ExtractText.Write () ،
    • صورة جديدة () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • Picture.Write () ؛
    • New BinaryData () ؛
    • BinaryData.Write () ،
    • NewDataWrite () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • NewReaderData () ، هناك المعلمة الأولى - سلسلة ؛
    • كافة طرق كائن FileStreamManager ؛
    • برنامج FileStream الجديد () ؛
    • FormattedDocument.Write () ،
    • GeographicSchema.Read () ؛
    • GeographicSchema.Record () ،
    • GeographicSchema.Print () ؛
    • TabularDocument.Read () ،
    • TabularDocument.Write () ،
    • TabularDocument.Print () ، GraphicSchema.Read () ،
    • GraphicalScheme.Write () ،
    • GraphicalScheme.Print () ،
    • TextDocument.Read () ،
    • TextDocument.Write ().
  • خدمة الإنترنت:
    • اتصال إنترنت جديد ،
    • بريد إنترنت جديد ،
    • InternetProxy الجديد ،
    • اتصال HTTPC جديد ،
    • اتصال FTPC جديد.

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

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

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

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

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

// يتم إنشاء كود برنامج يجب تنفيذه // من الممكن أن يتم تحميل الكود من مصادر خارجية// أو تم إدخالها يدويًا ExecutableCode = GetExecutableCodeFrom the OutsideWorld () ؛ // تمكين الوضع الآمن تعيين الوضع الآمن (صحيح) ؛ // تنفيذ تنفيذ التعليمات البرمجية التي يحتمل أن تكون خطرة (التعليمات البرمجية القابلة للتنفيذ) ؛ // إيقاف تشغيل الوضع الآمن تعيين الوضع الآمن (خطأ) ؛

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

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

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

// تصحيح استخدام إجراء ProcedureName () SetSafeModeDisable (True) ؛ ضبط الوضع الآمن (صحيح) ؛ ضبط الوضع الآمن (خطأ) ؛ تعيين تعطيل الوضع الآمن (خطأ) ؛ EndProcedure // استخدام غير صحيح ProcedureName () SetSafeModeDisable (True) ؛ ضبط الوضع الآمن (صحيح) ؛ تعيين تعطيل الوضع الآمن (خطأ) ؛ // استثناء EndProcedure إجراء ProcedureName () SetSafeMode (True) ؛ تعيين تعطيل الوضع الآمن (خطأ) ؛ // استثناء EndProcedure