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