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

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

Где находятся вложенные схемы в конструкторе

В конструкторе схемы компоновки данных есть отдельная закладка «Вложенные схемы». На ней:

Колонка / кнопкаНазначение
ИмяИдентификатор, по которому схема выбирается в структуре настроек
ЗаголовокПредставление для пользователя
Схема (открыть)Редактирование самой вложенной схемы — тот же конструктор
НастройкиСвязь с основной схемой: значения параметров и отборы

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

Пример 1: цены к каждой строке отчёта по расходу

Задача: отчёт по расходу товаров со склада по дням и номенклатуре, и к каждой номенклатуре — её цена на дату движения из регистра сведений ЦеныНоменклатуры.

Основная схема

Набор данных — обороты регистра накопления с периодичностью «День»:

Запрос 1С
ВЫБРАТЬ
	ТоварыОбороты.Номенклатура КАК Номенклатура,
	ТоварыОбороты.ПериодДень КАК ПериодДень,
	ТоварыОбороты.КоличествоРасход КАК КоличествоРасход
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ТоварыОбороты

КоличествоРасход объявляем ресурсом с функцией «Сумма». В настройках — группировки ПериодДень и вложенная в неё Номенклатура, выбранное поле — расход.

Вложенная схема с ценами

На закладке «Вложенные схемы» добавляем схему Цены и открываем её. Запрос:

Запрос 1С
ВЫБРАТЬ
	ЦеныСрез.Номенклатура КАК Номенклатура,
	ЦеныСрез.Цена КАК Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ) КАК ЦеныСрез

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

Связываем схемы

Возвращаемся в основную схему, на закладке «Вложенные схемы» нажимаем «Настройки» у схемы Цены:

  1. Параметры. Для параметра ДатаЦены включаем использование и в значение выбираем поле основной схемы ПериодДень. Поля основной схемы находятся в группе ОбъектНастройкиВладелец.
  2. Отбор. Добавляем элемент: левое значение — ОбъектНастройкиВладелец.Номенклатура, вид сравнения «Равно», правое — Номенклатура вложенной схемы.

Теперь вложенный отчёт «знает» дату и товар той строки, внутри которой он выводится.

Помещаем вложенный отчёт в структуру

В настройках основной схемы выделяем группировку Номенклатура и добавляем в неё вложенный отчёт, выбрав схему Цены. Чтобы под каждой строкой не печатались служебные шапки «Параметры» и «Отбор», в «Других настройках» вложенного отчёта отключаем их вывод.

Вложенные схемы СКД: мини-отчёты, привязанные к строкам основного отчёта
Вложенные схемы СКД: мини-отчёты, привязанные к строкам основного отчёта

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

Пример 2: отдельный вариант отчёта на вложенной схеме

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

  1. Добавьте вложенную схему (например, ПрайсЛист) с нужным запросом и параметрами.
  2. В основной схеме создайте новый вариант.
  3. В структуру этого варианта добавьте только вложенный отчёт ПрайсЛист.
  4. Параметры вложенной схемы, которые должен заполнять пользователь, включите в пользовательские настройки с режимом «Быстрый доступ».

Пользователь переключает варианты привычным способом и не догадывается, что за ними разные схемы. Минус — схема отчёта разрастается, и её сложнее сопровождать. Если вариантов с разными запросами больше двух-трёх, я обычно делаю отдельные отчёты.

Пример 3: несколько отчётов на одной форме

Самый полезный сценарий. Руководитель хочет видеть на одном экране движение товаров по складам и рядом — анализ отгрузок автотранспортом и по железной дороге. Все три отчёта уже существуют по отдельности.

Порядок:

  1. В конструкторе существующего отчёта сохраните его схему в XML-файл.
  2. В основной схеме добавьте вложенную схему и загрузите в неё сохранённый файл.
  3. В «Настройках» вложенной схемы свяжите её параметры периода и организации с параметрами основной схемы — тогда пользователь заполняет их один раз.
  4. Создайте вариант отчёта и добавьте в структуру на верхний уровень основную группировку и вложенные отчёты друг за другом.

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

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

Вложенные схемы в коде

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

1С
// Подменяет вложенную схему актуальной схемой отчёта-источника перед компоновкой.
Процедура ОбновитьВложеннуюСхему(Схема, ИмяВложеннойСхемы, ИмяОтчетаИсточника)

	ВложеннаяСхема = Схема.ВложенныеСхемыКомпоновкиДанных.Найти(ИмяВложеннойСхемы);
	Если ВложеннаяСхема = Неопределено Тогда
		Возврат;
	КонецЕсли;

	СхемаИсточника = Отчеты[ИмяОтчетаИсточника].ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	ВложеннаяСхема.Схема = СхемаИсточника;

КонецПроцедуры

Вызывать такую процедуру нужно на сервере до создания макета компоновки, например в ПриКомпоновкеРезультата при собственной реализации вывода. Учтите, что имена параметров в схеме-источнике должны совпадать с теми, что используются в связях, иначе параметры молча останутся пустыми.

Когда вложенные схемы не нужны

ЗадачаЧем решать лучше
Добавить колонку из другой таблицыСоединение в запросе или связь наборов данных
Цена на дату каждой строкиСрез последних в запросе с соединением по периоду или связь наборов
Вывести две независимые таблицыДве группировки-таблицы в одной схеме, если запросы простые
Свести три готовых отчёта на одну формуВложенные схемы — здесь они на своём месте

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

Типичные ошибки

  • Вложенный отчёт выводит все данные без фильтра. Не задан отбор в «Настройках» вложенной схемы или выбрано поле не из группы ОбъектНастройкиВладелец.
  • Пустые значения во вложенном отчёте. Параметр связан, но у него не включено использование, или поле-владелец не входит в группировку, внутри которой стоит вложенный отчёт.
  • Лишние шапки под каждой строкой. Не отключён вывод параметров и отбора в «Других настройках» вложенного отчёта.
  • Разное оформление. У вложенной схемы свой стиль; если нужно единообразие, задайте одинаковый макет оформления.

Сводные отчёты из нескольких источников я делаю в рамках разработки отчётов на СКД; если руководству нужна именно аналитика с графиками и срезами, иногда разумнее сразу смотреть в сторону BI-аналитики.

Коротко

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