A1sQ.BatchUnload
Назначение: выполнить несколько независимых запросов и получить их результаты в виде структуры Имя → ТаблицаЗначений.
Сценарии: отчёты, срезы данных по блокам, выгрузка для сериализации/экспорта.
Сценарии: отчёты, срезы данных по блокам, выгрузка для сериализации/экспорта.
Сигнатура
Function BatchUnload(QueriesMap, CommonParams = Undefined) Export
Как работает (по исходному коду)
Results = New Structure;
For Each QueryPair In QueriesMap Do
Try
Query = CreateQ(QueryPair.Value);
If CommonParams <> Undefined Then
SetQParams(Query, CommonParams);
EndIf;
Results.Insert(QueryPair.Key, Query.Execute().Unload());
Except
A1sS.Print("BatchUnload error for '" + QueryPair.Key + "': " + ErrorDescription());
Results.Insert(QueryPair.Key, New ValueTable);
EndTry;
EndDo;
Return Results;
Ключи структуры сохраняются из входного QueriesMap — удобно адресовать результаты по понятным именам (например, "Продажи", "Остатки").
Параметры
- QueriesMap — Структура вида Имя → ТекстЗапроса.
- CommonParams — (опц.) Структура значений параметров, которые одинаковы для всех запросов. Передаются один раз через SetQParams.
Возвращает
Структуру вида Имя → ТаблицаЗначений. При ошибке конкретного запроса в ответ по этому ключу кладётся пустая ТаблицаЗначений, а сообщение попадает в лог.
Примеры
1) Несколько срезов отчёта с общими параметрами периода
QMap = Новый Структура;
QMap.Вставить("Продажи", "
|ВЫБРАТЬ
| Дата, Сумма
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &D1 И &D2");
QMap.Вставить("Оплаты", "
|ВЫБРАТЬ
| Дата, Сумма
|ИЗ Документ.ПоступлениеНаРасчетныйСчет
|ГДЕ Дата МЕЖДУ &D1 И &D2");
Params = Новый Структура("D1, D2", НачалоПериода, КонецПериода);
Data = A1sQ.BatchUnload(QMap, Params);
ТЗПродажи = Data.Получить("Продажи");
ТЗОплаты = Data.Получить("Оплаты");
2) Обработка ошибок без падения
QMap = Новый Структура("OK, BadSql",
"ВЫБРАТЬ ПЕРВЫЕ 10 Наименование ИЗ Справочник.Номенклатура",
"ВЫБРАТЬТАК";// ошибка
);
Data = A1sQ.BatchUnload(QMap);
Если Data.BadSql.Количество() = 0 Тогда
Сообщить("BadSql вернул пустую таблицу (смотрите лог).");
КонецЕсли;
Нюансы и ограничения
✅ Запросы выполняются независимо, без общего TempTablesManager
✅ Общие параметры задаются один раз
❗ Для ВТ/пакетов используйте ExecuteBatch/UnloadBatch или ChainQ
❗ Память: каждая выборка выгружается полностью в ТаблицаЗначений
❗ Индивидуальных параметров на запрос тут нет — либо общий набор, либо готовьте разные тексты
Связанные функции
- ExecuteBatch / UnloadBatch — пакетный текст → несколько результатов.
- ChainQ — последовательная цепочка в общем TempTablesManager.
- SetQParams — установка параметров.