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

A1sQ.CreateQEnhanced

Назначение: создать Запрос, задать текст и безопасно привязать TempTablesManager; при необходимости — автоматически создать новый менеджер ВТ.
Когда использовать: когда обычного 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 — быстрая подстановка параметров.