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

A1sQ.BuildByQT

Назначение: собрать текст запроса в формате SELECT-FROM-(WHERE) через QT() и сразу получить готовый объект Запрос с расставленными параметрами (через BuildQ).
Итог: минимум кода: один вызов — и можно выполнять.

Сигнатура

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

Пошаговая логика

// По исходному BSL коду
Функция BuildByQT(Fields, FromWhere, Condition = "", V1..V8) Экспорт
    Try
        QueryText = QT(Fields, FromWhere, Condition);          // "ВЫБРАТЬ ... ИЗ ... [ГДЕ ...]"
        Возврат BuildQ(QueryText, V1, V2, V3, V4, V5, V6, V7, V8); // создаёт Query и позиционно ставит параметры
    Except
        A1sS.Print("BuildByQT error: " + ОписаниеОшибки(), "Ошибка", ":");
        Возврат Неопределено;
    EndTry;
КонецФункции

Параметры

  • Fields — что выбирать (например: "T.Ссылка, T.Наименование").
  • FromWhere — источник (таблица/регистр/подзапрос), например: "Справочник.Номенклатура КАК T".
  • Condition — фильтр (опционально). Пустая строка — без WHERE.
  • Value1..Value8 — значения для параметров, которые встречаются в собранном QueryText (позиционно, как в BuildQ).

Возвращает

Запрос — готов к Выполнить() и последующей работе с выборкой/выгрузкой.

Примеры

1) Минимальный пример

Q = A1sQ.BuildByQT("Ссылка, Наименование", "Справочник.Номенклатура");
ТЗ = Q.Выполнить().Выгрузить();

2) С параметром в WHERE

Q = A1sQ.BuildByQT(
    "Ссылка, Наименование",
    "Справочник.Номенклатура КАК Ном",
    "Ном.Родитель = &Родитель",
    Родитель
);
Пока (S = Q.Выполнить().Выбрать()).Следующий() Цикл
    Сообщить(S.Наименование);
КонецЦикла;

3) Быстро получить первую строку/значение

// Через ExecuteByQT и UnloadByQT (обёртки над BuildByQT)
Sel = A1sQ.ExecuteByQT("ПЕРВЫЕ 1 Ссылка", "Справочник.Пользователи", "ИдентификаторПользователяИБ = &UID", UID);
Row = A1sQ.UnloadByQT("ПЕРВЫЕ 1 Ссылка, Наименование", "Справочник.Пользователи", "ИдентификаторПользователяИБ = &UID", UID)[0];

Паттерны

  • Динамический SELECT — подставляйте поля/условия строками, сам скелет соберёт QT().
  • Минимум шаблонного кода — используйте BuildByQT(...).Выполнить().Выгрузить().
  • Композиция — QueryText из QT() можно комбинировать с CombineQT для UNION ALL.

Нюансы

✅ Возвращает именно объект Запрос (не строку)
✅ Параметры ставятся позиционно по уникальным &Парам (как в BuildQ)
❗ До 8 значений за вызов
❗ Порядок Value1..Value8 должен соответствовать порядку ПЕРВОГО появления параметров в тексте
❗ Валидность синтаксиса на вашей стороне — QT просто склеивает SELECT/FROM/WHERE
  • QT — собрать строку SELECT-FROM-(WHERE).
  • BuildQ — позиционная установка параметров в уже готовом тексте.
  • ExecuteByQT — выполнить собранный запрос и получить Выборку.
  • UnloadByQT — выполнить и получить ТаблицаЗначений.