Почему пропадают пользователи и слетают роли в 1С:ERP после обновления?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

В практике сопровождения решений на платформе 1С (в частности, 1С:ERP Управление предприятием 2, КА 2, УТ 11) администраторы и программисты нередко сталкиваются с двумя взаимосвязанными аномалиями: периодическим сбросом назначенных ролей у сотрудников и внезапным исчезновением практически всех пользователей информационной базы после штатной реструктуризации метаданных. Проанализируем природу обеих проблем и разберем по шагам действенные методы восстановления доступа.

Причина 1: Сброс ролей регламентными процедурами БСП

Выясним причину, по которой у учетных записей произвольно исчезают права. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), администрирование прав кардинально отличается от классического подхода платформы 1С:Предприятие 8.2.

Состав ролей каждого объекта ПользовательИнформационнойБазы рассчитывается динамически. Он формируется программными алгоритмами БСП исключительно на основе элементов справочников Группы доступа и Профили групп доступа в режиме «1С:Предприятие».

Если системный администратор открывает конфигуратор и вручную проставляет флажки ролей проблемному сотруднику, система расценивает это как расхождение с прикладной моделью безопасности. Очистка или сброс ролей до актуального состояния профилей гарантированно происходит в следующих случаях:

  1. При срабатывании регламентного задания обновления прав доступа или фоновой синхронизации пользователей.
  2. При интерактивной записи элемента в справочнике Пользователи или ГруппыДоступа.
  3. При запуске обработчиков обновления информационной базы после изменения метаданных.

Если в режиме «1С:Предприятие» за пользователем не была закреплена корректная группа доступа, БСП при очередной фоновой проверке полностью очистит коллекцию ПользовательИнформационнойБазы.Роли.

Причина 2: Сбой реструктуризации и ошибка платформы

Вторая проблема — исчезновение учетных записей после применения изменений в конфигураторе (когда остается только один последний заведенный пользователь или пользователь без административных прав). Физически перечень пользователей платформы хранится в служебной таблице v8users, а также в бинарном блоке users.usr внутри таблицы параметров PARAMS (в файловом варианте — во внутренних таблицах файла базы данных).

В некоторых релизах платформы (в частности, ветки 8.3.5–8.3.7) присутствовала зарегистрированная ошибка: во время обновления конфигурации базы данных с реструктуризацией таблиц (даже при добавлении единственного реквизита) файл users.usr повреждался или перезаписывался, оставляя в системе лишь сеанс текущего пользователя или запись, добавленную последней.

Способ 1: Восстановление полного доступа через СУБД

Если в результате сбоя в базе остался единственный пользователь без административных прав и вход в конфигуратор заблокирован, восстановим административный доступ на уровне СУБД (MS SQL Server или PostgreSQL). Разберем действия по шагам:

  1. Обязательно создаем полную резервную копию базы данных средствами СУБД.
  2. Останавливаем службу сервера «1С:Предприятия», чтобы разорвать все активные соединения и очистить кэш.
  3. С помощью SQL-запроса временно очищаем служебную таблицу пользователей v8users: TRUNCATE TABLE v8users;
  4. Удаляем бинарную запись с описанием пользователей из таблицы параметров PARAMS: DELETE FROM PARAMS WHERE FileName = 'users.usr';
  5. Запускаем службу сервера «1С:Предприятия» и входим в базу через конфигуратор без авторизации. База откроется с полными административными правами, после чего можно приступать к штатной настройке пользователей.

Способ 2: Замена служебных таблиц из резервной копии

Если имеется свежая резервная копия базы (например, сделанная перед обновлением), восстанавливать весь объем данных не требуется. Достаточно перенести таблицы пользователей на уровне SQL-сервера:

  1. Разворачиваем бэкап базы рядом на том же SQL-сервере.
  2. Очищаем таблицы v8users и запись users.usr в рабочей базе, как описано в первом способе.
  3. Копируем содержимое таблицы v8users из копии в рабочую базу командой INSERT INTO ... SELECT ....
  4. Аналогично переносим строку users.usr из таблицы PARAMS архивной базы в рабочую.

После перезапуска кластера 1С список пользователей полностью восстановится до состояния, зафиксированного в архивной копии.

Способ 3: Программное пересоздание пользователей с сохранением связей

Когда таблица пользователей платформы очищена, прикладные данные в справочнике Пользователи режима «1С:Предприятие» остаются нетронутыми. В них сохранены настройки отчетов, привязка к документам и членство в группах доступа. Каждый элемент справочника связан с учетной записью платформы через реквизит ИдентификаторПользователяИБ.

Посмотрим на пример внешней обработки, которая позволяет восстановить пользователей платформы без потери настроек и истории:


Выборка = Справочники.Пользователи.Выбрать();
Пока Выборка.Следующий() Цикл
    Если ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) Тогда
        // Проверяем, существует ли пользователь в платформе
        ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ);
        Если ПользовательИБ = Неопределено Тогда
            // Создаем учетную запись с сохраненным идентификатором
            НовыйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
            НовыйПользовательИБ = НовыйПользовательИБ;
            НовыйПользовательИБ.Имя = СокрЛП(Выборка.Наименование);
            НовыйПользовательИБ.ПолноеИмя = СокрЛП(Выборка.Наименование);
            НовыйПользовательИБ.АутентификацияСтандартная = Истина;
            НовыйПользовательИБ.Записать();
            
            // Связываем элемент справочника с созданным пользователем
            ОбъектПользователь = Выборка.ПолучитьОбъект();
            ОбъектПользователь.ИдентификаторПользователяИБ = НовыйПользовательИБ.УникальныйИдентификатор;
            ОбъектПользователь.Записать();
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

После программного создания учетных записей достаточно запустить регламентные задания БСП по обновлению прав доступа — подсистема автоматически сопоставит пользователей с группами доступа и назначит им требуемый набор ролей.

Рекомендации по предотвращению сбоев

  1. Обновление платформы: Рекомендуется перейти с устаревших версий ветки 8.3.6 на стабильные актуальные релизы платформы 1С, где ошибки реструктуризации таблицы users.usr устранены разработчиками.
  2. Запрет настройки ролей в конфигураторе: В типовых решениях на БСП категорически запрещено вручную редактировать состав ролей учетных записей через конфигуратор. Все полномочия должны настраиваться исключительно через Профили групп доступа и Группы доступа в режиме «1С:Предприятие».
  3. Контроль фоновых заданий: Перед выполнением реструктуризации и сохранением конфигурации базы данных необходимо завершать все активные фоновые задания и сеансы пользователей.
← На главную