A1sCode Главная Библиотека Стандарты Cookbook Примеры Реальные сценарии использования A1sAR в разработке 1С Базовые Документы Set-операции Агрегация Типизация Было → Стало 📦 Создание массивов
// Из значений Числа = A1sAR.Of(1, 2, 3, 4, 5); Строки = A1sAR.Of("Москва", "Питер", "Казань"); // С Неопределено (v2.0!) СНулами = A1sAR.Of(100, Неопределено, 200); // [100, Неопределено, 200] // Заполненный массив Нули = A1sAR.OfN(10, 0); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Флаги = A1sAR.OfN(100, Ложь); // 100 элементов Ложь // Фиксированный (неизменяемый) Константы = A1sAR.OfFixed("A", "B", "C");
🔍 Проверки и доступ
Данные = A1sAR.Of(10, 20, 30, 40, 50); // Первый и последний Первый = A1sAR.First(Данные); // 10 Последний = A1sAR.Last(Данные); // 50 // Поиск Если A1sAR.Contains(Данные, 30) Тогда Индекс = A1sAR.IndexOf(Данные, 30); // 2 КонецЕсли; // Пустота Если A1sAR.IsEmpty(Данные) Тогда Сообщить("Массив пуст"); КонецЕсли;
⛓️ Fluent: Filter + Map
Данные = A1sAR.Of(-2, -1, 0, 1, 2, 3, 4, 5); // Только положительные, умноженные на 2 Результат = A1sAR.On(Данные) .Filter("v > 0") .Map("v * 2") .Value(); // [2, 4, 6, 8, 10]
📄 Обработка табличной части
СтрокиТЧ = Документ.Товары.Выгрузить(); // Суммирование ОбщаяСумма = A1sAR.On(СтрокиТЧ) .Map("v.Сумма") .Total(); // Средняя цена СредняяЦена = A1sAR.On(СтрокиТЧ) .Map("v.Цена") .Avg(); // Максимальное количество МаксКол = A1sAR.On(СтрокиТЧ) .Map("v.Количество") .Maximum();
🔎 Фильтрация строк ТЧ
// Строки с количеством > 10 и ценой > 1000 Фильтр = A1sAR.On(СтрокиТЧ) .Filter("v.Количество > 10") .Filter("v.Цена > 1000") .Value(); // Только услуги Услуги = A1sAR.On(СтрокиТЧ) .Filter("v.Номенклатура.ЭтоУслуга") .Value(); // Извлечь наименования Наименования = A1sAR.On(СтрокиТЧ) .Map("v.Номенклатура.Наименование") .Unique() .Sort() .Value();
📊 Формирование отчёта
Продажи = ПолучитьПродажи(НачалоПериода, КонецПериода); Отчёт = Новый Структура; Отчёт.ВсегоПродаж = Продажи.Количество(); Отчёт.ОбщаяСумма = A1sAR.On(Продажи).Map("v.Сумма").Total(); Отчёт.СредняяСумма = A1sAR.On(Продажи).Map("v.Сумма").Avg(); Отчёт.МаксСумма = A1sAR.On(Продажи).Map("v.Сумма").Maximum(); // Топ-5 клиентов Отчёт.ТопКлиенты = A1sAR.On(Продажи) .Map("v.Клиент") .Unique() .Take(5) .Value();
🔗 Объединение списков
// Клиенты из разных источников КлиентыCRM = ПолучитьКлиентовCRM(); КлиентыСайта = ПолучитьКлиентовСайта(); КлиентыCall = ПолучитьКлиентовCallЦентра(); // Все уникальные клиенты ВсеКлиенты = A1sAR.Union(КлиентыCRM, КлиентыСайта, КлиентыCall);
∩ Поиск общих элементов
// Товары на ВСЕХ складах ТоварыСклад1 = ПолучитьТоварыСклада(Склад1); ТоварыСклад2 = ПолучитьТоварыСклада(Склад2); ТоварыСклад3 = ПолучитьТоварыСклада(Склад3); ОбщиеТовары = A1sAR.Intersection(ТоварыСклад1, ТоварыСклад2, ТоварыСклад3);
∖ Поиск различий
// Товары в прайсе, но не на складе ТоварыВПрайсе = ПолучитьТоварыПрайса(); ТоварыНаСкладе = ПолучитьТоварыСклада(); Отсутствующие = A1sAR.Difference(ТоварыВПрайсе, ТоварыНаСкладе); Сообщить("Товаров нет на складе: " + Отсутствующие.Количество());
🔄 Сравнение версий
СтарыеСтроки = ПолучитьСтрокиВерсии(1); НовыеСтроки = ПолучитьСтрокиВерсии(2); Добавленные = A1sAR.Difference(НовыеСтроки, СтарыеСтроки); Удалённые = A1sAR.Difference(СтарыеСтроки, НовыеСтроки); Неизменённые = A1sAR.Intersection(СтарыеСтроки, НовыеСтроки);
📈 Базовая статистика
Продажи = A1sAR.Of(15000, 23000, 18500, 31000, 27500); Итого = A1sAR.On(Продажи).Total(); // 115000 Среднее = A1sAR.On(Продажи).Avg(); // 23000 Минимум = A1sAR.On(Продажи).Minimum(); // 15000 Максимум = A1sAR.On(Продажи).Maximum(); // 31000
🧮 Свёртка (Reduce)
// Произведение Множители = A1sAR.Of(2, 3, 4, 5); Произведение = A1sAR.On(Множители).Reduce("acc * v", 1); // 120 // Подсчёт по условию Оценки = A1sAR.Of(5, 3, 4, 5, 2, 5, 4, 5); Отличников = A1sAR.On(Оценки).Reduce("acc + ?(v = 5, 1, 0)", 0); // 4 // Конкатенация строк Слова = A1sAR.Of("Привет", "мир", "!"); Предложение = A1sAR.On(Слова).Join(" "); // "Привет мир !"
📊 Пагинация
ВсеЗаписи = ПолучитьВсеЗаписи(); // 1000 записей РазмерСтраницы = 20; НомерСтраницы = 3; // Записи для страницы 3 (элементы 40-59) Страница = A1sAR.On(ВсеЗаписи) .Skip(РазмерСтраницы * (НомерСтраницы - 1)) .Take(РазмерСтраницы) .Value();
🏷️ Разделение по типам
// Данные из внешней системы ВходныеДанные = ПолучитьДанныеИзВнешнейСистемы(); Числа = A1sAR.PickNumbers(ВходныеДанные); Строки = A1sAR.PickStrings(ВходныеДанные); Даты = A1sAR.PickDates(ВходныеДанные); Ссылки = A1sAR.PickRefs(ВходныеДанные); Сообщить("Чисел: " + Числа.Количество()); Сообщить("Строк: " + Строки.Количество());
✅ Валидация однородности
// Проверить, что массив содержит только числа МассивЦен = ПолучитьЦеныИзФайла(); Если НЕ A1sAR.IsHomoTyped(МассивЦен) Тогда // Найти "мусор" НеЧисла = A1sAR.OmitByType(МассивЦен, Тип("Число")); ВызватьИсключение "Обнаружены некорректные значения!"; КонецЕсли;
📂 Группировка по типам
Данные = ПрочитатьJSON(ТекстJSON); Группы = A1sAR.GroupByType(Данные); // Группы.Число = [1, 2, 3] // Группы.Строка = ["a", "b"] // Группы.Булево = [Истина, Ложь] Для Каждого КЗ Из Группы Цикл Сообщить(КЗ.Ключ + ": " + КЗ.Значение.Количество()); КонецЦикла;
🧹 Очистка от пустых
Сырой = A1sAR.Of("Иван", "", "Пётр", Неопределено, "Сидор", ""); Чистый = A1sAR.On(Сырой) .PickNotNull() // Убрать Неопределено .Filter("ЗначениеЗаполнено(v)") // Убрать пустые строки .Value(); // ["Иван", "Пётр", "Сидор"]
🔄 Фильтрация и преобразование Было: 12 строк
Результат = Новый Массив;
Для Каждого Эл Из Данные Цикл
    Если Эл.Активен Тогда
        Если Эл.Сумма > 1000 Тогда
            Новый = Новый Структура;
            Новый.Вставить("Код", Эл.Код);
            Новый.Вставить("Сумма", Эл.Сумма * 1.2);
            Результат.Добавить(Новый);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
→ Стало: 4 строки
Результат = A1sAR.On(Данные)
    .Filter("v.Активен И v.Сумма > 1000")
    .Map("A1sDS.Of('Код',v.Код,'Сумма',v.Сумма*1.2)")
    .Value();
Сокращение: 67%
🔗 Объединение без дубликатов Было: 10 строк
Результат = Новый Массив;
Для Каждого Эл Из Массив1 Цикл
    Если Результат.Найти(Эл) = Неопределено Тогда
        Результат.Добавить(Эл);
    КонецЕсли;
КонецЦикла;
Для Каждого Эл Из Массив2 Цикл
    Если Результат.Найти(Эл) = Неопределено Тогда
        Результат.Добавить(Эл);
    КонецЕсли;
КонецЦикла;
→ Стало: 1 строка
Результат = A1sAR.Union(Массив1, Массив2);
Сокращение: 90%
Σ Подсчёт суммы Было: 5 строк
Сумма = 0;
Для Каждого Эл Из Массив Цикл
    Сумма = Сумма + Эл.Значение;
КонецЦикла;
→ Стало: 1 строка
Сумма = A1sAR.On(Массив).Map("v.Значение").Total();
Сокращение: 80%
Попробуй в интерактивном Demo