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

Идея дня

Важно: не используем конструкцию вида Новый Массив("строка".Разделить(",")). В 1С сначала получаем массив через СтрРазделить, затем наполняем/используем.

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

1) Из литералов


Артикулы = Новый Массив;
Артикулы.Добавить("ABC-1");
Артикулы.Добавить("DEF-2");
Артикулы.Добавить("GHI-3");
      

2) Из строки (split + очистка)


Функция STrim(Текст) Экспорт
    Возврат A1sS.AsString(Текст).СокрЛП().СокрП();
КонецФункции

Функция TokensFromString(Строка, Разделитель = ",") Экспорт
    Если A1sO.Empty(Строка) Тогда Возврат Новый Массив; КонецЕсли;
    Исх = СтрРазделить(Строка, Разделитель);
    Рез = Новый Массив;
    Для каждого Т Из Исх Цикл
        S = STrim(Т);
        Если A1sO.NotEmpty(S) Тогда Рез.Добавить(S); КонецЕсли;
    КонецЦикла;
    Возврат Рез;
КонецФункции

Коды = TokensFromString("A1, B2, , C3");
      

3) Из ТаблицаЗначений (колонка → массив)


Таб = A1sQ.Unload("
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
|    Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
", 5);

Имена = Таб.ВыгрузитьКолонку("Name"); // Массив строк
      

4) Из структуры (только ключи / только значения / пары)


Функция StructKeys(Стр) Экспорт
    Рез = Новый Массив;
    Для каждого П Из Стр Цикл Рез.Добавить(П.Ключ); КонецЦикла;
    Возврат Рез;
КонецФункции

Функция StructValues(Стр) Экспорт
    Рез = Новый Массив;
    Для каждого П Из Стр Цикл Рез.Добавить(П.Значение); КонецЦикла;
    Возврат Рез;
КонецФункции

Функция StructEntries(Стр) Экспорт // массив структур {key, value}
    Рез = Новый Массив;
    Для каждого П Из Стр Цикл
        Рез.Добавить(Новый Структура("key,value", П.Ключ, П.Значение));
    КонецЦикла;
    Возврат Рез;
КонецФункции
      

Объединение массивов (конкатенация)

Concat двух массивов


Функция ArraysConcat(A, B) Экспорт
    Рез = Новый Массив;
    Если A1sO.NotEmpty(A) Тогда Для каждого V Из A Цикл Рез.Добавить(V); КонецЦикла; КонецЕсли;
    Если A1sO.NotEmpty(B) Тогда Для каждого V Из B Цикл Рез.Добавить(V); КонецЦикла; КонецЕсли;
    Возврат Рез;
КонецФункции

A = TokensFromString("A1,A2,A3");
B = TokensFromString("B1,B2");
AB = ArraysConcat(A, B); // ["A1","A2","A3","B1","B2"]
      

Concat произвольного числа массивов


Функция ArraysConcatMany(МассивМассивов) Экспорт
    Рез = Новый Массив;
    Если A1sO.Empty(МассивМассивов) Тогда Возврат Рез; КонецЕсли;
    Для каждого Arr Из МассивМассивов Цикл
        Если A1sO.Empty(Arr) Тогда Продолжить; КонецЕсли;
        Для каждого V Из Arr Цикл Рез.Добавить(V); КонецЦикла;
    КонецЦикла;
    Возврат Рез;
КонецФункции

Список = Новый Массив; Список.Добавить(A); Список.Добавить(B); Список.Добавить(Имена);
Все = ArraysConcatMany(Список);
      

Объединение без изменения исходных

Важно: мы всегда складываем в новый массив Рез, чтобы не изменять источники по ссылке. Это особенно критично, когда массивы «переиспользуются» в разных местах логики.

Типичные конвейеры с массивами

Список кодов → поиск элементов → массив имён


Функция ИменаПоКодам(СтрокаКодов) Экспорт
    Коды = TokensFromString(СтрокаКодов);
    Если A1sO.Empty(Коды) Тогда Возврат Новый Массив; КонецЕсли;

    ТекстQ = "
    |ВЫБРАТЬ
    |    Ном.Наименование КАК Name
    |ИЗ Справочник.Номенклатура КАК Ном
    |ГДЕ Ном.Код В (&Список)
    |УПОРЯДОЧИТЬ ПО Name
    ";
    Таб = A1sQ.Unload(ТекстQ, Коды); // позиционный параметр: &Список

    Возврат Таб.ВыгрузитьКолонку("Name");
КонецФункции
      

Соединить два набора результатов


Имена1 = ИменаПоКодам("A1,A2");
Имена2 = ИменаПоКодам("B1,B2,B3");

ВсеИмена = ArraysConcat(Имена1, Имена2);
// День 27: удалим дубли и отсортируем при необходимости
      

Подготовка данных для UI и экспорта

Собирать подписи через join (строка из массива)


Функция Join(МассивСтрок, Разделитель = ", ") Экспорт
    Если A1sO.Empty(МассивСтрок) Тогда Возврат ""; КонецЕсли;
    Возврат СтрСоединить(МассивСтрок, Разделитель);
КонецФункции

Подпись = Join(ВсеИмена, " · ");
Сообщить(Подпись);
      

Конкатенация нескольких источников в линейный список


Функция СобратьСписокДляЭкспорта() Экспорт
    Вручную = Новый Массив; Вручную.Добавить("MAN-1"); Вручную.Добавить("MAN-2");
    ИзФормы = TokensFromString("UI1; UI2; UI3", ";");
    ИзСправ = A1sQ.Unload("
    |ВЫБРАТЬ ПЕРВЫЕ &Лимит
    |    Ном.Код КАК Code
    |ИЗ Справочник.Номенклатура КАК Ном
    |УПОРЯДОЧИТЬ ПО Code
    ", 3).ВыгрузитьКолонку("Code");

    Результат = ArraysConcatMany(Новый Массив(Вручную, ИзФормы, ИзСправ)); // собрали линейно
    Возврат Результат;
КонецФункции
      

На заметку: если в вашей сборке A1sArrays уже есть готовые обёртки Concat/ConcatMany/FromString/FromTable — используйте их. Приведённые функции — безопасные «эталоны» для собственного слоя утилит.

Анти-паттерны

Практика (15–30 минут)

  1. Реализуйте TokensFromString и соберите массив кодов из пользовательского ввода.
  2. Сделайте ArraysConcat/ArraysConcatMany и объедините 3 источника данных.
  3. Вытащите колонку Name из Unload и объедините с вручную заданными значениями.
  4. Соберите строку для UI через Join, оставив уникальность и сортировку «на потом» (День 27).

Что дальше

День 25: A1sArrays — Множественные операции — map/filter/reduce-шаблоны и их безопасные варианты.

Примечание

Код и тексты на этой странице сгенерированы ИИ. Возможны неточности и ошибки. Перед использованием проверяйте и адаптируйте примеры под вашу версию платформы 1С и сборку библиотеки A1sCode.