Важно
- Сигнатура:
Unload(ТекстЗапроса, П1?, П2?, П3?, П4?, П5?, П6?, П7?, П8?). - Параметры передаются позиционно и соответствуют порядку параметров
&Парамв тексте. - Передача объекта
Запросили структур/соответствий не поддерживается.
Задачи дня
- Освоить вызов
Unloadиз текста запроса. - Использовать позиционные параметры (до 8).
- Обрабатывать пустые выборки и проверять колонки.
Базовый пример
ТекстQ = "ВЫБРАТЬ 1 КАК One";
Таб = A1sQ.Unload(ТекстQ);
Сообщить("Строк: " + Таб.Количество()); // 1
С параметрами (позиционно)
Лимит строк
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
";
// Порядок параметров в вызове совпадает с порядком &Лимит в тексте
Таб = A1sQ.Unload(ТекстQ, 5);
Для каждого Стр Из Таб Цикл
Сообщить(Стр.ID + ": " + Стр.Name);
КонецЦикла;
Диапазон дат
ТекстQ = "
|ВЫБРАТЬ
| Док.Ссылка КАК ID,
| Док.Дата КАК Dt,
| Док.СуммаДокумента КАК Amount
|ИЗ Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ Док.Дата МЕЖДУ &Начало И &Конец
";
// Порядок: &Начало, затем &Конец
Нач = НачалоДня(ТекущаяДата());
Кон = КонецДня(ТекущаяДата());
Таб = A1sQ.Unload(ТекстQ, Нач, Кон);
Если Таб.Количество() = 0 Тогда
A1sLog.Info("Day3", "Нет документов за сегодня");
КонецЕсли;
Несколько параметров (3+)
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование ПОДОБНО &Маска
| И Ном.ЭтоГруппа = &ТолькоГруппы
|УПОРЯДОЧИТЬ ПО Name
";
// Порядок: &Лимит, &Маска, &ТолькоГруппы
Таб = A1sQ.Unload(ТекстQ, 20, "%кабель%", Ложь);
Проверка колонок и пустых результатов
Таб = A1sQ.Unload("ВЫБРАТЬ 1 КАК One");
Если Таб.Колонки.Найти("One") = Неопределено Тогда
A1sLog.Warn("Day3", "Колонка One не найдена");
КонецЕсли;
Если Таб.Количество() = 0 Тогда
// Пустая таблица — допустимый сценарий
A1sLog.Info("Day3", "Пустой результат");
КонецЕсли;
Микро-утилиты
Список имён (без цикла: ВыгрузитьКолонку)
Функция ИменаНоменклатурыКолонкой(Лимит = 20) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
";
// A1sQ.Unload: текст + позиционный параметр &Лимит
Таб = A1sQ.Unload(ТекстQ, Лимит);
// Одной строкой получаем массив значений из колонки Name
Возврат Таб.ВыгрузитьКолонку("Name");
КонецФункции
Альтернатива (через цикл — многословно)
Функция ИменаНоменклатурыЧерезЦикл(Лимит = 20) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
";
Таб = A1sQ.Unload(ТекстQ, Лимит);
Рез = Новый Массив;
Для каждого Стр Из Таб Цикл
Рез.Добавить(Стр.Name);
КонецЦикла;
Возврат Рез;
КонецФункции
Карта ID → Name (почти без циклов)
Функция КартаIDкИмени(Лимит = 50) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID
| ,Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
";
Таб = A1sQ.Unload(ТекстQ, Лимит);
IDs = Таб.ВыгрузитьКолонку("ID");
Names = Таб.ВыгрузитьКолонку("Name");
Карта = Новый Соответствие;
Для Номер = 0 По IDs.Количество()-1 Цикл
Карта.Вставить(IDs[Номер], Names[Номер]);
КонецЦикла;
Возврат Карта;
КонецФункции
Практика (15–30 минут)
- Соберите текстовый запрос с параметром
&Лимит. Передайте число вторым аргументом вUnload. - Сделайте запрос по диапазону дат (
&Начало,&Конец) и передайте даты позиционно. - Добавьте 3-й параметр (
&Маскаили флаг) и проверьте порядок. - Сформируйте массив имён через
ВыгрузитьКолонкуи картуID → Name.
Чек-лист
- □ Понимаю сигнатуру
Unload(Текст, П1..П8)и порядок параметров. - □ Пустые результаты и колонки проверяю корректно.
- □ Есть две утилиты: «имена колонкой» и «карта ID → Name».
Что дальше
День 4: ExecuteQ — выполнение запросов и обработка результата.
Параметры-конструкторы (BuildQ, QT) — Дни 5–6.