При переходе на новые версии платформы 1С:Предприятие технические специалисты часто сталкиваются с неожиданным поведением типовых отчетов. Одной из наиболее резонансных проблем при переходе на платформу 8.3.15 стала некорректная работа отборов в конфигурации 1С:Зарплата и управление персоналом 3.1 (в частности, на релизах ветки 3.1.9). Пользователи обнаружили, что в таких ключевых отчетах, как «Свод начислений, удержаний и выплат» или «Расчетная ведомость (Т-51)», попытка установить любой отбор из группы «Работа» (например, по территории, состоянию сотрудника, дате приема на работу, должности или подразделению) приводит к тому, что отчет выводится абсолютно пустым либо список доступных значений для отбора оказывается незаполненным.
В этой статье мы подробно проанализируем технические причины возникновения данной коллизии, разберем внутренние механизмы взаимодействия СКД и платформы, а также рассмотрим практические шаги по устранению этой ошибки.
Для того чтобы понять, почему ломаются отборы, нам необходимо разобраться, как конфигурация ЗУП 3.1 формирует кадровые данные для отчетов. Разработчики 1С используют в системе компоновки данных (СКД) специальный механизм представлений кадровых данных (виртуальных таблиц кадровой истории).
Рассмотрим этот процесс по шагам:
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета.Такой подход позволяет существенно оптимизировать производительность отчетов: база данных не тратит ресурсы на выборку кадровой истории (должностей, подразделений, графиков работы), если пользователю в данный момент эти поля в отчете не требуются.
Проблема, с которой столкнулись пользователи ЗУП 3.1.9 на платформе 8.3.15, кроется в глубоких изменениях оптимизатора запросов СКД, внесенных разработчиками платформы. В версии 8.3.15 оптимизатор стал вести себя более агрессивно по отношению к пакетам запросов с временными таблицами:
1. Ошибочное исключение временных таблиц. Если поле из временной таблицы кадровых данных используется исключительно в секции отборов СКД (но не выводится напрямую в колонки или группировки отчета), оптимизатор платформы 8.3.15 может посчитать эту временную таблицу избыточной и полностью исключить её из итогового SQL-запроса, отправляемого на СУБД. В результате отбор начинает накладываться на несуществующий или пустой источник данных, что приводит к полной очистке результата отчета.
2. Изменение логики трансляции отборов при левых соединениях (LEFT JOIN). При левом соединении таблиц в СКД на платформе 8.3.15 изменилось поведение при наложении условий по полям, которые могут принимать значение NULL. Платформа стала некорректно позиционировать условия отбора во вложенных запросах, перенося их из параметров связи в общую секцию ГДЕ (WHERE) итогового запроса. Это приводило к превращению левого соединения во внутреннее (INNER JOIN), отсекая все строки, где кадровые данные не были сопоставлены нужным образом, или полностью обнуляя выборку.
Именно поэтому при попытке сделать отбор по дате приема или состоянию сотрудника пользователи получали пустую таблицу, хотя без отборов отчет формировался корректно и все цифры сходились.
Проанализируем доступные способы решения этой технической проблемы, в зависимости от возможностей администрирования вашей информационной системы.
Это наиболее правильный и рекомендуемый путь решения проблемы. Начиная с релизов веток 3.1.10 и 3.1.11 (например, 3.1.11.68 и выше), разработчики 1С оперативно адаптировали программный код конфигурации под новые алгоритмы оптимизатора платформы 8.3.15.
Что было сделано разработчиками в коде:
ЗарплатаКадрыОбщиеНаборыДанных и КадровыйУчетРасширенный были переписаны алгоритмы динамического построения запросов.Если вы обновите конфигурацию до актуального релиза, отборы в блоке «Работа» начнут функционировать корректно без необходимости понижения версии платформы.
Если по организационным или техническим причинам вы не можете оперативно обновить конфигурацию ЗУП 3.1 (например, она сильно кастомизирована и находится на поддержке с доработками), наиболее быстрым решением будет возврат на стабильную версию платформы.
Практика показывает, что стабильная работа отборов в ЗУП 3.1.9 обеспечивается на следующих ветках платформ:
Для выполнения отката выполните следующие действия:
8.3.12.1855) в поле «Версия платформы».В некоторых случаях, если база работает без режима совместимости, временным решением для обхода оптимизатора платформы 8.3.15 может стать изменение режима совместимости конфигурации в Конфигураторе.
Рассмотрим, как это проверить:
Важное замечание: Данный способ требует монопольного доступа к базе данных и проведения обязательного предварительного резервного копирования, так как изменение режима совместимости может повлиять на работу других механизмов конфигурации.
Помимо сломанных отборов в СКД, технические специалисты отмечали и другие проблемы при переходе на платформу 8.3.15. В частности, было зафиксировано нарушение работы условного оформления в табличных документах.
Например, настройки оформления отчетов, задающие специфические границы ячеек (такие как жирная верхняя линия границы толщиной 3), переставали отображаться при формировании отчетов на платформе 8.3.15, в то время как на платформе 8.3.13 они выводились корректно. Это дополнительный аргумент в пользу использования стабильных версий платформ при работе с устаревшими релизами конфигураций.
Давайте подведем итог нашему анализу: