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