Почему не отображаются сотрудники в ЗУП 3.1 после переноса справочника и как это исправить?

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

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

Разбор архитектуры динамического списка сотрудников

В отличие от более простых конфигураций, в ЗУП 3.1 форма списка справочника Сотрудники использует сложный динамический запрос. Система не просто считывает данные из таблицы справочника, а выполняет левое соединение (ЛЕВОЕ СОЕДИНЕНИЕ) с несколькими служебными регистрами. Если в этих регистрах отсутствуют соответствующие записи, сотрудник просто отфильтровывается программным кодом или условиями запроса динамического списка.

Проанализируем основные регистры, которые влияют на видимость:

  1. ДанныеДляПодбораСотрудников — основной регистр, на котором строится большинство форм подбора и списков.
  2. ТекущиеКадровыеДанныеСотрудников — хранит срез последних данных о позиции, подразделении и состоянии сотрудника.
  3. Состояния сотрудников — определяет, является ли сотрудник работающим, находится ли в отпуске или уволен.

Разберем основные сценарии решения проблемы.

Решение 1: Перенос кадровых документов

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

Если ваша задача позволяет перенести документы, обязательно сделайте это. Как только в базе появится документ приема с установленной датой, механизмы ЗУП 3.1 автоматически создадут записи в регистрах ДанныеДляПодбораСотрудников и ТекущиеКадровыеДанныеСотрудников, после чего сотрудники мгновенно появятся в общем списке.

Решение 2: Программное заполнение регистров (без документов)

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

Для активации видимости сотрудников выполним следующий код:


// Метод 1: Заполнение данных для подбора
КадровыйУчетРасширенный.ЗаполнитьДанныеДляПодбораСотрудников();

// Метод 2: Более универсальный метод актуализации
КадровыйУчет.АктуализироватьДанныеОСотрудниках();

Разберем подробнее, что делают эти методы. Процедура ЗаполнитьДанныеДляПодбораСотрудников анализирует текущее состояние справочника и документов (если они есть) и формирует записи в регистре ДанныеДляПодбораСотрудников. Метод АктуализироватьДанныеОСотрудниках является более комплексным, так как он затрагивает более широкий спектр регистров, отвечающих за интерфейсную логику.

Решение 3: Проверка признака архивности и фильтров

Иногда причина скрыта в простых настройках или некорректных значениях реквизитов. Проанализируем ситуацию, когда данные в регистрах есть, но список все равно пуст. Посмотрим на реквизит ВАрхиве справочника Сотрудники.

При использовании универсальных обработок обмена данными (например, через XML) реквизит ВАрхиве может заполниться значением Истина по умолчанию или из-за ошибок в правилах обмена. В форме списка сотрудников по умолчанию всегда включен скрытый фильтр «Скрывать архивных сотрудников». Чтобы исправить это, воспользуемся стандартной обработкой «Групповое изменение реквизитов»:

  1. Выберем объект «Сотрудники».
  2. Найдем реквизит В архиве.
  3. Установим его в значение Ложь.

Решение 4: Регламентные задания

В конфигурации ЗУП 3.1 существует специальное регламентное задание Обновление данных о сотрудниках. Оно отвечает за фоновое поддержание актуальности служебных таблиц. После массовой загрузки данных вручную (через обработки) рекомендуется запустить это задание принудительно через консоль регламентных заданий или раздел «Обслуживание».

Это позволит системе в фоновом режиме «дозаполнить» те данные, которые могли быть упущены при прямой загрузке в таблицы справочника. Рассмотрим алгоритм действий:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Откроем Регламентные и фоновые задания.
  3. Найдем в списке Обновление данных о сотрудниках.
  4. Нажмем кнопку Выполнить сейчас.

Решение 5: Проверка связи с физическими лицами

Выясним еще одну важную деталь: связь между справочниками Сотрудники и ФизическиеЛица. В ЗУП 3.1 поле ФизЛицо в справочнике сотрудников является критически важным. Если при переносе GUID-ы (уникальные идентификаторы) физических лиц в новой базе изменились, а ссылки в справочнике сотрудников остались «битыми» (объект не найден), сотрудники не будут отображаться корректно.

Убедитесь, что для каждого элемента справочника Сотрудники заполнено соответствующее ФизЛицо. Проверить это можно простым запросом:


ВЫБРАТЬ
    Сотрудники.Ссылка,
    Сотрудники.ФизЛицо
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ГДЕ
    Сотрудники.ФизЛицо ЕСТЬ NULL
    ИЛИ Сотрудники.ФизЛицо.Ссылка ЕСТЬ NULL

Если запрос возвращает строки, значит, связь нарушена и ее необходимо восстановить программно или через поиск и замену дублей.

Итоги

Для успешного отображения сотрудников после загрузки из другой базы необходимо обеспечить выполнение условий «видимости» в динамическом списке. Мы рекомендуем после загрузки справочника вызвать метод КадровыйУчет.АктуализироватьДанныеОСотрудниках() и убедиться, что сотрудники не помечены как архивные. Это наиболее быстрый и надежный способ привести интерфейс программы в рабочее состояние без необходимости ввода лишних документов.

← На главную