При разработке отчетов в системе компоновки данных (СКД) мы часто сталкиваемся с задачей вывода иерархических структур. Особенно это актуально, когда нужно автоматизировать процесс создания сложных отчетов. Классический пример: нам необходимо вывести список документов (Заказы поставщикам), а под каждым документом — табличную часть с товарами в виде аккуратной таблицы с шапкой и границами.
Вопрос, поднятый автором, касается использования механизма Вложенных схем для решения этой задачи. Ситуация следующая: основная схема выводит данные документа (Реквизиты шапки), а вложенная схема должна выводить товары. Однако по умолчанию СКД может выводить это в виде простого списка или группировок, игнорируя табличное представление, которое мы ожидаем увидеть (с колонками и заголовками).
Давайте подробно разберем, как решить эту проблему, проанализируем, почему подход с вложенными схемами может быть не оптимальным, и рассмотрим альтернативный, более производительный способ реализации через связи наборов данных.
В нашем распоряжении есть два запроса. Первый получает данные шапки документов, второй — данные табличных частей. Стоит отметить, что иногда данные для таких отчетов требуется получать из экранных форм, например, передавая данные динамического списка в отчет СКД вместе со всеми наложенными пользователем фильтрами.
Запрос для основной схемы (Шапка документов):
ВЫБРАТЬ
ЗаказПоставщику.Ссылка,
ЗаказПоставщику.Номер,
ЗаказПоставщику.Дата,
ЗаказПоставщику.СуммаДокумента
ИЗ
Документ.ЗаказПоставщику КАК ЗаказПоставщику
ГДЕ
ЗаказПоставщику.Дата МЕЖДУ &Дата1 И &Дата2
Запрос для вложенной (или детальной) части (Товары):
ВЫБРАТЬ
ЗаказПоставщикуТовары.Ссылка,
ЗаказПоставщикуТовары.Номенклатура,
ЗаказПоставщикуТовары.СуммаНДС
ИЗ
Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ГДЕ
ЗаказПоставщикуТовары.Ссылка.Дата МЕЖДУ &Дата11 И &Дата21
Разберем три основных способа реализации требуемого внешнего вида.
Прежде чем углубляться в настройку вложенных схем, давайте обратим внимание на архитектуру решения. Использование вложенных схем для вывода строк документа внутри группировки документа — это часто избыточное решение. Кроме того, важно помнить про оптимизацию отчетов с набором данных типа "объект", так как неправильная работа с наборами данных может привести к значительным задержкам при формировании больших отчетов.
Наиболее правильным, быстрым и гибким способом в 1С является использование механизма Связи наборов данных в рамках одной схемы компоновки. Если же вам требуется нестандартное представление данных в строках, вы можете использовать прием, позволяющий собрать значения колонки из нескольких строк в одну строку или таблицу.
Алгоритм действий:
ГДЕ по дате, так как фильтрация будет происходить через связь с основным набором. Однако, поле Ссылка (владелец строки) должно присутствовать.Настраиваем связь:
СсылкаСсылкаИменно здесь мы формируем нужную структуру "Таблица внутри списка".
Ссылка (или Заказ). Это будет наша "шапка".Это ключевой момент. Если вы просто добавите поля товаров в группировку, они выведутся списком. Элемент "Таблица" заставит СКД нарисовать сетку.
(Детальные записи).(Детальные записи), если нужно динамическое формирование колонок, но обычно достаточно определить их в выбранных полях).При таком подходе СКД автоматически сформирует отчет, где под каждым заказом будет разворачиваться красивая таблица с товарами, имеющая собственную шапку колонок.
Если по каким-то причинам вы обязаны использовать именно Вложенные схемы, хотя в современной практике зачастую две разных схемы в одном отчете считаются избыточными, давайте разберем, как заставить их выглядеть таблицей.
Проблема, описанная автором ("получается только список"), возникает из-за настроек самой вложенной схемы или способа её вывода в основной.
Шаг 1: Настройка Вложенной схемы
Откройте саму вложенную схему (ту, которая выводит товары). Перейдите на вкладку Настройки.
В структуре отчета (дерево слева) убедитесь, что вы используете элемент Таблица, а не просто группировку "Детальные записи".
(Детальные записи).Если в настройках вложенной схемы будет стоять просто "Группировка" или "Детальные записи", СКД выведет данные простым перечнем полей, без сетки.
Шаг 2: Настройка Основной схемы
В основной схеме на вкладке настроек вы создаете группировку по документам. Внутрь этой группировки вы добавляете специальный элемент — Вложенная схема.
Важнейший момент: Связь параметров.
Чтобы вложенная схема показала товары именно текущего документа, а не все товары подряд, нужно настроить передачу параметров. В настройках элемента "Вложенная схема" (в основной схеме) найдите раздел параметров.
Вам нужно передать значение ссылки текущего документа из основной схемы в параметр вложенной схемы (например, в параметр &Ссылка, который вы должны добавить в запрос вложенной схемы).
// Пример условия в запросе вложенной схемы
ГДЕ ЗаказПоставщикуТовары.Ссылка = &Ссылка
Шаг 3: Оформление
Часто вложенная схема выводится с собственными заголовками отчета, параметрами и отборами, что загромождает вид. Чтобы это убрать:
Иногда стандартных средств настройки структуры (Таблица/Список) недостаточно, или они работают некорректно в сложных иерархиях. В таких ситуациях, чтобы расширить возможности стандартного интерфейса, может быть полезна пользовательская СКД, либо использование собственных макетов оформления.
Как это делается:
Параметр: Номенклатура.Когда вы подключите макет к группировке, СКД перестанет использовать стандартную логику отрисовки и выведет данные точно так, как вы нарисовали в макете — с четкими границами таблицы.
Если ваша задача — вывести список документов и их состав:
Вложенные схемы оправданы, когда структура "подчиненного" отчета кардинально отличается и очень сложна (например, диаграммы, кросс-таблицы с другой логикой), или когда нужно объединить два совершенно разных отчета ("Продажи" и "Остатки") последовательно друг за другом (схема "Контейнер"). Для задачи "Документ - Строки" это избыточный инструмент.