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

A1sQ.Select

Назначение: стартовая точка fluent‑API для сборки текста запроса без ручной конкатенации.
Результат: цепочки .From(...).Where(...).WithParam(...).OrderBy(...).Top(...).Build() вернут готовый Query.

Сигнатура

Function Select(Fields) Export

Как работает (по исходному коду)

Builder = New Structure;
Builder.Insert("Fields", Fields);
Builder.Insert("FromClause", "");
Builder.Insert("WhereClause", "");
Builder.Insert("OrderClause", "");
Builder.Insert("GroupClause", "");
Builder.Insert("TopClause", "");
Builder.Insert("Parameters", New Structure);
Return Builder;

Методы цепочки (fluent)

МетодСигнатураЧто делает
FromFrom(Builder, TableName)Задаёт FROM.
WhereWhere(Builder, Condition)Добавляет условие. Если уже есть — склеивает через И.
OrderByOrderBy(Builder, OrderFields)Задаёт сортировку.
TopTop(Builder, Count)Задаёт ПЕРВЫЕ n.
WithParamWithParam(Builder, ParamName, ParamValue)Добавляет значение в Builder.Parameters.
BuildBuild(Builder)Формирует строку: ВЫБРАТЬ [ПЕРВЫЕ n] Fields ИЗ From [ГДЕ Where] [СГРУППИРОВАТЬ ПО Group] [УПОРЯДОЧИТЬ ПО Order], создаёт Query и вызывает SetQParams(Query, Builder.Parameters).
Примечание: поля GroupClause можно заполнить вручную — отдельной функции в API нет.

Примеры

1) Базовый fluent‑запрос

Q = A1sQ.Select("Ссылка, Наименование")
    .From("Справочник.Номенклатура")
    .Where("НЕ ПометкаУдаления")
    .OrderBy("Наименование")
    .Top("100")
    .Build();

ТЗ = Q.Выполнить().Выгрузить();

2) С параметрами

Q = A1sQ.Select("Ссылка, Наименование")
    .From("Справочник.Номенклатура КАК Ном")
    .Where("Ном.Родитель = &Parent")
    .WithParam("Parent", Родитель)
    .OrderBy("Наименование")
    .Build();

3) Группировка (через свойство)

B = A1sQ.Select("Ном.Родитель, СЧЁТ(Ном.Ссылка) КАК Колво")
    .From("Справочник.Номенклатура КАК Ном")
    .Where("НЕ Ном.ПометкаУдаления");
B.GroupClause = "Ном.Родитель";
Q = A1sQ.Build(B);

Нюансы

✅ Быстрая сборка запроса без конкатенации строк
✅ Параметры аккуратно передаются через SetQParams
❗ Нет отдельных методов для GROUP BY/HAVING — задавайте GroupClause вручную
❗ Метод Where склеивает условия через «И» — для «ИЛИ» передайте его целиком в одном вызове
❗ Top принимает как строку, так и число; в текст попадёт «ПЕРВЫЕ »
  • BuildQ — сформировать Query сразу из Builder без вызова Build (альтернатива).
  • CombineQT / BuildByQT — конструкторы для пакетных текстов (QT‑подход).
  • CreateQ / ExecuteQ — базовые операции.
  • SetQParams — установка параметров для Query.