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

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

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

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

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

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

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

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

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


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

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


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


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

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

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

КонецПроцедуры // ЗагрузитьСводные()
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 99977
 +9 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C 4
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема
Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в
Посмотреть все результаты поиска похожих
Комментарии
all4cf
06.03.2017 00:14Комментарий: 2
all4cf

Dimon2005, такой результат не возможен.... какая у Вас цель?

Dimon2005
04.03.2017 12:10Комментарий: 1
Dimon2005

Подскажите а как организовать запрос чтобы вместо вашего результата получить 

Кактус    600   Комм 2

Кактус    0       Комм 5

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