A1sCode библиотека 1С

A1sQ.CreateQWithTemps

Назначение: быстро получить объект Query, уже привязанный к TempTablesManager — для работы с ПОМЕСТИТЬ/ВРЕМЕННАЯ ТАБЛИЦА/УНИЧТОЖИТЬ.
Поведение: по умолчанию создаёт новый менеджер ВТ и привязывает к нему запрос.

Сигнатура

Function CreateQWithTemps(QueryText = Undefined,
                          CreateTempManager = True) Export

Как работает (по исходному коду)

// Условный оператор «?()»: если CreateTempManager=Истина — создаём менеджер
TempManager = ?(CreateTempManager, Новый TempTablesManager, Неопределено);
// Возвращаем обычный Query, но уже с привязанным менеджером ВТ (если был создан)
Возврат CreateQ(QueryText, TempManager);
Почему так удобно: многие функции языка запросов вокруг временных таблиц (например, ПОМЕСТИТЬ и УНИЧТОЖИТЬ) требуют контекста TempTablesManager. Эта функция позволяет не заботиться о его создании вручную.

Параметры

  • QueryText — текст запроса/пакета. Можно оставить пустым — получите пустой Query с уже установленным менеджером.
  • CreateTempManager — логический флаг. Если Истина (по умолчанию) — создаст новый TempTablesManager. Если Ложь — просто вызовет CreateQ без менеджера.

Возвращает

Query — объект запроса. Если CreateTempManager=Истина, то у него установлен TempTablesManager.

Примеры

1) Пакет с временными таблицами «под ключ»

QT = "
|ПОМЕСТИТЬ ВТ_Ссылки КАК
|ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления;
|ВЫБРАТЬ * ИЗ ВТ_Ссылки;";
Q = A1sQ.CreateQWithTemps(QT);
ТЗ = Q.ВыполнитьПакет()[0].Выгрузить(); // последняя выборка
// По окончании — убрать ВТ
A1sQ.DestroyAllTemps(Q.TempTablesManager);

2) Повторное использование одного менеджера (оптимальнее)

Q1 = A1sQ.CreateQWithTemps("ПОМЕСТИТЬ ВТ_A КАК ВЫБРАТЬ ...;");
TM = Q1.TempTablesManager;
A1sQ.ExecuteBatch("ПОМЕСТИТЬ ВТ_B КАК ...; ВЫБРАТЬ ... ИЗ ВТ_A;", TM);
A1sQ.DestroyAllTemps(TM); TM = Неопределено;

3) Без менеджера ВТ

Q = A1sQ.CreateQWithTemps("ВЫБРАТЬ 1", Ложь); // эквивалент CreateQ("ВЫБРАТЬ 1")

Нюансы и ограничения

✅ Быстро получить Query с готовым TempTablesManager
✅ Удобно для пакетов, где есть ПОМЕСТИТЬ/УНИЧТОЖИТЬ
❗ Следите за очисткой: DestroyAllTemps/DestroyTemp после использования
❗ Жизненный цикл менеджера — на вашей стороне (сохраните ссылку, если нужно)
❗ Ошибки выполнения пакета не перехватываются — используйте Попытка/Исключение при необходимости