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

02.11.11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ....

//  

// ....

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

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

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

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

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

 

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

 Число (15,2)

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122405    673    389    

716

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5757    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2007    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6300    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1750    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5398    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16201    skovpin_sa    14    

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

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

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

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

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

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