أجهزة الكمبيوتر شبابيك إنترنت

1C الوضع الآمن للمعالجة الخارجية. تم ضبط الوضع الآمن. العملية محظورة. تشغيل المعالجة الخارجية في وضع التطبيق العادي

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

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

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


المعالجة = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

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

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

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

&على الخادم
الدالة GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
وظيفة النهاية

&OnClient
اسم الملف الكامل = ""; // الاسم الكامل لملف المعالجة الخارجية.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

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

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

يشبه الفتح البرمجي للتقارير الخارجية المعالجة الخارجية، ولكن يجب عليك استخدام كائن السياق العام ExternalReports، والذي له النوع ExternalReportsManager.

طباعة (Ctrl+P)

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

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

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

  • الوضع المميز ألغيت.
  • التبديل إلى الوضع المميز تم تجاهله.
  • محظورالعمليات التي تؤدي إلى استخدام وسائل خارجية فيما يتعلق بمنصة 1C:Enterprise (بما في ذلك نظائرها غير المحظورة للطرق المحددة):
  • آليات كوم:
    • COMObject();
    • GetCOMObject();
    • المجمعHTMLDocument.GetCOMObject().
  • تحميل المكونات الخارجية:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • الوصول إلى نظام الملفات:
    • ValueInFile();
    • نسخة ارشيف()؛
    • MergeFiles();
    • انقل الملف()؛
    • ملف الانقسام()؛
    • إنشاء دليل()؛
    • حذف الملفات()؛
    • ملف جديد؛
    • قاعدة x جديدة؛
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • ReadText() جديد، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • ReadText.Open()، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • NewTextRecord()، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • WriteText.Open()، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • NewTextExtract();
    • تغيير الخاصية ExtractText.FileName؛
    • ExtractText.Write();
    • New Picture()، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • Picture.Write();
    • بيانات ثنائية جديدة () ؛
    • BinaryData.Write();
    • NewDataRecord()، إذا كانت المعلمة الأولى عبارة عن سلسلة؛
    • قراءة بيانات جديدة () ، هناك معلمة أولى - سلسلة ؛
    • جميع أساليب كائن FileStreamManager؛
    • ملف جديد () ؛
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • خدمة الإنترنت:
    • اتصال إنترنت جديد،
    • بريد الانترنت الجديد,
    • بروكسي الانترنت الجديد,
    • اتصال HTTP جديد،
    • اتصال FTP جديد.

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

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

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

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

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

// يتم إنشاء كود البرنامج الذي يجب تنفيذه // من الممكن أن يتم تحميل الكود من مصادر خارجية // أو إدخاله يدويًا ExecutableCode = GetExecutedCodeFromExternalWorld(); // تمكين الوضع الآمن SetSafeMode(True); // تنفيذ تعليمات برمجية قد تكون خطيرة Execute(ExecutableCode); // قم بإيقاف تشغيل الوضع الآمن SetSafeMode(False);

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

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

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

// الاستخدام الصحيح لـ الإجراءProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // الاستخدام غير الصحيح لـ الإجراءProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // استثناء EndProcedure الإجراءProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // استثناء EndProcedure

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

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

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


المعالجة = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

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

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

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

&على الخادم
الدالة GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
وظيفة النهاية

&OnClient
اسم الملف الكامل = ""; // الاسم الكامل لملف المعالجة الخارجية.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

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

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

يشبه الفتح البرمجي للتقارير الخارجية المعالجة الخارجية، ولكن يجب عليك استخدام كائن السياق العام ExternalReports، والذي له النوع ExternalReportsManager.

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

مرور سريع

الإجراءات الأولية

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

1. قم بتسجيل الدخول بكامل الحقوق إلى قاعدة بيانات المعلومات.

2. انتقل إلى القائمة "البيانات الرئيسية والإدارة"/حظر "الإدارة"/الأمر "النماذج المطبوعة والتقارير والمعالجة".

إضافة

في القسم الذي يفتح:

نضيف المعالجة باستخدام زر "إنشاء" (وهذا مهم) أو "تحديث!" موجود:

  • حدده في القائمة (إذا لم يكن محددًا أو فارغًا، فلن يعمل الأمر، لكنه لن يقول أي شيء).
  • انقر فوق الزر "تحميل من ملف".

بعد ظهور 1C في المعالجة الخارجية، ظهرت الشيكات الأمنية في تكوينات جديدة.

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

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

فحص

وبعد ذلك مباشرة، حسب نوع العلاج:

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

بالنسبة للمعالجة المذكورة أعلاه، سيبدو الإطلاق كما يلي:

إذا كانت الوثيقة جديدة فيجب تدوينها، وستحذرك آلية المعالجة الخارجية من ذلك:

يعتمد السلوك الإضافي على الوظيفة المضمنة: من الممكن فتح نموذج أو معالجة البيانات ببساطة.

تحذيرات أمنية في 1C

عززت إصدارات وتكوينات النظام الأساسي الجديدة الحماية ضد إطلاق البرامج الضارة.

قد تتسبب المعالجة في بدء تشغيل برنامج Excel للتحميل، وفي هذه الحالة سيحذرك نظام الأمان الفرعي الجديد أيضًا:

في هذه الحالة، تتم مقاطعة رمز المعالج.

إذا قمت بالنقر فوق "نعم"، فسيطلب منك النظام تشغيل الأمر مرة أخرى:

من الممكن لمستخدم قاعدة المعلومات تعطيل الحماية من الإجراءات الخطيرة من خلال "المكون":

ولا يمكن تغيير ذلك من وضع "المؤسسة"، ربما تم ذلك عن عمد، وقد يظهر بعد التحديث.

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

"غير قادر على تحميل MS EXCEL!!!" "تم ضبط الوضع الآمن. العملية محظورة"

في المعالجة الخارجية يبدو الأمر كما يلي:

يجب على المطور ضبطه على "False" في وصف المعالجة الداخلية، وبعد ذلك سيكون كل شيء على ما يرام:

معلومات الوظيفةOnExternalProcessing() ExportRegistrationParameters = بنية جديدة؛ معلمات التسجيل. إدراج ("الوضع الآمن"، خطأ)؛

عند تحديث التكوين، ظهر أيضًا نص تحذيري حول المصدر الذي تم الحصول على ملف التكوين منه: