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