Как в отчете СКД настроить автоматическую связь между полями отбора без создания формы

Программист
← На главную

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

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

Разбор механизма «Связи параметров выбора» в СКД

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

  1. Откроем Схему компоновки данных и перейдем на закладку «Наборы данных».
  2. Найдем в списке полей то, которое должно фильтроваться (в нашем примере это Маршрут).
  3. В колонке «Параметры редактирования» нажмем на кнопку выбора (три точки).
  4. В открывшемся окне найдем пункт «Связи параметров выбора».

Здесь необходимо добавить новую связь. Рассмотрим настройки этой связи подробнее:

Настройка для пользовательских отборов и быстрого доступа

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

Перейдем на закладку «Настройки», выберем нужный вариант отчета и перейдем на вкладку «Отбор». Убедимся, что поля Перевозчик и Маршрут включены в «Пользовательские настройки». В свойствах элемента пользовательских настроек (кнопка с изображением шестеренки) установим режим редактирования — «Непосредственно».

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

Решение проблемы составных типов данных и субконто

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

Рассмотрим, как это исправить. В поле «Выражение» окна настройки связей параметров выбора можно использовать функции языка выражений СКД. Чтобы жестко ограничить тип и помочь системе, используем конструкцию ВЫРАЗИТЬ:

ВЫРАЗИТЬ(Перевозчик, "Справочник.Контрагенты")

Это принудительно приведет значение поля к нужному типу ссылки, и фильтрация по владельцу в справочнике Маршруты заработает корректно, даже если в исходных данных поле было определено как Характеристика.ВидыСубконтоХозрасчетные.

Отличия между «Связями параметров» и «Параметрами выбора»

Важно не путать эти две настройки в окне «Параметры редактирования»:

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

Резюме по шагам для реализации задачи

Посмотрим еще раз на краткий алгоритм действий, который позволит обойтись без ручного создания формы:

  1. В Наборе данных для поля Маршрут заходим в Параметры редактирования.
  2. В Связях параметров выбора добавляем строку: параметр — Отбор.Владелец, выражение — Перевозчик.
  3. На вкладке Настройки (в нижней части схемы) добавляем оба поля в Отбор.
  4. Для обоих полей в отборе включаем Пользовательские настройки с режимом «Непосредственно».
  5. Если тип поля Перевозчик составной, применяем ВЫРАЗИТЬ в тексте выражения связи.

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

← На главную