helpf.pro
Регистрация
 +5 
Распечатать

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

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

Код 1C v 8.2 УП
  Запрос = Новый Запрос;
    МВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МВТ;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЧ.Номенклатура
                   |ПОМЕСТИТЬ ВременнаяТЗ
                   |ИЗ
                   |    &ТЧ КАК ТЧ
                   |ГДЕ
                   |    ТЧ.Номенклатура В ИЕРАРХИИ(&Номенклатура)
                   |    И ТЧ.Цена < 5";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ТЧ", ТЧ);
    РезультатЗапроса = Запрос.Выполнить();
                   
    Запрос2 = Новый Запрос;
    Запрос2.Текст = "ВЫБРАТЬ
                    | ВременнаяТЗ.Номенклатура
                    |ИЗ
                    | ВременнаяТЗ КАК ВременнаяТЗ"; 
    Запрос2.МенеджерВременныхТаблиц    = МВТ;   
    РезультатЗапроса = Запрос2.Выполнить().Выгрузить();

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

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

Я создаю менеджер временных таблиц, и передаю его последовательно в каждую процедуру, для создания и объединения временных таблиц. Результат выводится в сводную таблицу.

Код 1C v 8.2 УП
 &НаКлиенте
Процедура ЗаполнитьСводную(Команда)
 ЗаполнитьСводнуюНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСводнуюНаСервере()
 
 МенВТ = Новый МенеджерВременныхТаблиц;
 ПолучитьДанныеА(МенВТ);
 ПолучитьДанныеБ(МенВТ);
 ЗагрузитьСводные(МенВТ);
 МенВТ.Закрыть();
 
КонецПроцедуры


&НаСервере
Процедура ПолучитьДанныеА(МенВремТаб)

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


&НаСервере
Процедура ПолучитьДанныеБ(МенВремТаб)


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

&НаСервере
Процедура ЗагрузитьСводные(МенВремТаб)

 Запрос = Новый Запрос;
 Запрос.МенеджерВременныхТаблиц = МенВремТаб;
 Запрос.Текст = "ВЫБРАТЬ
                | ЕСТЬNULL(ТабА.Контрагент, ТабБ.Контрагент) КАК Контрагент,
                | ЕСТЬNULL(ТабА.Сумма, 0) КАК Сумма,
                | ЕСТЬNULL(ТабБ.Комментарий, """") КАК Комментарий
                |ИЗ
                | ТабА КАК ТабА
                |  ПОЛНОЕ СОЕДИНЕНИЕ ТабБ КАК ТабБ
                |  ПО ТабА.Контрагент = ТабБ.Контрагент
                |
                |УПОРЯДОЧИТЬ ПО
                | Контрагент
                |АВТОУПОРЯДОЧИВАНИЕ";
       
 ТаблицаСводная.Загрузить(Запрос.Выполнить().Выгрузить());

КонецПроцедуры // ЗагрузитьСводные()
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 48775
 +5 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 37
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 19
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C медленно работает по сети с базой на SQL Server 17
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
1Cv8.1CD - Файл данных достиг максимального размера! 7
1С выдает предупреждение " Файл данных достиг максимального размера" . Подскажите из - за чего это и как можно решить ? Превышен размер файла, обычно это сообщение возникает, когда размер файла 1Cv8.1CD приближается к 10 гигабайтам или размер ка
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 5
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.