Інтернет Windows Android

Com встановлений безпечний режим виконання операції заборонено. Програмне відкриття зовнішньої обробки

Справа в тому що при використанні клієнт-серверного варіанту роботи 1С зовнішні обробки / звіти відкриваються в безпечному режимі, в якому заборонено використання привілейованого режиму. А привілейований режим використовується дуже часто в типових конфігураціях: формування друкованих форм, різні службові перевірки (реєстрація обмінів) і т.д. В результаті, навіть використовуючи стандартний звіт на СКД без форми (за замовчуванням використовується загальна форма "ФормаОтчета") і зберігаючи для користувача настройки звіту (до відповідного довідника), ви отримаєте помилку про недостатність прав доступу на різні константи і параметри сеансу, використовувані в службових цілях після рядка УстановітьПрівілегірованнийРежім (Істина);

"Знову ж правильним" рішенням буде підключення зовнішніх обробок і звітів через механізми БСП "Додаткові звіти і обробки" з відключенням безпечного режиму або додаванням дозволів (по-моєму, з версії БСП 2.2.2.1). Але якщо з якихось причин необхідно використання саме зовнішніх файлів звітів / обробок, то можна налаштувати профіль безпеки кластера, використовуваного в якості профілю безпеки безпечного режиму для конкретної інформаційної бази.

Хотів би відразу зауважити, що такий варіант не є кращим, але в силу різних обставин можна його використовувати в такому спрощеному вигляді. Наприклад, у мене кілька баз в різних містах, загальна локальна сісти з жорстко обмеженими правами, закритими USB і т.п., десь використовується Бухгалтерія 2.0, а десь 3.0, майже всі звіти роблю засобами СКД без форм, що б вони відкривалися в обох версіях. Обслуговувати всі ці звіти для різних версій і різних баз справа трудомістка і безперспективна, тому що в планах є перехід на єдину конфігурацію і базу ...

Створюємо профіль.
В консолі кластера створюємо профіль безпеки, в якому встановлюємо прапори "Може використовуватися як профіль безпеки безпечного режиму" і "в розділі" Дозволено повний доступ: " "До привілейованого режиму".

У багатьох випадках використання звітів і простих обробок даний метод буде застосуємо. Для більш складних ситуацій описувати процес немає сенсу, тому що він викладений в документації (можливість в налаштовувати профілі безпеки для конкретних зовнішніх файлів через вказівку його хеш-суми і т.п.).

P.S. Думав що профілі безпеки функціонують тільки при використанні ліцензій на платформу і сервер рівня КОРП, але даний функціонал відпрацьовує і на платформі 1С: Підприємство 8.3 (умовно можна назвати ПРОФ за аналогією з типовими конфігураціями Базова / ПРОФ / КОРП)

При запуску програми Завантаження документів під звичайним користувачем виникає помилка "Встановлено безпечний режим. Рятувальна операція заборонено".

Ця складність виникає тому для запуску зовнішньої обробки недостатньо прав. Для настройки прав доступу зайдіть в базу в режимі 1С Підприємство від імені адміністратораі перейдіть в розділ Налаштування користувачів і прав / Профілі груп доступу,натисніть Створити групу.

Введіть назву групи і відзначте галочками доступні користувачам цієї групи ролі -

  • Інтерактивне відкриття зовнішніх звітів і обробок
  • Використання додаткових звітів і обробок

натисніть Записати і закрити


Поверніться в меню Користувачі і виберіть зі списку співробітника, який буде працювати з програмою Завантаження документів. Натисніть Права доступу. У списку профілів відзначте створений раніше профіль. натисніть записати.


Щоб користувачі могли запустити обробку рекомендується додати Завантаження документів до списку зовнішніх обробок. Для цього в меню Адміністрування / Друковані форми і обробки / Додаткові звіти і обробки створіть нову обробку. Вкажіть шлях до файлу "ЗагрузкаДокументов.epf" і назвіть. Вкажіть розміщення обробки в меню, звідки користувач зможе запустити її в подальшому, наприклад виберіть меню Довідники

Натиснувши на пункт Швидкий доступ ви вказуєте, кому з користувачів доступна обробка:


Після настройки натисніть Записати і закрити. Для запуску обробки користувачам досить буде заново зайти в базу і відкрити її з меню доступу (в прикладі - Довідники) і натиснути виконати.


Відкрийте Меню - Всі функції ... і знайдіть в списку параметр "Використовуються профілі безпеки".


Досить зняти прапор з опції "Використовуються профілі безпеки".


Після цього програма буде запускатися успішно.

Програмне відкриття зовнішньої обробки здійснюється за допомогою об'єкта глобального контексту ВнешніеОбработкі, який має тип ВнешніеОбработкіМенеджер. Для кожного режиму роботи платформи 1С (режим звичайного застосування і режим керованого застосування) використовуються різні методи об'єкта для роботи з зовнішніми обробками.

Запуск зовнішньої обробки в режимі звичайного застосування

У звичайному додатку необхідно використовувати метод Створити () об'єкта ВнешніеОбработкі, в який передається повне ім'я файлу зовнішньої обробки. Метод повертає об'єкт типу ВнешняяОбработка, Цей об'єкт і є відкривається зовнішня обробка. Якщо потрібно відкрити форму зовнішньої обробки, то у отриманого об'єкта викликаємо метод ПолучітьФорму (), який поверне основну форму, а потім викликаємо метод Відкрити () для її відкриття.


Обробка \u003d ВнешніеОбработкі.Создать (ПолноеІмяФайла);
Обработка.ПолучітьФорму (). Відкрити ();

У зовнішніх обробках основною формою завжди повинна бути звичайна, а керована додаткової, інакше не буде працювати метод ПолучітьФорму () в режимі звичайному додатки.

Запуск зовнішньої обробки в режимі керованого застосування

У режимі керованих форм з'являється поділ алгоритму по контексту виконання. На клієнті отримуємо виконавчі дані по повному імені файлу зовнішньої обробки. Передаємо отримані двійкові дані на сервер і поміщаємо їх у тимчасове сховище. Далі необхідно викликати метод Підключити () об'єкта ВнешніеОбработкі, в який передається адреса на тимчасове сховище. Метод повертає ім'я підключеної зовнішньої обробки. Повертаємо ім'я зовнішньої обробки на клієнт, формуємо строковий шлях до форми обробки і за допомогою методу ОткритьФорму () відкриваємо форму зовнішньої обробки.

&На сервері
Функція ПолучітьІмяВнешнейОбработкі (ДвоічниеДанние)
АдресВоВременномХраніліще \u003d ПоместітьВоВременноеХраніліще (ДвоічниеДанние);
Повернення ВнешніеОбработкі.Подключіть (АдресВоВременномХраніліще);
КонецФункціі

& НаКліенте
ПолноеІмяФайла \u003d ""; // Повне ім'я файлу зовнішньої обробки.
ДанниеФайла \u003d Новий ДвоічниеДанние (ПолноеІмяФайла);
ІмяВнешнейОбработкі \u003d ПолучітьІмяВнешнейОбработкі (ДанниеФайла);
ОткритьФорму ( "ВнешняяОбработка." + ІмяВнешнейОбработкі + ".Форма");

Безпечний режим для зовнішніх обробок

Методи Створити () і Підключити () об'єкта ВнешніеОбработкі мають входить параметр БезопаснийРежім - ознака підключення зовнішньої обробки в безпечному режимі. Якщо параметр не вказано, підключення буде здійснено в безпечному режимі.
Безпечний режим роботи призначений для захисту системи від виконання на сервері «ненадійного» програмного коду. Потенційну небезпеку становлять зовнішні обробки або програмний код, що вводиться користувачем для використання в методах Виконати () і Обчислити ().
У безпечному режимі накладаються наступні обмеження:
  • привілейований режим скасовується, якщо він був встановлений;
  • спроби переходу в привілейований режим ігноруються;
  • заборонені операції з COM-об'єктами;
  • заборонена завантаження і підключення зовнішніх компонентів;
  • заборонений доступ до файлової системи (крім тимчасових файлів);
  • заборонений доступ до Інтернету.
Обробки, відкриті інтерактивно, виконуються не в безпечному режимі, тому рекомендується реалізація механізму відкриття зовнішніх обробок в безпечному режимі, а так само на рівні прав заблокувати надходження інтерактивне відкриття зовнішніх обробок.
Для заборони інтерактивного відкриття обробок, у всіх ролях, призначених користувачеві, необхідно зняти право "Інтерактивне відкриття зовнішніх обробок" (див. Малюнок 1).
Малюнок 1. Права інтерактивного відкриття зовнішніх обробок / звітів
Право "Інтерактивне відкриття зовнішніх обробок" ніяк не впливає на об'єкт ВнешніеОбработкі.

Програмне відкриття зовнішніх звітів, аналогічно зовнішнім обробкам, тільки слід використовувати об'єкт глобального контексту ВнешніеОтчети, який має тип ВнешніеОтчетиМенеджер.

На прикладі «Управління торгівлею 11.3» розглянемо простий процес підключення зовнішньої друкованої форми. Також розглянемо особливості нової системи безпеки.

швидкий перехід

попередні дії

Для початку слід включити функціонал або перевірити його доступність

1. Заходимо під повними правами в інформаційну базу.

2. Заходимо в меню «НДІ і адміністрування» / Блок «Адміністрування» / Команда «Друковані форми, звіти і обробки».

Додавання

У відкритому розділі:

Додаємо обробку по кнопці «Створити» (це важливо) або ж «Оновлюємо!» існуючу:

  • Виділити її в списку (якщо не виділено або порожньо, команда не спрацює, але нічого не скаже).
  • Натиснути кнопку «Завантажити з файлу».

Після появи для 1С у зовнішній обробки в нових конфігураціях з'явилися перевірки безпеки.

Слід встановлювати тільки обробки створені самостійно або отримані з відомих каналах зв'язку (не з пошти, тільки з сайту з чинним сертифікатом, або наданим працівниками розробника, підтвердженим їм по телефону).

Якщо в обробці все прописано розробником, то будуть встановлено «Розміщення» - об'єкти в яких обробка буде задіяна, з'явиться команда (и).
Для роботи досить буде натиснути «Зберегти і закрити».

Перевірка

Відразу після цього в залежності від виду обробки:

  • Друкована форма стає доступною при відкритті документа або з його списку (для вже відкритої при повторному відкритті) по кнопці «Друк».
  • Обробки доступні в розділах «Додаткові обробки» в кожній підсистемі
  • Обробки заповнення по кнопці «Заповнити» списку або головним командним панелі форми об'єкта.

Для вище зазначеної обробки запуск буде виглядати ось так:

Якщо документ новий, його слід записати, механізм зовнішніх обробок вас попередить про це:

Подальша поведінка залежить від закладеного функціоналу: можливе відкриття форми або ж проста обробка даних.

Попередження безпеки в 1С

У нових релізах платформи і конфігураціях посилився захист від запуску шкідливих програм.

В обробці може викликатися запуск Excel для завантаження, в цьому випадку нова підсистема безпеки також попередить вас:

При цьому код обробника переривається.

У разі, якщо ви натиснете «Так», то система попросить вас повторно викликати команду:

Для користувача інформаційної бази можливо відключити захист від небезпечних дій через «Конфігуратор»:

З режиму «Підприємство» змінити це не можна, можливо так зроблено спеціально, можливо з'явиться після оновлення.

Також слід звернути увагу, що якщо обробка використовує Excel, вона повинна запускати в небезпечному режимі (так було і до введення нової системи, це працює паралельно):

«Неможливо завантажити MS EXCEL !!!» «Встановлено безпечний режим. Рятувальна операція заборонено »

У зовнішніх обробках це виглядає ось так:

Розробнику слід у внутрішньому описі обробки встановити його в «Брехня», тоді все буде нормально:

Функція СведеніяОВнешнейОбработке () Експорт ПараметриРегістраціі \u003d Новий Структура; ПараметриРегістраціі.Вставіть ( "БезопаснийРежім", Брехня);

При оновленні конфігурації також з'явився застережливий текст про джерело, з якого був отриманий файл конфігурації:

Друк (Ctrl + P)

об'єкти конфігурації

У разі необхідності використання на сервері «ненадійного» програмного коду: зовнішні обробки або програмний код, що вводиться користувачем для використання в методах Виконати () і Обчислити (), можна скористатися безпечним режимом роботи.

У безпечному режимі:

  • привілейований режим скасовується.
  • Перехід в привілейований режим ігнорується.
  • заборонені операції, що призводять до використання зовнішніх коштів по відношенню до платформи «1С: Підприємство» (включаючи неблокірующіх аналоги зазначених методів):
  • Механізми COM:
    • COMОб'ект ();
    • ПолучітьCOMОб'ект ();
    • ОболочкаHTMLДокумента.ПолучітьCOMОб'ект ().
  • Завантаження зовнішніх компонентів:
    • ЗагрузітьВнешнююКомпоненту ();
    • ПодключітьВнешнююКомпоненту ().
  • Доступ до файлової системи:
    • ЗначеніеВФайл ();
    • КопіроватьФайл ();
    • Об'едінітьФайли ();
    • ПереместітьФайл ();
    • РазделітьФайл ();
    • СоздатьКаталог ();
    • УдалітьФайли ();
    • Новий Файл;
    • Новий xBase;
    • ЗапісьHTML.ОткритьФайл ();
    • ЧтеніеHTML.ОткритьФайл ();
    • ЧтеніеXML.ОткритьФайл ();
    • ЗапісьXML.ОткритьФайл ();
    • ЧтеніеFastInfoset.ОткритьФайл ();
    • ЗапісьFastInfoset.ОткритьФайл ();
    • КаноніческаяЗапісьXML.ОткритьФайл ();
    • ПреобразованіеXSL.ЗагрузітьІзФайла ();
    • ЗапісьZipФайла.Открить ();
    • ЧтеніеZipФайла.Открить ();
    • Новий ЧтеніеТекста (), якщо перший параметр - рядок;
    • ЧтеніеТекста.Открить (), якщо перший параметр - рядок;
    • Новий ЗапісьТекста (), якщо перший параметр - рядок;
    • ЗапісьТекста.Открить (), якщо перший параметр - рядок;
    • Новий ІзвлеченіеТекста ();
    • зміна властивості ІзвлеченіеТекста.ІмяФайла;
    • ІзвлеченіеТекста.Запісать ();
    • Новий Картинка (), якщо перший параметр - рядок;
    • Картінка.Запісать ();
    • Новий ДвоічниеДанние ();
    • ДвоічниеДанние.Запісать ();
    • Новий ЗапісьДанних (), якщо перший параметр - рядок;
    • Новий ЧтеніеДанних (), є перший параметр - рядок;
    • всі методи об'єкта МенеджерФайловихПотоков;
    • Новий ФайловийПоток ();
    • ФорматірованнийДокумент.Запісать ();
    • ГеографіческаяСхема.Прочітать ();
    • ГеографіческаяСхема.Запісать ();
    • ГеографіческаяСхема.Напечатать ();
    • ТаблічнийДокумент.Прочітать ();
    • ТаблічнийДокумент.Запісать ();
    • ТаблічнийДокумент.Напечатать (); ГрафіческаяСхема.Прочітать ();
    • ГрафіческаяСхема.Запісать ();
    • ГрафіческаяСхема.Напечатать ();
    • ТекстовийДокумент.Прочітать ();
    • ТекстовийДокумент.Запісать ().
  • Доступ до Інтернету:
    • Новий ІнтернетСоедіненіе,
    • Новий ІнтернетПочта,
    • Новий ІнтернетПроксі,
    • Новий HTTPСоедіненіе,
    • Новий FTPСоедіненіе.

УВАГА! При виконанні заборонених операцій під час виконання генерує виняток.

Примітка. Зовнішні звіти та обробки, що відкриваються за допомогою меню Файл - Відкрити, виконуються в безпечному режимі, якщо у користувача відсутні адміністративні права доступу.

Кількість включень безпечного режиму має збігатися з кількістю виключень. Однак якщо всередині процедури або функції відбувалося включення безпечного режиму (один раз або більше), але не відбувалося його виключення, то система автоматично виконає вимикання стільки раз, скільки незавершених включень було в залишаємо процедурі або функції.

Якщо в процедурі або функції викликів методу УстановітьБезопаснийРежім (Брехня) зроблено більше, ніж викликів методу УстановітьБезопаснийРежім (Істина), То буде викликано виключення.

Програмна установка безпечного режиму може знадобитися в тому випадку, коли розробник конфігурації передбачає використання стороннього (по відношенню до конфігурації) програмного коду, надійність якого розробник гарантувати не може. Прикладом такого коду є виконання методів Виконати () і Обчислити () в тих випадках, коли виконуваний код виходить із зовнішнього світу. В цьому випадку хорошою практикою буде установка безпечного режиму до виконання цих методів:

// Формується програмний код, який слід виконати // Можливо, що код завантажується з зовнішніх джерел // або введений вручну ІсполняемийКод \u003d ПолучітьВиполняемийКодІзВнешнегоМіра (); // Включимо безпечний режим УстановітьБезопаснийРежім (Істина); // Виконаємо потенційно небезпечний код Виконати (ІсполняемийКод); // Вимкнемо безпечний режим УстановітьБезопаснийРежім (Брехня);

У деяких випадках налаштування безпечного режиму можуть конфліктувати з настройками привілейованого режиму. Прикладом такого конфлікту виступає проведення документа, для якого встановлено властивість Привілейований режим при проведенні, з коду на вбудованій мові, який виконується в безпечному режимі. В цьому випадку привілейований режим відключається, а спроби його включити ігноруються. В результаті код на вбудованій мові, який «розраховує» на включений привілейований режим, «стикається» з його відсутністю, що призводить до виникнення помилок з неочевидними причинами появи. Для запобігання такій ситуації, система «1С: Підприємство» автоматично відключає безпечний режим для обробників подій, які доступні в модулі об'єкта або модулі менеджера, за умови, що виконуваний код на вбудованому мові не розташовується в розширенні конфігурації. Такі обробники відзначаються в синтаксис-помічника особливим чином.

Також надається можливість відключити безпечний режим з вбудованої мови (якщо програмний код, з якого виконується спроба відключення, чи не знаходиться в розширенні конфігурації). Для відключення безпечного режиму призначений метод УстановітьОтключеніеБезопасногоРежіма (). Перевірити, що безпечний режим в даний момент відключений (автоматично або за допомогою виклику методу), можна за допомогою методу ПолучітьОтключеніеБезопасногоРежіма ().

В рамках одного методу на вбудованій мові не може бути більше одного рівня вкладеності установки безпечного режиму (викликом методу УстановітьБезопаснийРежім ()) і установки відключення безпечного режиму (автоматично на час виконання обробників подій об'єктів метаданих або викликом методу УстановітьОтключеніеБезопасногоРежіма ()). При спробі збільшити вкладеність генерується виняток:

// Коректне використання Процедура ІмяПроцедури () УстановітьОтключеніеБезопасногоРежіма (Істина); УстановітьБезопаснийРежім (Істина); УстановітьБезопаснийРежім (Брехня); УстановітьОтключеніеБезопасногоРежіма (Брехня); КонецПроцедури // Неправильне використання Процедура ІмяПроцедури () УстановітьОтключеніеБезопасногоРежіма (Істина); УстановітьБезопаснийРежім (Істина); УстановітьОтключеніеБезопасногоРежіма (Брехня); // Виняток КонецПроцедури Процедура ІмяПроцедури () УстановітьБезопаснийРежім (Істина); УстановітьОтключеніеБезопасногоРежіма (Брехня); // Виняток КонецПроцедури