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