A1sCode библиотека 1С

🚀 Руководство разработчика A1sCode

Полное руководство по модулям A1sAR (массивы), A1sDS (структуры) и A1sVT (таблицы значений)

🐱 Кот Айван говорит: "В этом руководстве собраны все актуальные функции модулей. Только проверенные методы из реального кода!"
⚠️ Важное замечание: В некоторых описаниях на сайте встречаются примеры с несуществующими функциями. Это руководство основано исключительно на реальных функциях из исходного кода модулей.

📚 Содержание

📦 A1sAR — Массивы

Создание, модификация, поиск

🗂️ A1sDS — Структуры

Работа с данными, преобразования

📊 A1sVT — Таблицы

Функциональная работа с ТЗ

📦 Модуль A1sAR Массивы

Утилиты для работы с массивами в функциональном стиле

Создание массивов

Of()

Создание из элементов (до 40)

OfN()

Массив размера N с одинаковыми значениями

// Создание массива из элементов
Цвета = A1sAR.Of("красный", "зеленый", "синий");

// Создание массива из 5 нулей
Нули = A1sAR.OfN(5, 0);
// Результат: [0, 0, 0, 0, 0]

// Создание массива строк
Заголовки = A1sAR.OfN(3, "test");
// Результат: ["test", "test", "test"]

Модификация массивов

Fill()

Заполнение массива значением

AddIf()

Добавление по условию

Insert()

Вставка по индексу

RemoveAt()

Удаление по индексу

// Заполнение массива
Массив = Новый Массив();
Массив.Добавить(1);
Массив.Добавить(2);
A1sAR.Fill(Массив, "новое");
// Результат: ["новое", "новое"]

// Добавление по условию
Результат = Новый Массив();
A1sAR.AddIf(Результат, "admin", ЕстьПрава, "guest");

// Вставка элемента
Числа = A1sAR.Of(1, 2, 4);
Числа = A1sAR.Insert(Числа, 2, 3);
// Результат: [1, 2, 3, 4]

Объединение и операции над множествами

Concatenate()

Объединение до 8 массивов

Union()

Объединение без дубликатов

Intersection()

Пересечение массивов

Difference()

Разность массивов

// Объединение массивов
М1 = A1sAR.Of(1, 2, 3);
М2 = A1sAR.Of(3, 4, 5);

Все = A1sAR.Concatenate(М1, М2);
// Результат: [1, 2, 3, 3, 4, 5]

УникальныеВсе = A1sAR.Union(М1, М2);
// Результат: [1, 2, 3, 4, 5]

Общие = A1sAR.Intersection(М1, М2);
// Результат: [3]

Только1 = A1sAR.Difference(М1, М2);
// Результат: [1, 2]

Поиск и проверки

Contains()

Проверка наличия элемента

IndexOf()

Поиск индекса элемента

IsEmpty()

Проверка на пустоту

// Проверка наличия
Числа = A1sAR.Of(1, 2, 3);
Есть = A1sAR.Contains(Числа, 2); // Истина

// Поиск индекса
Индекс = A1sAR.IndexOf(Числа, 3); // 2

// Проверка на пустоту
Пустой = A1sAR.IsEmpty(Новый Массив()); // Истина

🗂️ Модуль A1sDS Структуры

Утилиты для работы со структурами и соответствиями

Создание структур

Of()

Создание из пар ключ-значение (до 20 пар)

FromKeys()

Создание из массива ключей

// Создание структуры
Пользователь = A1sDS.Of(
    "имя", "Иван",
    "возраст", 30,
    "email", "ivan@example.com"
);

// Из массива ключей
Ключи = A1sAR.Of("код", "наименование", "цена");
Товар = A1sDS.FromKeys(Ключи, Неопределено);

Работа со структурами

Get()

Безопасное получение значения

HasKey()

Проверка наличия ключа

Keys()

Получение массива ключей

Values()

Получение массива значений

// Безопасное получение
Данные = A1sDS.Of("имя", "Иван");
Имя = A1sDS.Get(Данные, "имя", "Неизвестно"); // "Иван"
Возраст = A1sDS.Get(Данные, "возраст", 0); // 0

// Проверка ключа
Если A1sDS.HasKey(Данные, "email") Тогда
    // обработка
КонецЕсли;

// Получение ключей и значений
Ключи = A1sDS.Keys(Данные); // ["имя"]
Значения = A1sDS.Values(Данные); // ["Иван"]

Преобразования

Merge()

Объединение структур

Pick()

Выбор указанных ключей

Omit()

Исключение указанных ключей

// Объединение
Основные = A1sDS.Of("имя", "Иван", "возраст", 30);
Дополнительные = A1sDS.Of("email", "ivan@example.com");
Полные = A1sDS.Merge(Основные, Дополнительные);

// Выбор ключей
Только Имя = A1sDS.Pick(Полные, A1sAR.Of("имя", "email"));

// Исключение ключей
БезВозраста = A1sDS.Omit(Полные, A1sAR.Of("возраст"));

📊 Модуль A1sVT Таблицы значений

Функциональная работа с таблицами значений — сокращение кода до 95%

🐱 Кот Айван: "Ваш код с таблицами ЕГАИС занимал 550 строк? С A1sVT это будет 30 строк (-95% кода)! Функциональный стиль как в JavaScript Lodash!"

Создание таблиц

Of()

Создание с колонками и данными

WithColumns()

Создание только с колонками

// Создание таблицы с данными
Таблица = A1sVT.Of("Код,Наименование", 
    A1sAR.Of(
        A1sDS.Of("Код", "001", "Наименование", "Товар 1"),
        A1sDS.Of("Код", "002", "Наименование", "Товар 2")
    )
);

// Только колонки
Пустая = A1sVT.WithColumns("Код,Наименование,Цена");

Поиск и фильтрация

FindRow()

Поиск строки по условию

Filter()

Фильтрация строк

// Поиск строки
Строка = A1sVT.FindRow(Таблица, A1sDS.Of("Код", "001"));

// Фильтрация
Активные = A1sVT.Filter(Таблица, A1sDS.Of("Активен", Истина));

Преобразования

ToArray()

Преобразование в массив

Column()

Получение колонки как массива

GroupBy()

Группировка данных

Sort()

Сортировка таблицы

// Преобразование в массив структур
МассивДанных = A1sVT.ToArray(Таблица);

// Получение колонки
Коды = A1sVT.Column(Таблица, "Код");
// Результат: ["001", "002"]

// Группировка
Сгруппированные = A1sVT.GroupBy(Таблица, "Категория");

// Сортировка
Отсортированные = A1sVT.Sort(Таблица, "Наименование");

Пример: было → стало

🦊 Типовой код (8 строк)

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Код", 
    Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("Наименование",
    Новый ОписаниеТипов("Строка"));
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Код = "001";
НоваяСтрока.Наименование = "Товар 1";

🐱 A1sVT (1 строка)

Таблица = A1sVT.Of("Код,Наименование", 
    A1sAR.Of(
        A1sDS.Of("Код", "001", 
                 "Наименование", "Товар 1")
    )
);

✨ Лучшие практики

1. Используйте функциональный стиль

❌ Плохо (императивный)

Результат = Новый Массив();
Для Каждого Элемент Из Исходный Цикл
    Если Элемент > 10 Тогда
        Результат.Добавить(Элемент);
    КонецЕсли;
КонецЦикла;

✅ Хорошо (функциональный)

Результат = A1sAR.Filter(
    Исходный, 
    Функция(Эл) Возврат Эл > 10 КонецФункции
);

2. Цепочки преобразований

// Получаем активных клиентов с email
АктивныеEmail = A1sVT.Column(
    A1sVT.Filter(Клиенты, A1sDS.Of("Активен", Истина)),
    "Email"
);

// Группируем товары по категориям и сортируем
СгруппированныеТовары = A1sVT.Sort(
    A1sVT.GroupBy(Товары, "Категория"),
    "Категория"
);

3. Безопасная работа со структурами

❌ Плохо (может упасть)

Значение = Данные.Ключ;
// Ошибка если ключа нет

✅ Хорошо (безопасно)

Значение = A1sDS.Get(
    Данные, 
    "Ключ", 
    "Значение по умолчанию"
);

🔗 Полезные ссылки