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 — выполнить и получить ТаблицаЗначений.