Как исправить ошибку «Пользователь не обнаружен в справочнике пользователей» при запуске новой пустой базы 1С?

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

При разработке и внедрении решений на платформе 1С часто возникает задача развертывания совершенно новой, чистой информационной базы из имеющегося файла нетиповой конфигурации (.cf). Однако при первой попытке войти в режим «1С:Предприятие» система может выдать критическую ошибку: «Пользователь ... не был найден в справочнике пользователей. Возникла ошибка при добавлении пользователя в справочник» и аварийно завершить сеанс.

Разберем детально, почему возникает эта ошибка, как быстро локализовать сбойный участок кода с помощью средств платформы и какие существуют корректные варианты устранения проблемы.

Причины возникновения ошибки при первом входе в пустую базу

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


Попытка
    ОбъектПользователь.Записать();
Исключение
    ВызватьИсключение "Пользователь : " + ИмяПользователя + " не был найден в справочнике пользователей. Возникла ошибка при добавлении пользователя в справочник.
    |" + ОписаниеОшибки();
КонецПопытки;

Сбой вызова метода Записать() в пустой базе обычно происходит по следующим причинам:

  1. Проверка заполнения новых реквизитов: если разработчики добавили в справочник Пользователи новые реквизиты и установили для них свойство Проверка заполнения: Выдавать ошибку (или Запрет незаполненных значений), стандартный алгоритм инициализации пытается записать элемент без этих реквизитов, что вызывает исключение.
  2. Срабатывание прикладной логики в событиях объекта: в модуле объекта справочника ПередЗаписью, ПриЗаписи или в объектах метаданных типа ПодпискаНаСобытие могут выполняться проверки настроек, констант или групп, которые в чистой базе еще не заполнены.
  3. Ограничения прав доступа (RLS): если сеанс запускается без полных административных прав или до полной инициализации параметров сеанса, механизм RLS платформы блокирует прямую запись объекта.
  4. Длина реквизитов: при доменной аутентификации имя пользователя Windows может превышать допустимую длину реквизита Код или Наименование.

Шаг 1. Локализация места ошибки через Конфигуратор

Выясним, в каком именно модуле и на какой строке происходит аварийное завершение. Для этого выполним следующие действия:

  1. Откроем базу в режиме Конфигуратор.
  2. В главном меню перейдем в Отладка > Остановка по ошибке и включим признак Останавливаться по ошибке.
  3. Запустим режим «1С:Предприятие» в режиме отладки клавишей F5. При возникновении исключения платформа автоматически откроет нужный модуль и укажет на строку с методом Записать().
  4. Если исключение перехватывается блоком Попытка ... Исключение, воспользуемся инструментом Правка > Глобальный поиск (сочетание клавиш Ctrl + Shift + F) и найдем текст ошибки: не был найден в справочнике пользователей.

Шаг 2. Корректные способы исправления ошибки

Рассмотрим несколько вариантов решения проблемы — от быстрого временного обхода до правильной программной адаптации конфигурации.

Вариант 1. Использование режима загрузки данных при записи (Рекомендуемый)

Чтобы запись базового системного пользователя происходила без проверок обязательных реквизитов и без срабатывания блокирующих подписок на события, применим свойство ОбменДанными.Загрузка. Найдем блок создания объекта пользователя и дополним его перед вызовом метода записи:


ОбъектПользователь = Справочники.Пользователи.СоздатьЭлемент();
ОбъектПользователь.Наименование = ИмяПользователя;
ОбъектПользователь.Код = ИмяПользователя;

// Отключаем проверки метаданных и прикладные обработчики событий
ОбъектПользователь.ОбменДанными.Загрузка = Истина;

Попытка
    ОбъектПользователь.Записать();
Исключение
    ЗаписьЖурналаРегистрации("ИнициализацияПользователя", 
        УровеньЖурналаРегистрации.Ошибка, , , 
        "Не удалось записать пользователя: " + ОписаниеОшибки());
    ВызватьИсключение "Ошибка инициализации базового пользователя: " + ОписаниеОшибки();
КонецПопытки;

Установка свойства ОбменДанными.Загрузка = Истина сообщает платформе 1С, что запись производится в режиме обмена, благодаря чему встроенные проверки заполнения реквизитов и логика подписок на события пропускаются.

Вариант 2. Включение привилегированного режима

Если запись блокируется ограничениями на уровне записей (RLS), гарантируем доступ установкой привилегированного режима перед выполнением записи:


УстановитьПривилегированныйРежим(Истина);
Попытка
    ОбъектПользователь.ОбменДанными.Загрузка = Истина;
    ОбъектПользователь.Записать();
Исключение
    УстановитьПривилегированныйРежим(Ложь);
    ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);

Вариант 3. Исправление метаданных справочника

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

  1. Развернем дерево метаданных в Конфигураторе и найдем Справочники > Пользователи.
  2. Проверим добавленные разработчиками реквизиты.
  3. В палитре свойств для реквизитов изменим свойство Проверка заполнения со значения Выдавать ошибку на Не проверять.
  4. Контроль заполнения обязательных полей перенесем в форму элемента справочника (событие ПередЗаписьюНаСервере или ПриПроверкеЗаполненияНаСервере), чтобы программная инициализация системных пользователей в фоновом режиме проходила успешно.

Вариант 4. Создание базы через выгрузку (.dt) вместо конфигурации (.cf)

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

  1. Создадим типовую пустую базу или выполним первичную настройку в тестовой среде.
  2. Корректно заведем первого администратора системы через интерфейс предприятия.
  3. Выполним выгрузку информационной базы в файл .dt (Администрирование > Выгрузить информационную базу...).
  4. Используем полученный файл выгрузки как готовый шаблон для создания новых баз.
← На главную