Почему в справочнике Пользователи 1С видны не все элементы и как это исправить?

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

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

Анализ запроса динамического списка справочника

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


ВЫБРАТЬ
    Пользователи.Ссылка,
    Пользователи.Подготовлен,
    Пользователи.ПометкаУдаления,
    Пользователи.Недействителен,
    Пользователи.Наименование,
    Пользователи.Служебный,
    Пользователи.Комментарий,
    ВЫБОР
        КОГДА Пользователи.ПометкаУдаления
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК НомерКартинки
ИЗ
    Справочник.Пользователи КАК Пользователи
ГДЕ
    (&ВыбиратьИерархически
            И ИСТИНА В
                (ВЫБРАТЬ
                    ИСТИНА
                ИЗ
                    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ГДЕ
                    СоставыГруппПользователей.Пользователь = Пользователи.Ссылка
                    И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей)
        ИЛИ НЕ &ВыбиратьИерархически
            И ИСТИНА В
                (ВЫБРАТЬ
                    ИСТИНА
                ИЗ
                    Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав
                ГДЕ
                    ГруппыПользователейСостав.Пользователь = Пользователи.Ссылка
                    И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей))

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

Архитектурная причина сбоя

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

Объект.ОбменДанными.Загрузка = Истина;

При таком режиме запись происходит в обход проверок, подписок на события и встроенной бизнес-логики модулей объектов БСП. Элементы справочника Пользователи создаются в таблице базы данных, но записи в служебном регистре СоставыГруппПользователей не формируются. В итоге список пользователей в интерфейсе пуст или неполон.

Способ 1. Программное обновление составов групп БСП

Если пользователей в базе много, ручное исправление не подходит. Рассмотрим наиболее правильный и системный путь решения проблемы — вызов встроенных методов библиотеки стандартных подсистем. Для этого во внешней обработке или в обработке «Групповое изменение реквизитов» на вкладке выполнения произвольного алгоритма выполним следующую команду:


ПользователиСлужебный.ОбновитьСоставыГруппПользователей(Справочники.ГруппыПользователей.ВсеПользователи);

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

Способ 2. Интерактивная перезапись элементов

Разберем самый простой вариант для небольшого количества потерянных учетных записей. Достаточно открыть карточку нужного пользователя и повторно записать её в режиме «1С:Предприятие»:

  1. Находим ссылку на пользователя с помощью отчета, универсальной консоли запросов или обработки поиска ссылок.
  2. Открываем форму элемента через встроенную навигацию или навигационную ссылку.
  3. Нажимаем кнопку «Записать и закрыть».

В момент интерактивной записи параметр ОбменДанными.Загрузка равен Ложь. Срабатывает весь типовой механизм БСП: система автоматически добавляет пользователя в группу Все пользователи, формирует записи в регистре сведений, и элемент становится видимым в динамическом списке.

Способ 3. Пакетная перезапись через групповое изменение реквизитов

Если доступ к написанию программного кода закрыт, воспользуемся штатным функционалом администрирования:

  1. Переходим в раздел «Администрирование» — «Обслуживание» — «Корректировка данных» и открываем обработку «Групповое изменение реквизитов».
  2. Выбираем объект изменения: Пользователи.
  3. Устанавливаем отбор по всем элементам справочника, которые не отображаются в списке.
  4. В дополнительных параметрах убеждаемся, что снят флаг выполнения загрузки данных в специальном режиме (запись должна проходить по стандартным алгоритмам).
  5. Нажимаем кнопку «Изменить реквизиты» (можно не менять сами значения, достаточно переписать комментарий или просто нажать выполнение). При записи каждого элемента штатные обработчики БСП создадут недостающие служебные данные.

Дополнительные факторы, скрывающие пользователей

Если после обновления регистров пользователи все еще не видны, проверим сопутствующие механизмы:

  1. Реквизит «Служебный»: в коде формы списка часто жестко прописан отбор по служебным учетным записям. Если при переносе реквизит Служебный получил значение Истина, такой элемент скрывается из общего интерфейса, так как предназначен только для регламентных задач или внешних интеграций.
  2. Реквизит «Подготовлен»: если в конфигурации задействован механизм согласования учетных записей, пользователи со статусом Подготовлен = Истина не отображаются в основном рабочем списке до момента их утверждения администратором.
  3. Связка со списком пользователей информационной базы: реквизит ИдентификаторПользователяИБ связывает элемент справочника с реальным пользователем платформы. Если он заполнен нулями (00000000-0000-0000-0000-000000000000), значит, элемент перенесен только как объект базы данных, но учетной записи для входа в 1С еще нет. При объединении дублей обязательно проверяем и перепривязываем корректный идентификатор.
  4. Ограничения доступа на уровне записей (RLS): если включен RLS по группам доступа, а новому пользователю не назначена ни одна группа, динамический список может скрывать пользователя из-за нехватки прав текущей учетной записи администратора на просмотр непривязанных объектов.
← На главную