При работе с крупными конфигурациями, такими как «1С:Зарплата и управление персоналом КОРП» (ЗУП КОРП), специалисты часто сталкиваются с неочевидным поведением системы, которое отличается от базовых или ПРОФ версий. Одна из распространенных задач — настройка удобного списка сотрудников для кадровиков или расчетчиков. Казалось бы, простая задача: добавить сортировку по дате приема на работу. Однако в версии КОРП это действие может привести к ошибкам компоновки данных.
В этой статье мы подробно разберем, почему возникает проблема с сортировкой в динамических списках ЗУП КОРП, почему вмешательство через Конфигуратор не помогает и как решить эту задачу штатным способом, предусмотренным разработчиками 1С. Рассмотрим ситуацию детально, проанализируем причины и выполним необходимые настройки.
Рассмотрим типичный сценарий. Пользователь или администратор пытается изменить порядок вывода строк в форме списка справочника Сотрудники. Стандартно список сортируется по ФИО (полю Наименование). Однако для кадровых задач часто требуется видеть последних принятых сотрудников вверху списка.
При попытке добавить поле Дата приема в настройки сортировки (через меню «Еще — Настроить список» или в Конфигураторе), система выдает ошибку:
Параметры Отбора, Сортировки, Группировки или список отображаемых полей заданы неверно.
Не найдено поле упорядочивания ДатаПриема
[ОшибкаНастроекКомпоновкиДанных]
Даже если мы обратимся к Конфигуратору и попробуем модифицировать обработку СписокСотрудников, добавляя поле в запрос динамического списка или программно устанавливая ЭлементПорядкаКомпоновкиДанных, ошибка сохраняется. Это происходит потому, что механизм формирования списка сотрудников в ЗУП КОРП устроен сложнее, чем обычный динамический список.
Давайте проанализируем, как устроен список сотрудников в современных версиях ЗУП 3.1. Это не просто отображение таблицы справочника. Это сложный динамический список, запрос которого формируется «на лету» (программно) в зависимости от функциональных опций и настроек пользователя.
В версии ЗУП КОРП объем данных значительно больше, чем в ПРОФ. Система хранит историю грейдов, охраны труда, специфические льготы и многое другое. Чтобы список открывался быстро, разработчики 1С по умолчанию используют оптимизированный запрос.
ДатаПриема, СКД пытается найти это поле в доступных полях упорядочивания основного набора данных. Если запрос оптимизирован, этого поля там физически нет в контексте сортировки (оно может быть только как поле вывода). Отсюда и возникает ошибка «Не найдено поле упорядочивания».Именно поэтому попытки добавить поле через расширение или код формы часто терпят неудачу: при инициализации формы стандартные механизмы ЗУП КОРП «переписывают» схему компоновки под текущие настройки производительности.
К счастью, разработчики 1С предусмотрели эту потребность. Вместо того чтобы ломать конфигурацию или писать сложные расширения, нам нужно изменить режим работы списка сотрудников через пользовательские настройки. Решение находится не в Конфигураторе, а в режиме «1С:Предприятие».
Давайте пошагово выполним настройку, которая разблокирует возможность сортировки по любым колонкам.
Запустите программу в пользовательском режиме под правами Администратора или пользователя с полными правами на настройку системы.
В этом окне собраны глобальные настройки поведения кадровой подсистемы, которые влияют на видимость полей, учет остатков отпусков, контроль штатного расписания и, как выяснилось, на поведение списков.
В открывшемся окне настроек нам необходимо найти специфическую опцию. Прокрутите список настроек (обычно она находится в нижней части или в блоке дополнительных настроек).
Найдите флажок с названием:
Использовать в списке сотрудников сортировку и отбор по любым колонкам
Установите этот флажок. После этого необходимо нажать кнопку «Записать и закрыть», чтобы сохранить изменения в константах базы данных.
Теперь давайте вернемся к списку сотрудников и проверим, как изменилось поведение системы.
Теперь поле должно быть доступно, и при применении настройки список корректно отсортируется по дате приема без выдачи ошибки компоновки данных.
Также вы сможете просто кликнуть по заголовку колонки «Дата приема» в самой таблице, и 1С выполнит сортировку (появится треугольник направления сортировки), чего раньше сделать было нельзя.
Мы решили проблему, но как профессионалы, мы должны понимать цену этого решения. Почему эта галочка не включена по умолчанию?
Влияние на производительность
Когда вы включаете опцию «Использовать в списке сотрудников сортировку и отбор по любым колонкам», вы фактически говорите системе: «Мне не важна максимальная скорость открытия списка, мне нужна функциональность». Программа перестраивает запрос динамического списка, добавляя множество LEFT JOIN (левых соединений) к регистрам сведений (таким как КадроваяИсторияСотрудников, текущие кадровые данные и т.д.) прямо в основной текст запроса выборки.
Поэтому в ЗУП КОРП, которая ориентирована на крупные предприятия, эта возможность вынесена в опцию и по умолчанию отключена ради быстродействия.
Если после включения настройки список сотрудников начал работать слишком медленно, мы рекомендуем вернуть настройку обратно и воспользоваться альтернативными путями получения данных.
Для анализа сотрудников в разрезе дат приема лучше использовать отчет по принятым сотрудникам, так как отчеты выполняют запрос один раз и не требуют постоянного поддержания динамической выборки при навигации по интерфейсу.
Использование отчета «Штатные сотрудники»
Этот метод не нагружает интерфейс повседневной работы и позволяет получить список в нужном порядке для выгрузки или печати.
Подведем итог нашему исследованию проблемы сортировки в ЗУП КОРП:
Используя этот подход, вы сможете гибко настраивать рабочее место кадровика, соблюдая баланс между удобством и быстродействием системы.