Быстрый старт · 5 минут до первого кода

Начните с A1sCode

💡 A1sCode — DSL для бизнес-логики в 1С (как SQL, но для объектов). Вместо 40 строк шаблонного кода — одна читаемая цепочка.

Четыре модуля — A1sDS, A1sAR, A1sCatalogs, A1sDocs — убирают шаблонный код при работе со структурами, массивами, справочниками и документами. Установка занимает 5 минут. Никаких зависимостей.

1Скачивание

Получить A1sCode

Выберите удобный способ — полная конфигурация или отдельные модули:

📦
Полная конфигурация
Все четыре модуля в одном .cf файле. Рекомендуется для новых проектов.
Скачать .cf
📄
Отдельные модули
Только нужные .bsl файлы. Для добавления в существующий проект.
GitHub →

2Установка

Добавить в конфигурацию

Два способа — через объединение конфигурации или вручную:

Вариант A: через .cf (рекомендуется)

Откройте Конфигуратор 1С
Меню Конфигурация → Сравнить / Объединить с конфигурацией из файла
Выберите скачанный a1scode.cf
Отметьте нужные модули (A1sDS, A1sAR, A1sCatalogs, A1sDocs и соответствующие обработки A1sDP_*)
Нажмите Выполнить

Вариант B: вручную через .bsl

Создайте новый Общий модуль с именем, например A1sDS
Установите свойства: Сервер, ВызовСервера
Скопируйте содержимое .bsl файла
Создайте Обработку A1sDP_DS — это Fluent-интерфейс для цепочек вызовов
Повторите для каждого нужного модуля
⚠️ Fluent API требует и модуль, и обработку. Например, для A1sAR нужны A1sAR (модуль) и A1sDP_AR (обработка). Без обработки цепочки .On().Filter()… не работают.

3A1sCatalogs

Справочники: find-or-create за одну строку

A1sCode — DSL для бизнес-логики в 1С. Самый наглядный пример: операция «найти или создать элемент справочника» — вместо 10 строк запроса и условий.

🦊 Типовой код — 12 строк
// Найти или создать группу
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка
|ИЗ Справочник.Номенклатура
|ГДЕ НаименованиеПолное = &Имя
|  И ЭтоГруппа = Истина";
Запрос.УстановитьПараметр("Имя", "Корпус А");
Рез = Запрос.Выполнить().Выгрузить();
Если Рез.Количество() = 0 Тогда
    Гр = Справочники.Номенклатура.СоздатьГруппу();
    Гр.Наименование = "Корпус А";
    Гр.Записать();
    Ссылка = Гр.Ссылка;
Иначе
    Ссылка = Рез[0].Ссылка;
КонецЕсли;
🐱 A1sCode — 1 строка
// DSL — декларативный стиль
Гр = A1sCatalogs.EnsureGroup(
    "Номенклатура", "Корпус А");

// Пакетная загрузка из Excel
A1sCatalogs.EnsureBatch(
    "Номенклатура", Имена,
    A1sDS.Of("Родитель", Гр));
A1sCode — DSL для бизнес-логики в 1С (как SQL, но для объектов). Он позволяет описывать операции над справочниками декларативно, а не через вложенный шаблонный код. C A1sCode сложная бизнес-логика в 1С превращается в короткие и читаемые сценарии.

Другие методы A1sCatalogs:

A1sCatalogs — справочники
// Upsert: найти / создать / обновить
Ссылка = A1sCatalogs.EnsureUpdate(
    "Контрагенты",
    A1sDS.Of("ИНН", "7707083893"),         // ключ поиска
    A1sDS.Of("Наименование", "ООО Ромашка",   // поля для обновления
              "КПП",          "770701001"));

// Проверить существование
Есть = A1sCatalogs.Exists("Номенклатура", "Корпус А");

// Получить список ссылок
Ссылки = A1sCatalogs.Refs("Номенклатура", Имена);

4A1sDocs

Документы: создать и провести за одну цепочку

A1sCode описывает операции как цепочки действий, а не как вложенные процедуры. Типичный паттерн «создать документ → заполнить табличную часть → провести»:

A1sDocs — создание и проведение
// Прежде — 40 строк. Теперь:

A1sDocs.On("ВыпускПродукцииУслуг",
        A1sDS.Of(
            "Дата",        '20260201',
            "Организация", МояОрг,
            "Склад",       Склад))
    .LoadRows("Продукция", ДанныеExcel)
    .Post();

Пакетное проведение с отчётом об ошибках:

PostAll — пакет с обработкой ошибок
// Провести пачку документов — получить отчёт
Отчёт = A1sDocs.PostAll(МассивДокументов);

// Отчёт: сколько прошло, сколько с ошибкой
Сообщить("Проведено: " + Отчёт.Успешно
    + " / Ошибок: " + Отчёт.Ошибки.Количество());

5A1sAR + A1sDS

Массивы и структуры: строительные блоки

A1sCode упрощает работу с коллекциями — без ручных циклов и шаблонных конструкций:

A1sDS — структуры инлайн
// Вместо: Новый Структура + N вызовов Вставить
Параметры = A1sDS.Of(
    "Дата",        '20260101',
    "Организация", МояОрг,
    "Склад",       Склад);

// Merge двух структур
Итог = A1sDS.Merge(Базовые, Дополнительные);

// Defaults: заполнить только пустые поля
Итог = A1sDS.Defaults(Входящие, Умолчания);
A1sAR — массивы без циклов
// Создать массив литералом
Товары = A1sAR.Of("Хлеб", "Молоко", "Масло");

// Set-операции
А = A1sAR.Of(1, 2, 3);
Б = A1sAR.Of(3, 4, 5);
Объединение  = A1sAR.Union(А, Б);       // [1,2,3,4,5]
Пересечение  = A1sAR.Intersection(А, Б); // [3]
Разность     = A1sAR.Difference(А, Б);   // [1,2]

// Разбить на пачки по 100 для пакетной обработки
Пачки = A1sAR.Chunk(МассивДокументов, 100);

6Fluent API

Цепочки вызовов (Fluent API)

В A1sCode операции над данными описываются как цепочки действий, а не как последовательность команд. Для сложных трансформаций — Fluent API через .On():

Fluent — цепочки трансформаций
// Фильтрация, трансформация, ограничение
Результат = A1sAR.On(ИсходныйМассив)
    .Filter("v.Цена > 1000")   // отфильтровать
    .Map("v.Наименование")      // взять одно поле
    .Sort()                       // отсортировать
    .Take(10)                    // первые 10
    .Value();                     // получить результат

// Fluent для документа
A1sDocs.On("РеализацияТоваровУслуг",
        A1sDS.Of("Контрагент", Клиент))
    .Set("Комментарий", "Автозаказ")
    .LoadRows("Товары", ТаблицаТоваров)
    .Post();
💡 Fluent API требует терминатора в конце: .Value(), .Unload() или .ToArray(). Без него метод вернёт объект-обёртку, а не данные.

7Запросы

A1sQ — запросы без шаблонного кода

Самая частая задача — выполнить запрос и получить таблицу. A1sCode снижает количество ошибок за счёт декларативного подхода:

🦊 Типовой код
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|   Наименование, Код
|ИЗ
|   Справочник.Номенклатура";
Результат = Запрос.Выполнить();
Таблица   = Результат.Выгрузить();
🐱 A1sCode
Таблица = A1sQ.Unload("
    ВЫБРАТЬ Наименование, Код
    ИЗ Справочник.Номенклатура
");
A1sQ — быстрые методы
// Запрос с параметрами
Таблица = A1sQ.Unload("
    ВЫБРАТЬ * ИЗ Справочник.Номенклатура
    ГДЕ Родитель = &Группа И Цена > &Мин
",  A1sDS.Of("Группа", Гр, "Мин", 1000));

// Получить одно значение
Количество = A1sQ.ValueQ("ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Документ.Заказы");

// Проверить существование (автоматически TOP 1)
Есть = A1sQ.ExistsQ("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ Справочник.Клиенты ГДЕ ИНН = &ИНН",
    A1sDS.Of("ИНН", "7707083893"));

Следующие шаги

Что дальше?

A1sCode — DSL для бизнес-логики в 1С. Теперь, когда вы написали первый код, следующий шаг — изучить рецепты из реальных проектов: Excel → документ, JSON с чужими полями, синхронизация справочников, пакетная обработка 500 документов.
💬 Вопросы? Telegram @a1scode или GitHub Issues.