Соединения
Соединение нужно всякий раз, когда к одной строке набора относится несколько строк другого набора. Откуда взялся правый набор — из общего запроса или из запроса по объекту печати — неважно: механизм один, и работает он как фильтр, а не как соединение таблиц в запросе.
Типичные случаи:
- Данные, общие для всей формы. Остатки товаров на складах, курсы валют, задолженность контрагентов — набор собран общим запросом, и для конкретной строки формы из него нужны не все строки, а только подходящие.
- Шапка и табличная часть. Соединение по «Ссылке» связывает строки с их документом — на этом строится вывод реестра, где под каждым документом идут его собственные строки.
- Подчинённые данные строки. Серии, ГТД, состав комплекта — всё, чего на одну строку товара приходится несколько.
- Итог по связанным строкам. Когда в форму нужно не перечисление, а сумма или количество: соединение даёт агрегат (
Итог.[Поле].[Агрегат]) без отдельного запроса — как в примере ниже.

Вид закладки “Соединения”
Соединять наборы не обязательно: по умолчанию каждый набор свободен и в дереве соединений не участвует. Строка там появляется только тогда, когда связь между наборами действительно нужна.
Внешний вид
Заголовок раздела «Внешний вид»Рассмотрим колонки таблицы соединений
| Колонка | Описание |
|---|---|
| Левая сторона (набор / поле) | Имя набора (или поля) с левой стороны |
| Правая сторона (набор / поле) | Имя набора (или поля) с правой стороны |
| Имя соединения | Имя соединения (вложенного набора для левой стороны) |
| Вид набора | Способ формирования коллекции данных набора для использования в печатной форме |
| № | Служебное поле |
Над табличной частью располагается командная панель. По умолчанию в ней находятся команды управления табличной частью. Дополнительно добавлены команды:
| Команда | Описание |
|---|---|
![]() | Добавить строку соединения |
![]() | Добавить строку поля условия соединения |
Рассмотрим работу механизма соединений на примере. Пусть у нас есть две таблицы: “Товары” (табличная часть Товары из документа) и “Остатки” (остатки по товарам на складах). В таблице “Товары” строки сразу двух документов — так набор выглядит, когда печатная форма формируется по нескольким объектам печати одновременно.
Таблица “Товары”
Заголовок раздела «Таблица “Товары”»| Ссылка | Номенклатура | Ед. изм. | Количество |
|---|---|---|---|
| Документ № 1 от 01.01.2023 | Номенклатура 1 | шт. | 10 |
| Документ № 1 от 01.01.2023 | Номенклатура 2 | шт. | 10 |
| Документ № 2 от 02.01.2023 | Номенклатура 1 | шт. | 10 |
Таблица “Остатки”
Заголовок раздела «Таблица “Остатки”»| Номенклатура | Склад | Остаток |
|---|---|---|
| Номенклатура 1 | Склад 1 | 100 |
| Номенклатура 1 | Склад 2 | 50 |
| Номенклатура 2 | Склад 1 | 50 |
Мы хотим вывести в печатную форму таблицу “Товары” + колонка “Остаток”. Классическое левое соединение таблиц “Товары” и “Остатки” по полю “Номенклатура” привело бы к задвоению данных, поскольку “Номенклатура 1” у нас хранится на 2-х складах. Однако, соединение в конструкторе работает скорее как фильтр. Поэтому соединение не приводит к тому, что в таблице “Товары” становится больше строк. При любом раскладе, левая таблица не изменяется. Каждая её строка дополняется вложенным набором — строками правой таблицы, отобранными по заданным критериям.
Настройка соединения
Заголовок раздела «Настройка соединения»На закладке “Соединения” это описывается двумя строками — самим соединением и полем условия:
| Строка | Левая сторона | Правая сторона | Имя соединения | Вид набора |
|---|---|---|---|---|
| Соединение | Товары | Остатки | Остатки | Многострочная коллекция |
| Поле условия | Номенклатура | Номенклатура |
Два значения здесь определяют дальнейшую работу:
- Имя соединения — под этим именем вложенный набор появится внутри строки левого набора, и оно же станет сегментом пути к полю;
- Вид набора — “многострочная коллекция”, потому что нужны все строки по складам. Выбери мы “первую” или “последнюю строку”, во вложенном наборе осталась бы одна строка, и построчного вывода по складам не получилось бы (подробнее про виды наборов).
Итоговый набор
Заголовок раздела «Итоговый набор»В нашем случае итоговый набор данных “Товары” будет выглядеть следующим образом:
| Ссылка | Номенклатура | Ед. изм. | Кол-во | Остатки | ||
|---|---|---|---|---|---|---|
| Документ № 1 от 01.01.2023 | Номенклатура 1 | шт. | 10 | Номенклатура | Склад | Остаток |
| Номенклатура 1 | Склад 1 | 100 | ||||
| Номенклатура 1 | Склад 2 | 50 | ||||
| Документ № 1 от 01.01.2023 | Номенклатура 2 | шт. | 10 | Номенклатура | Склад | Остаток |
| Номенклатура 2 | Склад 1 | 50 | ||||
| Документ № 2 от 02.01.2023 | Номенклатура 1 | шт. | 10 | Номенклатура | Склад | Остаток |
| Номенклатура 1 | Склад 1 | 100 | ||||
| Номенклатура 1 | Склад 2 | 50 |
То есть, внутри каждой строки мы видим вложенную “копию” таблицы “Остатки” с фильтром по значению колонок “Номенклатура”.
В итоге, для того, чтобы в печатной форме вывести колонку “Остаток”, в соответствующем параметре области макета, необходимо выбрать значение набора:
НаборыДанных.Товары.Строка.Остатки.Итог.Остаток.СуммаРассмотрим путь к этому полю:
- НаборыДанных.Товары.Строка — стандартный путь, когда мы выводим данные по строкам многострочной коллекции;
- Остатки — имя соединения, то есть вложенный набор внутри строки;
- Итог.Остаток.Сумма — итог по числовой колонке “Остаток” вложенного набора; последний сегмент — имя агрегата.

Доступные поля набора данных “Товары”
Что окажется в печатной форме
Заголовок раздела «Что окажется в печатной форме»| Ссылка | Номенклатура | Ед. изм. | Кол-во | Остаток |
|---|---|---|---|---|
| Документ № 1 от 01.01.2023 | Номенклатура 1 | шт. | 10 | 150 |
| Документ № 1 от 01.01.2023 | Номенклатура 2 | шт. | 10 | 50 |
| Документ № 2 от 02.01.2023 | Номенклатура 1 | шт. | 10 | 150 |
Строк осталось столько же, сколько было в таблице “Товары”. Остаток по “Номенклатуре 1” — 150: это сумма по обоим складам, а не остаток одного из них. Если в форме нужен остаток по конкретному складу, склад должен быть в левом наборе и участвовать в условии соединения — тогда во вложенный набор попадут только его строки.

