A1sQ.BuildQByParams
Назначение: создать объект Запрос и проставить параметры по именам из строки ключей KeyString.
Ключевая фича: порядок имен задаёте вы — он может не совпадать с порядком появления &Парам в тексте. явнонадёжно
Ключевая фича: порядок имен задаёте вы — он может не совпадать с порядком появления &Парам в тексте. явнонадёжно
Сигнатура
Function BuildQByParams(
QueryText,
KeyString, // "X, Y, Z"
Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined
) Export
Пошаговая логика
// По коду модуля A1sQ
Функция BuildQByParams(Текст, Ключи, V1..V8) Экспорт
Q = Новый Запрос; Q.Текст = Текст;
// 1) Разобрать строку имён в массив: ["X","Y","Z"]
Keys = StrSplit(Ключи, ",");
// 2) Собрать значения [V1..V8]
Values = Новый Массив; Values.Добавить(V1); ... Values.Добавить(V8);
// 3) Построить Структуру ключ→значение, пропуская Undefined
Params = Новый Структура;
Для i = 0 По Keys.Количество()-1 Цикл
Если Values[i] <> Неопределено Тогда
Params.Вставить(Keys[i], Values[i]);
КонецЕсли;
КонецЦикла;
// 4) Установить параметры в запрос
Для Каждого Парам Из Params Цикл
Q.УстановитьПараметр(Парам.Ключ, Парам.Значение);
КонецЦикла;
Возврат Q;
КонецФункции
Поведение по умолчанию: Undefined значения игнорируются — соответствующие параметры не будут установлены. Это удобно для частичной подстановки.
Примеры
1) Два параметра по именам
Q = A1sQ.BuildQByParams("ВЫБРАТЬ &X + &Y КАК S", "X, Y", 2, 8);
ТЗ = Q.Выполнить().Выгрузить(); // S = 10
2) Порядок имён не важен
// В тексте параметры &A, &B; зададим ключи в порядке "B, A"
Q = A1sQ.BuildQByParams("ВЫБРАТЬ &A + &B КАК S", "B, A", 5, 7);
// Будет: B=5, A=7
3) Частичная подстановка (остальное зададим позже)
// Передадим только один ключ и значение; второй установим позднее вручную
Q = A1sQ.BuildQByParams("ВЫБРАТЬ &X + &Y КАК S", "X", 10);
Q.УстановитьПараметр("Y", 20);
S = Q.Выполнить().Выгрузить()[0].S; // 30
Сравнение: до / после
| Без A1s | С A1s |
|---|---|
|
|
Нюансы и ограничения
✅ До 8 значений за вызов
✅ Удобно для частичной подстановки (Undefined пропускаются)
❗ Имена берутся как есть из KeyString — лишние пробелы станут частью имени параметра
❗ Если значений больше, чем имён, «лишние» будут проигнорированы
❗ Если имён больше, чем значений, «хвост» останется неустановленным → ошибка на выполнении, если параметр обязателен
❗ TempTablesManager не принимает — привяжите через CreateQ или вручную (Q.TempTablesManager = ...)
Типичные ошибки
❌ Пробелы в именах
Q = A1sQ.BuildQByParams("... &X ...", " X ", 10); // имя параметра будет " X " → не найдёт &X
// ✅ Правильно
Q = A1sQ.BuildQByParams("... &X ...", "X", 10);
❌ Передали Undefined и ожидали, что установится NULL
// Undefined просто пропускается. Если нужен NULL в параметре — передайте значение NULL явно.
❌ Смешали порядок значений
Q = A1sQ.BuildQByParams("... &A ... &B ...", "A, B", 1); // B не установлен
Связанные функции
- BuildQ — позиционная установка параметров по порядку появления.
- SetQParams — установить параметры из структуры ключ→значение.
- CreateQ — минимальный конструктор запроса.
- CreateAndLoad — создать запрос и перенести параметры из другого.