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

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

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

Анализ проблемы: почему стандартная связь не работает

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

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

Шаг 1: Подготовка запроса в схеме компоновки данных

Прежде всего, убедимся, что наши параметры правильно описаны в тексте запроса. Для того чтобы параметры были доступны для интерактивного выбора и корректно участвовали в компоновке, рекомендуется использовать конструкцию {ГДЕ ...}. Проанализируем пример правильного построения условия в запросе:


ВЫБРАТЬ
    Остатки.Сертификат КАК Сертификат,
    Остатки.СерийныйНомер КАК СерийныйНомер,
    Остатки.СуммаОстаток КАК СуммаОстаток
ИЗ
    РегистрНакопления.ПредоплатыКлиентов.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК Остатки
{ГДЕ
    (Остатки.Сертификат = &Сертификат),
    (Остатки.СерийныйНомер = &СерийныйНомер)}

Важно помнить, что если вы хотите, чтобы параметры были необязательными, их нужно заключать в фигурные скобки. Это позволит пользователю формировать отчет как по конкретному сертификату, так и по всем сразу.

Шаг 2: Настройка связей с использованием правильного префикса

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

Рассмотрим по шагам, как настроить эту связь в конструкторе СКД:

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

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

Шаг 3: Обеспечение работы на форме (Быстрый доступ)

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

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

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

  1. Откройте форму отчета.
  2. Найдите элемент формы (Поле ввода), связанный с серийным номером.
  3. В свойствах этого элемента найдите Связи параметров выбора.
  4. Продублируйте настройку там, указав в качестве данных Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Сертификат.

Дополнительные рекомендации по улучшению интерфейса

Рассмотрим еще несколько полезных приемов, которые сделают работу с отчетом удобнее:

1. Очистка зависимого параметра при изменении владельца.
Часто случается, что пользователь сначала выбрал "Сертификат №1" и "Серийный номер А", а затем изменил сертификат на №2. При этом в поле "Серийный номер" может остаться значение "А", которое теперь не валидно. Чтобы этого избежать на программном уровне (в самописной форме), в событии ПриИзменении для поля Сертификат следует добавить код очистки:


&НаКлиенте
Процедура СертификатПриИзменении(Элемент)
    // Очищаем зависимый параметр, если владелец изменился
    Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СерийныйНомер", Неопределено);
КонецПроцедуры

2. Ограничение типа данных.
Если ваш параметр Владелец имеет составной тип (например, это может быть и Справочник.Сертификаты, и Справочник.Номенклатура), обязательно заполните свойство Ограничение типа в настройках параметра СКД. Это поможет системе быстрее инициализировать список выбора и избежать лишних обращений к базе данных для определения метаданных.

3. Использование в расширениях.
Проанализируем ситуацию с расширениями. В версиях платформы 8.3.18 и выше иногда встречается особенность: если отчет находится в расширении, связи могут игнорироваться, если имена параметров полностью совпадают с именами полей основной конфигурации. В этом случае попробуйте переименовать параметры в схеме, добавив уникальный префикс, например п_Сертификат и п_СерийныйНомер, и обновите связи соответствующим образом.

Резюме

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

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

← На главную