Мощная библиотека для работы с запросами в 1С. Fluent-интерфейс, Builder-паттерн, автоматические параметры и защита от SQL-инъекций.
Выберите подход, который лучше подходит для вашей задачи
// ✨ Fluent API — читается как предложение // Простой запрос с фильтрами ТЗ = A1sQ.On() .Select("Ссылка, Наименование, Код") .From("Справочник.Номенклатура") .Where("НЕ ПометкаУдаления") .WhereEq("Родитель", РодительСсылка) .OrderBy("Наименование") .Top(100) .Unload(); //↩ ТаблицаЗначений // Поиск с LIKE (автоэкранирование!) Товары = A1sQ.On() .Select("*") .From("Справочник.Номенклатура") .WhereLike("Наименование", "Молоко", "Contains") .Unload(); // Проверка существования (оптимизированно с TOP 1) Если A1sQ.On() .Select("Ссылка") .From("Документ.Заказ") .WhereEq("Контрагент", КонтрагентСсылка) .Exists() Тогда // Заказы найдены КонецЕсли;
// 📦 Static API — классический подход // Быстрый запрос с автопараметрами ТЗ = A1sQ.Unload( "ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ Родитель = &Parent", РодительСсылка // Автоматически станет &Parent ); // Получить скалярное значение Количество = A1sQ.ValueQ( "ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Номенклатура", 0 // Значение по умолчанию ); // Проверка существования Если A1sQ.ExistsQ( "ВЫБРАТЬ * ИЗ Документ.Заказ ГДЕ Контрагент = &C", КонтрагентСсылка ) Тогда // ... КонецЕсли; // Выгрузка в массив МассивСсылок = A1sQ.ArrayQ( "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура", "Ссылка" );
| Задача | ❌ Было (стандартный 1С) | ✅ Стало (A1sQ) |
|---|---|---|
| Простой запрос | Запрос = Новый Запрос; |
ТЗ = A1sQ.Unload("...", Параметр); |
| Проверка существования | Запрос = Новый Запрос; |
Если A1sQ.ExistsQ("...") Тогда |
| Получить число | Запрос = Новый Запрос; |
Результат = A1sQ.ValueQ("...", 0); |
| Поиск LIKE | // Нужно экранировать %, _, ~ вручную! |
.WhereLike("Поле", "Текст", "Contains") |
Цепочки вызовов, которые читаются как предложения. Код становится самодокументируемым.
Параметры извлекаются из текста запроса автоматически. Передавайте значения по порядку.
Автоматическое экранирование для LIKE. Защита от SQL-инъекций из коробки.
Exists() автоматически добавляет TOP 1. Автосоздание TempTablesManager при ПОМЕСТИТЬ.
Результат сразу в нужном формате: Array, Map, JSON, ValueList, Structure.
Собирайте запросы программно: Select → From → Where → OrderBy → Execute.
Точка входа: A1sQ.On()
| Метод | Описание |
|---|---|
| .Text(Текст) | Устанавливает полный текст запроса |
| .Select(Поля) | Поля для выборки: "Ссылка, Наименование" |
| .From(Таблица) | Источник данных: "Справочник.Номенклатура" |
| .Where(Условие) | Добавляет условие WHERE через И |
| .WhereEq(Поле, Значение) | Добавляет Поле = &Поле с параметром |
| .WhereIn(Поле, Массив) | Добавляет Поле В (&Массив) |
| .WhereLike(Поле, Шаблон, Режим) | ПОДОБНО с автоэкранированием. Режимы: Contains, StartsWith, EndsWith |
| .WhereBetween(Поле, От, До) | Добавляет Поле МЕЖДУ &От И &До |
| .WhereNull(Поле) | Добавляет Поле ЕСТЬ NULL |
| .OrderBy(Поля) | Сортировка: "Дата Убыв, Номер" |
| .GroupBy(Поля) | Группировка |
| .Top(N) | Ограничение ПЕРВЫЕ N |
| .Param(Имя, Значение) | Добавляет параметр запроса |
| .Params(Структура) | Добавляет несколько параметров из структуры |
| .WithTemps() | Создаёт новый TempTablesManager |
| .UseTemps(TTM) | Использует существующий TempTablesManager |
| Метод | Возвращает | Описание |
|---|---|---|
| .Unload() | ValueTable | Выгружает результат в ТаблицуЗначений |
| .Execute() | Selection | Выполняет запрос и возвращает выборку |
| .Value(Default) | Variant | Возвращает первое значение первой колонки |
| .FirstRow() | Selection | Первая строка результата |
| .Exists() | Boolean | Проверка существования (оптимизировано) |
| .IsEmpty() | Boolean | Проверка отсутствия записей |
| .Count() | Number | Количество записей |
| .Column(Имя) | Array | Выгружает колонку в массив |
| .ToArray() | Array | Массив структур |
| .ToMap(Ключ, Значение) | Map | Соответствие из двух колонок |
| .ToJSON() | String | JSON-представление результата |
| .ToValueList(Поле, Представление) | ValueList | СписокЗначений |
| .Build() | Query | Возвращает объект Query (не выполняя) |
| .GetText() | String | Текст собранного запроса |
| Функция | Возвращает | Описание |
|---|---|---|
| CreateQ(Текст, TTM) | Query | Создаёт объект Query |
| NewQ(Текст, TTM, V1...V8) | Query | Создаёт Query с параметрами |
| Q(Текст, V1...V8) | Query | Короткая версия NewQ с AutoTemps=True |
| BuildQ(Текст, V1...V8) | Query | Собирает Query с автопараметрами |
| ExecuteQ(Текст, V1...V8) | Selection | Выполняет и возвращает выборку |
| Unload(Текст, V1...V8) | ValueTable | Выполняет и выгружает в ТЗ |
| Функция | Возвращает | Описание |
|---|---|---|
| ValueQ(Текст, Default, V1...V8) | Variant | Скалярное значение из первой ячейки |
| FirstRowQ(Текст, V1...V8) | Selection | Первая строка или Undefined |
| ExistsQ(Текст, V1...V8) | Boolean | Есть ли записи (с TOP 1) |
| CountQ(Таблица, Условие) | Number | Количество записей |
| ArrayQ(Текст, Колонка, V1...V8) | Array | Массив значений колонки |
| MapQ(Текст, КлючПоле, ЗначПоле) | Map | Соответствие из двух колонок |
| ValuesQ(Текст, Поле, Представление) | ValueList | СписокЗначений |
| Функция | Описание |
|---|---|
| GetTemps() | Создаёт новый TempTablesManager |
| UnloadTemp(TTM, Имя) | Выгружает временную таблицу по имени |
| UnloadAllTemps(TTM) | Выгружает все временные таблицы в структуру |
| TT_Create(TTM, ТЗ, Имя) | Создаёт временную таблицу из ТЗ |
| TT_Exists(TTM, Имя) | Проверяет существование временной таблицы |
| DestroyTemp(TTM, Имя) | Удаляет временную таблицу |
// ═══════════════════════════════════════════════════════════════════════════════ // ПРИМЕР 1: Поиск товаров с фильтрами // ═══════════════════════════════════════════════════════════════════════════════ Товары = A1sQ.On() .Select("Ссылка, Наименование, Артикул, Цена") .From("Справочник.Номенклатура") .Where("НЕ ПометкаУдаления") .Where("НЕ ЭтоГруппа") .WhereEq("ВидНоменклатуры", ВидТовар) .WhereLike("Наименование", СтрокаПоиска, "Contains") .OrderBy("Наименование") .Top(50) .Unload(); // ═══════════════════════════════════════════════════════════════════════════════ // ПРИМЕР 2: Отчёт по продажам за период // ═══════════════════════════════════════════════════════════════════════════════ Продажи = A1sQ.On() .Select("Номенклатура, СУММА(Количество) КАК Количество, СУММА(Сумма) КАК Сумма") .From("Документ.РеализацияТоваровУслуг.Товары") .WhereBetween("Ссылка.Дата", НачалоПериода, КонецПериода) .Where("Ссылка.Проведен") .WhereEq("Ссылка.Организация", Организация) .GroupBy("Номенклатура") .Having("СУММА(Сумма) > 10000") .OrderBy("Сумма Убыв") .Unload(); // ═══════════════════════════════════════════════════════════════════════════════ // ПРИМЕР 3: Работа с временными таблицами // ═══════════════════════════════════════════════════════════════════════════════ TTM = A1sQ.GetTemps(); // Шаг 1: Создаём временную таблицу товаров A1sQ.On(TTM) .Text("ВЫБРАТЬ Ссылка, Наименование ПОМЕСТИТЬ ВТ_Товары |ИЗ Справочник.Номенклатура ГДЕ Родитель = &Parent") .Param("Parent", РодительСсылка) .Execute(); // Шаг 2: Используем временную таблицу Результат = A1sQ.On(TTM) .Text("ВЫБРАТЬ * ИЗ ВТ_Товары ГДЕ Наименование ПОДОБНО &Pattern") .Param("Pattern", "%молоко%") .Unload(); // ═══════════════════════════════════════════════════════════════════════════════ // ПРИМЕР 4: Преобразование результата // ═══════════════════════════════════════════════════════════════════════════════ // В Соответствие (для быстрого поиска) КодыПоСсылкам = A1sQ.On() .Select("Ссылка, Код") .From("Справочник.Номенклатура") .Where("НЕ ПометкаУдаления") .ToMap("Ссылка", "Код"); // В СписокЗначений (для формы) СписокВалют = A1sQ.On() .Select("Ссылка, Наименование") .From("Справочник.Валюты") .Where("НЕ ПометкаУдаления") .OrderBy("Наименование") .ToValueList("Ссылка", "Наименование"); // В JSON (для API) JSON = A1sQ.On() .Select("Код, Наименование, Цена") .From("Справочник.Номенклатура") .Top(10) .ToJSON(); // ═══════════════════════════════════════════════════════════════════════════════ // ПРИМЕР 5: Пакетное выполнение // ═══════════════════════════════════════════════════════════════════════════════ Запросы = Новый Структура; Запросы.Вставить("Товары", "ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ Родитель = &Parent"); Запросы.Вставить("Услуги", "ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ ВидНоменклатуры = &ServiceType"); Параметры = A1sDS.Of("Parent", РодительСсылка, "ServiceType", ВидУслуга); Результаты = A1sQ.BatchUnload(Запросы, Параметры); // Результаты.Товары — ТаблицаЗначений // Результаты.Услуги — ТаблицаЗначений
Используйте .GetText() для отладки — он покажет итоговый текст запроса без выполнения.