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