Имя: Пароль:
1C
 
Работа с временными таблицами в коде
0 Dragonofdwarfs
 
28.11.25
16:48
Коллеги, всем доброго времени суток! Можете подсказать, есть ли какой-нибудь способ обработать записи временной таблицы в самом коде? Иными словами, временная таблица вроде как существует только во время выполнения запроса, есть ли возможность продлить ей жизнь?
1 Волшебник
 
28.11.25
16:49
используйте МенеджерВременныхТаблиц.
После запроса можете получить данные из временной таблицы в виде ТаблицаЗначений
2 Dragonofdwarfs
 
28.11.25
16:50
Ок, попробую, спасибо!
3 Волшебник
 
28.11.25
16:52
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Заказы.Ссылка КАК Заказ,
		|	Заказы.ДоговорКонтрагента КАК ДоговорКонтрагента,
		|	ЕСТЬNULL(РегЗаказыОстатки.СуммаУпрОстаток, 0) КАК ОсталосьОтгрузитьСуммаУпр,
		|	ЕСТЬNULL(РегВзаиморасчетыОстатки.СуммаУпрОстаток, 0) КАК ЗадолженностьСуммаУпрОстаток
		|ПОМЕСТИТЬ ЗаказыОбрабатываемые
...
РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();

тзЗаказы = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ЗаказыОбрабатываемые").ПолучитьДанные().Выгрузить();
4 Dragonofdwarfs
 
28.11.25
16:54
(3) Огонь!
5 АгентБезопасной Нацио
 
28.11.25
17:10
(3) лучше б ты ему СП продал... Вместо ДенисаЧ
6 TormozIT
 
гуру
30.11.25
09:53
(3) Ты смешал 2 подхода в одном примере.
Надо либо одно делать либо другое, т.е. эти подходы альтернативны. Совместное их использование приведет к лишней нагрузке.
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ 2 ПОМЕСТИТЬ Ф";

// Способ №1
РезультатПакета = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
Рез1 = РезультатПакета[0].Выгрузить();

// Способ №2
Запрос.Выполнить();
Рез2 = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("Ф").ПолучитьДанные().Выгрузить();

Наиболее оптимальным является способ №2
7 Волшебник
 
30.11.25
10:04
(6) Да, ты прав. Я взял пример из своего АРМ Продажи. Там кроме временных таблиц есть ещё основной результат запроса.
8 eddy_n
 
30.11.25
14:04
(6) Разве для первого способа нужен Менеджер ВТ? Да и   просто ВыполнитьПакет() работает на получение потом таблиц из массивов пакетов.
9 Chai Nic
 
30.11.25
15:30
Менеджер ВТ явно создавать нужно только если надо сохранять временные таблицы между разными запросами.
10 Волшебник
 
30.11.25
16:46
(8)(9) Вы правы.
Я кэширую МВТ и потом делаю к ним следующие запросы.
11 TormozIT
 
гуру
30.11.25
17:20
(8) Для первого способа создавать менеджер действительно не требуется. Но и лишней нагрузки это не создаст. А метод ВыполнитьПакет() в данном спучае не даст решения задачи, т.к. он для запроса создания временной таблицы вернет только строку с числом добавленных в эту таблицу строк.
12 eddy_n
 
30.11.25
18:08
(11) Довольно часто этого достаточно, чтобы понять, на каком этапе ВТ подсократилась и внести коррективы в запрос.
13 eddy_n
 
30.11.25
18:12
(12) + Но, конечно, стандартным средствам платформы ещё далеко до Инструментов Разработчика.
14 Kongo2019
 
30.11.25
18:48
Когда начинают гонять временные таблицы по коду, как правило это показатель ошибки в архитектуре приложения.
Получили данные обработали и вернули. Не надо их по коду гонять.
15 craxx
 
30.11.25
19:17
(14) Отладка запроса бывает часто необходима.
16 Kongo2019
 
30.11.25
19:19
(15) что консоль запросов уже вышла из моды?
17 craxx
 
30.11.25
19:23
(16) Ага, попробуй в ЗУП запросы консолью поотлаживай. Которые тянутся хрен знает откуда, где стек вызовов штук так 40 глубиной.
18 Kongo2019
 
30.11.25
19:40
(17) ЗУП давно ушел от схемы запросов, они там считай уже API нарисовали, коряво пока, но запросами там уже работать не рекомендуется, Надо юзать программный интерфейс уже.