A1sQ.CreateQEnhanced
Назначение: создать Запрос, задать текст и безопасно привязать TempTablesManager; при необходимости — автоматически создать новый менеджер ВТ.
Когда использовать: когда обычного CreateQ недостаточно: нужна диагностика ошибок TTM и/или автосоздание менеджера временных таблиц.
Когда использовать: когда обычного CreateQ недостаточно: нужна диагностика ошибок TTM и/или автосоздание менеджера временных таблиц.
Сигнатура
Function CreateQEnhanced(
QueryText = Undefined,
TempTablesManager = Undefined,
AutoCreateTemps = False
) Export
Как работает (шаги)
// Сокращённо по коду функции
Функция CreateQEnhanced(QueryText = Неопределено, TempTablesManager = Неопределено, AutoCreateTemps = Ложь) Экспорт
Q = Новый Запрос;
Если ЗначениеЗаполнено(QueryText) Тогда Q.Текст = QueryText; КонецЕсли;
// Привязка TempTablesManager
Если TempTablesManager <> Неопределено Тогда
Попытка
Q.МенеджерВременныхТаблиц = TempTablesManager;
Исключение
A1sS.Print("CreateQEnhanced: Ошибка установки TempTablesManager: " + ОписаниеОшибки());
КонецПопытки;
ИначеЕсли AutoCreateTemps Тогда
Попытка
Q.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Исключение
A1sS.Print("CreateQEnhanced: Не удалось создать TempTablesManager: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Возврат Q;
КонецФункции
Параметры
- QueryText — текст запроса (опционально).
- TempTablesManager — существующий менеджер ВТ (опционально). Полезно, когда нужно разделить ВТ_… между несколькими запросами.
- AutoCreateTemps — если True, при отсутствии TTM функция попытается создать новый TempTablesManager.
Возвращает
Запрос — готов к Выполнить(). Если установка/создание TTM не удалось, запрос всё равно вернётся, а ошибка будет залогирована через A1sS.Print.
Примеры
1) Базовый случай (без TTM)
Q = A1sQ.CreateQEnhanced("ВЫБРАТЬ 1 КАК a");
ТЗ = Q.Выполнить().Выгрузить();
2) Привязать существующий менеджер ВТ
Temps = Новый TempTablesManager;
Q1 = A1sQ.CreateQEnhanced("ВЫБРАТЬ 1 КАК a ПОМЕСТИТЬ ВТ_A", Temps);
Q1.Выполнить();
Q2 = A1sQ.CreateQEnhanced("ВЫБРАТЬ * ИЗ ВТ_A", Temps);
Сел = Q2.Выполнить().Выбрать();
3) Автосоздание TTM
// Третий параметр = Истина → при отсутствии TempTablesManager создастся новый
Q = A1sQ.CreateQEnhanced("ВЫБРАТЬ 1 КАК a ПОМЕСТИТЬ ВТ_A", , Истина);
Q.Выполнить(); // ВТ будет доступна в Q в рамках созданного менеджера
4) Акуратная работа с ошибками
// Если передан некорректный объект в TempTablesManager, функция не упадёт — залогирует ошибку и вернёт Query
Q = A1sQ.CreateQEnhanced("ВЫБРАТЬ 1 КАК a", "не менеджер"); // лог через A1sS.Print
Нюансы
✅ Не бросает исключение наружу при ошибке установки/создания TTM — пишет в лог
✅ Можно включать автосоздание менеджера ВТ
❗ Не выполняет «валидацию текста» — ошибки синтаксиса проявятся только на Выполнить()
❗ Не переносит значения параметров — задавайте через SetQParams/BuildQ/BuildQByParams
❗ Жизненный цикл временных таблиц — в пределах одного менеджера/соединения
Сравнение
| Функция | Когда выбрать |
|---|---|
| CreateQ | Минимальная обёртка: присвоить текст, попытаться назначить TTM (без логирования и автосоздания). |
| CreateQEnhanced | Нужно безопасное назначение TTM с логированием и опция автосоздания. |
| CreateQWithTemps | Нужен «с нуля» новый менеджер ВТ и запрос в одном вызове. |
| CreateAndLoad | Есть исходный запрос с TTM — хотим новый запрос с тем же менеджером. |
| CreateQSafe | Нужна предварительная проверка синтаксиса перед созданием запроса. |
Связанные функции
- GetTemps — получить общий менеджер ВТ.
- SetQParams — установка параметров из структуры.
- BuildQ / BuildQByParams — быстрая подстановка параметров.