Разработка и Конфигурация · 8 мин
Как вывести все элементы массива в 1С
Как вывести все элементы массива в 1С: цикл Для Каждого, цикл Для со счётчиком, объединение в строку, вывод в табличное поле. Примеры кода и типичные ошибки.
Массив в 1С — это коллекция значений с доступом по числовому индексу, начинающемуся с нуля. Вывести все элементы массива чаще всего требуется при отладке, формировании отчётов, заполнении табличных частей и передаче данных в формы. Встроенный язык 1С предлагает несколько способов перебора: цикл Для Каждого, классический цикл Для со счётчиком и служебные методы для быстрого объединения значений в строку.
Выбор способа зависит от задачи: если нужен только вывод значений — достаточно обхода без индекса; если требуется знать позицию элемента или изменять массив по ходу перебора — понадобится цикл со счётчиком. Ниже разобраны все рабочие варианты с готовым кодом, который можно перенести в модуль без доработки.
Способ 1. Цикл «Для Каждого» — самый простой перебор
Цикл Для Каждого последовательно помещает каждый элемент массива в переменную цикла. Это основной вариант, когда нужно просто вывести значения: в сообщение, журнал регистрации, поле формы или текстовый документ.
МассивТоваров = Новый Массив;
МассивТоваров.Добавить("Номенклатура А");
МассивТоваров.Добавить("Номенклатура Б");
МассивТоваров.Добавить("Номенклатура В");
Для Каждого Товар Из МассивТоваров Цикл
Сообщить(Товар);
КонецЦикла;
Каждая итерация выведет одно значение через Сообщить(). Вместо сообщения можно накапливать результат в переменной, добавлять строки в табличную часть или элементы в список значений.
Ограничение способа: внутри такого цикла не виден индекс текущего элемента. Если позиция элемента важна (например, нужно пронумеровать строки), используйте цикл со счётчиком.
Способ 2. Цикл «Для» со счётчиком — когда нужен индекс
Классический цикл со счётчиком даёт полный контроль: доступен индекс, можно обращаться к соседним элементам, пропускать позиции или изменять значения массива по месту.
Для Инд = 0 По МассивТоваров.Количество() - 1 Цикл
Сообщить("Элемент " + Инд + ": " + МассивТоваров[Инд]);
КонецЦикла;
Ключевой момент — индексация с нуля, поэтому верхняя граница цикла равна Количество() - 1. Обращение МассивТоваров[МассивТоваров.Количество()] вызовет ошибку «Индекс находится за границами массива».
Цикл со счётчиком обязателен, если нужно присвоить элементу новое значение: МассивТоваров[Инд] = НовоеЗначение;. Через переменную цикла «Для Каждого» присваивание в исходный массив для примитивных типов не сработает.
Способ 3. Быстрый вывод всей структуры через СтрСоединить
Когда требуется вывести все элементы массива одной строкой — для сообщения пользователю, заголовка отчёта или лога — удобнее всего функция СтрСоединить(). Она принимает массив строк и разделитель.
Результат = СтрСоединить(МассивТоваров, ", ");
Сообщить("Список: " + Результат);
Ограничение: все элементы должны быть строками или приводимыми к строке. Если в массиве лежат ссылки, числа или структуры, сначала преобразуйте их в цикле. Для чисел и дат используйте Строка() или Формат(), для ссылок — Строка(Ссылка) вернёт представление объекта.
Способ 4. Вывод массива в таблицу значений и табличное поле
На практике «вывести массив» часто означает показать данные пользователю в форме. Прямого вывода массива в табличное поле нет — массив сначала переносят в таблицу значений или список значений.
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Наименование");
Для Каждого Элемент Из МассивТоваров Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Наименование = Элемент;
КонецЦикла;
Полученную таблицу связывают с реквизитом формы типа «ТаблицаЗначений» или передают в построитель отчёта. Альтернатива для простых списков — СписокЗначений: метод ЗагрузитьЗначения(Массив) заполняет его из массива одной командой, после чего список можно показать через ВыбратьЭлемент() или привязать к полю со списком.
Вывод массива в макет и табличный документ
При печати массив обычно выводится построчным обходом: для каждого элемента получают область макета и выводят её в табличный документ.
Макет = ПолучитьМакет("Макет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого Элемент Из МассивТоваров Цикл
ОбластьСтрока.Параметры.Наименование = Элемент;
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Если элементы нужно вывести в одну ячейку через запятую, сначала соберите строку через СтрСоединить(), затем присвойте её параметру области. Это сокращает количество обращений к макету и упрощает код.
Сравнение способов вывода
Универсальный перебор без индекса. Подходит для вывода сообщений, заполнения таблиц и макетов. Не позволяет изменять элементы по месту
Нужен, когда важен индекс, нумерация или изменение элементов. Требует аккуратности с границей Количество() - 1
Быстрый вывод всех элементов одной строкой. Только для строковых значений, без индексов
Мгновенный показ массива пользователю через диалог выбора или поле со списком. Не подходит для печати и отчётов
Отладка: как посмотреть содержимое массива
Во время отладки содержимое массива видно в табло: достаточно вычислить выражение с именем переменной и развернуть узел дерева. Это быстрее, чем писать временные циклы с Сообщить().
Если отладчик недоступен (фоновое задание, веб-сервис), используйте запись в журнал регистрации: ЗаписьЖурналаРегистрации("Отладка", , , , СтрСоединить(Массив, "; ")). Такой приём работает на сервере и не прерывает выполнение кода.
Как проверить результат
Совпадает с Массив.Количество()
Строк меньше — возможна модификация массива внутри цикла
Выведены оба, включая элемент с индексом 0
Пропущен первый элемент — цикл начат с 1 вместо 0
Цикл просто не выполняется, ошибок нет
Ошибка — вероятно, переменная не инициализирована как массив
Частые вопросы
Как вывести элементы массива в обратном порядке?
Используйте цикл со счётчиком от последнего индекса к нулю: Для Инд = -Массив.Количество() + 1 По 0 Цикл с шагом не поддерживается напрямую, поэтому проще организовать Пока с уменьшением переменной индекса от Количество() - 1 до 0.
Можно ли вывести массив одной командой без цикла?
Да, если элементы — строки: Сообщить(СтрСоединить(Массив, ", ")). Для смешанных типов предварительно сформируйте массив строк в цикле с преобразованием каждого значения.
Как вывести массив структур?
Перебирайте массив циклом «Для Каждого» и внутри обращайтесь к свойствам структуры: Сообщить(Элемент.Наименование + " — " + Элемент.Цена). Перед обращением к ключу полезно проверять его наличие через Свойство(), если структуры могут отличаться.
Почему цикл не выполняется ни разу?
Почти всегда причина в пустом массиве или в том, что переменная не инициализирована. Проверьте Массив.Количество() перед циклом и убедитесь, что массив создан через Новый Массив или возвращён функцией.
Как вывести массив с номерами строк, начиная с единицы?
В цикле со счётчиком прибавьте единицу к индексу при выводе: Сообщить("" + (Инд + 1) + ". " + Массив[Инд]). Сам массив при этом остаётся проиндексированным с нуля.
Есть ли ограничение на размер массива при выводе?
Жёсткого лимита нет, но вывод тысяч строк через Сообщить() заметно замедляет работу и перегружает окно сообщений. Для больших объёмов формируйте таблицу значений, табличный документ или пишите данные в файл.
Что важно запомнить
Для простого перебора используйте «Для Каждого», для работы с индексами — цикл со счётчиком от 0 до Количество() - 1, для вывода одной строкой — СтрСоединить. Помните про индексацию с нуля и не изменяйте массив внутри цикла по нему самому.