Записи исходного набора данных, для которых не были найдены записи в наборе данных – приемнике, в результат компоновки не попадут.
Полное описание, параметры и ограничения
ТипСвязиНаборовДанныхКомпоновкиДанных.Внутренняя (DataCompositionDataSetsLinkType.Inner)
ТипСвязиНаборовДанныхКомпоновкиДанных (DataCompositionDataSetsLinkType)
Внутренняя (Inner)
Доступен, начиная с версии 8.1.
Описание:
Записи исходного набора данных, для которых не были найдены записи в наборе данных – приемнике, в результат компоновки не попадут.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Сопоставить свои книги и неполный прайс: Внутренняя
Связь меняется в скомпилированном макете и передаётся реальному процессору с двумя собственными таблицами.
Где и как запускать
Тело кнопки собственной обычной формы, толстый клиент; только внешние таблицы в памяти.
Подготовка
Свой отчёт УчебныеСвязиКниг, макет ОсновнаяСхемаКомпоновкиДанных. Создайте ДВА набора данных типа ОБЪЕКТ, не запрос. Первый Книги: ИмяОбъекта=СвоиКниги, поля КодКниги Строка и Название Строка. Второй Цены: ИмяОбъекта=СвоиЦены, поля КодЦены Строка и Цена Число. Пути к данным совпадают с указанными уникальными именами полей.
В связях СКД создайте одну связь: источник Книги, приёмник Цены, выражение источника КодКниги, выражение приёмника КодЦены. Вариант Подробно: детальные записи, выбранные поля КодКниги, Название, Цена.
Основной блок — тело кнопки собственной обычной формы в толстом клиенте; три дополнительные функции отдельно в том же модуле. Имена СвоиКниги / СвоиЦены структуры внешних данных должны точно совпасть с ИмяОбъекта соответствующих наборов.
Объектные наборы выбраны намеренно: два запроса одного источника компоновщик может объединить оптимизацией, и тогда отдельной связи в готовом макете не будет. Пример требует именно одну скомпилированную связь и не подставляет фиктивную при её отсутствии.
Схема = Отчеты.УчебныеСвязиКниг.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Компоновщик = УчебныйКомпоновщик(Схема, "Подробно");
ПостроительМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = ПостроительМакета.Выполнить(Схема, Компоновщик.Настройки);
Если Макет.СвязиНаборовДанных.Количество() <> 1 Тогда
ВызватьИсключение "Нужна одна настоящая связь двух собственных объектных наборов";
КонецЕсли;
Связь = Макет.СвязиНаборовДанных[0];
Связь.ТипСвязи = ТипСвязиНаборовДанныхКомпоновкиДанных.Внутренняя;
ВнешниеДанные = Новый Структура("СвоиКниги,СвоиЦены", СвоиКнигиСвязи(), СвоиЦеныСвязи());
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет, ВнешниеДанные);
Лист = Новый ТабличныйДокумент;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
Вывод.УстановитьДокумент(Лист);
Вывод.Вывести(Процессор);
Лист.Показать("Своя связь: Внутренняя");
Сообщить("Использована настоящая связь: " + Строка(Связь.ТипСвязи));Тот же модуль: две собственные книги
Функция СвоиКнигиСвязи()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("КодКниги", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
Первая = Таблица.Добавить();
Первая.КодКниги = "BOOK-1";
Первая.Название = "Учебная книга";
Вторая = Таблица.Добавить();
Вторая.КодКниги = "BOOK-2";
Вторая.Название = "Учебная тетрадь";
Возврат Таблица;
КонецФункцииТот же модуль: цена только одной книги
Функция СвоиЦеныСвязи()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("КодЦены", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Запись = Таблица.Добавить();
Запись.КодЦены = "BOOK-1";
Запись.Цена = 250;
Возврат Таблица;
КонецФункцииТот же модуль: найти действительный вариант и инициализировать компоновщик
Функция УчебныйКомпоновщик(Схема, ИмяВарианта)
Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Источник);
Для Каждого Вариант Из Схема.ВариантыНастроек Цикл
Если Вариант.Имя = ИмяВарианта Тогда
Компоновщик.ЗагрузитьНастройки(Вариант.Настройки);
Возврат Компоновщик;
КонецЕсли;
КонецЦикла;
ВызватьИсключение "Создайте собственный вариант схемы: " + ИмяВарианта;
КонецФункцииРазбор по шагам
Создайте точную схему двух объектных наборов и одну связь.
Скомпилируйте макет и назначьте ТипСвязи настоящей связи.
Передайте собственные таблицы процессору и сравните строки результата.
Как проверить результат
Книг две, цена есть только у BOOK-1. Внешняя связь сохраняет книгу без совпавшей цены, Внутренняя оставляет совпавшие записи. Отсутствующая цена не является нулевой продажной ценой.
Меняется ТипСвязи объекта СвязьНаборовДанныхМАКЕТАКомпоновкиДанных, не одноимённый выдуманный параметр схемы. Результат формируется после изменения этого же макета.
Нет запросов к рабочим данным и внешней сети. BSL / компоновка при сборке справочника не выполнялись.
Ожидаемый результат
Есть два конкретных источника с несовпадением ключа и реальное применение внутренней / внешней связи.
На что обратить внимание
Не маскируйте отсутствие связи новым пустым объектом и не объединяйте дублированные ключи без учёта размножения строк.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.