К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как вывести два отчета в одной СКД 1С

Разбираем, как вывести два отчета в одной СКД 1С: вложенные схемы, несколько наборов данных, варианты настроек и связи таблиц. Примеры, ошибки, FAQ.

Задача вывести два отчета в одной схеме компоновки данных (СКД) возникает, когда пользователю нужно видеть рядом, например, продажи и остатки, план и факт, обороты и сальдо — без переключения между отдельными отчетами. СКД позволяет решить это несколькими способами: через несколько наборов данных с объединением или связью, через вложенные схемы компоновки и через несколько вариантов настроек в одном отчете.

Выбор способа зависит от того, должны ли данные двух «отчетов» стоять в одной таблице рядом по колонкам, выводиться последовательно друг под другом или просто переключаться внутри одного объекта отчета. Каждый сценарий реализуется по-разному, и ошибка в выборе приводит либо к задвоению строк, либо к пустым колонкам.

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

Определяем, как именно должны располагаться два отчета

Прежде чем открывать конструктор СКД, нужно ответить на вопрос: как пользователь должен увидеть результат. Вариантов три. Первый — одна таблица, где колонки берутся из двух разных источников (например, колонка «Продажи» из регистра продаж и колонка «Остаток» из регистра остатков, сгруппированные по номенклатуре). Второй — две таблицы, выводимые последовательно в одном результате отчета. Третий — один отчет, внутри группировок которого раскрывается другой отчет (мастер-деталь).

От ответа зависит архитектура схемы. Для первого варианта нужны два набора данных и связь между ними. Для второго — либо объединение наборов, либо программная компоновка нескольких шаблонов. Для третьего — механизм вложенных схем. Смешивать подходы в одной схеме можно, но сложность поддержки растет, поэтому начинать стоит с самого простого подходящего варианта.

Маршрут решения

Как выбрать действие

Нужны колонки из разных источников в одной строке (номенклатура + продажи + остатки)Создайте два набора данных-запроса и настройте связь наборов на закладке «Связи наборов данных»
Нужен детальный отчет внутри группировки другого (контрагент → его документы)Используйте вложенную схему компоновки данных на закладке «Вложенные схемы»
Нужно переключаться между двумя разными представлениями одних данныхСоздайте два варианта настроек в одной схеме
Нужны две независимые таблицы одна под другойИспользуйте объединение наборов с разными ресурсами или программный вывод нескольких компоновок

Два набора данных со связью: два отчета в одной таблице

Самый частый сценарий — свести данные двух виртуальных таблиц в одну строку отчета. Создайте в схеме компоновки два набора данных типа «Запрос». Первый, например, выбирает обороты продаж по номенклатуре, второй — остатки по той же номенклатуре. Каждый запрос пишется как обычно, со своими параметрами периода.

Далее откройте закладку «Связи наборов данных» и добавьте связь: источник — первый набор, приемник — второй, выражение-источник и выражение-приемник — поле связи (Номенклатура). СКД по умолчанию выполняет левое соединение: все строки первого набора плюс совпавшие строки второго. Если нужны все строки обоих наборов (включая номенклатуру, которая есть только в остатках), связь через «левое соединение» недостаточна — потребуется третий набор, собирающий полный список ключей, или объединение.

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

Порядок действий для связи наборов
  1. 1
    Создайте набор данных 1: запрос к первому источнику (например, Продажи.Обороты)
  2. 2
    Создайте набор данных 2: запрос ко второму источнику (например, ТоварыНаСкладах.Остатки)
  3. 3
    На закладке «Связи наборов данных» добавьте связь по ключевому полю (Номенклатура)
  4. 4
    На закладке «Ресурсы» добавьте суммируемые поля обоих наборов
  5. 5
    В настройках варианта добавьте группировку по ключу и выведите оба ресурса
  6. 6
    Сформируйте отчет и сверьте итоги с исходными отчетами

Вложенные схемы: отчет внутри отчета

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

Ключевой момент — связь вложенной схемы с родительской. На той же закладке укажите поля связи: поле родительской группировки и параметр (или поле отбора) вложенной схемы. Тогда при выводе группировки СКД автоматически отфильтрует вложенный отчет по текущему значению. Без этой связи вложенная схема выведет все данные целиком в каждой строке, что приведет к раздуванию результата и неверным цифрам.

В настройках основной схемы перетащите вложенную схему в нужную группировку через конструктор настроек (кнопка «Конструктор настроек» на закладке «Настройки» — там вложенные отчеты добавляются как элементы структуры). Проверьте результат на данных, где у одной группировки есть детальные записи, а у другой нет: пустая вложенная таблица не должна ломать вывод остальных строк.

Несколько вариантов настроек: два отчета в одном объекте

Если «два отчета» — это два разных представления одних или смежных данных (например, отчет по менеджерам и отчет по товарам на одном наборе данных), достаточно создать два варианта настроек. На закладке «Настройки» в дереве вариантов добавьте новый вариант, назовите его понятно («Продажи по менеджерам», «Продажи по номенклатуре») и настройте каждый независимо: свои группировки, отборы, ресурсы, условное оформление.

Пользователь переключает варианты через кнопку выбора варианта в форме отчета, либо вариант задается программно перед формированием. Это самый дешевый по трудозатратам способ «двух отчетов в одном»: схема одна, набор данных один, поддерживать нужно только настройки. Ограничение очевидно: одновременно на экране виден только один вариант.

Практический прием: если варианты используют разные параметры, вынесите общие параметры (период, организация) в оба варианта и включите их в пользовательские настройки с режимом «Быстрый доступ», чтобы пользователю не приходилось открывать расширенные настройки.

Две таблицы друг под другом в одном результате

Когда требуется вывести в один табличный документ две независимые таблицы последовательно (например, свод по продажам, а ниже — свод по возвратам), прямой кнопки «вывести две таблицы» в дизайнере настроек нет. Рабочие варианты:

  • Объединение наборов данных. Два запроса объединяются через «ОБЪЕДИНИТЬ ВСЕ» в одном наборе или создаются как два набора внутри объединения, с полем-признаком типа строки. Группировка по этому признаку дает два блока в одном отчете с общими итогами.
  • Разные ресурсы и группировки в одной структуре. Если таблицы отличаются только разрезом, иногда достаточно двух соседних группировок верхнего уровня в одном варианте.
  • Программная компоновка. В модуле объекта отчета через компоновщик макета последовательно выводятся две компоновки в один табличный документ. Это дает полный контроль, но требует кода и отключает часть интерактивности.

Проверка корректности результата

После настройки схемы обязательна сверка. Сформируйте каждый исходный «отчет» отдельно стандартными средствами (универсальным отчетом или типовым отчетом по регистру) и сравните итоги с итогами колонок объединенной схемы. Расхождение почти всегда означает одну из трех ошибок: неполное соединение (потеряны строки без пары), дублирование связи (строка первого набора связалась с несколькими строками второго и сумма задвоилась) или разные отборы в запросах.

Отдельно проверьте поведение параметров. Если в обоих запросах используется период, убедитесь, что параметры объявлены один раз на закладке «Параметры» и проброшены в оба набора. Два независимых параметра «НачалоПериода» в разных наборах приведут к тому, что пользователь задаст дату в одном месте, а второй набор посчитается за другой период.

Контрольные точки

Как проверить результат

Итог по ресурсу первого набора
Норма

Совпадает с итогом отдельного отчета по тому же регистру

Тревожный признак

Итог больше — дублирование связи; меньше — потеряны строки без пары

Строки с пустым вторым ресурсом
Норма

Присутствуют, если ключ есть только в первом наборе (левое соединение)

Тревожный признак

Строки исчезли — связь работает как внутреннее соединение или отбор отсекает пустые

Параметры периода
Норма

Один параметр управляет обоими наборами

Тревожный признак

Два параметра с похожими именами в форме отчета

Вложенная схема
Норма

В каждой группировке показывает только связанные строки

Тревожный признак

В каждой группировке повторяется полный список данных

Типичные ошибки и ограничения

Главная ошибка — ожидание полного соединения (FULL JOIN) от связи наборов. СКД связывает наборы через левое соединение от первого набора к остальным. Если нужны строки, существующие только во втором источнике, сделайте первым набором запрос, собирающий полный перечень ключей (например, всю номенклатуру из справочника с отбором), и связывайте оба фактических набора с ним.

Вторая частая проблема — производительность. Два тяжелых запроса с соединением на уровне СКД выполняются медленнее, чем один запрос с соединением внутри текста запроса. Если оба источника — таблицы одной базы, часто эффективнее написать один запрос с ЛЕВЫМ СОЕДИНЕНИЕМ двух виртуальных таблиц и обойтись одним набором данных. Связь наборов оправдана, когда источники разнородные (запрос + объект, запрос + внешний источник) или запросы принципиально разной структуры.

Типичные ошибки
01
Связь по неуникальному полю во втором наборе — суммы первого ресурса задваиваются
02
Ожидание полного соединения от связи наборов — строки, существующие только во втором наборе, теряются
03
Дублирующиеся параметры периода в двух наборах — наборы считаются за разные даты
04
Вложенная схема без связи с родительской — полный детальный отчет повторяется в каждой строке
05
Составные типы полей при объединении — медленная компоновка и неработающие отборы

Частые вопросы

Можно ли вывести два отчета в одной СКД без программирования?

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

Почему при связи наборов пропадают строки из второго запроса?

Связь наборов в СКД работает как левое соединение: в результат попадают все строки первого набора и только совпавшие строки второго. Решение — сделать первым набором запрос с полным списком ключей (например, весь справочник номенклатуры) и связать с ним оба фактических набора.

Чем вложенная схема отличается от связи наборов данных?

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

Как задать разные периоды для двух наборов данных?

Объявите две пары параметров (например, Период1Начало/Период1Конец и Период2Начало/Период2Конец) на закладке «Параметры» и используйте каждую пару в своем запросе. Если периоды должны совпадать, используйте один общий параметр в обоих наборах.

Что быстрее: связь наборов или соединение в одном запросе?

Один запрос с соединением виртуальных таблиц обычно выполняется быстрее, потому что СУБД оптимизирует его целиком. Связь наборов оправдана для разнородных источников (запрос плюс таблица значений, запрос плюс внешний источник данных) или когда запросы логически независимы.

Можно ли дать пользователю переключение между двумя отчетами без доработки формы?

Да, через варианты настроек. Создайте два варианта в одной схеме, дайте им понятные названия — пользователь переключит их стандартной кнопкой выбора варианта в форме отчета. Дополнительно варианты можно вывести в командный интерфейс подсистемы через пользовательские настройки отчета.

Итог

Что важно запомнить

Два отчета в одной СКД реализуются связью наборов данных (колонки рядом), вложенной схемой (отчет внутри группировки) или несколькими вариантами настроек (переключение). Помните, что связь наборов — это левое соединение, параметры периода должны быть общими, а результат обязательно сверяется с исходными отчетами по итогам.