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

Справочники и Данные · 12 мин

Как связать два справочника в 1С

Как связать два справочника в 1С: через реквизит типа «СправочникСсылка», владельца, подчинение и критерии отбора. Пошаговая инструкция, примеры кода и типичные ошибки.

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

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

Ниже разобраны все основные варианты: когда какой применять, как настроить связь в конфигураторе, как проверить результат и каких ошибок избегать. Отдельно рассмотрен случай, когда конфигуратор недоступен и связь приходится строить средствами пользовательского режима.

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

Прежде чем открывать конфигуратор, определите тип связи между данными. Если у каждого элемента справочника А есть ровно одно значение из справочника Б (у сотрудника — одно подразделение), достаточно обычного реквизита ссылочного типа. Это самый простой и самый распространённый вариант.

Если элементы справочника Б существуют только «внутри» элементов справочника А и без них не имеют смысла (договоры контрагента, единицы измерения номенклатуры), используют механизм владельца — справочник Б становится подчинённым. Тогда в списке договоров автоматически виден отбор по контрагенту, а удаление владельца можно контролировать.

Если один элемент справочника А должен ссылаться сразу на несколько элементов справочника Б (у товара несколько поставщиков, у сотрудника несколько компетенций), применяют табличную часть с реквизитом ссылочного типа. Для полноценной связи «многие ко многим» с дополнительными атрибутами (например, цена поставщика на товар) правильнее использовать регистр сведений.

Маршрут решения

Как выбрать способ связи

У элемента одно значение из другого справочникаДобавьте реквизит с типом «СправочникСсылка»
Элементы существуют только внутри другого объектаНазначьте владельца (подчинённый справочник)
Нужно несколько ссылок у одного элементаИспользуйте табличную часть
Связь «многие ко многим» с дополнительными даннымиСоздайте регистр сведений с двумя измерениями

Связь через реквизит типа «СправочникСсылка»

Это универсальный способ, который работает в любой конфигурации. Откройте конфигуратор, найдите нужный справочник в дереве конфигурации, перейдите на закладку «Данные» и добавьте новый реквизит. В свойстве «Тип» выберите «СправочникСсылка» и укажите конкретный справочник, на который будет ссылаться реквизит, например «СправочникСсылка.Подразделения».

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

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

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

Подчинённый справочник: связь через владельца

Механизм владельца — штатный способ 1С выразить иерархию «объект — его составляющие». В конфигураторе откройте подчинённый справочник, перейдите на закладку «Владельцы» и отметьте справочник-владелец. У подчинённого справочника автоматически появится служебный реквизит «Владелец», который заполняется ссылкой на элемент родительского справочника.

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

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

Связь «один ко многим» через табличную часть

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

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

Поэтому правило такое: табличная часть подходит для коротких вспомогательных списков, которые просматриваются только из карточки элемента. Если связанные данные участвуют в отчётах, отборах и обработках с обеих сторон, проектируйте связь через регистр сведений.

Связь «многие ко многим» через регистр сведений

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

Такое решение даёт быстрые выборки в обе стороны: «все поставщики товара» и «все товары поставщика» получаются одинаково простым запросом. В формы справочников регистр встраивается через динамический список с отбором по текущему элементу.

Минус — больше работы при настройке: нужно создать формы регистра, продумать права доступа и интерфейс заполнения. Но для прикладных связей, которые будут активно использоваться в учёте, это окупается производительностью и гибкостью.

Сравнение способов связи

Реквизит-ссылка

Простая одиночная связь. Быстро настраивается, но хранит только одно значение

Владелец (подчинение)

Для данных, не существующих без родителя. Даёт автоматический отбор, но жёстко привязывает элемент

Табличная часть

Несколько ссылок у одного элемента. Неудобна для обратных выборок и отчётов

Регистр сведений

Связь «многие ко многим» с атрибутами. Требует больше настройки, зато гибок и быстр в запросах

Как связать справочники без доступа к конфигуратору

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

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

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

Работа со связью программно: запросы и код

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

В запросе связь выражается соединением таблиц:

SELECT

Сотрудники.Наименование,

Подразделения.Наименование КАК Подразделение

FROM

Справочник.Сотрудники КАК Сотрудники

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Подразделения КАК Подразделения

ПО Сотрудники.Подразделение = Подразделения.Ссылка

Левое соединение важно: если у части элементов реквизит не заполнен, внутреннее соединение отфильтрует их, и вы потеряете данные в выборке. Для подчинённых справочников отбор строится по полю «Владелец»: ГДЕ Договоры.Владелец = &Контрагент.

Проверка результата и типичные ошибки

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

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

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

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

Поле связи в карточке элемента
Норма

Поле видно, выбор открывает нужный справочник

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

Поля нет на форме или выбор открывает не тот объект

Запрос с соединением
Норма

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

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

Часть элементов пропала — вероятно, внутреннее соединение

Поиск ссылок перед удалением
Норма

Обработка не находит мест использования

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

Есть ссылки — удаление создаст битые ссылки

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

Итог

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

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

Часто задаваемые вопросы

Чем подчинённый справочник отличается от иерархического?

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

Можно ли связать справочники в типовой конфигурации без снятия с поддержки?

Да. Используйте механизм расширений конфигурации: в расширении можно добавить реквизиты, табличные части и формы, не изменяя основную конфигурацию. Обновления типового решения при этом проходят штатно, хотя расширение после обновления стоит проверять на совместимость.

Что такое «битая ссылка» и как её исправить?

Это ссылка на удалённый объект, которая отображается как «Объект не найден». Возникает при удалении элементов без проверки мест использования. Исправить можно, перезаполнив реквизит существующим значением обработкой «Групповое изменение реквизитов», а предотвратить — пометкой на удаление с последующей штатной проверкой ссылок.

Как вывести в отчёт данные двух связанных справочников?

В схеме компоновки данных добавьте запрос с левым соединением таблиц по реквизиту связи. В конструкторе запроса связь между таблицами обычно определяется автоматически, достаточно выбрать оба справочника. Левое соединение сохранит элементы, у которых связь не заполнена.

Когда вместо табличной части лучше регистр сведений?

Когда по связи нужны выборки с обеих сторон, отборы в отчётах или у связи есть собственные атрибуты с историей. Табличная часть удобна только для просмотра и редактирования из карточки владельца; для аналитики и обменов регистр сведений работает быстрее и гибче.