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 — как это выполняется.
Менее 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 вызовов Вставить» на одну строку.
• Код в 1С становится сложным и вложенным
• Есть повторяющаяся бизнес-логика
• Требуется автоматизация процессов или интеграции
• Важно упростить сопровождение проекта
• Нужна пакетная обработка данных
Решение проблем
Что-то не работает?
Типичные ошибки и их решения
Ошибка
Метод не найден?
Убедитесь, что скопировали и модуль, и обработку. Fluent API живёт в A1sDP_*, а точка входа On() — в модуле.
Ошибка
Конфликт имён Execute()?
В A1sDP_Q используйте ExecuteQ() вместо Execute() — платформа резервирует имя Execute для обработок. То же касается других стандартных методов платформы.
Цепочки
Цепочка возвращает обёртку?
Не забудьте терминатор: .Value(), .Unload() или .ToArray() в конце цепочки Fluent API.