A1sCode библиотека 1С

A1sQ.ExecuteQ

Назначение: создать Запрос по тексту и позиционным значениям параметров и сразу вернуть ВыборкуИзРезультатаЗапроса (курсор).
Экономит: 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.Номер); КонецЕсли;

Сравнение с соседями

ФункцияЧто делаетКогда выбирать
ExecuteQBuildQ + Execute.Select → ВыборкаНужен курсор и свой цикл обхода
UnloadBuildQ + Execute.Unload → ТаблицаЗначенийНужна вся таблица сразу
ExecuteByQTQT + BuildQ + Try/ExceptХотите SELECT‑FROM‑WHERE и безопасный возврат
FirstRowQЗащищённо вернуть первую строкуНужна только первая запись
ValueQВернуть первую ячейку (или default)Нужен скаляр
ExistsQОптимизированная проверка существованияНужен Boolean, без перегонки данных

Нюансы и ограничения

✅ Позиционная подстановка до 8 параметров
✅ Возвращает потоковую выборку (минимум памяти при обходе)
❗ Нет TempTablesManager в сигнатуре — для ВТ используйте CreateQ/CreateQEnhanced и выполняйте вручную
❗ Не ловит исключения — используйте ExecuteByQT или свой try/except
❗ Если перепутать порядок Value1..Value8, получите неверные фильтры
  • BuildQ — позиционная установка параметров.
  • ExecuteByQT — собрать QT и безопасно выполнить.
  • Unload — вернуть ТаблицаЗначений.
  • FirstRowQ / ValueQ / ExistsQ — быстрые сценарии.