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

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

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

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

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


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

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

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

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

& على الخادم
الدالة GetExternalProcessingName (BinaryData)
AddressToTertainStorage \u003d PutToTustainStorage (BinaryData) ،
إرجاع ExternalProcessing.Connect (AddressInTustainStorage) ؛
وظيفة النهاية

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

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

أساليب Create () و Connect () لكائن ExternalProcessing لها معلمة إدخال SafeMode - علامة على توصيل المعالجة الخارجية في الوضع الآمن. إذا لم يتم تحديد المعلمة ، فسيتم إجراء الاتصال في الوضع الآمن.
الوضع الآمن تم تصميم العمل لحماية النظام من التنفيذ على كود برنامج الخادم "غير الموثوق به". المخاطر المحتملة هي العلاجات الخارجية أو كود البرنامجأدخلها المستخدم للاستخدام في طرق التنفيذ () وحساب ().
يفرض الوضع الآمن القيود التالية:
  • يتم إلغاء الوضع المميز إذا تم ضبطه ؛
  • يتم تجاهل محاولات الدخول إلى الوضع المتميز ؛
  • يحظر العمليات باستخدام كائنات COM ؛
  • يحظر تحميل وتوصيل المكونات الخارجية ؛
  • رفض الوصول إلى نظام الملفات (باستثناء الملفات المؤقتة) ؛
  • تم رفض الوصول إلى الإنترنت.
لا يتم تنفيذ المعالجة المفتوحة بشكل تفاعلي في الوضع الآمن ، لذلك يوصى بتنفيذ آلية لفتح المعالجة الخارجية في الوضع الآمن ، وكذلك لمنع المستخدم من فتح المعالجة الخارجية بشكل تفاعلي على مستوى الإذن.
لحظر الفتح التفاعلي للمعالجة ، في جميع الأدوار المخصصة للمستخدم ، يجب عليك إزالة حق "فتح المعالجة الخارجية بشكل تفاعلي" (انظر الشكل 1).
الشكل 1. حقوق الافتتاح التفاعلي للعمليات / التقارير الخارجية
لا يؤثر حق "Open External Processors Interactively" على كائن 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 \u003d اختبار _. * ؛ المرحلة _. * ؛

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

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

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

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

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

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

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

طباعة (Ctrl + P)

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

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

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

  • الوضع المميز ألغيت.
  • الدخول في وضع الامتياز تجاهله.
  • يحظر العمليات التي تؤدي إلى استخدام الأموال الخارجية فيما يتعلق بـ 1C: منصة المؤسسة (بما في ذلك نظائرها غير المحظورة للطرق المذكورة أعلاه):
  • آليات COM:
    • كائن COM () ؛
    • GetCOMObject () ،
    • غلاف HTMLDocument.GetCOMObject ().
  • تحميل المكونات الخارجية:
    • تحميل ExternalComponent () ؛
    • قم بتوصيل المكون الخارجي ().
  • الوصول إلى نظام الملفات:
    • ValueInFile () ،
    • نسخة ارشيف ()؛
    • CombineFiles () ،
    • انقل الملف ()؛
    • ملف الانقسام ()؛
    • إنشاء دليل ()؛
    • حذف الملفات ()؛
    • ملف جديد؛
    • xBase جديد ؛
    • HTMLWrite.OpenFile () ،
    • قراءة HTML.OpenFile () ؛
    • قراءة XML.OpenFile () ؛
    • XMLWrite.OpenFile () ،
    • ReadingFastInfoset.OpenFile () ،
    • WriteFastInfoset.OpenFile () ،
    • CanonicalXMLWriter.OpenFile () ،
    • ConversionXSL.LoadFromFile () ،
    • WriteZipFile.Open () ،
    • قراءة ملف ZipFile.Open () ؛
    • NewReadText () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • ReadText.Open () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • NewWriteText () ، إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • WriteText.Open () إذا كانت المعلمة الأولى عبارة عن سلسلة ؛
    • استخراج نص جديد () ؛
    • تغيير خاصية Text Extraction.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 () ،
    • GraphicScheme.Print () ،
    • TextDocument.Read () ،
    • TextDocument.Write ().
  • خدمة الإنترنت:
    • اتصال إنترنت جديد ،
    • بريد إنترنت جديد ،
    • InternetProxy الجديد ،
    • اتصال HTTPC جديد ،
    • اتصال FTPC جديد.

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

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

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

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

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

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

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

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

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

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