A1sQ.ExecuteBatch
Назначение: выполнить пакет операторов языка запросов 1С и получить массив Selection — по одному на каждый оператор, возвращающий выборку.
Фишка: если TempManager = Undefined, функция создаёт новый TempTablesManager автоматически.
Фишка: если 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 — текст пакетного запроса (несколько операторов через ;).
- TempManager — TempTablesManager. Можно не передавать — будет создан новый.
- 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 — применить именованные параметры к запросу.