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