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