Почему не работают отборы по кадровым данным (блок «Работа») в отчетах ЗУП 3.1 на платформе 8.3.15 и как это исправить?

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

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

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

Выясняем причину: как устроен механизм кадровых данных в ЗУП 3.1

Для того чтобы понять, почему ломаются отборы, нам необходимо разобраться, как конфигурация ЗУП 3.1 формирует кадровые данные для отчетов. Разработчики 1С используют в системе компоновки данных (СКД) специальный механизм представлений кадровых данных (виртуальных таблиц кадровой истории).

Рассмотрим этот процесс по шагам:

  1. В схеме компоновки данных (запросе отчета) поля из блока «Работа» не выбираются напрямую из физических регистров сведений (таких как кадровые истории сотрудников). Вместо этого в тексте запроса используются специальные «запросы-шаблоны» (так называемые «запросы-пустышки»).
  2. В момент компоновки и формирования отчета выполнение перехватывается программным кодом общего модуля. В частности, за это отвечает метод ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета.
  3. Программа динамически анализирует, какие именно кадровые поля выбраны пользователем в настройках (в структуре, отборах, группировках или условном оформлении).
  4. На основании этого анализа программно строится сложный пакетный запрос. Он создает временные таблицы (ВТ) со сведениями о сотрудниках на нужные даты, а затем заменяет исходные шаблоны в СКД реальными связями с этими временными таблицами.

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

Влияние платформы 8.3.15: оптимизатор СКД и его «медвежья услуга»

Проблема, с которой столкнулись пользователи ЗУП 3.1.9 на платформе 8.3.15, кроется в глубоких изменениях оптимизатора запросов СКД, внесенных разработчиками платформы. В версии 8.3.15 оптимизатор стал вести себя более агрессивно по отношению к пакетам запросов с временными таблицами:

1. Ошибочное исключение временных таблиц. Если поле из временной таблицы кадровых данных используется исключительно в секции отборов СКД (но не выводится напрямую в колонки или группировки отчета), оптимизатор платформы 8.3.15 может посчитать эту временную таблицу избыточной и полностью исключить её из итогового SQL-запроса, отправляемого на СУБД. В результате отбор начинает накладываться на несуществующий или пустой источник данных, что приводит к полной очистке результата отчета.

2. Изменение логики трансляции отборов при левых соединениях (LEFT JOIN). При левом соединении таблиц в СКД на платформе 8.3.15 изменилось поведение при наложении условий по полям, которые могут принимать значение NULL. Платформа стала некорректно позиционировать условия отбора во вложенных запросах, перенося их из параметров связи в общую секцию ГДЕ (WHERE) итогового запроса. Это приводило к превращению левого соединения во внутреннее (INNER JOIN), отсекая все строки, где кадровые данные не были сопоставлены нужным образом, или полностью обнуляя выборку.

Именно поэтому при попытке сделать отбор по дате приема или состоянию сотрудника пользователи получали пустую таблицу, хотя без отборов отчет формировался корректно и все цифры сходились.

Как решить проблему: пошаговые варианты действий

Проанализируем доступные способы решения этой технической проблемы, в зависимости от возможностей администрирования вашей информационной системы.

Способ 1. Обновление конфигурации 1С:ЗУП 3.1

Это наиболее правильный и рекомендуемый путь решения проблемы. Начиная с релизов веток 3.1.10 и 3.1.11 (например, 3.1.11.68 и выше), разработчики 1С оперативно адаптировали программный код конфигурации под новые алгоритмы оптимизатора платформы 8.3.15.

Что было сделано разработчиками в коде:

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

Способ 2. Понижение версии (даунгрейд) платформы 1С:Предприятие

Если по организационным или техническим причинам вы не можете оперативно обновить конфигурацию ЗУП 3.1 (например, она сильно кастомизирована и находится на поддержке с доработками), наиболее быстрым решением будет возврат на стабильную версию платформы.

Практика показывает, что стабильная работа отборов в ЗУП 3.1.9 обеспечивается на следующих ветках платформ:

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

  1. Установите на сервер приложений 1С и на клиентские рабочие станции платформу версии 8.3.12 или 8.3.13.
  2. В настройках запуска информационной базы в окне запуска 1С укажите конкретную версию платформы для запуска (например, 8.3.12.1855) в поле «Версия платформы».
  3. Перезапустите базу под управлением старой платформы и проверьте работу отборов в кадровых отчетах.

Способ 3. Изменение режима совместимости конфигурации

В некоторых случаях, если база работает без режима совместимости, временным решением для обхода оптимизатора платформы 8.3.15 может стать изменение режима совместимости конфигурации в Конфигураторе.

Рассмотрим, как это проверить:

  1. Откройте базу в режиме Конфигуратор.
  2. Откройте свойства корневого объекта конфигурации.
  3. Найдите свойство «Режим совместимости».
  4. Если там установлено «Не использовать» или «Версия 8.3.15», попробуйте временно установить режим совместимости с «Версия 8.3.12» или «Версия 8.3.14» (в зависимости от требований текущего релиза конфигурации ЗУП).

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

Внимание: сопутствующие проблемы платформы 8.3.15

Помимо сломанных отборов в СКД, технические специалисты отмечали и другие проблемы при переходе на платформу 8.3.15. В частности, было зафиксировано нарушение работы условного оформления в табличных документах.

Например, настройки оформления отчетов, задающие специфические границы ячеек (такие как жирная верхняя линия границы толщиной 3), переставали отображаться при формировании отчетов на платформе 8.3.15, в то время как на платформе 8.3.13 они выводились корректно. Это дополнительный аргумент в пользу использования стабильных версий платформ при работе с устаревшими релизами конфигураций.

Резюме и рекомендации

Давайте подведем итог нашему анализу:

← На главную