Как настроить отображение штатного расписания в ЗУП КОРП: скрываем позиции подчиненных подразделений

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

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

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

Суть проблемы и диагностики

Давайте рассмотрим типичную ситуацию. У нас настроена управленческая структура (справочник СтруктураПредприятия). В форме штатного расписания включен вид списка "Структура предприятия". Интерфейс разделен на две части: слева — дерево подразделений, справа — список позиций.

При клике на корневое подразделение (например, "Департамент финансов") мы ожидаем увидеть только Финансового директора. Но программа показывает нам также Главного бухгалтера и рядовых бухгалтеров, которые организационно находятся в подчиненном подразделении "Бухгалтерия".

Попытки изменить режим просмотра через меню "Еще" (переключить в "Иерархический список" или "Дерево") часто оказываются безуспешными — опции либо недоступны, либо система принудительно возвращает режим "Список".

Почему так происходит? Технический разбор

Чтобы найти решение, нам нужно понять логику работы формы списка в ЗУП КОРП.

  1. Два вида иерархии. В ЗУП КОРП есть справочник ПодразделенияОрганизаций (для регламентированного учета) и СтруктураПредприятия (для управленческого). Режим, который вызывает вопросы, опирается именно на управленческую структуру.
  2. Программная блокировка. Когда выбран режим отображения по структуре предприятия, разработчики 1С намеренно блокируют изменение режима просмотра правой части списка. Это сделано для того, чтобы избежать дублирования визуальной структуры (дерево слева и дерево справа) и снизить нагрузку на базу данных при построении сложных динамических списков.
  3. Логика отбора. В модуле формы при активации строки в левом дереве срабатывает обработчик события. Стандартный код конфигурации устанавливает отбор для списка позиций с видом сравнения "В иерархии" (или "В списке" с массивом всех дочерних элементов). Логика платформы такова: руководитель верхнего уровня должен видеть всю свою вертикаль власти.

Именно поэтому стандартная настройка через пользовательский интерфейс часто не дает желаемого результата — код формы переопределяет пользовательские отборы при каждом клике по дереву.

Решение 1: Использование отчетов (Без программирования)

Если задача состоит только в просмотре данных, а не в их редактировании, самым простым и правильным путем будет использование стандартных кадровых отчетов. Справочники предназначены для ввода данных, а отчеты — для анализа.

Мы рекомендуем использовать отчет "Штатная расстановка" или "Штатное расписание (Т-3)".

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

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

В этом случае отчет покажет только сотрудников выбранного узла.

Решение 2: Пользовательская настройка списка (Временное решение)

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

Пошагово выполним настройку:

  1. В форме штатного расписания нажмите кнопку Еще (в правой части, над списком позиций).
  2. Выберите пункт Настроить список.
  3. Перейдите на вкладку Отбор.
  4. Добавьте новый элемент отбора:
    • Поле: Подразделение (убедитесь, что выбираете поле, соответствующее структуре предприятия, а не организации).
    • Вид сравнения: Равно.
    • Значение: выберите интересующее вас подразделение (например, "Департамент финансов").
  5. Нажмите "Завершить редактирование".

Минус метода: При переходе к другому подразделению в дереве слева вам придется снова заходить в настройки и менять значение отбора вручную. Автоматический отбор, который накладывает форма при клике (с иерархией), будет действовать параллельно с вашим, но ваш отбор "Равно" будет более строгим и отсечет лишнее.

Решение 3: Создание Расширения конфигурации (Для программистов)

Это наиболее эффективный метод, если вы хотите изменить поведение программы на постоянной основе и сделать работу удобной для пользователей. Нам необходимо перехватить событие активации строки в дереве структуры и подменить вид сравнения в отборе.

Разберем алгоритм реализации:

  1. Создайте новое расширение конфигурации и снимите галочку "Безопасный режим", так как нам может потребоваться доступ к серверным процедурам.
  2. Заимствуйте в расширение форму списка справочника ШтатноеРасписание.
  3. Найдите элемент формы, отвечающий за дерево структуры (обычно он называется ДеревоСтруктурыПредприятия или подобным образом).
  4. Создайте обработчик события ПриАктивизацииСтроки (OnActivateRow) для этого дерева. Если в основной конфигурации уже есть это событие, используйте аннотацию &После ("After"), чтобы скорректировать наложенные типовым кодом отборы.

Примерная логика кода, которую нам нужно реализовать в модуле формы расширения:


&НаКлиенте
Процедура Расш1_СтруктураПредприятияПриАктивизацииСтрокиПосле(Элемент)
    
    // Получаем текущие данные из дерева
    ТекущиеДанные = Элементы.СтруктураПредприятия.ТекущиеДанные;
    
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Вызываем процедуру установки правильного отбора
    УстановитьОтборБезИерархии(ТекущиеДанные.Ссылка);

КонецПроцедуры

&НаСервере
Процедура УстановитьОтборБезИерархии(Знач ВыбранноеПодразделение)
    
    // Находим отбор в динамическом списке позиций
    // Обычно список называется "Список" или "СписокПозиций"
    КоллекцияЭлементов = Список.Отбор.Элементы;
    
    // Ищем отбор по подразделению, который установила типовая конфигурация
    Для Каждого ЭлементОтбора Из КоллекцияЭлементов Цикл
        
        // Проверяем, что это отбор по нужному полю
        // В ЗУП поле может называться "Подразделение" или "Подразделение.Ссылка"
        Если Строка(ЭлементОтбора.ЛевоеЗначение) = "Подразделение" Тогда
            
            // ТИПОВОЕ ПОВЕДЕНИЕ: Там стоит ВидСравнения.ВИерархии
            // НАША ЗАДАЧА: Изменить на ВидСравнения.Равно
            
            ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
            ЭлементОтбора.ПравоеЗначение = ВыбранноеПодразделение;
            ЭлементОтбора.Использование = Истина;
            
            Прервать; // Нашли и изменили - выходим
            
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры

Важные нюансы при написании кода:

Выводы

Проблема отображения "лишних" позиций в штатном расписании ЗУП КОРП связана с архитектурным решением 1С показывать руководителю полную картину подчиненности.

← На главную