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