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