При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача реализовать зависимый выбор в фильтрах. Классический пример — выбор «Маршрута», который должен быть ограничен только теми элементами, владельцем которых является выбранный ранее «Перевозчик». В обычных формах документов это решается установкой свойств реквизитов, но в автогенерируемых формах отчетов разработчики часто заходят в тупик, полагая, что без ручного создания формы и написания кода на языке 1С эту задачу не решить.
В этой статье мы подробно разберем, как использовать стандартные механизмы СКД для настройки связей параметров выбора. Мы проанализируем ситуацию, когда стандартный отбор должен вести себя так же интеллектуально, как и связка «Контрагент — Договор» в типовых решениях.
Для того чтобы система понимала, что список одного поля должен фильтроваться по значению другого, нам не нужно переходить на вкладку «Настройки». Основная работа выполняется на уровне описания полей в схеме компоновки. Рассмотрим ситуацию пошагово:
Маршрут).Здесь необходимо добавить новую связь. Рассмотрим настройки этой связи подробнее:
Отбор.Владелец. Если же связь идет по какому-то реквизиту (например, в справочнике «Договоры» есть реквизит «Организация»), то пишется Отбор.ИмяРеквизита.Перевозчик.Проанализируем важный нюанс: настройки в наборе данных работают безупречно, если пользователь выбирает значения непосредственно в сетке настроек СКД. Однако для того, чтобы связь работала «в шапке» отчета (в так называемых быстрых отборах), необходимо выполнить дополнительные действия:
Перейдем на закладку «Настройки», выберем нужный вариант отчета и перейдем на вкладку «Отбор». Убедимся, что поля Перевозчик и Маршрут включены в «Пользовательские настройки». В свойствах элемента пользовательских настроек (кнопка с изображением шестеренки) установим режим редактирования — «Непосредственно».
Выясним причину, почему связь может не работать в пользовательском режиме. Если вы используете поле не напрямую, а через точку (например, Документ.Перевозчик), убедитесь, что в «Связях параметров выбора» в качестве выражения указан именно тот путь, который реально используется в настройках отбора. Проще всего объявить Перевозчик как отдельное поле в наборе данных СКД, чтобы избежать путаницы с путями к данным.
Иногда при настройке связей разработчики сталкиваются с тем, что система «лезет в бухгалтерские счета» или предлагает некорректные типы для выбора. Это часто случается, если поле Перевозчик имеет составной тип (например, является Субконто). В этом случае стандартный механизм связей может не сопоставить типы автоматически.
Рассмотрим, как это исправить. В поле «Выражение» окна настройки связей параметров выбора можно использовать функции языка выражений СКД. Чтобы жестко ограничить тип и помочь системе, используем конструкцию ВЫРАЗИТЬ:
ВЫРАЗИТЬ(Перевозчик, "Справочник.Контрагенты")
Это принудительно приведет значение поля к нужному типу ссылки, и фильтрация по владельцу в справочнике Маршруты заработает корректно, даже если в исходных данных поле было определено как Характеристика.ВидыСубконтоХозрасчетные.
Важно не путать эти две настройки в окне «Параметры редактирования»:
Отбор.Статус(Значение.Перечисление.Статусы.Активный).Если ваша задача — сделать так, чтобы при выборе маршрута поле «Перевозчик» заполнялось автоматически (обратная связь), то штатными средствами СКД без кода это сделать сложнее. Автозаполнение работает только в том случае, если у поля «Маршрут» в метаданных жестко задан единственный владелец и оба поля выведены в пользовательские настройки с режимом «Непосредственно». В остальных случаях для автозаполнения потребуется создание формы отчета и обработка события ПриИзменении. При проектировании собственной формы отчета полезно использовать методику связывания элементов управляемой формы с пользовательскими настройками СКД.
Посмотрим еще раз на краткий алгоритм действий, который позволит обойтись без ручного создания формы:
Маршрут заходим в Параметры редактирования.Отбор.Владелец, выражение — Перевозчик.Перевозчик составной, применяем ВЫРАЗИТЬ в тексте выражения связи.Соблюдение этих правил позволяет создавать мощные и удобные отчеты, сохраняя при этом все преимущества стандартного функционала СКД, который так ценят пользователи за гибкость и возможность самостоятельной донастройки.