پاول چیستوف. حالت کار ایمن 1c حالت ایمن تنظیم شده است، عملیات ممنوع است

هنگامی که برنامه آپلود سند را به عنوان یک کاربر معمولی اجرا می کنید، خطای "حالت ایمن تنظیم شده است. عملیات ممنوع است."

این دشواری به دلیل اینکه حقوق کافی برای شروع پردازش خارجی وجود ندارد. برای پیکربندی حقوق دسترسی، از طرف شرکت در حالت 1C Enterprise وارد پایگاه داده شوید مدیرو به بخش بروید تنظیمات کاربر و حقوق / دسترسی به پروفایل های گروه،کلیک برای ایجاد یک گروه.

نام گروه را وارد کنید و کادرهای مربوط به نقش های موجود برای کاربران این گروه را علامت بزنید -

  • باز کردن تعاملی گزارش‌های خارجی و پردازش
  • استفاده از گزارش ها و پردازش های اضافی

کلیک ذخیره کن و ببند


به منوی Users برگردید و از لیست کارمندی را انتخاب کنید که با برنامه Upload Document کار می کند. روی Permissions کلیک کنید. در لیست پروفایل ها، نمایه ایجاد شده قبلی را انتخاب کنید. کلیک بنویس.


برای اینکه کاربران بتوانند پردازش را شروع کنند، توصیه می شود Document Loading را به لیست پردازش های خارجی اضافه کنید. برای انجام این کار در منو مدیریت / فرم های چاپی و پردازش / گزارش های اضافی و پردازشیک پردازش جدید ایجاد کنید مسیر فایل "Download Documents.epf" را مشخص کنید و یک نام اختصاص دهید. محل پردازش را در منو مشخص کنید، از جایی که کاربر می تواند بعداً آن را راه اندازی کند، به عنوان مثال، منو را انتخاب کنید دایرکتوری ها

با کلیک بر روی آیتم دسترسی سریع، مشخص می کنید که کدام کاربران به پردازش دسترسی دارند:


پس از تنظیم، کلیک کنید ذخیره کن و ببند. برای شروع پردازش، کاربران فقط باید دوباره وارد پایگاه داده شوند و آن را از منوی دسترسی (در مثال - فهرست ها) باز کرده و کلیک کنند. اجرا کردن.


باز کن منو - همه توابع .... و گزینه "Security profiles are used" را در لیست پیدا کنید.


فقط تیک گزینه "Security profiles are used" را بردارید.


پس از این، برنامه با موفقیت راه اندازی می شود.

واقعیت این است که هنگام استفاده از نسخه سرویس گیرنده-سرور 1C، پردازش / گزارش های خارجی در حالت ایمن باز می شوند که در آن استفاده از حالت ممتاز ممنوع است. و حالت ممتاز اغلب در پیکربندی های معمولی استفاده می شود: تولید فرم های چاپی، بررسی های مختلف خدمات (ثبت صرافی ها) و غیره. در نتیجه، حتی با استفاده از یک گزارش معمولی در سیستم کنترل دسترسی بدون فرم (به طور پیش فرض، از فرم کلی "ReportForm" استفاده می شود) و ذخیره تنظیمات گزارش سفارشی (در دایرکتوری مربوطه)، خطای دسترسی ناکافی را دریافت خواهید کرد. حقوق ثابت های مختلف و پارامترهای جلسه مورد استفاده برای اهداف رسمی بعد از خط SetPrivilegedMode(True);

راه‌حل «صحیح» اتصال پردازش‌ها و گزارش‌های خارجی از طریق مکانیسم‌های «گزارش‌های اضافی و پردازش» BSP با غیرفعال کردن حالت امن یا اضافه کردن مجوزها (به نظر من، از BSP نسخه 2.2.2.1) است. اما اگر به دلایلی استفاده از فایل‌های گزارش/پردازش خارجی ضروری است، می‌توانید یک نمایه امنیتی خوشه‌ای را که به عنوان نمایه امنیتی حالت امن برای یک پایگاه اطلاعاتی خاص استفاده می‌شود، پیکربندی کنید.

من می خواهم بلافاصله توجه داشته باشم که این گزینه ارجح نیست، اما به دلیل شرایط مختلف می توان از آن به شکل ساده استفاده کرد. به عنوان مثال، من چندین پایگاه داده در شهرهای مختلف دارم، یک پایگاه داده مشترک محلی با حقوق کاملاً محدود، USB بسته و غیره، در جایی از Accounting 2.0 استفاده می کنم و در جایی از 3.0 تقریباً همه گزارش ها را با استفاده از ابزارهای ACS بدون فرم تهیه می کنم. در هر دو نسخه باز شد نگهداری همه این گزارش‌ها برای نسخه‌های مختلف و پایگاه‌های اطلاعاتی مختلف، کار فشرده و بیهوده است، زیرا برنامه هایی برای تغییر به یک پیکربندی و پایه وجود دارد...

بیایید یک پروفایل ایجاد کنیم.
در کنسول کلاستر، یک نمایه امنیتی ایجاد می کنیم که در آن پرچم ها را تنظیم می کنیم "می تواند به عنوان نمایه امنیتی حالت ایمن استفاده شود"و " در بخش "دسترسی کامل مجاز است:" "به حالت ممتاز".

در بسیاری از موارد استفاده از گزارشات و پردازش ساده، این روش قابل اجرا خواهد بود. برای موقعیت های پیچیده تر، هیچ فایده ای برای توصیف روند وجود ندارد، زیرا در مستندات مشخص شده است (قابلیت پیکربندی پروفایل های امنیتی برای فایل های خارجی خاص با تعیین مقدار هش آن و غیره).

P.S. من فکر می کردم که نمایه های امنیتی فقط هنگام استفاده از مجوزهای پلت فرم و سرور در سطح CORP کار می کنند، اما این عملکرد روی پلت فرم 1C:Enterprise 8.3 نیز کار می کند (می توان آن را به طور مشروط PROF نامید، به قیاس با تنظیمات استاندارد Basic/PROF/CORP)

چاپ (Ctrl+P)

اشیاء پیکربندی

در صورت لزوم استفاده از کد برنامه "غیر قابل اعتماد" در سرور: پردازش خارجی یا کد برنامه ای که توسط کاربر برای استفاده در روش های Run() و Calculate() وارد شده است، می توانید از حالت عملیات ایمن استفاده کنید.

در حالت امن:

  • حالت ممتاز لغو شد.
  • تغییر به حالت ممتاز نادیده گرفته شده است.
  • ممنوع استعملیات منتهی به استفاده از وسایل خارجی در رابطه با پلت فرم 1C: Enterprise (از جمله آنالوگ های غیر مسدود کننده روش های مشخص شده):
  • مکانیسم های COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • بارگیری اجزای خارجی:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • دسترسی به سیستم فایل:
    • ValueInFile();
    • فایل را کپی کن()؛
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • فایلهاروحذف کن()؛
    • فایل جدید؛
    • xBase جدید؛
    • 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 ();
    • BinaryData.Write();
    • NewDataRecord()، اگر اولین پارامتر یک رشته باشد.
    • New ReadData()، یک پارامتر اول وجود دارد - یک رشته.
    • تمام متدهای شی FileStreamManager.
    • New FileStream();
    • 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 جدید،
    • FTPConnection جدید.

توجه! هنگام انجام عملیات ممنوعه، یک استثنا در زمان اجرا ایجاد می شود.

توجه داشته باشید. گزارش‌های خارجی و پردازش‌هایی که با استفاده از منوی File - Open باز می‌شوند در حالت امن اجرا می‌شوند اگر کاربر حقوق دسترسی مدیریتی نداشته باشد.

تعداد دفعاتی که حالت ایمن روشن می شود باید با تعداد دفعات خاموش شدن آن مطابقت داشته باشد. با این حال، اگر حالت ایمن در یک رویه یا عملکرد (یک یا چند بار) روشن شده باشد، اما خاموش نشده باشد، سیستم به تعداد دفعات روشن شدن ناقص رویه یا عملکرد باقیمانده به طور خودکار خاموش می شود.

اگر در یک رویه یا تابع یک متد را فراخوانی کند SetSafeMode (نادرست)فراخوانی بیش از روش انجام شده است SetSafeMode (درست)، سپس یک استثنا پرتاب می شود.

نصب نرم افزار حالت ایمن ممکن است در مواردی مورد نیاز باشد که توسعه دهنده پیکربندی قصد استفاده از کد برنامه شخص ثالث (در رابطه با پیکربندی) را داشته باشد که توسعه دهنده نمی تواند قابلیت اطمینان آن را تضمین کند. نمونه ای از این کدها اجرای متدهای Execute() و Compute() در مواردی است که کد اجرایی از دنیای خارج به دست می آید. در این مورد، یک تمرین خوب این است که قبل از اجرای این روش ها، حالت Safe Mode را تنظیم کنید:

// کد برنامه تولید می شود که باید اجرا شود // این امکان وجود دارد که کد از منابع خارجی بارگیری شود // یا به صورت دستی وارد شود ExecutableCode = GetExecutedCodeFromExternalWorld(); // فعال کردن حالت ایمن SetSafeMode(True); // اجرای کد بالقوه خطرناک Execute(ExecutableCode); // خاموش کردن حالت ایمن SetSafeMode(False);

در برخی موارد، تنظیمات حالت ایمن ممکن است با تنظیمات حالت ممتاز مغایرت داشته باشد. نمونه ای از این تضاد، ارسال سندی است که حالت Privileged هنگام ارسال ویژگی برای آن تنظیم شده است، از کدی در زبان داخلی که در حالت امن اجرا می شود. در این حالت، حالت ممتاز غیرفعال می شود و تلاش برای فعال کردن آن نادیده گرفته می شود. در نتیجه، کد موجود در زبان تعبیه شده، که بر روی حالت ممتاز فعال "شمار می‌شود" با عدم وجود آن مواجه می‌شود که منجر به خطاهایی با دلایل غیر واضح برای ظاهر آنها می‌شود. برای جلوگیری از این وضعیت، سیستم 1C:Enterprise به‌طور خودکار حالت امن را برای کنترل‌کننده‌های رویداد که در ماژول شی یا ماژول مدیر موجود هستند غیرفعال می‌کند، مشروط بر اینکه کد اجرایی در زبان داخلی در پسوند پیکربندی قرار نگیرد. چنین کنترل کننده هایی به روشی خاص در دستیار نحو مشخص می شوند.

همچنین امکان غیرفعال کردن Safe Mode از زبان داخلی را فراهم می کند (اگر کد برنامه ای که سعی در غیرفعال کردن آن دارد در پسوند پیکربندی نباشد). برای غیرفعال کردن حالت ایمن روشی وجود دارد SetDisableSafeMode(). با استفاده از روش می توانید بررسی کنید که حالت ایمن در حال حاضر غیرفعال است (به طور خودکار یا با فراخوانی یک روش). GetDisableSafeMode().

در یک متد در زبان داخلی، نمی‌توان بیش از یک سطح تودرتو برای تنظیم حالت امن (با فراخوانی متد SetSafeMode()) و غیرفعال کردن حالت امن (به طور خودکار در حین اجرای کنترل‌کننده‌های رویداد) وجود داشته باشد. اشیاء فراداده یا با فراخوانی متد ()SetDisableSafeMode). هنگام تلاش برای افزایش لانه سازی، یک استثنا پرتاب می شود:

// استفاده صحیح از ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode (نادرست)؛ SetDisableSafeMode (نادرست)؛ EndProcedure // استفاده نادرست از ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode (نادرست)؛ // Exception EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode (نادرست)؛ // Exception EndProcedure

باز کردن برنامه ای پردازش خارجی با استفاده از شی زمینه جهانی ExternalProcessing که دارای نوع است انجام می شود External Processing Manager. برای هر حالت عملیاتی پلت فرم 1C (حالت برنامه معمولی و حالت برنامه مدیریت شده)، از روش های شی متفاوت برای کار با پردازش خارجی استفاده می شود.

اجرای پردازش خارجی در حالت برنامه معمولی

در یک برنامه معمولی، باید از متد Create() شی ExternalProcessing استفاده کنید که نام کامل فایل پردازش خارجی به آن ارسال می شود. متد یک شی از نوع را برمی گرداند پردازش خارجی، این شیء پردازش خارجی در حال باز شدن است. اگر نیاز به باز کردن یک فرم پردازش خارجی دارید، سپس متد GetForm() را روی شی دریافتی فراخوانی کنید که فرم اصلی را برمی گرداند و سپس متد Open() را برای باز کردن آن فراخوانی کنید.


پردازش = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

در پردازش خارجی، فرم اصلی باید همیشه یک فرم معمولی باشد، و فرم کنترل شده باید همیشه یک فرم اضافی باشد، در غیر این صورت متد GetForm() در حالت نرمال کاربردی کار نخواهد کرد.

اجرای پردازش خارجی در حالت برنامه مدیریت شده

در حالت فرم های مدیریت شده، الگوریتم بر اساس زمینه اجرا تقسیم می شود. در کلاینت، ما داده های باینری را با استفاده از نام کامل فایل پردازش خارجی دریافت می کنیم. داده های باینری دریافتی را به سرور منتقل می کنیم و در ذخیره سازی موقت قرار می دهیم. در مرحله بعد، باید متد Connect() شی ExternalProcessing را فراخوانی کنید، که آدرس ذخیره سازی موقت به آن ارسال می شود. این روش نام پردازش خارجی متصل را برمی گرداند. نام پردازش خارجی را به مشتری برمی گردانیم، یک مسیر رشته ای به فرم پردازش ایجاد می کنیم و از متد OpenForm() برای باز کردن فرم پردازش خارجی استفاده می کنیم.

&روی سرور
تابع GetExternalProcessingName (BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
ExternalProcessing.Connect(AddressInTemporaryStorage) را برگردانید.
EndFunction

&OnClient
FullFileName = ""; // نام کامل فایل پردازش خارجی.
FileData = BinaryData جدید (FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

حالت ایمن برای پردازش خارجی

متدهای Create() و Connect() شیء ExternalProcessing دارای یک پارامتر ورودی SafeMode هستند - نشانه ای از اتصال پردازش خارجی در حالت امن. اگر پارامتر مشخص نشده باشد، اتصال در حالت امن انجام می شود.
حالت ایمن برای محافظت از سیستم در برابر اجرای کد برنامه "غیر قابل اعتماد" روی سرور طراحی شده است. خطر بالقوه از پردازش خارجی یا کد برنامه وارد شده توسط کاربر برای استفاده در متدهای Run() و Calculate() می آید.
حالت ایمن محدودیت های زیر را اعمال می کند:
  • حالت ممتاز در صورت نصب لغو می شود.
  • تلاش برای ورود به حالت ممتاز نادیده گرفته می شود.
  • عملیات با اشیاء COM ممنوع است.
  • بارگیری و اتصال اجزای خارجی ممنوع است.
  • دسترسی به سیستم فایل ممنوع است (به جز فایل های موقت).
  • دسترسی به اینترنت ممنوع است.
فرآیندهایی که به صورت تعاملی باز می شوند در حالت ایمن انجام نمی شوند، بنابراین توصیه می شود مکانیزمی را برای باز کردن پردازنده های خارجی در حالت ایمن و همچنین در سطح مجوز پیاده سازی کنید تا کاربر را از باز کردن تعاملی پردازنده های خارجی منع کنید.
برای جلوگیری از باز شدن تعاملی پردازش، در همه نقش‌هایی که به کاربر اختصاص داده می‌شود، باید «باز تعاملی پردازش خارجی» سمت راست را حذف کنید (شکل 1 را ببینید).
شکل 1. حقوق باز کردن تعاملی پردازش/گزارش های خارجی
حق "باز کردن تعاملی پردازش خارجی" به هیچ وجه بر شیء پردازش خارجی تأثیر نمی گذارد.

باز کردن برنامه‌ای گزارش‌های خارجی شبیه به پردازش خارجی است، اما باید از شیء متن کلی ExternalReports استفاده کنید که دارای نوع ExternalReports Manager.