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