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