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

A1sQ.ExecuteByQT

Назначение: собрать текст запроса (SELECT‑FROM‑WHERE) и безопасно вернуть ВыборкаИзРезультатаЗапроса (курсор).
Фишка: ошибки обрабатываются в Попытка/Исключение; при сбое функция возвращает Неопределено и пишет в лог.

Сигнатура

Function ExecuteByQT(
    Fields,
    FromWhere,
    Condition = "",
    Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
    Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined
) Export

Как работает

// По исходному коду A1sQ
Функция ExecuteByQT(Fields, FromWhere, Condition = "", V1..V8) Экспорт
    Попытка
        Query = BuildByQT(Fields, FromWhere, Condition, V1, V2, V3, V4, V5, V6, V7, V8);
        Возврат Query.Выполнить().Выбрать();
    Исключение
        A1sS.Print("ExecuteByQT error: " + ОписаниеОшибки(), "Ошибка", ":");
        Возврат Неопределено;
    КонецПопытки;
КонецФункции
Разница с ExecuteQ: здесь вы передаёте не весь текст, а раздельно Fields / FromWhere / Condition. Сборку и позиционную подстановку параметров делает BuildByQT.

Параметры

  • Fields — список выбираемых полей (строка).
  • FromWhere — источник данных: таблица/регистр/подзапрос + псевдонимы (строка).
  • Condition — условие отбора (строка, опционально). Пустая строка — без WHERE.
  • Value1..Value8 — значения для первых уникальных параметров по порядку появления в собранном тексте (позиционно, как в BuildQ).

Возвращает

ВыборкаИзРезультатаЗапроса — курсор, либо Неопределено при ошибке.

Примеры

1) Классический селект

S = A1sQ.ExecuteByQT(
    "Ссылка, Наименование",
    "Справочник.Номенклатура КАК Ном",
    "НЕ Ном.ПометкаУдаления"
);
Пока S <> Неопределено И S.Следующий() Цикл
    Сообщить(S.Наименование);
КонецЦикла;

2) С параметрами периода и организации

S = A1sQ.ExecuteByQT(
    "Ссылка, Дата, Номер",
    "Документ.ПоступлениеТоваровУслуг",
    "Дата МЕЖДУ &D1 И &D2 И Организация = &Орг",
    НачалоПериода, КонецПериода, ТекОрганизация
);

3) Получить только первую строку — FirstRowQ

Row = A1sQ.FirstRowQ("
|ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка, Номер, Дата
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Организация = &Орг
|УПОРЯДОЧИТЬ ПО Дата УБЫВ", ТекОрг);

Сравнение

ФункцияЧто делаетКогда выбрать
ExecuteByQTQT + BuildByQT + Select + Try/ExceptНужен безопасный курсор и удобный конструктор
ExecuteQBuildQ + Select (без Try/Except)Есть готовый текст и вы сами ловите ошибки
UnloadByQTQT + BuildQ + Unload + Try/ExceptНужна ТаблицаЗначений с защитой от ошибок
UnloadBuildQ + Unload (без Try/Except)Готовый текст, полная выгрузка

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

✅ Удобное разделение полей/источника/условий
✅ Безопасно: ошибки логируются и возвращается Неопределено
✅ Позиционная подстановка до 8 значений
❗ При Неопределено проверяйте результат перед использованием
❗ Порядок Value1..Value8 должен соответствовать порядку появления уникальных &Парам
❗ Нет TempTablesManager в сигнатуре — для ВТ используйте CreateQ/CreateQEnhanced вручную
  • BuildByQT — собрать Query через QT и позиционно проставить параметры.
  • UnloadByQT — аналог, но с полной выгрузкой.
  • FirstRowQ / ValueQ / ExistsQ — быстрые кейсы.