A1sArrays и A1sStruct — работа с коллекциями в 1С

Быстрые операции над массивами и структурами в 1С: объединение, пересечение, разность, преобразование в пары, слияние конфигураций.

Версии модулей: A1sArrays v1.2 (2025-08-22) A1sStruct v1.1 (2025-08-22)

Зачем

Проблемы без библиотеки

  • Повторяем один и тот же код для объединения/пересечения массивов.
  • Медленные операции через Найти() в циклах.
  • Сложно сливать несколько конфигов и отслеживать переопределения.

Что даёт A1s*

  • Готовые функции Concatenate, Union, Intersection, Difference.
  • Оптимизации на Соответствие вместо линейных поисков.
  • Читабельные принты: Join(), StructToString().

Почему стандартных функций БСП для массивов часто не хватает

Факт из практики: при поиске слова «Массив» в дереве конфигурации 1С:Бухгалтерия система не выдала ни одного объекта. Это подтверждает отсутствие отдельного модуля для работы с массивами — функции спрятаны в модулях ОбщегоНазначения*.

Сопоставление вызовов

ЗадачаБСП (где искать)A1sArrays (единый стиль)
Объединение n массивов ДополнитьМассив()
ОбщегоНазначенияКлиентСервер — только 2 массива
Concatenate(a1..a8, ТолькоУникальные)
Объединение множеств Комбинации вручную / очистка от дублей Union(a1..a8)
Пересечение множеств ПересечениеМассивов()
ОбщегоНазначенияИСКлиентСервер — 2 массива
Intersection(a1..a8)
Разность множеств Чаще пишется вручную Difference(a1..a8)
Вывод. В A1s* операции над массивами и структурами собраны в тематические модули с консистентными именами и сигнатурами. Это снимает «угадайку» по поиску функций в БСП, упрощает чтение кода и уменьшает повтор.

Быстрый старт

  1. Подключите модули A1sArrays и A1sStruct в конфигурацию.
  2. Скопируйте демо-процедуры ниже и вызовите ЗапуститьВсеПримеры().
Демо: запуск всех примеров
&НаСервере
Процедура ЗапуститьВсеПримеры() Экспорт
    Сообщить("=== A1sArrays ===");
    ПримерыA1sArrays();
    Сообщить("");
    Сообщить("=== A1sStruct ===");
    ПримерыA1sStruct();
КонецПроцедуры

A1sArrays: ключевые операции

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

Флаг ТолькоУникальные удаляет дубликаты.

М1 = A1sArrays.NewArray(1,2,3);
М2 = A1sArrays.NewArray(4,5);
Рез = A1sArrays.Concatenate(М1, М2); // 1,2,3,4,5

Union — только уникальные

М1 = A1sArrays.NewArray("A","B","C");
М2 = A1sArrays.NewArray("B","C","D");
Рез = A1sArrays.Union(М1, М2); // A,B,C,D

Intersection — пересечение

A = A1sArrays.NewArray("B","C","D");
B = A1sArrays.NewArray("A","C","D","E");
Рез = A1sArrays.Intersection(A, B); // C,D

Difference — разность

A = A1sArrays.NewArray("A","B","C","D");
B = A1sArrays.NewArray("B","C");
Рез = A1sArrays.Difference(A, B); // A,D

A1sStruct: ключевые операции

Struct / Pair — быстро собрать структуру

Данные = A1sStruct.Struct(A1sArrays.NewArray("Имя","Иван","Возраст",31));
Пара = A1sStruct.Pair("Город","Москва");

Concatenate / Union — слияние до 8 структур

S1 = A1sStruct.Struct(A1sArrays.NewArray("Имя","Иван","Возраст",30));
S2 = A1sStruct.Struct(A1sArrays.NewArray("Возраст",31,"Город","Москва"));
Рез = A1sStruct.Concatenate(S1, S2);

Intersection — общие ключи

S1 = A1sStruct.Struct(A1sArrays.NewArray("Язык","ru","Размер",12));
S2 = A1sStruct.Struct(A1sArrays.NewArray("Язык","en","Шрифт","Arial"));
S3 = A1sStruct.Struct(A1sArrays.NewArray("Язык","de","Размер",14));
Рез = A1sStruct.Intersection(S1, S2, S3); // Язык=de

Практические сценарии

Роли и права

ПраваАдмина       = A1sArrays.NewArray("Чтение","Запись","Удаление","Администрирование");
ПраваМенеджера    = A1sArrays.NewArray("Чтение","Запись","Отчеты");
ПраваПользователя = A1sArrays.NewArray("Чтение","Просмотр");

ВсеПрава   = A1sArrays.Union(ПраваАдмина, ПраваМенеджера, ПраваПользователя);
ОбщиеПрава = A1sArrays.Intersection(ПраваАдмина, ПраваМенеджера, ПраваПользователя);
Эксклюзив  = A1sArrays.Difference(ПраваАдмина, ПраваМенеджера, ПраваПользователя);

Справочник API (выжимка)

ФункцияНазначение
NewArray()Собрать массив.
Concatenate()Склейка массивов.
Union()Объединение множеств.
Intersection()Пересечение множеств.
Difference()Разность множеств.

#A1sArrays #A1sStruct #1C #A1sCode #DevUtils