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

A1sQ.ExecuteBatch

Назначение: выполнить пакет операторов языка запросов 1С и получить массив Selection — по одному на каждый оператор, возвращающий выборку.
Фишка: если TempManager = Undefined, функция создаёт новый TempTablesManager автоматически.

Сигнатура

Function ExecuteBatch(QueryText, TempManager = Undefined, Params = Неопределено) Export

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

Если TempManager = Undefined Тогда
    TempManager = Новый TempTablesManager;
КонецЕсли;

Запрос = A1sQ.CreateQ(QueryText, TempManager); // запрос с TTM
Если Params <> Неопределено Тогда
    A1sQ.SetQParams(Запрос, Params);           // именованные параметры из Структуры
КонецЕсли;

Возврат Запрос.ВыполнитьПакет();               // Массив Selection
Что такое «пакет»: это текст с несколькими операторами, разделёнными точкой с запятой. Например: ПОМЕСТИТЬ ВТ_1 ...; ПОМЕСТИТЬ ВТ_2 ...; ВЫБРАТЬ ... ИЗ ВТ_1;. Результат — массив выборок по операторам, которые что‑то возвращают (обычно по последнему ВЫБРАТЬ).

Параметры

  • QueryText — текст пакетного запроса (несколько операторов через ;).
  • TempManagerTempTablesManager. Можно не передавать — будет создан новый.
  • ParamsСтруктура с именованными параметрами (Имя → Значение), применяется через SetQParams.

Возвращает

Массив — элементы типа ВыборкаИзРезультатаЗапроса в порядке операторов, вернувших данные.

Примеры

1) Пакет: создать две ВТ и вернуть итог

QT = "
|ПОМЕСТИТЬ ВТ_Продажи КАК
|ВЫБРАТЬ Товар, СУММА(Сумма) КАК Сумма
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &D1 И &D2
|СГРУППИРОВАТЬ ПО Товар;
|
|ПОМЕСТИТЬ ВТ_Остатки КАК
|ВЫБРАТЬ Товар, Остаток
|ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(&D2);
|
|ВЫБРАТЬ
|    P.Товар,
|    P.Сумма,
|    O.Остаток
|ИЗ ВТ_Продажи КАК P
|    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК O
|    ПО O.Товар = P.Товар"; 

Res = A1sQ.ExecuteBatch(QT, Неопределено, Новый Структура("D1, D2", Начало, Конец));
Если ResКоличество(Res) > 0 Тогда
    Итог = Res[Res.Количество()-1]; // последняя выборка (итоговый SELECT)
    Пока Итог.Следующий() Цикл
        Сообщить(Итог.Товар);
    КонецЦикла;
КонецЕсли;

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

TM = Новый TempTablesManager;
// Первый пакет
A1sQ.ExecuteBatch(QT1, TM, Парам1);
// Второй пакет, использует те же ВТ
A1sQ.ExecuteBatch(QT2, TM, Парам2);
// Очистка
A1sQ.DestroyAllTemps(TM); TM = Неопределено;

3) «Безопасное» выполнение с обработкой ошибок

Попытка
    Batches = A1sQ.ExecuteBatch(QT, Неопределено, Парам);
Исключение
    A1sS.Print("Ошибка ExecuteBatch: " + ОписаниеОшибки());
КонецПопытки;

Сравнение

ФункцияЧто возвращаетКогда выбрать
ExecuteBatchМассив SelectionНужен курсор(ы), потоковая обработка
UnloadBatchМассив ТаблицаЗначенийНужны полные таблицы в память
CreateQWithTempsЗапросХотите контролировать выполнение и параметры вручную

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

✅ Автосоздание TempTablesManager при TempManager=Undefined
✅ Параметры — через структуру (именованно)
❗ Исключения не перехватываются — используйте Попытка/Исключение
❗ В пакете корректно разделяйте операторы точкой с запятой
❗ Следите за жизненным циклом ВТ: чистите их (DestroyAllTemps/DestroyTemp) или сбрасывайте менеджер
  • UnloadBatch — пакетная выгрузка в таблицы значений.
  • CreateQWithTemps — создать запрос c TempTablesManager.
  • DestroyAllTemps / DestroyTemp — очистка временных таблиц.
  • SetQParams — применить именованные параметры к запросу.