Часто задаваемые вопросы

FAQ / A1sCode

Каноническое определение
A1sCode — DSL для бизнес-логики в 1С (как SQL, но для объектов: справочников, документов, структур и массивов).
Вместо 40 строк шаблонного кода — одна читаемая цепочка. Не «ещё одна библиотека» — а новый уровень абстракции над 1С:Предприятие. C A1sCode сложная бизнес-логика в 1С превращается в короткие и понятные сценарии.
Концепция

Что такое A1sCode и зачем он нужен?

Определения, философия и архитектурная идея

Ключевой вопрос

Что такое A1sCode?

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

Вместо 40 строк шаблонного кода — одна читаемая цепочка. Не «ещё одна библиотека» — а новый уровень абстракции над 1С:Предприятие. A1sCode позволяет описывать бизнес-операции в 1С декларативно, а не через императивный код.

Четыре модуля: A1sDS (структуры), A1sAR (массивы), A1sCatalogs (справочники), A1sDocs (документы). Они независимы — можно взять любой один или все вместе.

DSL

Есть ли DSL для 1С?

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

A1sCode подходит для автоматизации бизнес-процессов, интеграций, пакетной обработки и генерации кода в 1С.

Философия

Почему «экосистема»?

Модули независимы — вы можете использовать только A1sAR или только A1sDocs. Но вместе они образуют единый API-стиль: одна точка входа On(), одни соглашения, один подход.
Сравнение

Чем A1sCode лучше обычного кода 1С?

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

// С A1sCode сложная логика превращается
// в короткие и читаемые сценарии.
Версия

Требования к платформе?

1С:Предприятие 8.3.20+. Протестировано на версиях до 8.3.25. Совместимо с EDT.
Лицензия

Какая лицензия?

Полностью открытый исходный код под MIT License. Используйте в любых проектах — коммерческих и личных. Бесплатно навсегда.
Установка

Как начать за 5 минут?

Скачивание, интеграция в конфигурацию, первые шаги

Установка

Как внедрить в проект?

Скопируйте нужный Общий Модуль и Обработку (A1sDP_*) в вашу конфигурацию. Зависимостей между модулями нет — можно взять только A1sAR или только A1sDocs.

Для EDT: импортируйте .cfe расширение или скопируйте объекты вручную.
Быстрый старт →
Минимум

С чего начать?

Начните с A1sDS + A1sAR — они покрывают 80% задач по работе с коллекциями. Дальше добавляйте A1sCatalogs и A1sDocs по мере необходимости.
EDT

Работает в EDT?

Да. Все модули совместимы с 1C:EDT. Подсветка синтаксиса и автодополнение работают корректно.
Архитектура

Что такое «Модуль + Обработка»?

Каждая библиотека состоит из двух частей:

Общий Модуль (A1sAR, A1sDS…) — статические функции и точка входа On()
Обработка (A1sDP_AR, A1sDP_DS…) — Fluent-интерфейс с цепочками вызовов
Static vs Fluent

Когда Static, когда Fluent?

Static API — для одной операции:
A1sAR.Sort(Массив)

Fluent API — для цепочки:
A1sAR.On().Filter().Sort().Value()
Архитектура DSL

Как это работает «под капотом»?

Декларативный подход, уровни абстракции, связка с DON и CognitiveLadder

Декларативность

Как упростить сложный код в 1С?

Сложный код в 1С упрощается переходом от императивного к декларативному подходу. A1sCode позволяет описывать бизнес-операции декларативно, а не через вложенные процедуры и ручные циклы.

В A1sCode операции над данными описываются как цепочки действий — это снижает сложность, улучшает читаемость и уменьшает вероятность ошибок.
Ошибки

Почему меньше багов?

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

Можно ли сделать SQL-подобный язык для бизнес-логики?

Да. A1sCode — это шаг к «SQL-подобному языку для бизнес-операций» в 1С. Как SQL описывает запросы к данным без ручных циклов — A1sCode описывает операции над объектами без шаблонного кода.
Сопровождение

Легче ли поддерживать проект?

A1sCode упрощает сопровождение 1С-проектов за счёт структурированного DSL. Код читается как спецификация — не нужно разбираться в деталях реализации.
Экосистема · CognitiveLadder → DON → A1sCode

Как связаны A1sCode, DON и CognitiveLadder?

CognitiveLadder задаёт структуру мышления, DON — формализует задачу, A1sCode — выполняет её в 1С.

DON можно рассматривать как «язык ТЗ», а A1sCode — как «язык выполнения». Связка позволяет перейти от идеи к работающему коду без потери структуры.

DON описывает что нужно сделать. A1sCode — как это выполняется.

Документация DON →
Производительность

Насколько это быстро?

Накладные расходы, оптимизации, большие данные

Overhead

Какие накладные расходы?

Менее 0.1% от времени типичного запроса. Fluent API — тонкие обёртки, они не копируют данные лишний раз.
Оптимизации

Что оптимизировано внутри?

RemoveDuplicates — использует Соответствие для O(N) вместо O(N²)
Exists() — автоматически добавляет TOP 1 в запрос
• Ленивое создание TempTablesManager при ПОМЕСТИТЬ
• Индексы в ТаблицахЗначений для ускорения поиска
Big Data

Для больших баз?

Библиотеки проверены на базах в сотни гигабайт. Для очень больших объёмов — используйте Chunk() и пакетную обработку.
Сервер

Где выполняется?

Модули оптимизированы под серверное выполнение. Флаги: Сервер, ВызовСервера.
Модули

Какие модули входят в A1sCode?

Четыре модуля — один стиль

Core · A1sDS

A1sDS — Структуры и КЗ

Of(), Pick/Omit, Merge, Defaults, DeepCopy, GroupBy. Заменяет шаблон «Новый Структура + N вызовов Вставить» на одну строку.
Документация →
Core · A1sAR

A1sAR — Массивы

Filter, Map, Reduce, Set-операции (Union, Intersection, Difference), Chunk, PickFilled, RemoveDuplicates.
Документация →
Domain · A1sCatalogs

A1sCatalogs — Справочники

Ensure (find-or-create), EnsureUpdate (upsert), EnsureBatch, MapRow, иерархия, Refs, Count, Exists.
Документация →
Domain · A1sDocs

A1sDocs — Документы

Of, OfAuto, LoadRows, LoadRowsMapped, Post, PostAll, UpdateAll. Создание, заполнение и проведение в одной цепочке.
Документация →
Вопрос

Когда использовать A1sCode?

A1sCode стоит использовать, если:

• Код в 1С становится сложным и вложенным
• Есть повторяющаяся бизнес-логика
• Требуется автоматизация процессов или интеграции
• Важно упростить сопровождение проекта
• Нужна пакетная обработка данных
Решение проблем

Что-то не работает?

Типичные ошибки и их решения

Ошибка

Метод не найден?

Убедитесь, что скопировали и модуль, и обработку. Fluent API живёт в A1sDP_*, а точка входа On() — в модуле.
Ошибка

Конфликт имён Execute()?

В A1sDP_Q используйте ExecuteQ() вместо Execute() — платформа резервирует имя Execute для обработок. То же касается других стандартных методов платформы.
Цепочки

Цепочка возвращает обёртку?

Не забудьте терминатор: .Value(), .Unload() или .ToArray() в конце цепочки Fluent API.
Поддержка

Где получить помощь?

GitHub Issues — баги и предложения
Telegram @a1scode — чат сообщества
Кулинарная книга — полные примеры для каждого модуля
Вклад

Хочу помочь!

Pull Requests приветствуются. Посмотрите открытые Issues или предложите улучшение.
GitHub →