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

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

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

Архитектура динамического списка и назначение реквизита ГоловнойСотрудник

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

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

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

  1. Для основного сотрудника, а также для внутреннего совместителя реквизит ГоловнойСотрудник должен содержать ссылку на самого себя (на этот же элемент справочника).
  2. Для сотрудника-подработки в этом реквизите указывается ссылка на основного сотрудника, к которому привязана подработка.

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

Способ 1. Программная перезапись справочника (рекомендуемый способ)

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

Посмотрим на пример программного кода для внешней обработки или консоли кода:


Выборка = Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    
    // Отключаем режим загрузки для срабатывания стандартных обработчиков
    Объект.ОбменДанными.Загрузка = Ложь;
    
    // Если реквизит не заполнен, прописываем ссылку на самого себя
    Если Не ЗначениеЗаполнено(Объект.ГоловнойСотрудник) Тогда
        Объект.ГоловнойСотрудник = Объект.Ссылка;
    КонецЕсли;
    
    Попытка
        Объект.Записать();
    Исключение
        Сообщить("Ошибка при записи сотрудника: " + Объект.Наименование + " - " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

При вызове метода Записать() в штатном режиме типовой модуль объекта автоматически обновит записи в регистрах сведений ДанныеДляПодбораСотрудников и ТекущиеКадровыеДанныеСотрудников.

Способ 2. Использование обработки «Групповое изменение реквизитов»

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

  1. Перейдем в раздел Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов.
  2. Выберем объект Сотрудники.
  3. В списке реквизитов найдем поле Головной сотрудник.
  4. Так как реквизит должен ссылаться на самого себя, воспользуемся вкладкой Выполнить произвольный алгоритм (доступно в режиме разработчика/администратора) и выполним присвоение Объект.ГоловнойСотрудник = Объект.Ссылка;.
  5. Если используется обычный режим без кода, можно заполнить регистр сведений ДанныеДляПодбораСотрудников, установив флаг ОсновнойСотрудник = Истина, однако это лишь временная мера, так как реквизиты объекта останутся некорректными.

Способ 3. Предотвращение ошибки в правилах конвертации данных (КД)

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

В обработчике После загрузки (или После записи) укажем следующий код:


Если Не ЗначениеЗаполнено(Объект.ГоловнойСотрудник) Тогда
    Объект.ГоловнойСотрудник = Объект.Ссылка;
КонецЕсли;

Таким образом, при импорте данных каждый сотрудник сразу получит корректную ссылку на самого себя, и все записи гарантированно появятся в списке сотрудников.

← На главную