Что делать, если кадровый отчет «Личные данные сотрудников» в ЗУП 3.1 перестал работать и выводит пустой результат?

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

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

Выясним причину: почему отчеты «ломаются» при переносе данных?

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

Ключевую роль в этом процессе играет справочник Идентификаторы объектов метаданных. Каждая таблица, каждый справочник и регистр имеют свой внутренний уникальный идентификатор (UUID). Если при переносе данных или обновлении конфигурации эти внутренние ссылки «рассыпались» (произошло несовпадение ссылок в программном коде и в справочнике идентификаторов), система не может корректно собрать запрос. Проанализируем пример того, как выглядит начальная часть такого динамического запроса, который система пытается исполнить:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Сотрудники.Ссылка КАК Сотрудник,
    ВЫБОР
        КОГДА &ВыводитьДанныеПредстоящихПриемов И &Период < ТекущиеКадровыеДанныеСотрудников.ДатаПриема
            ТОГДА ТекущиеКадровыеДанныеСотрудников.ДатаПриема
        ИНАЧЕ &Период
    КОНЕЦ КАК Период
ПОМЕСТИТЬ ВТСотрудники
{ВЫБРАТЬ Сотрудник.*}
ИЗ Справочник.Сотрудники КАК Сотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
ПО Сотрудники.ФизическоеЛицо = ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо
И Сотрудники.Ссылка = ТекущиеКадровыеДанныеСотрудников.Сотрудник
ГДЕ Сотрудники.Ссылка = Сотрудники.ГоловнойСотрудник
{ГДЕ Сотрудники.Ссылка.* КАК Сотрудник, Сотрудники.Код КАК ТабельныйНомер...}

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

Решение №1: Принудительное обновление информационной базы

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

Разберем по шагам, как это сделать:

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

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

Решение №2: Программное обновление идентификаторов метаданных

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

Рассмотрим пример кода для обновления идентификаторов:


// Вызов процедуры обновления данных справочника идентификаторов
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, Ложь);
Сообщить("Справочник идентификаторов метаданных успешно обновлен!");

Параметр Истина указывает системе на необходимость полной перезаписи существующих данных. Это крайне важно после объединения баз, когда «старые» UUID могут конфликтовать с новыми.

Решение №3: Актуализация данных в регистре «Данные текущих сотрудников»

В современных версиях ЗУП 3.1 для ускорения формирования отчетов используется специальный вспомогательный регистр — «Данные текущих сотрудников» (или ТекущиеКадровыеДанныеСотрудников). Этот регистр выполняет роль кэша. Если данные были перенесены в справочник Сотрудники, но этот регистр не заполнился, отчеты будут выводить пустые строки, так как они обращаются именно к этой «витрине данных».

Проанализируем ситуацию: если в консоли запросов запрос к справочнику Сотрудники возвращает людей, а запрос к регистру ТекущиеКадровыеДанныеСотрудников пуст — значит, проблема именно здесь. Чтобы исправить это, можно вызвать процедуру программного пересчета данных:


// Принудительное обновление вспомогательных кадровых данных
КадровыйУчет.АктуализироватьДанныеСотрудников();
Сообщить("Регистр текущих кадровых данных актуализирован.");

Как отладить отчет, если он формируется в фоне?

Одной из сложностей при поиске ошибки является то, что в ЗУП 3.1 отчеты формируются в фоновом задании. Это мешает перехватить текст запроса обычным отладчиком. Чтобы выяснить, почему НастройкиОтчета.СхемаМодифицирована принимает значение Ложь, воспользуемся следующим приемом:

Разберем процесс отладки фонового задания:

  1. В Конфигураторе откройте меню Отладка -> Подключение.
  2. Нажмите кнопку «Настройка» и установите флажок «Автоматическое подключение: Фоновые задания».
  3. Установите точку останова в общем модуле ОтчетыИсполнениеПартнер в процедуре запуска формирования.
  4. При нажатии кнопки «Сформировать» в пользовательском режиме, отладчик «провалится» в код, исполняемый на сервере, и вы сможете увидеть итоговый текст запроса перед его выполнением.

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

Подводя итог, можно сказать, что «оживание» кадровых отчетов в ЗУП 3.1 после миграции данных практически всегда связано с восстановлением целостности метаданных. Использование ключа /C ЗапуститьОбновлениеИнформационнойБазы является золотым стандартом решения данной проблемы.

← На главную