Приветствуем, коллеги! При обновлении типовых конфигураций семейства «1С:Предприятие 8», построенных на базе Библиотеки стандартных подсистем (БСП), разработчики и системные администраторы часто сталкиваются с крайне неприятной системной ошибкой. Проблема блокирует обновление информационной базы и переводит систему в аварийный режим. Особенно часто этот сбой проявляется при обновлении конфигурации «1С:Управление нашей фирмой» (УНФ).
В этой статье мы подробно проанализируем причины возникновения данной ошибки, разберем архитектурные изменения в разграничении прав доступа современных версий БСП и предложим четкий, пошаговый алгоритм решения проблемы без внесения избыточных изменений в программный код.
Обычно ситуация развивается по следующему сценарию. При запуске обновления конфигурации базы данных (или при первом запуске предприятия после применения нового релиза в Конфигураторе) система выдает ошибку следующего вида:
{Константа.ПараметрыРаботыПользователей.МодульМенеджераЗначения(186)}: Ошибка в процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый.
При проверке ролей для пользователей найдены ошибки:
Роль "Полные права" содержит недоступное право Администрирование.
Роль "Полные права" содержит недоступное право АдминистрированиеРасширенийКонфигурации.
Роль "Полные права" содержит недоступное право ОбновлениеКонфигурацииБазыДанных.
ВызватьИсключение ЗаголовокОшибки + ТекстОшибки;
Попытка исправить ситуацию «в лоб» — зайдя в Конфигуратор и сняв указанные галочки системного администрирования у роли ПолныеПрава — приводит ко второму, еще более тупиковому сообщению об ошибке при записи пользователя или применении изменений:
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(4116)}: Ошибка при вызове метода контекста (Записать)
ГруппаДоступаОбъект.Записать();
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
{ОбщийМодуль.ПользователиСлужебный.Модуль(691)}: Ошибка при вызове метода контекста (Записать)
ПользовательИБ.Записать();
по причине:
После исполнения в списке не осталось бы ни одного пользователя с административными правами!
Давайте разберемся, почему возникают эти ошибки и как работает этот механизм изнутри.
Чтобы понять, почему платформа ведет себя подобным образом, проанализируем логику разграничения прав в современных версиях БСП. Ранее в старых редакциях конфигураций роль ПолныеПрава объединяла в себе абсолютно все полномочия: как прикладные (доступ к справочникам, проведение документов, просмотр отчетов), так и системные (администрирование базы данных, создание пользователей, управление расширениями и обновление конфигурации).
В современных релизах концепция безопасности была кардинально переработана:
ПолныеПрава теперь отвечает исключительно за полный доступ к бизнес-данным (прикладным объектам). Она больше не должна давать возможность управлять самой платформой и структурой базы данных. Это сделано в том числе для поддержки работы в модели сервиса (SaaS / 1С:Fresh), где администрированием инфраструктуры занимается провайдер, а пользователи внутри базы обладают лишь прикладными правами.АдминистраторСистемы.Когда мы обновляем конфигурацию УНФ, процедура ПриОпределенииНазначенияРолей в общем модуле ПользователиПереопределяемый проверяет метаданные ролей на соответствие новым стандартам безопасности. Если в роли ПолныеПрава (которая может быть изменена вручную или заблокирована в кастомизированной конфигурации) остаются включенными права Администрирование, АдминистрированиеРасширенийКонфигурации или ОбновлениеКонфигурацииБазыДанных, система аварийно завершает работу.
При этом, когда мы пытаемся просто отключить эти права у роли в Конфигураторе, срабатывает защитный триггер самой платформы «1С». Дело в том, что у текущего пользователя ИБ в списке ролей назначена только роль ПолныеПрава. Снимая административные галки с этой роли, мы фактически лишаем единственного активного пользователя прав на администрирование системы. Платформа блокирует эту запись транзакции, выдавая ошибку: «После исполнения в списке не осталось бы ни одного пользователя с административными правами!».
Для исправления сложившейся ситуации нам не потребуется прибегать к программированию или изменению типового кода БСП. Решение кроется в правильной последовательности действий в Конфигураторе и режиме Предприятия.
Первым делом нам необходимо предоставить нашему пользователю явную системную роль, чтобы платформа позволила нам изменить роль ПолныеПрава.
АдминистраторСистемы) и установите напротив нее флажок. При этом флажок напротив роли Полные права также должен оставаться активным.Теперь, когда у нашего пользователя есть независимая системная роль администратора, мы можем безопасно убрать лишние права из прикладной роли.
Если конфигурация находится на поддержке с возможностью изменения, выполните следующие действия:
ПолныеПрава) и откройте ее свойства.АдминистрированиеАдминистрирование расширений конфигурацииОбновление конфигурации базы данныхЕсли ваша конфигурация полностью типовая, данные роли должны обновиться автоматически при накатывании файла обновления (CF/CFU). Проблема с зависанием ролей в данном случае чаще всего указывает на то, что конфигурация ранее была снята с поддержки или изменения ролей были заблокированы локально.
Обратите особое внимание на версию используемой платформы 1С. В обсуждении на форуме упоминается версия платформы 8.3.8.2322. Новые релизы УНФ и БСП критически зависимы от функционала платформы. Использование устаревших версий (ниже рекомендуемых для конкретного релиза УНФ, например, ниже 8.3.15 или 8.3.20) гарантированно приводит к сбоям при обновлении служебных данных и справочников БСП.
Перед запуском обновления обязательно скачайте и установите актуальный релиз платформы, соответствующий требованиям вашей новой версии УНФ.
После того как права распределены корректно, а конфигурация базы данных успешно обновлена в Конфигураторе, нам необходимо завершить процедуру обновления данных на уровне Предприятия. Для этого запустим базу в режиме отладки или через командную строку со специальным ключом:
"C:\Program Files\1cv8\8.3.XX.XX\bin\1cv8.exe" ENTERPRISE /F "ПутьКВашейБазе" /C ЗапуститьОбновлениеИнформационнойБазы
Этот параметр заставит систему принудительно запустить фоновые процедуры обновления метаданных БСП, пересчитать справочник ИдентификаторыОбъектовМетаданных и корректно инициализировать новые группы доступа без вылета в критические ошибки.
Если после выполнения всех шагов система продолжает выдавать старую ошибку, это свидетельствует о застревании старых метаданных в локальном кэше платформы. Очистите кэш вручную, удалив базу из списка запуска 1С и добавив ее заново, либо воспользовавшись специализированными утилитами или очисткой каталогов %userprofile%\AppData\Local\1C\1cv8 и %userprofile%\AppData\Roaming\1C\1cv8.
Соблюдение этих простых правил разделения ролей позволит вам быстро и безболезненно обновлять любые современные конфигурации на платформе «1С:Предприятие 8.3».