Как настроить подбор сотрудников по вышестоящему подразделению в 1С:ЗУП 3.1?

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

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

Причина возникновения проблемы

Разберем ситуацию: у вас есть «Производственный отдел», в который входят 8 цехов (подчиненных подразделений). При выборе конкретного цеха подбор работает корректно, но при выборе всего отдела — результат нулевой. Проанализируем причины:

  1. Настройки отображения: В системе существует скрытый флаг, отвечающий за вывод сотрудников подчиненных подразделений. Если он снят, механизмы подбора игнорируют иерархию.
  2. Особенности динамических списков: В некоторых версиях ЗУП 3.1 механизмы модификации запросов при отборе по подразделению не устанавливают признак Иерархия, из-за чего поиск идет строго по конкретному элементу.
  3. Оптимизация расчетов: Включенные механизмы оптимизации могут конфликтовать с иерархическими запросами на определенных версиях платформы 1С.
  4. Права доступа (RLS): Ограничения на уровне записей могут блокировать видимость сотрудников, если у пользователя нет прав хотя бы на одно из дочерних подразделений.

Решение 1: Пользовательская настройка в справочнике «Сотрудники»

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

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

  1. Перейдем в раздел Кадры — Сотрудники.
  2. В поле Вид списка выберем значение По подразделениям (это отобразит дерево подразделений слева).
  3. Нажмем правой кнопкой мыши на любое подразделение в дереве.
  4. В появившемся контекстном меню найдем пункт Показывать сотрудников подчиненных подразделений и установим на нем галочку.

Важно: Эта настройка сохраняется в системном хранилище настроек пользователя. Если вы очистите кэш или администратор сбросит ваши настройки, это действие придется повторить. После установки этого флага подбор в документах Ведомость и Начисление начнет учитывать иерархию автоматически.

Решение 2: Использование механизма «Группы сотрудников»

Проанализируем альтернативный вариант, который является более стабильным, так как не зависит от индивидуальных настроек интерфейса. Рассмотрим использование справочника Группы сотрудников.

  1. Перейдем в меню Настройки — Группы сотрудников.
  2. Создадим новую группу, например, «Весь производственный сектор».
  3. Настроим динамическое формирование группы: в условии отбора укажем Подразделение В иерархии [Ваше головное подразделение].
  4. Теперь в форме подбора документа вместо выбора конкретного подразделения можно выбирать созданную группу.

Этот метод гарантирует, что в список попадут все нужные люди, независимо от того, какие флаги установлены в форме справочника у конкретного расчетчика.

Решение 3: Программное исправление через расширение (для разработчиков)

Если типовые настройки не помогают или постоянно «слетают», разберем программный способ исправления. Проблема часто кроется в общем модуле, который отвечает за описание параметров отбора динамического списка. Выясним, как заставить систему всегда использовать иерархический поиск.

Нам потребуется создать расширение и переопределить функцию ОписаниеИзмененияПараметраОтбораДинамическогоСписка. Посмотрим на пример кода, который принудительно устанавливает признак иерархии для подразделений:


&Вместо("ОписаниеИзмененияПараметраОтбораДинамическогоСписка")
Функция иер_ОписаниеИзмененияПараметраОтбораДинамическогоСписка(Форма, ИмяЭлемента)
    Описание = ПродолжитьВызов(Форма, ИмяЭлемента);
    
    // Поиск строки критерия по имени элемента формы
    Строки = Форма.ПараметрыКритерияОтбора.НайтиСтроки(Новый Структура("ИмяЭлементаФормыПараметра", ИмяЭлемента));
    
    Если Строки.Количество() Тогда
        СтрокаКритерия = Строки[0];
        
        // Проверяем, связано ли это с подразделением
        Если Найти(ИмяЭлемента, "Подразделение") > 0 Тогда
            // Установка признака ИЕРАРХИИ — важнейший шаг.
            // Без этого типовой механизм модификации запроса игнорирует вложенность.
            Если НЕ СтрокаКритерия.ПараметрыМодификации.Иерархия.Значение Тогда
                СтрокаКритерия.ПараметрыМодификации.Иерархия.Значение = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Возврат Описание;
КонецФункции

Этот код модифицирует поведение формы подбора «на лету», устанавливая свойство Иерархия.Значение = Истина в параметрах модификации запроса. Это заставляет систему использовать оператор В ИЕРАРХИИ вместо простого равенства в SQL-запросе к базе данных.

Решение 4: Отключение оптимизации расчета

В некоторых случаях, особенно на релизах ветки 3.1.8 и смежных, проблема решалась системной настройкой. Рассмотрим, как это сделать. Перейдем в Настройки — Дополнительные настройки (или через Все функции / Функции для технического специалиста — Константы).

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

Особенности работы в документах «Ведомость»

Проанализируем ситуацию, когда подбор по подразделению не работает именно в ведомостях. Здесь логика программы отличается от документов начисления. Ведомость анализирует задолженность в регистре накопления Зарплата к выплате. Если зарплата была начислена строго по цехам, а вы пытаетесь подобрать сотрудников по «головному» отделу, 1С может не сопоставить эти данные.

Чтобы подбор работал корректно, убедитесь, что в настройках расчета зарплаты (раздел Настройка — Расчет зарплаты) корректно установлена (или снята, в зависимости от вашей учетной политики) галочка Проверять соответствие начислений и выплат по подразделениям. Если она стоит, программа требует строгого соответствия подразделения в начислении и в выплате.

Резюме

Подведем итоги нашего исследования:

  1. Первым делом проверьте флаг Показывать сотрудников подчиненных подразделений в справочнике Сотрудники.
  2. Если настройка сбрасывается — используйте Группы сотрудников с динамическим отбором В иерархии.
  3. Для системного решения проблемы на уровне всей организации воспользуйтесь расширением и кодом, приведенным выше.
  4. В случае странного поведения запросов попробуйте отключить оптимизацию расчета в константах.

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

← На главную