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