Как в СКД реализовать зависимый выбор подразделения от выбранной организации в ЗУП 3.1?

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

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

Анализ проблемы и структуры данных ЗУП 3.1

Прежде чем приступать к настройке, проанализируем, как устроены данные в ЗУП 3.1. Справочник ПодразделенияОрганизаций является иерархическим и территориально распределенным. В отличие от многих других конфигураций, в ЗУП 3.1 связь подразделения с организацией может осуществляться не только через стандартный механизм владельца, но и через реквизит ГоловнаяОрганизация. Это необходимо для корректного учета в распределенных структурах и филиалах.

Когда мы добавляем поле Подразделение в запрос СКД вручную, платформа по умолчанию открывает форму выбора справочника без каких-либо фильтров. Чтобы форма «узнала», по какой организации ей нужно отсеять записи, необходимо передать в нее параметры выбора. Выясним, как это сделать правильно.

Способ 1: Настройка связи параметров выбора в СКД

Разберем по шагам наиболее эффективный и «чистый» способ решения задачи через схему компоновки данных. Этот метод работает на уровне платформенных механизмов и не требует написания кода в модулях формы.

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

Проанализируем ситуацию, если в вашем отчете организация является не полем набора данных, а Параметром СКД. В этом случае в колонке «Поле связи» необходимо выбирать значение не из списка полей, а из списка параметров (доступно в том же окне выбора).

Определение правильного имени поля для отбора

Часто возникает вопрос: почему нужно писать именно Отбор.ГоловнаяОрганизация или Отбор.Владелец? Рассмотрим подробнее механику работы платформы. Когда вы нажимаете кнопку выбора в поле, 1С открывает форму выбора справочника. Платформа анализирует настройки СвязиПараметровВыбора и передает их в структуру Параметры открываемой формы. Если имя параметра начинается с префикса Отбор., платформа автоматически применяет этот фильтр к основному динамическому списку формы.

В ЗУП 3.1 для подразделений можно попробовать следующие варианты в зависимости от версии и настроек справочника:

Как показывает практика решения подобных задач в ЗУП 3.1.9+, именно Отбор.ГоловнаяОрганизация позволяет корректно отфильтровать список, не вступая в конфликт с внутренними обработчиками формы.

Проблема «двойного отбора» и её решение

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

Проанализируем логику типовой формы выбора подразделений в ЗУП. В ней программно реализованы быстрые отборы по состоянию подразделения (работает/расформировано) и по организации. Если мы передаем Отбор.ГоловнаяОрганизация, система заполняет поле в дополнительных условиях. Если же мы хотим, чтобы заполнялось «красивое» поле быстрого отбора в шапке формы, нужно передавать параметр, который ожидает программный код формы в процедуре ПриСозданииНаСервере.

Однако, если ваша цель — минимизировать изменения и остаться в рамках СКД, «двойной отбор» не является критической ошибкой, так как оба условия работают на одну и ту же цель. Если же визуально это неприемлемо, рассмотрим вариант использования Расширения конфигурации.

Дополнительная настройка через расширение (если СКД недостаточно)

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

Разберем пример кода для расширения формы выбора справочника ПодразделенияОрганизаций:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем, передан ли параметр организации из отчета
    Если Параметры.Свойство("Отбор") И Параметры.Отбор.Свойство("ГоловнаяОрганизация") Тогда
        // Устанавливаем значение в реквизит формы, отвечающий за быстрый выбор
        // Имя реквизита может варьироваться, обычно это "Организация"
        ЭтаФорма.Организация = Параметры.Отбор.ГоловнаяОрганизация;
    КонецЕсли;
КонецПроцедуры

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

Важные нюансы при работе с типами данных в СКД

Выясним причину, по которой связи параметров выбора могут не работать. Одной из скрытых проблем является неверно указанный Тип значения поля в СКД. Если вы добавили подразделение в запрос вручную, убедитесь в следующем:

  1. На закладке Наборы данных в колонке Тип значения для поля Подразделение принудительно указан тип СправочникСсылка.ПодразделенияОрганизаций.
  2. Если тип останется составным или неопределенным, платформа не сможет сопоставить связи параметров, так как она не будет знать, форму какого именно справочника вы собираетесь открывать до момента самого клика.
  3. Проверьте, что поле Организация, от которого зависит выбор, также имеет четко определенный тип СправочникСсылка.Организации.

Подведем итог: для реализации привязки подразделения к организации в отчете СКД на ЗУП 3.1 наиболее правильным путем является использование механизма Связи параметров выбора с параметром Отбор.ГоловнаяОрганизация. Это решение является стабильным, не требует изменения типового кода и корректно отрабатывает в большинстве сценариев использования отчетов.

← На главную