Как объединить несколько массивов в 1С:Предприятие?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие часто возникает задача собрать данные из нескольких источников в единую структуру. Объединение массивов — одна из наиболее типичных операций, которую можно выполнить разными способами в зависимости от поставленных целей и объема данных.

Использование универсальной функции для объединения массивов (подготовлено через ИИ-помощник в консоли кода)

Если вам часто приходится объединять различное количество массивов, удобнее всего создать универсальную функцию в общем модуле. Такой подход позволяет не дублировать код и упрощает поддержку решения. Давайте рассмотрим, как реализовать механизм, который принимает структуру массивов и формирует итоговый список.

Для реализации данной задачи мы будем использовать цикл Для Каждого, который последовательно проходит по всем переданным массивам. Это позволит нам динамически обрабатывать любое количество входных данных.


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

Этот код эффективно справляется с задачей. Если параметр ТолькоУникальные установлен в Истина, функция дополнительно проверяет наличие элемента в итоговом массиве перед добавлением, используя метод Найти().

Использование стандартных средств БСП (Библиотеки стандартных подсистем)

Современные стандарты разработки 1С рекомендуют максимально использовать возможности Библиотеки стандартных подсистем. Это делает код надежным и понятным для других разработчиков. В БСП предусмотрены готовые инструменты для дополнения массивов.

Ранее часто использовалась функция ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями, однако в актуальных версиях БСП она считается устаревшей. Вместо нее рекомендуется применять более современный метод: ОбщегоНазначенияКлиентСервер.ДополнитьМассив.

Рассмотрим, как правильно использовать этот метод:


// Пример использования типовой функции БСП
МассивРезультат = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивРезультат, МассивИсточник1, Истина);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивРезультат, МассивИсточник2, Истина);

Параметр Истина в данном вызове гарантирует, что в итоговый массив будут добавлены только уникальные значения. Это избавляет вас от необходимости писать собственные циклы проверки.

Рекомендации по производительности

  1. Избегайте преобразования в строку. Попытки объединения массивов через ЗначениеВСтрокуВнутр и последующий парсинг строк являются крайне неэффективными и ненадежными. Такие «хаки» приводят к ошибкам формата потока при обновлении платформы.
  2. Масштабируемость. Если массивы содержат тысячи элементов, метод Найти() внутри цикла начинает работать медленно, так как имеет сложность O(n²). В таких случаях для обеспечения уникальности данных лучше использовать Соответствие, в котором ключи — это элементы массивов, а значения — Истина. Это обеспечит почти мгновенный поиск.
  3. Запросы. Если массивы содержат ссылки на объекты базы данных (регистры, документы), задумайтесь об использовании запросов. Объединение данных через ОБЪЕДИНИТЬ ВСЕ в запросе переносит всю нагрузку на СУБД, что работает значительно быстрее, чем любая обработка на встроенном языке.

Используя предложенные методы, вы сможете написать чистый и производительный код для объединения массивов в вашей системе 1С. Выбирайте вариант, подходящий под ваши задачи: от простой универсальной функции до использования инструментов БСП или механизмов СУБД.

← На главную