1с построитель отчета менеджер временных таблиц

Обновлено: 07.07.2024

В общем, необходимо сделать отчет на базе универсального отчета. Проблема в том, что необходимо было преобразовать значение из строки в число, что в запросе невозможно. Поэтому решили сначала отдельно преобразовать нужные значения с созданием ТЗ, а далее помещать ее в запрос. Но в построителе отчета никак не пойму как сделать менеджер временных таблиц. Подскажите, плиз, решение) вот текущий код:

Через ОписаниеИсточникаДанных можно попробовать ТЗ построителю передать.

сделала через источник данных, но при формировании отчета не выводятся показатели по измерениям, ставлю "показывать детальные записи" в истина, выводятся. Делала все стандартно, как нужно формировать универсальный отчет. Может при использовании источника данных нужны еще какие то специальные настройки?

1. 2. Все это дело можно перенести в запрос: 3. Для чего создается МенеджерВременныхТаблиц? 4. Добавьте Итоги в колонки описания источника данных. Поиск в СП: КолонкаОписанияИсточникаДанных.

к п.2 и 3: Т.к в запросе невозможно привести строку к числу, для этого осуществляем преобразование отдельно, и потому и создаем менеджер временных таблиц к п. 4: вот именно это и помогло, надо было для каждого показателя такую вот строчку писать:

Просто, всё можно сделать в одном запросе (пусть, с временной таблицей), без менеджера временных таблиц. Менеджер временных таблиц нужен, когда разные запросы к какой-то временной таблице обращаются. Он хранит ВТ до тех пор, пока не будет уничтожен или закрыт. СП: Если временная таблица создается, используется и уничтожается в рамках одного пакета запросов, менеджер временных таблиц создавать не нужно.

подскажите тогда, как сделать проще? просто первый раз работаю с временными таблицами

Ну, вот пример простого пакетного запроса с временными таблицами без использования менеджера временных таблиц:

ну это то я знаю, но мне то надо чтобы извне таблица значений помещалась во временную таблицу, а кроме как менеджера я не знаю как это сделать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// .

//

// .

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

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

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

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

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

Напомню, раньше при попытке подцепить временную таблицу, не описанную в запросе, СКД выдавала ошибку.


И для использования внешних источников данных приходилось использовать Набор данных объект.


Нельзя сказать, что он не выполнял свои задачи, нет. Но вручную набивать все поля набора, прописывать роли и типы значений было весьма утомительно.

С выходом платформы 8.3.17 ситуация в корне поменялась.


Рассмотрим задачу. Необходимо вывести начисления и удержания сотрудников (сотрудник, вид расчета, сумма) с их кадровыми данными (подразделение, должность, график работы, вид занятости). Раньше нужно было писать многостраничный пакетный запрос с обращением к нескольким регистрам сведений (упомянутые данные хранятся минимум в 6 регистрах сведений).




Да, да, я знаю, что данные надо выбирать не из всех этих регистров, но позвольте нагнать немного саспенса)

Либо воспользоваться механизмом представлений, который тоже имеет свои ограничения и нюансы. И да, временные таблицы в запросе все равно пришлось бы описывать.

Теперь в запросе можно использовать данные временных таблиц, не описанных в самом наборе данных.

Как можно заметить, таблица ВТКадровыеДанныеСотрудников в запросе появляется сразу в соединении с основной таблицей, без ее предварительного объявления. Для того, чтобы компоновщик настроек мог понять, с каким типами данных из временной таблицы он имеет дело, желательно прописать это в тексте запроса, используя выражения языка запросов ВЫРАЗИТЬ (ВТ.ЗначениеПоля КАК < Описание типа >) или ЕСТЬNULL (ВТ.ЗначениеПоля, < Пустое значение такого же типа >). Для составных типов можно будет использовать выражение ВЫБОР КОГДА с последовательным описанием типов.

Затем в предопределенной процедуре ПриКомпоновкеРезультата модуля отчета, инициализируем менеджер временных таблиц с требуемыми данными. В результате инициализации в МВТ должа быть сформирована временная таблица с именем, идентичным объявленному в наборе данных.

Само получение данных и помещение их в менеджер временных таблиц занимает ровно две строки

Таким образом можно получать данные любой структуры и сложности и использовать их в наборе данных схемы компоновки. Как по мне - отличная новость. Скорость разработки увеличивается на порядок. Можно помещать в МВТ свои таблицы значений, собранных по сложному алгоритму с обходом их в цикле. Можно, как в моем примере, использовать типовые функции получения данных. Можно использовать результат формирования других отчетов, скомпонованных в таблицу значений. Можно. Впрочем, оставлю простор для ваших фантазий)

Данный механизм работает в том числе и в режиме совместимости (я проверял на 8.3.14).

Пример взят предельно упрощенный, лишь для того, чтобы продемонстрировать работу механизма. На практике я уже применил этот метод работы СКД при разработке отчета, в котором начисления выводились вместе с численностью по штатному расписанию, фактической и среднесписочной численностью.

За рамками статьи остались некоторые вопросы вроде производительности и нагрузки на сервер.

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

Но что делать, когда использования пакетного запроса недостаточно для решения задачи? Например, когда после создания временной таблицы требуется произвести какие-то действия с помощью встроенного языка 1С и только после этого получить окончательный результат запроса. Или, когда временная таблица должна быть получена различными способами, в зависимости от некоторых условий.

Очевидно, что в этих случаях нужно, чтобы различные запросы использовали один и тот же менеджер временных таблиц. Рассмотрим методы работы с менеджером временных таблиц в запросах 1С.

Как создать менеджер временных таблиц

Как назначить менеджер временных в запрос 1С

//создадим запрос
запрос = новый запрос ;

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

Как добавить временную таблицу в менеджер

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

Менеджер временных таблиц в запросах 1С

Как удалить временную таблицу из менеджера

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

Менеджер временных таблиц в запросах 1С

Как использовать таблицы из менеджера временных таблиц в запросах 1С

К сожалению, конструктор запроса не может видеть временные таблицы из менеджера. Поэтому запрос к временной таблице нужно либо писать вручную, либо все-таки воспользоваться конструктором, но указать в нем структуру временной таблицы.

Менеджер временных таблиц в запросах 1С

Менеджер временных таблиц в запросах 1С

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

Читайте также: