A1sQ.ExecuteQ
Назначение: создать Запрос по тексту и позиционным значениям параметров и сразу вернуть ВыборкуИзРезультатаЗапроса (курсор).
Экономит: 2–3 строки шаблонного кода — вместо BuildQ(...).Выполнить().Выбрать() — один вызов.
Экономит: 2–3 строки шаблонного кода — вместо BuildQ(...).Выполнить().Выбрать() — один вызов.
Сигнатура
Function ExecuteQ(
QueryText,
Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined
) Export
Как работает
// По исходному коду A1sQ
Функция ExecuteQ(Текст, V1..V8) Экспорт
Query = BuildQ(Текст, V1, V2, V3, V4, V5, V6, V7, V8); // создаёт Запрос и позиционно ставит параметры
Возврат Query.Выполнить().Выбрать(); // курсор (ВыборкаИзРезультатаЗапроса)
КонецФункции
Ошибки не перехватываются: в отличие от ExecuteByQT и Unload, эта функция не использует Попытка/Исключение. SQL/типовые ошибки «всплывут» вызывающему коду.
Параметры
- QueryText — текст запроса 1С.
- Value1..Value8 — значения для первых восьми уникальных параметров по порядку их появления в QueryText. См. BuildQ.
Возвращает
ВыборкаИзРезультатаЗапроса — курсор по результату. Начальное положение — перед первой строкой; используйте Следующий().
Примеры
1) Обход результатов
S = A1sQ.ExecuteQ("
|ВЫБРАТЬ Ссылка, Наименование
|ИЗ Справочник.Номенклатура
|ГДЕ НЕ ПометкаУдаления");
Пока S.Следующий() Цикл
Сообщить(S.Наименование);
КонецЦикла;
2) С параметрами (позиционно)
S = A1sQ.ExecuteQ("
|ВЫБРАТЬ Ссылка
|ИЗ Документ.ПоступлениеТоваровУслуг
|ГДЕ Дата МЕЖДУ &D1 И &D2 И Организация = &Орг",
НачалоПериода, КонецПериода, ТекОрганизация);
3) Нужна только первая строка — берите FirstRowQ
Row = A1sQ.FirstRowQ("
|ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка, Номер, Дата
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Организация = &Орг
|УПОРЯДОЧИТЬ ПО Дата УБЫВ", ТекОрг);
Если Row <> Неопределено Тогда Сообщить(Row.Номер); КонецЕсли;
Сравнение с соседями
| Функция | Что делает | Когда выбирать |
|---|---|---|
| ExecuteQ | BuildQ + Execute.Select → Выборка | Нужен курсор и свой цикл обхода |
| Unload | BuildQ + Execute.Unload → ТаблицаЗначений | Нужна вся таблица сразу |
| ExecuteByQT | QT + BuildQ + Try/Except | Хотите SELECT‑FROM‑WHERE и безопасный возврат |
| FirstRowQ | Защищённо вернуть первую строку | Нужна только первая запись |
| ValueQ | Вернуть первую ячейку (или default) | Нужен скаляр |
| ExistsQ | Оптимизированная проверка существования | Нужен Boolean, без перегонки данных |
Нюансы и ограничения
✅ Позиционная подстановка до 8 параметров
✅ Возвращает потоковую выборку (минимум памяти при обходе)
❗ Нет TempTablesManager в сигнатуре — для ВТ используйте CreateQ/CreateQEnhanced и выполняйте вручную
❗ Не ловит исключения — используйте ExecuteByQT или свой try/except
❗ Если перепутать порядок Value1..Value8, получите неверные фильтры