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 после использования
❗ Жизненный цикл менеджера — на вашей стороне (сохраните ссылку, если нужно)
❗ Ошибки выполнения пакета не перехватываются — используйте Попытка/Исключение при необходимости
Связанные функции
- CreateQ — база.
- ExecuteBatch / UnloadBatch — выполнение пакета.
- DestroyAllTemps / DestroyTemp — очистка ВТ.
- CreateTempTable — явное создание ВТ (если такая функция есть в модуле).