Использование временных таблиц в построителе отчета


Использование временных таблиц в построителе отчета

Как известно платформа 8.1 не предполагает использование временных таблиц в построителе отчета.

Хотя часто это бывает необходимо.

Расмотрим вариант как это сделать.

Пример реализован в обработке для типовых конфигураций УПП и БП.

Для этих целей воспользуемся пакетом запросов, который стал с недавних пор доступен для построителя отчетов.

Необходимо специальным образом создать в первом пакете временную таблицу.

Смысл следующий, нужно создать колонки с нужными нам типами.

Например, у нас есть следующая таблица значений ТЗ

——————————————————————————————-

Имя колонки                            Тип колонки

——————————————————————————————-

Организация                           Справочник.Организации

Контагент                               Справочник.Контагенты

Договор                                   Справочник.ДоговорыКонтагентов

ВидДоговора                           Перечисление.ВидыДоговоровКонтрагентов

Сумма                                      число (15,2)

———————————————————————————————————-

Формируем тект построителя

ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Организации.пустаяСсылка) КАК Организация,                           // Это и есть наша
    ЗНАЧЕНИЕ(Справочник.Контрагенты.пустаяСсылка) КАК Контрагент,                               // наша временная
    ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.пустаяСсылка) КАК Договор,                    // таблица
    ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.пустаяСсылка) КАК ВидДоговора,
    ВЫРАЗИТЬ(0 КАК ЧИСЛО(15, 2)) КАК Сумма
ПОМЕСТИТЬ Таб_Временная
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    НДСРасчетыСПокупателямиОстатки.Организация,
    НДСРасчетыСПокупателямиОстатки.Покупатель,
    НДСРасчетыСПокупателямиОстатки.ДоговорКонтрагента,
    Таб_Временная.ВидДоговора,
    НДСРасчетыСПокупателямиОстатки.Документ,
    НДСРасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаНДС,
    Таб_Временная.Сумма КАК СуммаизВременнойТаблицы
ИЗ
    РегистрНакопления.НДСРасчетыСПокупателями.Остатки КАК НДСРасчетыСПокупателямиОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб_Временная КАК Таб_Временная
        ПО НДСРасчетыСПокупателямиОстатки.Организация = Таб_Временная.Организация
            И НДСРасчетыСПокупателямиОстатки.Покупатель = Таб_Временная.Контрагент
            И НДСРасчетыСПокупателямиОстатки.ДоговорКонтрагента = Таб_Временная.Договор

Как видим построитель отчета этот запрос прекрасно понимает, и мы можем оперировать с его полями как нам угодно.

Задача все-таки выполнить построитель чтоб он возвращал нужный нам результат!

Для этого необходимо выполнять не построитель отчета, а получить текст запроса и параметры из построителя и поставить его в запрос, где в менеджере временных таблиц уже находиться наша временная таблица!

Запрос=Новый Запрос;
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр(«ВременнаяТаблица«,ТЗ);

Запрос.Текст=«ВЫБРАТЬ * ПОМЕСТИТЬ Таб_Временная ИЗ &ВременнаяТаблица КАК ОБ_Таб«; // Помещаем во временную таблицу

Запрос.Выполнить();

// ….

//  

// ….

ЗапросПостроителя=ПостроительОтчета.ПолучитьЗапрос();
ТекстЗапросаПостроителя=ЗапросПостроителя.Текст;
Ч_Поз=Найти(ТекстЗапросаПостроителя,«;»); // Находи начало текста запроса

ТекстЗапросаДляВыполнения=Сред(ТекстЗапросаПостроителя,Ч_Поз+1);
Запрос.Текст=ТекстЗапросаДляВыполнения; // Устанавливаем текст основного запроса

Запрос.Параметры.Очистить();

Для каждого Парам Из ЗапросПостроителя.Параметры Цикл
    Запрос.УстановитьПараметр(Парам.Ключ,Парам.Значение); // Устанавливаем параметры запроса
КонецЦикла;
       
Попытка
    Результат=Запрос.Выполнить(); // И выполняем запрос
Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
КонецПопытки;

 В переменную  Результат получаем нужный нам результат запроса.

 

Имя колонки   Тип колонки
 Организация  Справочник.Организации
 Контрагент  Справочник.Контрагенты
 Договор  Справочник.ДоговорыКонтрагентов
 ВидДоговора  Перечисление.ВидыДоговоровКонтрагентов
 Сумма

 Число (15,2)

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *