К статье
Практический материал

Разработка и Конфигурация · 13 мин

Связи параметров выбора в 1С 8.3: как это работает и как настроить

Как работают связи параметров выбора в 1С 8.3: настройка в конфигураторе, отбор в полях ввода, типовые ошибки, проверка результата и практические примеры.

Связи параметров выбора — это механизм платформы 1С 8.3, который ограничивает список доступных значений в поле ввода в зависимости от того, что уже выбрано в других полях формы. Классический пример: в документе «Реализация товаров» при выборе договора контрагента в списке показываются только договоры выбранного контрагента, а не все договоры базы. Без такой связи пользователь видел бы тысячи лишних элементов и мог бы выбрать договор чужой организации.

Механизм работает на уровне формы: при открытии списка выбора платформа автоматически подставляет в отбор значения связанных полей. Разработчику не нужно писать код обработчика — достаточно правильно настроить свойство «Связи параметров выбора» у элемента формы или у реквизита объекта. Однако неправильная настройка приводит к пустым спискам, ошибкам «Поле не найдено» или, наоборот, к отсутствию фильтрации там, где она критична для целостности данных.

Ниже разобрано, как устроен механизм, где его настраивать, какие режимы существуют, как проверить результат и какие ошибки встречаются чаще всего. Материал ориентирован на разработчиков и внедренцев, работающих с управляемыми формами в конфигураторе 1С 8.3.

Как устроен механизм связей параметров выбора

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

Каждая связь описывается тремя ключевыми свойствами. «Имя» — это имя параметра отбора, обычно «Отбор.ИмяРеквизита» для стандартного отбора по реквизиту справочника. «ПутьКДанным» — путь к полю формы, из которого берётся значение, например «Объект.Контрагент». «ИзменениеДанных» — режим реакции на изменение связанного поля: не изменять, очищать значение или очищать с подтверждением.

Важно понимать, что связь работает только в момент выбора. Она не проверяет уже введённое значение при записи объекта — если данные изменились обходным путём (программно, через обмен), поле может содержать значение, не соответствующее связи. Поэтому связи параметров выбора — инструмент удобства и первичной защиты, а не гарантия целостности данных.

Где настраивать: у поля формы или у реквизита объекта

Свойство «Связи параметров выбора» доступно в двух местах, и выбор места влияет на область действия настройки. Первый вариант — свойство реквизита объекта метаданных (справочника, документа) в конфигураторе. Связь, заданная здесь, автоматически попадёт во все формы, где реквизит выведен как поле ввода, если у элемента формы не переопределена собственная настройка. Это правильное место для базовых, универсальных связей.

Второй вариант — свойство конкретного элемента формы в редакторе формы. Здесь связь действует только в этой форме. Такой подход нужен, когда в разных формах одно и то же поле должно фильтроваться по-разному: например, в документе закупки договор отбирается по организации-покупателю, а в документе продажи — по организации-продавцу, и пути к данным различаются.

Практическое правило: общие связи (владелец справочника, организация) задавайте на уровне реквизита объекта, а специфичные для конкретной формы — на уровне элемента формы. Если связь задана в обоих местах, приоритет у настройки элемента формы, что иногда становится источником путаницы при отладке.

Пошаговая настройка связи на примере «Контрагент — Договор»

Рассмотрим типовую задачу: в документе есть поля «Контрагент» и «Договор», нужно, чтобы в договоре выбирались только договоры выбранного контрагента. Справочник «ДоговорыКонтрагентов» подчинён справочнику «Контрагенты», то есть владелец договора — это контрагент.

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

Режим «Очищать» означает: если пользователь сменит контрагента после того, как договор уже выбран, поле договора автоматически очистится, потому что старый договор принадлежит прежнему контрагенту. Режим «НеИзменять» оставит старое значение, что создаст рассогласование. Режим с подтверждением спросит пользователя перед очисткой.

Порядок настройки связи
  1. 1
    Откройте форму в конфигураторе и выделите нужное поле ввода
  2. 2
    Откройте свойство «Связи параметров выбора» и добавьте строку
  3. 3
    Заполните Имя (например, Отбор.Владелец), ПутьКДанным (Объект.Контрагент) и режим изменения
  4. 4
    Сохраните форму, обновите конфигурацию базы данных
  5. 5
    Откройте документ в режиме предприятия и проверьте отбор в списке выбора

Отбор по нескольким полям и нестандартные сценарии

Несколько связей на одно поле

Одно поле может иметь несколько связей одновременно. Например, договор можно отбирать и по контрагенту («Отбор.Владелец»), и по организации («Отбор.Организация»), и по валюте («Отбор.ВалютаВзаиморасчетов»). Все отборы применяются совместно по логике «И»: в списке останутся только договоры, удовлетворяющие всем условиям сразу. Порядок строк в коллекции связей на результат не влияет.

Условие: реквизит, по которому строится отбор, должен существовать в выбираемом объекте и иметь индексирование или хотя бы не создавать проблем производительности на больших справочниках. Если отбор идёт по неиндексированному строковому реквизиту в справочнике с сотнями тысяч элементов, открытие списка выбора может заметно тормозить.

Связь с полем табличной части

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

Программное добавление связей

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

1c
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Контрагент", РежимИзмененияСвязанногоЗначения.Очищать);
Элементы.Договор.СвязиПараметровВыбора.Добавить(НоваяСвязь);

Как проверить, что связь работает правильно

Проверка выполняется в режиме «1С:Предприятие» на тестовых данных. Откройте форму, заполните поле-источник (контрагента), затем нажмите кнопку выбора в зависимом поле (договоре). Список должен содержать только элементы, относящиеся к выбранному значению. Дополнительно проверьте, что в заголовке или панели отбора списка виден установленный отбор — платформа обычно показывает его пользователю.

Второй обязательный сценарий — проверка очистки. Выберите договор, затем измените контрагента. При режиме «Очищать» поле договора должно опустеть. Если оно осталось заполненным — либо режим изменения настроен неверно, либо связь не применилась. Третья проверка — ввод по строке: начните вводить наименование в поле договора без открытия списка; автоподбор тоже должен учитывать связь и не предлагать чужие договоры.

Контрольные точки

Как проверить результат

Список выбора зависимого поля
Норма

Показаны только элементы, относящиеся к значению поля-источника

Тревожный признак

Видны все элементы справочника без отбора

Смена значения в поле-источнике
Норма

Зависимое поле очищается или запрашивается подтверждение

Тревожный признак

Старое значение остаётся и создаёт рассогласование

Ввод по строке в зависимом поле
Норма

Автоподбор предлагает только подходящие значения

Тревожный признак

Подбираются значения, не проходящие отбор

Типичные ошибки и ограничения механизма

Самая частая ошибка — неверное имя параметра отбора. Если в справочнике договоров реквизит называется не «Владелец», а, например, «Контрагент», связь «Отбор.Владелец» либо не сработает, либо вызовет ошибку при открытии списка. Имя в связи должно точно совпадать с именем реквизита выбираемого объекта, а не с именем поля текущей формы.

Вторая группа проблем — пустое поле-источник. Если контрагент не заполнен, отбор по владельцу получает пустую ссылку, и список договоров окажется пустым. Пользователь воспринимает это как «пропали договоры». Решения: сделать поле-источник обязательным к заполнению раньше зависимого, или настроить порядок обхода полей, или добавить предупреждение в коде.

Третья типичная ситуация — связь задана на уровне реквизита объекта, а в конкретной форме у элемента формы стоит пустая переопределяющая коллекция связей, которая «затирает» объектную. При отладке всегда проверяйте оба уровня. Также помните об ограничении: связи не срабатывают при программной записи данных, при обмене и при редактировании через списки без открытия формы — для защиты целостности нужны проверки в модуле объекта.

Типичные ошибки
01
Указано имя поля формы вместо имени реквизита выбираемого объекта — отбор не работает или возникает ошибка
02
Поле-источник не заполнено — зависимый список выбора пуст, пользователь считает данные потерянными
03
Режим изменения «НеИзменять» при смене источника — в документе остаётся договор другого контрагента
04
Связь настроена только в форме, но забыта в реквизите объекта — в других формах отбор отсутствует
05
Ожидание, что связь проверит данные при записи — рассогласование проходит через обмен и программную запись

Альтернативы и дополняющие инструменты

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

Когда декларативных средств не хватает — например, отбор зависит от сложного условия или данных другого объекта — используют обработчик «НачалоВыбора» поля формы. В нём программно формируется структура параметров открытия формы выбора с нужным отбором. Это гибче, но требует кода и усложняет сопровождение. Для контроля целостности при любых способах ввода дополнительно применяют проверки в обработчике «ОбработкаПроверкиЗаполнения» модуля объекта.

Сравнение вариантов

Связи параметров выбора

Динамический отбор по полям формы без кода; не защищает данные при программной записи

Параметры выбора

Постоянный отбор (например, только непомеченные); не реагирует на контекст формы

Обработчик НачалоВыбора

Полная гибкость отбора кодом; требует программирования и усложняет поддержку

ОбработкаПроверкиЗаполнения

Гарантирует целостность при любой записи, включая обмен; не помогает пользователю при выборе

FAQ: частые вопросы о связях параметров выбора

Почему список выбора пуст, хотя в справочнике есть подходящие элементы?

Чаще всего поле-источник связи не заполнено, и отбор уходит по пустой ссылке. Заполните поле-источник и откройте список снова. Если источник заполнен, проверьте, точно ли имя параметра отбора совпадает с именем реквизита выбираемого объекта, и нет ли дополнительного отбора в «Параметрах выбора», который отсекает все элементы.

Связь работает при открытии списка, но ввод по строке предлагает лишние значения. Это нормально?

Нет, в штатном поведении автоподбор тоже учитывает связи параметров выбора. Если этого не происходит, проверьте, что связь задана именно у того элемента формы, в который вводятся данные, и что у поля не переопределён обработчик «АвтоПодбор» или «ОкончаниеВводаТекста» с собственной логикой, игнорирующей стандартные параметры.

Нужно ли очищать зависимое поле при смене источника?

Почти всегда да: режим «Очищать» предотвращает рассогласование данных. Исключение — случаи, когда старое значение остаётся допустимым при новом значении источника. Если очистка может неожиданно удалить важные для пользователя данные, используйте режим с подтверждением, чтобы решение оставалось за пользователем.

Можно ли связать поле с данными другого объекта, а не текущей формы?

Декларативная связь берёт значение только из данных текущей формы по указанному пути. Если источник находится вне формы (например, в функциональной опции или другом документе), потребуется либо добавить в форму промежуточный реквизит и заполнять его кодом, либо формировать отбор программно в обработчике «НачалоВыбора».

Почему связь, настроенная в реквизите объекта, не работает в одной из форм?

Вероятно, у элемента этой формы задана собственная коллекция связей параметров выбора — она переопределяет объектную настройку. Откройте свойства поля в этой форме и проверьте содержимое свойства. Либо удалите переопределение, либо продублируйте нужную связь на уровне элемента.

Влияют ли связи параметров выбора на производительность?

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

Итог

Что важно запомнить

Связи параметров выбора фильтруют список выбора по значениям других полей формы и настраиваются без кода через свойство поля или реквизита объекта. Ключевые моменты: точное имя параметра отбора, корректный путь к данным, режим «Очищать» при смене источника и обязательная проверка в режиме предприятия. Для защиты целостности данных дополняйте механизм проверками в модуле объекта.