Соединения

Содержание
  1. Внешний вид
  2. Пример

В разделе Запросы и Наборы были приведены примеры создания общих запросов (и наборов), когда данные не привязаны напрямую к источнику для печатной формы. Например: остатки товаров на складах, задолженность контрагентов и т.п. В таких случаях одна таблица может содержать строки, которые могут быть избыточными для отдельной печатной формы. Чтобы использовать в печатной форме только необходимые строки другого набора можно использовать механизм соединений.


Вид закладки "Соединения"

Важная информация

Соединение наборов с разным количеством строк не приводит к дублированию строк левого набора. Например: если соединить набор Шапка (1 строка) и Товары (10 строк) по полю “Ссылка”, то в наборе Шапка останется 1 строка. А количество строк набора “Товары” будет продиктовано настройкой вида соединения (по аналогии с видом набора). Технически соединение, это фильтр по набору с правой стороны, где значения колонок правой и левой стороны совпадают.

Внешний вид

Рассмотрим колонки таблицы соединений

КолонкаОписание
Левая сторона (набор / поле)Имя набора (или поля) с левой стороны
Правая сторона (набор / поле)Имя набора (или поля) с правой стороны
Имя соединенияИмя соединения (вложенного набора для левой стороны)
Вид набораСпособ формирования коллекции данных набора для использования в печатной форме
Служебное поле

Над табличной частью располагается командная панель. По умолчанию в ней находятся команды управления табличной частью. Дополнительно добавлены команды:

КомандаОписание
Добавить строку соединения
Добавить строку поля условия соединения

Пример

Рассмотрим работу механизма соединений на примере. Пусть у нас есть две таблицы “Товары” (табличная часть Товары из документа) и “Остатки” (остатки по товарам на складах).

Таблица “Товары”

СсылкаНоменклатураЕд. изм.Количество
Документ № 1 от 01.01.2023Номенклатура 1шт.10
Документ № 1 от 01.01.2023Номенклатура 2шт.10
Документ № 2 от 02.01.2023Номенклатура 1шт.10

Таблица “Остатки”

НоменклатураСкладОстаток
Номенклатура 1Склад 1100
Номенклатура 1Склад 250
Номенклатура 2Склад 150

Мы хотим вывести в печатную форму таблицу “Товары” + колонка “Остаток”. Классическое левое соединение таблицы “Товары” и “Остатки” по полю “Номенклатура” приведет к задвоению данных, поскольку “Номенклатура 1” у нас хранится на 2-х складах. Однако, соединение в конструкторе работает скорее как фильтр. Поэтому соединение не приводит к тому, что в таблице “Товары” становится больше строк. При любом раскладе, левая таблица не изменяется. Она дополняется колонкой, в которой хранятся данные правой таблицы, отобранные по заданным критериям.

Итоговый набор

В нашем случае итоговый набор данных “Товары” будет выглядеть следующим образом:

СсылкаНоменклатураЕд. изм.Кол-воОстатки  
Документ № 1 от 01.01.2023Номенклатура 1шт.10НоменклатураСкладОстаток
    Номенклатура 1Склад 1100
    Номенклатура 1Склад 250
Документ № 1 от 01.01.2023Номенклатура 2шт.10НоменклатураСкладОстаток
    Номенклатура 2Склад 150
Документ № 2 от 02.01.2023Номенклатура 1шт.10НоменклатураСкладОстаток
    Номенклатура 1Склад 1100
    Номенклатура 1Склад 250

То есть, внутри каждой строки мы видим вложенную “копию” таблицы “Остатки” с фильтром по значению колонок “Номенклатура”.

При этом вид данных будет зависеть от того, какой “Вид набора” мы применим (подробнее про виды наборов).

В итоге, для того, чтобы в печатной форме вывести колонку “Остаток”, в соответствующем параметре области макета, необходимо выбрать значение набора:

НаборыДанных.Товары.Строка.Остатки.Итог.Остаток

Рассмотрим путь к данном полю:

  • НаборыДанных.Товары.Строка - это стандартный путь, когда мы выводим данные по строкам многострочной коллекции
  • Остатки.Итог.Остаток - это итог по полю “Остаток” в коллекции “Остатки”.


Доступные поля набора данных "Товары"