К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как отобразить массив в 1С

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

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

Выбор способа зависит от задачи: для отладки достаточно вывода в сообщения или консоль, для пользователя нужен аккуратный список на форме, а для отчётов массив обычно преобразуют в таблицу значений и передают в СКД или табличный документ.

Ниже разобраны рабочие варианты с примерами кода, которые можно скопировать и адаптировать под свою задачу. Примеры одинаково работают в управляемом и обычном приложении, если не указано иное.

Вывод массива через цикл и Сообщить

Самый простой способ посмотреть содержимое массива — обойти его в цикле и вывести каждый элемент через Сообщить(). Этот вариант удобен для отладки: вы сразу видите порядок элементов и их значения в панели сообщений.

Массив = Новый Массив;

Массив.Добавить("Январь");

Массив.Добавить("Февраль");

Массив.Добавить("Март");

Для Каждого Элемент Из Массив Цикл

Сообщить(Элемент);

КонецЦикла;

Если нужен порядковый номер элемента, используйте цикл со счётчиком через индекс. Помните: индексация массивов в 1С начинается с нуля, поэтому последний элемент имеет индекс Массив.Количество() - 1.

Для Индекс = 0 По Массив.ВГраница() Цикл

Сообщить("Элемент " + Индекс + ": " + Массив[Индекс]);

КонецЦикла;

Метод ВГраница() возвращает индекс последнего элемента и безопаснее выражения Количество() - 1: для пустого массива он вернёт -1, и цикл просто не выполнится, без ошибки обращения за границы.

Вывод массива одной строкой через СтрСоединить

Когда нужно показать весь массив целиком — например, в тексте ошибки, заголовке или поле формы — удобнее соединить элементы в одну строку. Для этого служит функция СтрСоединить() (в старых версиях платформы — аналог через цикл с разделителем).

Текст = СтрСоединить(Массив, ", ");

Сообщить("Месяцы: " + Текст);

// Результат: Месяцы: Январь, Февраль, Март

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

Текст = СтрСоединить(Массив, Символы.ПС);

Ограничение: СтрСоединить корректно работает со строками. Если в массиве лежат числа, даты или ссылки, платформа попытается привести их к строке, но формат может оказаться не тем, что нужен. Для контроля формата преобразуйте элементы заранее через Формат() или Строка().

bsl
Текст = СтрСоединить(Массив, Символы.ПС);
Сообщить(Текст);

Отображение массива в таблице значений на форме

Для показа массива пользователю в интерфейсе стандартный путь — переложить его в таблицу значений и связать с элементом формы «ТаблицаФормы». Это даёт прокрутку, сортировку и привычный вид списка.

Порядок действий: создайте реквизит формы типа «ТаблицаЗначений», добавьте в него колонку нужного типа, перетащите реквизит на форму, а затем в коде заполните таблицу из массива.

// ТаблицаДанных — реквизит формы типа ТаблицаЗначений

// с колонкой "Наименование"

ТаблицаДанных.Очистить();

Для Каждого Элемент Из Массив Цикл

НоваяСтрока = ТаблицаДанных.Добавить();

НоваяСтрока.Наименование = Элемент;

КонецЦикла;

Если таблица создаётся программно без формы (например, для последующей передачи в отчёт), колонки добавляются явно:

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка"));

Для Каждого Элемент Из Массив Цикл

ТЗ.Добавить().Значение = Элемент;

КонецЦикла;

Порядок действий для вывода на форму
  1. 1
    Добавьте реквизит формы типа ТаблицаЗначений и колонку нужного типа
  2. 2
    Перетащите реквизит в дерево элементов формы
  3. 3
    В коде очистите таблицу и заполните её циклом из массива
  4. 4
    Откройте форму и проверьте, что все элементы видны и прокручиваются

Отображение массива в списке значений и поле со списком

Если массив должен стать вариантами выбора — например, списком месяцев в поле ввода — используйте СписокЗначений. У него есть метод ЗагрузитьЗначения(), который принимает массив напрямую, без цикла.

Список = Новый СписокЗначений;

Список.ЗагрузитьЗначения(Массив);

// Привязка к полю ввода на форме:

Элементы.ПолеМесяц.СписокВыбора.ЗагрузитьЗначения(Массив);

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

Сравнение вариантов отображения

Сообщить() в цикле

Быстро для отладки; не подходит для пользователя и больших объёмов

СтрСоединить

Одна строка для текста и заголовков; нет структуры и сортировки

Таблица значений

Полноценный список на форме; требует реквизита и колонок

Список значений

Варианты выбора и пометки; ограниченная структура данных

Вывод массива в табличный документ и отчёт

Для печати или отчёта массив выводят в табличный документ построчно. Каждый элемент записывается в ячейку через параметры области или прямым присвоением текста.

ТабДок = Новый ТабличныйДокумент;

НомерСтроки = 1;

Для Каждого Элемент Из Массив Цикл

ТабДок.Область("R" + НомерСтроки + "C1").Текст = Строка(Элемент);

НомерСтроки = НомерСтроки + 1;

КонецЦикла;

ТабДок.Показать("Содержимое массива");

В отчётах на СКД массив напрямую не выводится: его сначала преобразуют в таблицу значений и передают как внешний набор данных через КомпоновщикМакета и ПроцессорВыводаРезультата. Это стандартный механизм, но он требует больше кода — для разовой задачи проще табличный документ.

Отладка: просмотр массива без изменения кода

Во время отладки содержимое массива видно без всякого вывода: поставьте точку останова после заполнения массива, откройте «Табло» (Ctrl+Shift+W) и добавьте переменную. Двойной клик по массиву в табло открывает окно просмотра коллекции со всеми элементами и индексами.

Альтернатива — команда «Вычислить выражение» (Shift+F9): введите Массив.Количество() или Массив[0], чтобы проверить конкретный элемент. Это быстрее, чем вставлять временные Сообщить() и потом удалять их из кода.

Для журнала ошибок вместо сообщений используйте ЗаписьЖурналаРегистрации() — массив, соединённый в строку, попадёт в журнал регистрации и будет доступен администратору после факта ошибки.

Типичные ошибки
01
Обращение к Массив[Количество()] вместо последнего индекса — ошибка выхода за границы массива
02
Вывод объектов и ссылок без приведения к строке — в сообщении получается нечитаемое представление
03
Цикл от 1 до Количество() — пропуск первого элемента, так как индексация с нуля
04
Заполнение таблицы формы без Очистить() — при повторном вызове строки дублируются

Проверка результата

После реализации вывода убедитесь, что отображение корректно на граничных случаях: пустой массив, один элемент, массив с элементами разных типов. Пустой массив не должен вызывать ошибок — цикл просто не выполнится, а СтрСоединить вернёт пустую строку.

Контрольные точки

Как проверить результат

Количество выведенных строк
Норма

Совпадает с Массив.Количество()

Тревожный признак

Строк меньше — вероятно, цикл начат с 1

Первый элемент
Норма

Выводится значение с индексом 0

Тревожный признак

Первый элемент пропущен или выведен лишний пустой

Пустой массив
Норма

Нет ошибки, выводится пустой список

Тревожный признак

Ошибка обращения по индексу

Типы значений
Норма

Числа и даты в читаемом формате

Тревожный признак

Нечитаемые представления объектов

Если массив заполняется из запроса или из другой процедуры, перед выводом полезно проверить ТипЗнч() переменной — иногда вместо массива приходит Неопределено или выборка из запроса, и попытка перебора падает с ошибкой ещё до отображения.

Итог

Что важно запомнить

Для отладки — цикл с Сообщить() или табло отладчика, для строки — СтрСоединить, для формы — таблица значений или список значений. Индексация массива начинается с нуля, а ВГраница() защищает от выхода за пределы.

Частые вопросы

Как вывести массив в строку через запятую?

Используйте СтрСоединить(Массив, ", "). Функция вернёт одну строку, где элементы разделены запятой с пробелом. Если в массиве числа или даты, сначала приведите их к нужному формату через Формат().

Почему Сообщить() на сервере не показывает текст сразу?

Серверные сообщения накапливаются и передаются на клиент при возврате управления. Для немедленного вывода на клиенте используйте ПоказатьПредупреждение() или отладчик с табло.

Как показать массив пользователю на управляемой форме?

Создайте реквизит формы типа ТаблицаЗначений с нужной колонкой, добавьте его на форму как таблицу и заполните циклом из массива. Пользователь получит список с прокруткой и сортировкой.

Как вывести массив структур, а не простых значений?

Перебирайте массив в цикле и обращайтесь к полям каждой структуры: Элемент.ИмяПоля. Для формы создайте таблицу значений с колонками под каждое поле структуры и заполняйте построчно.

Можно ли вывести массив в отчёт СКД напрямую?

Нет, СКД работает с наборами данных. Преобразуйте массив в таблицу значений и передайте её как внешний набор данных при формировании отчёта программно.