Проанализируем ситуацию, с которой часто сталкиваются системные администраторы и программисты при работе с 1С:ERP. Пользователь пытается запустить внешнюю обработку (например, для массового поиска и замены значений) через стандартное меню «Файл — Открыть», но вместо запуска получает системное предупреждение: «Нарушение прав доступа». Разберем по шагам причины такого поведения платформы и настроим корректные права.
В современных конфигурациях, созданных на базе Библиотеки стандартных подсистем (БСП), недостаточно просто поставить галочку напротив роли в Конфигураторе. Доступ строго регламентируется через систему профилей групп доступа.
Рассмотрим подробнее необходимые роли:
ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.ИспользованиеДополнительныхОтчетовИОбработок.Создадим или дополним профиль групп доступа в режиме «1С:Предприятие», включив туда указанные роли, и привяжем этот профиль к учетной записи пользователя.
Выясним причину, по которой даже после выдачи необходимых ролей ошибка «Нарушение прав доступа» может сохраняться. Платформа 1С:Предприятие активно кэширует сеансовые данные и права доступа к метаданным на стороне сервера.
Выполним следующие шаги для гарантированного применения новых настроек безопасности:
/ClearCache.Проанализируем дополнительные механизмы безопасности, встроенные в платформу 1С. Снятие галочки «Защита от опасных действий» в карточке пользователя — это лишь базовый уровень обхода ограничений.
Если внешняя обработка запускается в «Безопасном режиме», система автоматически заблокирует вызовы к файловой системе на сервере, попытки COM-соединений и использование привилегированных методов. В случае, если вы доверяете коду обработки, зарегистрируйте её в справочнике Дополнительные отчеты и обработки и снимите флаг безопасного режима при регистрации.
Разберем исходную бизнес-задачу. Чаще всего внешние обработки вроде «Поиска и замены» используются для того, чтобы массово очистить или поменять значения реквизитов в документах. В 1С:ERP для этого существует мощный штатный механизм.
Посмотрим на пример использования типовой обработки. Зайдем в меню: Администрирование — Обслуживание — Корректировка данных и откроем обработку ГрупповоеИзменениеРеквизитов.
Если стандартного функционала не хватает, всегда можно воспользоваться консолью запросов с выполнением кода. Посмотрим на пример кода, который позволит программно обнулить реквизит и записать документ без проверок:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ВашДокумент ГДЕ Дата >= &НачалоПериода";
// Установка параметров запроса
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
// Обнуляем нужный реквизит
ДокументОбъект.Ответственный = Справочники.Пользователи.ПустаяСсылка();
// Включаем загрузку для обхода проверок
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Использование свойства Загрузка у объекта ОбменДанными гарантирует, что при сохранении не будут срабатывать обработчики проведения и дополнительные проверки, что существенно ускорит процесс корректировки информационной базы.