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