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

02.11.11

Разработка - Запросы

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

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

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

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

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

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

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

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

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

-------------------------------------------------------------------------------------------

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

-------------------------------------------------------------------------------------------

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

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

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

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

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

----------------------------------------------------------------------------------------------------------

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

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

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

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

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

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

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

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

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

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

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

// ....

//  

// ....

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

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

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

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

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

 

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

 Число (15,2)

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184692    1029    403    

968

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    2198    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5731    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13138    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8218    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3191    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10799    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. sword444 153 02.11.11 22:12 Сейчас в теме
Использование временных таблиц в построителе отчета

Перейти к публикации

1. Поручик 4675 02.11.11 22:12 Сейчас в теме
В эпиграфе надо написать: Фанатам платформы 8.1. посвящается.
2. anig99 2855 03.11.11 08:14 Сейчас в теме
в 8.1 уже есть СКД. Фанатам 8.0
Проблема не достойна статьи.
4. Поручик 4675 03.11.11 11:44 Сейчас в теме
(2) (3) СКД не в каждую дыру сунешь, всё-таки меру надо знать.
3. director04 3663 03.11.11 09:07 Сейчас в теме
Поставил плюс за изворотливость ума. Но не закисни, давно пора освоить СКД.
5. ediks 338 06.11.11 11:12 Сейчас в теме
Что-то я не понял к чему эта статья...
1. Может кто-то объяснит, что хотел автор получить в результате? Что даст внутреннее соединение пустой таблицы с регистром НДС?
2. К какому году относится эта статья? Поиск в Интернете указал на статью уважаемого Groovy, датированную маем 2008 года, в которой он пишет, что начиная с версии 8.1.11 платформа поддерживает пакетные запросы.Сейчас уже на дворе конец 2011 года и версия 8.1.15. Это к тому, что автор пишет:

Как известно платформа 8.1 не предполагает использование временных таблиц в построителе отчета.
...
Для этих целей воспользуемся пакетом запросов, который стал с недавних пор доступен для построителя отчетов.
6. Gmix 417 15.02.12 09:38 Сейчас в теме
Уважаемый sword444
Первоисточник нужно сообщать.
Если вы будете перепечатывать статьи с моего сайта придется сообщить модераторам.

На счет статьи, алгоритм описан действительно для платформы 8.1.
Алгоритм придуман еще в 2006 году
Статья написана 11.12.08 21:03 тут

На счет СКД иногда её не целесообразно использовать.
Например: Нужно использовать возможности построителя в части установки произвольных отборов для получения текста запроса.
Hexed; Synoecium; +2 Ответить
Оставьте свое сообщение