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