Имя: Пароль:
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 нарисовали, коряво пока, но запросами там уже работать не рекомендуется, Надо юзать программный интерфейс уже.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший