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

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

Как вывести значение массива в 1С

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

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

Главное, что нужно помнить: индексация массива начинается с нуля, а метод Количество() возвращает число элементов. Поэтому последний допустимый индекс — это Массив.Количество() - 1. Попытка обратиться к несуществующему индексу вызовет ошибку «Индекс находится за границами массива», и выполнение кода прервётся.

Ниже разобраны рабочие приёмы вывода значений массива с готовыми примерами кода, которые можно скопировать во встроенный язык 1С и адаптировать под свою задачу.

Как устроен массив в 1С и почему это важно для вывода

Массив создаётся конструктором Новый Массив или литералом через заполнение методом Добавить(). Каждый элемент имеет индекс от 0 до N-1, где N — количество элементов. Тип значений в одном массиве может быть разным: строки, числа, ссылки на объекты, структуры.

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

Товары.Добавить("Номенклатура А");

Товары.Добавить("Номенклатура Б");

Товары.Добавить("Номенклатура В");

// Индексы: 0, 1, 2. Количество() вернёт 3.

Понимание нумерации критично: разработчики, привыкшие считать с единицы, регулярно получают ошибку выхода за границы массива. Перед обращением по индексу в неочевидных случаях проверяйте, что индекс меньше Количество().

Вывод значения по индексу

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

Сообщить(Товары[0]); // "Номенклатура А"

Сообщить(Товары[Товары.Количество() - 1]); // последний элемент

Для вывода в пользовательском режиме вместо Сообщить() корректнее использовать объект СообщениеПользователю — он правильно отображается в тонком и веб-клиенте и привязывается к форме:

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Первый элемент: " + Товары[0];

Сообщение.Сообщить();

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

Вывод всех элементов в цикле

Цикл «Для Каждого»

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

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

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

КонецЦикла;

Цикл со счётчиком

Если нужен и индекс, и значение (например, для нумерованного списка), используйте классический цикл со счётчиком:

Для Индекс = 0 По Товары.Количество() - 1 Цикл

Сообщить(Строка(Индекс + 1) + ". " + Товары[Индекс]);

КонецЦикла;

Обратите внимание на приведение типа: номер выводится через Строка() или форматирование, чтобы конкатенация со строкой не вызвала ошибку преобразования. В современных версиях платформы неявное преобразование числа к строке при сложении работает, но явное приведение делает код надёжнее и читаемее.

Порядок действий
  1. 1
    Создайте массив и заполните его значениями методом Добавить()
  2. 2
    Выберите способ вывода: по индексу, циклом или через СтрСоединить
  3. 3
    Проверьте, что массив не пуст, перед обращением по индексу
  4. 4
    Выполните код и убедитесь, что значения появились в панели сообщений
  5. 5
    При ошибке «индекс за границами» проверьте границу цикла: Количество() - 1

Объединение массива в одну строку

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

Результат = СтрСоединить(Товары, ", ");

Сообщить(Результат); // "Номенклатура А, Номенклатура Б, Номенклатура В"

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

Сравнение вариантов

Сообщить()

Быстрая отладка в толстом клиенте и серверном коде. Не подходит для прикладных сообщений пользователю в управляемых формах.

СообщениеПользователю

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

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

Одна строка из всех элементов. Только для строковых значений, без индексов и форматирования.

Табличный документ

Вывод на печать или в отчёт. Требует макета или программного заполнения областей.

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

Для печатных форм и отчётов значения массива выводят в табличный документ. Типовой приём — создать область макета и заполнять её в цикле:

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

Макет = ПолучитьМакет("МакетСписка");

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

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

ОбластьСтрока.Параметры.Наименование = Элемент;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

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

СписокНаФорме.ЗагрузитьЗначения(Товары);

Отладка: как посмотреть содержимое массива

В конфигураторе содержимое массива удобнее всего смотреть через точку останова: остановите выполнение, нажмите Shift+F9 (вычислить выражение) и введите имя переменной — табло покажет все элементы с индексами и значениями. Это быстрее и надёжнее, чем расставлять Сообщить() по коду.

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

Типичные ошибки
01
Обращение к Массив[Массив.Количество()] — индекс на единицу больше последнего, ошибка выполнения. Правильно: Количество() - 1.
02
Цикл «Для Индекс = 1 По Количество()» — пропуск первого элемента и выход за границу на последней итерации.
03
Вывод ссылки или структуры без преобразования — в сообщении появится нечитаемое представление типа.
04
Использование Сообщить() в клиент-серверном коде и ожидание, что пользователь увидит текст — сообщение теряется.

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

Как вывести последний элемент массива, не зная его размера?

Используйте выражение Массив[Массив.Количество() - 1]. Перед обращением убедитесь, что массив не пуст: Если Массив.Количество() > 0 Тогда ... КонецЕсли;, иначе получите ошибку выхода за границы.

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

В управляемом приложении серверный вызов Сообщить() не выводит текст в интерфейс. Используйте объект СообщениеПользователю с методом Сообщить() — он корректно передаёт сообщение на клиента и отображает его в панели сообщений формы.

Как вывести массив структур или ссылок?

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

Можно ли вывести массив в поле на управляемой форме?

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

Чем посмотреть массив в отладчике, если он большой?

Откройте табло (Shift+F9), введите имя переменной и разверните коллекцию — отладчик покажет элементы постранично. Для поиска конкретного значения удобнее вычислить выражение вида Массив.Найти("искомое"), которое вернёт индекс или Неопределено.

Как объединить массив чисел в строку?

Сначала преобразуйте числа в строки в цикле, собирая новый массив, затем примените СтрСоединить(). Либо сразу формируйте итоговую строку конкатенацией в цикле с разделителем, удалив лишний разделитель в конце.

Итог

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

Индексация массива начинается с нуля, последний индекс — Количество() - 1. Для вывода используйте цикл «Для Каждого», обращение по индексу или СтрСоединить(). Пользователю показывайте сообщения через СообщениеПользователю, для отладки применяйте табло конфигуратора и журнал регистрации.