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

FAQ

Ответы на вопросы об экосистеме A1sCode, инженерии кода в 1С и стандартах разработки

📦 Общие вопросы

Что такое A1sCode?

Основные концепции и философия экосистемы

Overview

Что такое экосистема A1sCode?

A1sCode — это набор независимых библиотек для платформы 1С:Предприятие 8.3.20+. Каждая библиотека решает конкретную задачу: работа с массивами (A1sAR), структурами (A1sDS), таблицами значений (A1sVT), запросами (A1sQ) и т.д. Основная идея — писать код в современном функциональном стиле с цепочками вызовов (Fluent API).

Philosophy

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

Библиотеки независимы — вы можете использовать только A1sQ или только A1sAR. Но вместе они образуют целостную систему с единым API-стилем и философией.

License

Лицензия?

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

Example

Как выглядит типичный код?

Вместо классических полотен — компактные цепочки. Наведите, чтобы развернуть:

// Фильтрация и сортировка массива Результат = A1sAR.On(МассивТоваров) .Filter("v.Цена > 1000") .Sort("Наименование") .Take(10) .Value(); // Запрос с Builder API ТЗ = A1sQ.On() .Select("Ссылка, Наименование") .From("Справочник.Номенклатура") .WhereEq("Родитель", Родитель) .Unload();
Version

Требуемая версия 1С?

1С:Предприятие 8.3.20 и выше. Тестировалось на версиях до 8.3.25.

🚀 Начало работы

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

Установка, интеграция и первые шаги

Install

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

Просто скопируйте нужный Общий Модуль и Обработку в вашу конфигурацию. Зависимостей между библиотеками нет — вы можете использовать только A1sQ или только A1sAR. Для EDT: импортируйте .cfe расширение или скопируйте объекты вручную.

Руководство по установке
Minimum

Минимальный набор?

Начните с A1sAR + A1sDS — они покрывают 80% задач по работе с коллекциями.

EDT

Работает в EDT?

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

Architecture

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

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

Static vs Fluent

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

Для одиночных операций: A1sAR.Sort(Массив). Для цепочек — Fluent: A1sAR.On().Filter().Sort().Value()

⚡ Производительность

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

Оптимизация, накладные расходы, бенчмарки

Overhead

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

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

Optimization

Какие оптимизации встроены?

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

Big Data

Для больших данных?

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

Server

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

Библиотеки оптимизированы под серверное выполнение. Модули помечены как "Сервер", "ВызовСервера".

📐 Стандарты

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

XML-Doc, Intention Block, SyntaxMarks

XML-Doc

Что такое XML-Doc с маркерами?

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

// Фильтрует массив по условию. // // Параметры: // ➤ `Массив` - Массив: Исходный массив // ➤ `Условие` - Строка: Выражение фильтра // // Возвращает: // ⬅ `Массив` - Отфильтрованный массив // // Пример: // ✦ Результат = A1sAR.Filter(Товары, "v > 100")
Intention Block

Что такое ib = "..."?

Intention Block — первая строка в теле функции, описывающая зачем мы это делаем, а не что.

Подробнее →
SyntaxMarks

Что значат //✏ //⟳ //↩?

Визуальные метки в коде: //✏ изменение, //⟳ цикл, //↩ возврат, //⚡ условие.

Все метки →
Why

Зачем такая строгость?

Стандарты A1sCode решают проблему "write-only" кода в 1С. Когда код документирован с маркерами и Intention Block — его можно читать как книгу. Code Review ускоряется в 3 раза.

📚 Библиотеки

Какие модули есть?

Core, Data и Utils модули экосистемы

[]
Core

A1sAR — Массивы

Filter, Map, Reduce, Set-операции (Union, Intersection), сортировка, группировка по типам.

Документация →
{}
Core

A1sDS — Структуры

Of(), Pick/Omit, Merge, DeepCopy, работа с путями (GetOrInsertPath).

Документация →
Core

A1sVT — Таблицы

GroupBy, Page (пагинация), OfStructArray (умное создание), агрегация.

Документация →
🔍
Data

A1sQ — Запросы

Builder API, автопараметры, WhereLike с экранированием, временные таблицы.

Документация →
Coming Soon

Что планируется?

A1sJ — JSON сериализация/десериализация
A1sX — XML обработка
A1sLog — Логирование
A1sMatch — Pattern Matching для 1С

🔧 Решение проблем

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

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

Error

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

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

Error

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

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

Error

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

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

Support

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

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

Contribute

Хочу помочь!

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

GitHub →