В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц. Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продолжить работу с этой временной таблицей дальше.
Например, в отчете в зависимости от выбранных настроек первичные данные обрабатываются тем или иным способом. Тогда имеет смысл в одной процедуре сформировать эти данные и поместить их во временную таблицу, которую уже передаем через менеджер временных таблиц в другую процедуру, отвечающую за выбранный способ обработки. Это позволит сократить код, сделать запросы более читаемыми. А так же в случае, если возникнут изменения в методике подготовки первичных данных для обработки, то потребуется внести изменения только в один запрос, а не в каждый.
В качестве примера работы с менеджером временных таблиц приведу следующую обработку.
Я создаю менеджер временных таблиц, и передаю его последовательно в каждую процедуру, для создания и объединения временных таблиц. Результат выводится в сводную таблицу.
Многие знают, что временные таблицы используются в пакетах запросов, когда нужно сначала одним запросом получить какую-то информацию, а потом обработать ее уже с помощью другого запроса и получить результат. Таким образом, менеджеры временных таблиц существуют у любых запросов.
Но что делать, когда использования пакетного запроса недостаточно для решения задачи? Например, когда после создания временной таблицы требуется произвести какие-то действия с помощью встроенного языка 1С и только после этого получить окончательный результат запроса. Или, когда временная таблица должна быть получена различными способами, в зависимости от некоторых условий.
Очевидно, что в этих случаях нужно, чтобы различные запросы использовали один и тот же менеджер временных таблиц. Рассмотрим методы работы с менеджером временных таблиц в запросах 1С.
Как создать менеджер временных таблиц
Как назначить менеджер временных в запрос 1С
//создадим запрос
запрос = новый запрос ;
//Назначим созданный ранее менеджер временных таблиц
запрос . МенеджерВременныхТаблиц = МВТ ;
Как добавить временную таблицу в менеджер
Для того чтобы добавить временную таблицу в запрос, нужно выполнить запрос в режиме Создание временной таблицы, назначив ему менеджер временных таблиц.
Как удалить временную таблицу из менеджера
Для этого нужно создать запрос на уничтожение временной таблицы и выполнить его.
Как использовать таблицы из менеджера временных таблиц в запросах 1С
К сожалению, конструктор запроса не может видеть временные таблицы из менеджера. Поэтому запрос к временной таблице нужно либо писать вручную, либо все-таки воспользоваться конструктором, но указать в нем структуру временной таблицы.
После этого можно как обычно составить и выполнить запрос к временной таблице, не забывая подключать общий менеджер временных таблиц.
рубрики: Платформа 8.3 | Дата: 12 Январь, 2017
В платформе 1С:Предриятие 8.3 появилось много новых полезных функций, которые существенно облегчают жизнь разработчику. В частности это касается менеджера временных таблиц.
Напомню, что в платформе 8.2 у менеджера временных таблиц был единственный метод Закрыть(), который закрывал сам менеджер и удалял все временные таблицы, которые в нем использовались.
Если же мы заглянем в синтакс-помощник 8.3, то увидим, что у менеджера временных таблиц добавилось свойство Таблицы, в котором хранятся все временные таблицы, принадлежащие менеджеру. Тип у этого свойства – ВременныеТаблицыЗапроса. Также добавился такой объект как ВременнаяТаблицаЗапроса у которого в свою очередь есть замечательный метод ПолучитьДанные().
Что же это дает нам на практике? А на практике это дает нам возможность в режиме отладки просматривать содержимое временных таблиц, выгружая их в таблицу значений, что в версии 8.2 было невозможно.
Рассмотрим это на примере.
Пусть у нас есть две функции:
В функции СформироватьВременныеТаблицы() мы подготавливаем временные таблицы и возвращаем менеджер временных таблиц. Соответсвенно в функции ВыполнитьЗапросНаСервере() мы выполняем запрос с использованием ранее полученных временных таблиц. Такая схема достаточно часто встречается в типовых конфигурациях, но конечно же в более сложном виде.
А теперь представим, что нам потребовалось после получения результата запроса в функции ВыполнитьЗапросНаСервере(), просмотреть содержимое временной таблицы ВТ_Страна. Делается это достаточно просто. Ставим на соответствующей строке точку останова, открываем окно Вычислить выражение (не забываем про горячие клавиши Shift + F9) и вводим следующую строку
В результате вычисления этого выражения получим таблицу значений с данными временной таблицы.
Можно также вместо имени таблицы воспользоваться ее индексом