Разработка и Конфигурация · 9 мин
Связи параметров выбора в 1С: назначение и настройка
Что такое связи параметров выбора в 1С, как настроить фильтрацию значений в полях ввода, типовые ошибки и способы проверки результата.
Связи параметров выбора — это механизм платформы 1С:Предприятие, который ограничивает список доступных значений в поле ввода в зависимости от значения другого поля. Классический пример: пользователь выбрал контрагента, и в поле «Договор» открываются только договоры этого контрагента, а не весь справочник целиком. Без такой связи пришлось бы искать нужный договор среди сотен записей вручную.
Механизм работает на уровне формы: при открытии списка выбора платформа автоматически подставляет отбор по связанному реквизиту. Настройка выполняется в конфигураторе или программно, без изменения структуры данных. Это делает связи параметров выбора одним из самых простых способов улучшить удобство ввода и снизить количество ошибок в документах.
Важно понимать: связь параметров выбора — это не контроль данных, а фильтрация интерфейса. Она помогает пользователю выбрать правильное значение, но не гарантирует корректность уже записанных данных. Для жёсткой проверки используются другие средства — обработчики проверки заполнения и запросы при записи.
Где применяются связи параметров выбора
Механизм встречается практически в любой прикладной конфигурации. Типовые сценарии: выбор договора по контрагенту, выбор склада по организации, выбор подразделения по организации, выбор характеристики по номенклатуре, выбор банковского счёта по организации или контрагенту. Во всех этих случаях у дочернего объекта есть реквизит-владелец, по которому строится отбор.
Особенно полезны связи в документах с табличными частями. Например, в строке товарной накладной пользователь выбирает номенклатуру, а поле «Характеристика» должно предлагать только характеристики этой позиции. Без связи список характеристик был бы общим по всей базе, что делает подбор практически невозможным.
Связи работают и в управляемых, и в обычных формах, но настраиваются по-разному. В управляемых формах настройка хранится в свойствах элемента формы, в обычных — также в свойствах поля ввода, но с привязкой к данным формы другого типа.
Как настроить связь в конфигураторе
Рассмотрим настройку на примере пары «Контрагент — Договор» в управляемой форме документа. Откройте форму документа в конфигураторе, выделите поле «Договор» и откройте палитру свойств. Найдите свойство «СвязиПараметровВыбора» и нажмите кнопку выбора — откроется редактор коллекции связей.
Добавьте новую связь и заполните её свойства. Главное свойство — «Связь»: здесь указывается строка вида Отбор.Владелец(Элементы.Контрагент) или Отбор.Владелец(Объект.Контрагент). Слева от скобок — путь к отбору в дочернем объекте (реквизит «Владелец» справочника договоров), в скобках — путь к данным, откуда берётся значение.
Дополнительные свойства связи: «Имя» (произвольное имя связи) и «РежимИзмененияСвязанногоЗначения» — определяет, что делать с уже введённым значением договора при смене контрагента: очищать, оставлять или не изменять. Для большинства случаев подходит очистка, чтобы не оставалось противоречивых пар значений.
- 1Откройте форму объекта в конфигураторе и выделите нужное поле ввода
- 2В палитре свойств откройте редактор свойства «СвязиПараметровВыбора»
- 3Добавьте связь: укажите Отбор.ИмяРеквизита и путь к связанному полю в скобках
- 4Задайте режим изменения связанного значения (обычно — очищать)
- 5Сохраните конфигурацию, обновите базу и проверьте выбор в пользовательском режиме
Программная установка связи
Иногда связь нужно добавить динамически — например, для реквизита, созданного в расширении, или когда состав связей зависит от настроек. В этом случае используется объект СвязьПараметраВыбора, который добавляется в коллекцию СвязиПараметровВыбора элемента формы в обработчике «ПриСозданииНаСервере».
НоваяСвязь = Новый СвязьПараметраВыбора(
"Отбор.Владелец",
"Элементы.Товары.ТекущиеДанные.Номенклатура",
РежимИзмененияСвязанногоЗначения.Очищать);
Элементы.ТоварыХарактеристика.СвязиПараметровВыбора.Добавить(НоваяСвязь);
Обратите внимание на второй параметр: для табличной части путь к данным указывается через Элементы.ИмяТаблицы.ТекущиеДанные.ИмяРеквизита, чтобы связь брала значение из текущей строки, а не из шапки документа. Это частая причина неработающей фильтрации в табличных частях.
Как проверить, что связь работает
Проверка выполняется в пользовательском режиме без каких-либо инструментов разработчика. Откройте форму, заполните «главное» поле (контрагента), затем нажмите кнопку выбора в связанном поле (договор). Список должен открыться с установленным отбором — обычно это видно по включённому фильтру в шапке списка выбора.
Второй тест — смена главного значения. Если выбрать другого контрагента, ранее введённый договор должен очиститься (при режиме «Очищать»). Если договор остался от прежнего контрагента — либо режим изменения настроен иначе, либо связь не работает.
Третья проверка — ввод по строке. Начните вводить наименование договора в поле: автоподбор тоже должен учитывать связь и предлагать только подходящие значения. Если автоподбор игнорирует отбор, проверьте, не переопределён ли список выбора в обработчиках «НачалоВыбора» или «АвтоПодбор».
Как проверить результат
Список открывается с отбором по связанному полю
Показываются все элементы справочника без фильтра
Связанное поле очищается или обновляется
Старое значение остаётся и противоречит новому
Автоподбор предлагает только подходящие элементы
Подбираются значения из всего справочника
Типичные ошибки и ограничения
Самая распространённая ошибка — неверный путь к данным в связи. Если вместо Объект.Контрагент указать несуществующий реквизит или забыть префикс «Объект.», связь молча не сработает: платформа не выдаст ошибку, просто отбор не применится. Поэтому после настройки связь обязательно проверяют в пользовательском режиме.
Вторая группа проблем — конфликт с программными обработчиками. Если в событии «НачалоВыбора» поля программно открывается форма выбора с собственным отбором, связь параметров выбора может быть проигнорирована. Приоритет имеет код. То же относится к обработчику «ОбработкаВыбора» — в нём можно подставить значение, не проходящее фильтр.
Ограничение механизма: связь фильтрует только интерактивный выбор в форме. При программном заполнении объекта, обмене данными или загрузке из файла значения не проверяются связью — в базу могут попасть несогласованные пары «контрагент — чужой договор». Для контроля таких случаев нужна проверка в обработчике «ОбработкаПроверкиЗаполнения» или регламентный отчёт-контроль.
Чем связи отличаются от параметров выбора и отборов динамического списка
Похожий по названию механизм — «Параметры выбора» поля ввода. Он задаёт фиксированные параметры (например, всегда показывать только папки или только непомеченные на удаление элементы), не зависящие от других полей. Связи параметров выбора, напротив, динамические: отбор меняется при изменении связанного значения.
Отбор динамического списка — третий смежный инструмент. Он настраивается на самой форме списка и фильтрует записи постоянно, а не только в момент выбора. Если требуется, чтобы пользователь в принципе не видел чужие данные (например, по RLS или по рабочему месту), правильнее использовать отбор списка или ограничение доступа, а не связь параметров выбора.
Сравнение механизмов фильтрации
Динамический отбор при выборе значения в поле по другому полю формы. Только интерфейс, не защищает данные
Статические фиксированные ограничения списка выбора, не зависят от других полей
Постоянная фильтрация списка на форме, действует всегда, а не только при выборе
Контроль данных при записи объекта — единственный способ гарантировать согласованность в базе
FAQ
Почему связь параметров выбора не срабатывает, хотя всё настроено?
Чаще всего причина в неверном пути к данным: проверьте, что путь начинается с «Объект.» для реквизитов объекта или указан через «Элементы.Таблица.ТекущиеДанные.» для табличных частей. Также убедитесь, что имя реквизита отбора совпадает с именем реквизита в дочернем справочнике.
Можно ли связать поле с реквизитом другого документа?
Напрямую — нет: связь может ссылаться только на данные текущей формы (реквизиты объекта, реквизиты формы, текущую строку таблицы). Если нужное значение находится в другом объекте, его сначала помещают в реквизит формы и связывают поле с ним.
Что выбрать в свойстве «Режим изменения связанного значения»?
«Очищать» — стандартный безопасный вариант: при смене главного поля зависимое значение удаляется, и пользователь выбирает новое. «Не изменять» оставляет старое значение, что допустимо только если несогласованность данных не критична. «Проверять» помечает несоответствие, но требует дополнительной обработки.
Работают ли связи при быстром вводе без открытия списка?
Да, отбор по связи учитывается при вводе по строке и автоподборе, если эти действия не переопределены в обработчиках «АвтоПодбор» и «ОкончаниеВводаТекста». Если автоподбор игнорирует фильтр, ищите программную логику в этих событиях.
Защищают ли связи параметров выбора от ошибок в данных?
Нет. Связь — это только удобство ввода в форме. Программное заполнение, обмены и загрузки её обходят. Для гарантии согласованности данных добавьте проверку в обработчике «ОбработкаПроверкиЗаполнения» объекта.
Как добавить связь через расширение, не меняя конфигурацию?
В расширении заимствуется форма объекта, и для нужного элемента добавляется связь в палитре свойств — так же, как в конфигураторе. Либо связь создаётся программно в обработчике «ПриСозданииНаСервере» расширенной формы через объект СвязьПараметраВыбора.
Что важно запомнить
Связи параметров выбора фильтруют список значений поля по значению другого поля формы. Настраиваются в свойстве «СвязиПараметровВыбора» или программно, работают только в интерфейсе и не заменяют контроль данных при записи. После настройки обязательно проверьте отбор, очистку при смене значения и автоподбор.