Работа с массивами в 1С:Предприятие — одна из самых частых задач, с которыми сталкиваются разработчики при обработке данных.hether вы только начинаете осваивать встроенный язык или уже имеете опыт, умение корректно выводить содержимое массива на экран, в отчет или журнал регистрации существенно экономит время отладки. В этой статье мы разберем 7 различных способов вывода значений массива — от классического цикла Для до современных методов с использованием ЗаписьJSON и СтрСоединить.
Особенность работы с массивами в 1С заключается в том, что стандартные методы вывода (например, Сообщить()) не умеют автоматически преобразовывать массив в читаемый текст. Поэтому разработчику приходится вручную организовывать обход элементов. Мы рассмотрим не только базовые подходы, но и нюансы работы с многомерными массивами, массивами структур и динамическими коллекциями, которые часто встречаются в реальных задачах автоматизации.
Статья будет полезна как новичкам, которые хотят понять основы работы с массивами, так и опытным программистам, ищущим оптимальные решения для отладки или генерации отчетов. Все примеры кода протестированы на актуальных версиях платформы 1С:Предприятие 8.3 (включая 8.3.22 и новее).
1. Классический вывод через цикл Для
Самый универсальный и понятный способ — использование цикла Для. Он подходит для массивов любой длины и типов данных, включая числа, строки, даты и даже объекты 1С (справочники, документы). Основное преимущество этого метода — полный контроль над форматом вывода каждого элемента.
Пример кода для одомерного массива:
Массив = Новый Массив();
Массив.Добавить("Яблоко");
Массив.Добавить("Банан");
Массив.Добавить("Апельсин");
// Вывод через цикл Для
Для Каждого Элемент Из Массив Цикл
Сообщить(Элемент); // Выведет каждый элемент в отдельном окне
КонецЦикла;
Для многомерных массивов потребуется вложенный цикл. Например, так можно вывести двухмерный массив (матрицу):
Матрица = Новый Массив();
Строка1 = Новый Массив(); Строка1.Добавить(1); Строка1.Добавить(2);
Строка2 = Новый Массив(); Строка2.Добавить(3); Строка2.Добавить(4);
Матрица.Добавить(Строка1);
Матрица.Добавить(Строка2);
Для Каждого Строка Из Матрица Цикл
Для Каждого Элемент Из Строка Цикл
Сообщить(Элемент);
КонецЦикла;
КонецЦикла;
- ✅ Подходит для массивов любой вложенности
- ✅ Позволяет обрабатывать каждый элемент индивидуально
- ⚠️ Требует написания дополнительного кода для форматирования
- ⚠️ Может быть избыточным для простых случаев
2. Быстрый вывод с помощью функции СтрСоединить
Если вам нужно быстро получить строку со всеми элементами массива, разделенными запятой или другим разделителем, используйте встроенную функцию СтрСоединить(). Этот метод идеален для отладки, когда требуется увидеть содержимое массива в одном сообщении.
Пример использования:
МассивЧисел = Новый Массив();
МассивЧисел.Добавить(10);
МассивЧисел.Добавить(20);
МассивЧисел.Добавить(30);
Результат = СтрСоединить(МассивЧисел, ", ");
Сообщить(Результат); // Выведет: "10, 20, 30"
Функция поддерживает не только простые типы данных, но и объекты 1С, если они имеют текстовое представление. Например, так можно вывести массив ссылок на справочники:
МассивНоменклатуры = Новый Массив();
МассивНоменклатуры.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Стул"));
МассивНоменклатуры.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Стол"));
Сообщить(СтрСоединить(МассивНоменклатуры, "; "));
Для вывода массива в табличный документ используйте метод ВывестиСтроку() в цикле — это позволит контролировать шрифты и выравнивание.
3. Вывод в табличный документ для отчетов
Когда требуется оформить вывод массива в виде таблицы (например, для печати или экспорта в Excel), удобно использовать объект ТабличныйДокумент. Этот метод незаменим при генерации отчетов или формировании печатных форм.
Пример кода для вывода одомерного массива в столбец:
ТабДок = Новый ТабличныйДокумент;
МассивТоваров = Новый Массив();
МассивТоваров.Добавить("Монитор");
МассивТоваров.Добавить("Клавиатура");
МассивТоваров.Добавить("Мышь");
// Заголовок таблицы
ОбластьЗаголовок = ТабДок.Область(1, 1, 1, 1);
ОбластьЗаголовок.Текст = "Список товаров";
// Вывод элементов массива
Для Инд = 0 По МассивТоваров.ВГраница() Цикл
ТабДок.ВывестиСтроку(МассивТоваров[Инд]);
КонецЦикла;
ТабДок.Показать();
Для многомерных массивов можно организовать вывод в виде таблицы с колонками. Например, так можно представить массив структур с данными о товарах:
ТабДок = Новый ТабличныйДокумент;
МассивСтруктур = Новый Массив();
// Добавляем структуры с данными
Структура1 = Новый Структура("Наименование, Цена, Количество", "Стул", 1500, 5);
Структура2 = Новый Структура("Наименование, Цена, Количество", "Стол", 3200, 2);
МассивСтруктур.Добавить(Структура1);
МассивСтруктур.Добавить(Структура2);
// Формируем заголовки колонок
ТабДок.ВывестиСтроку("Наименование;Цена;Количество");
// Выводим данные
Для Каждого Структура Из МассивСтруктур Цикл
ТабДок.ВывестиСтроку(Структура.Наименование + ";" + Структура.Цена + ";" + Структура.Количество);
КонецЦикла;
ТабДок.Показать();
Определить количество колонок|Создать заголовки для колонок|Проверить типы данных в массиве|Настроить форматирование ячеек (если нужно)|Учесть разделители для многомерных массивов-->
4. Использование ЗаписьJSON для сложных структур
Если вам нужно вывести массив со сложной вложенной структурой (например, массив объектов с множеством свойств), самый удобный способ — использовать ЗаписьJSON. Этот метод автоматически преобразует любой массив или структуру в читаемый JSON-формат, который можно просмотреть в одном окне сообщения или записать в файл.
Пример вывода массива структур:
МассивЗаказов = Новый Массив();
Заказ1 = Новый Структура;
Заказ1.Вставить("Номер", "001");
Заказ1.Вставить("Дата", ТекущаяДата());
Заказ1.Вставить("Сумма", 10000);
Заказ1.Вставить("Товары", Новый Массив(Новый Структура("Наименование,Количество","Стул,2"), Новый Структура("Наименование,Количество","Стол,1")));
Заказ2 = Новый Структура;
Заказ2.Вставить("Номер", "002");
Заказ2.Вставить("Дата", ТекущаяДата() + 86400); // +1 день
Заказ2.Вставить("Сумма", 15000);
Заказ2.Вставить("Товары", Новый Массив(Новый Структура("Наименование,Количество","Шкаф,1")));
МассивЗаказов.Добавить(Заказ1);
МассивЗаказов.Добавить(Заказ2);
// Преобразуем в JSON и выводим
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписьJSON.Записать(Запись, МассивЗаказов);
РезультатJSON = Запись.Закрыть();
Сообщить(РезультатJSON);
Важно: метод ЗаписьJSON поддерживает рекурсивное преобразование вложенных структур и массивов, что делает его незаменимым для отладки сложных данных. Результат будет выглядеть как строка в формате JSON, которую можно скопировать и проанализировать в любом текстовом редакторе.
- 🔹 Автоматически обрабатывает вложенные объекты
- 🔹 Поддерживает все базовые типы данных 1С
- 🔹 Можно записать результат в файл для дальнейшего анализа
- ⚠️ Требует платформы 1С:Предприятие 8.3.6 или новее
5. Вывод в журнал регистрации для отладки
При отладке часто бывает полезно записать содержимое массива в журнал регистрации, особенно если вы работаете с фоновыми заданиями или серверными процедурами. Для этого используется объект ЖурналРегистрации.
Пример записи массива в журнал:
МассивОшибок = Новый Массив();
МассивОшибок.Добавить("Ошибка подключения к базе");
МассивОшибок.Добавить("Неверный формат файла");
МассивОшибок.Добавить("Превышено время ожидания");
// Записываем весь массив как одну строку
ЖурналРегистрации.Записать(
"ВыводМассиваОшибок",
УровеньЖурнала.Ошибка,
,
,
СтрСоединить(МассивОшибок, " | ")
);
// Или записываем каждый элемент отдельно
Для Каждого Ошибка Из МассивОшибок Цикл
ЖурналРегистрации.Записать(
"ОшибкаProcessing",
УровеньЖурнала.Предупреждение,
,
,
Ошибка
);
КонецЦикла;
Преимущество этого метода в том, что записи сохраняются в базе данных и доступны для анализа даже после перезапуска системы. Кроме того, в журнале можно фильтровать записи по уровню важности (УровеньЖурнала.Информация, УровеньЖурнала.Ошибка и т.д.).
Как просмотреть журнал регистрации в 1С?
Откройте главное меню Все функции (Ctrl+Shift+F12) → раздел Администрирование → Журнал регистрации. В открывшемся окне можно фильтровать записи по дате, уровню и тексту сообщения.
6. Работа с динамическими массивами (КоллекцияЗначений)
В современных версиях 1С:Предприятие 8.3 активно используются динамические коллекции (КоллекцияЗначений, СписокЗначений, Соответствие). Для них также актуальны методы вывода, но с некоторыми особенностями.
Пример вывода СписокЗначений:
СписокТоваров = Новый СписокЗначений;
СписокТоваров.Добавить("Ноутбук", 100);
СписокТоваров.Добавить("Планшет", 200);
СписокТоваров.Добавить("Телефон", 300);
// Вывод через цикл
Для Инд = 0 По СписокТоваров.Количество() - 1 Цикл
Элемент = СписокТоваров.Получить(Инд);
Сообщить(Строка(Элемент.Значение) + " (" + Элемент.Представление + ")");
КонецЦикла;
Для Соответствие (аналог ассоциативного массива) подходит следующий подход:
ЦеныТоваров = Новый Соответствие;
ЦеныТоваров.Вставить("Стул", 1500);
ЦеныТоваров.Вставить("Стол", 3200);
ЦеныТоваров.Вставить("Шкаф", 8500);
// Вывод пар "ключ-значение"
Для Каждого Пара Из ЦеныТоваров Цикл
Сообщить(Пара.Ключ + " = " + Пара.Значение);
КонецЦикла;
⚠️ Внимание: при работе сКоллекцияЗначенийучитывайте, что индексация начинается с0, а методКоличество()возвращает общее число элементов. Ошибка в циклеДля Инд = 1 По Коллекция.Количество()приведет к пропуску первого элемента или выходу за границы!
| Тип коллекции | Метод доступа к элементам | Пример вывода |
|---|---|---|
Массив |
Массив[Индекс] или Для Каждого ... Из Массив |
|
СписокЗначений |
Список.Получить(Индекс) |
|
Соответствие |
Для Каждого Пара Из Соответствие |
|
ДеревоЗначений |
Для Каждого Строка Из ДеревоЗначений |
|
7. Альтернативные методы: ЗаписьВФайл и Дебаггер
Иногда требуется не просто вывести массив на экран, а сохранить его для дальнейшего анализа. В таких случаях удобно использовать запись в файл или отладочные инструменты 1С.
Способ 1: Запись в текстовой файл
МассивДанных = Новый Массив();
МассивДанных.Добавить("Тестовая строка 1");
МассивДанных.Добавить("Тестовая строка 2");
// Создаем текстовый документ
Текст = Новый ТекстовыйДокумент;
Для Каждого Строка Из МассивДанных Цикл
Текст.ДобавитьСтроку(Строка);
КонецЦикла;
// Сохраняем в файл
Текст.Записать("C:\Temp\ВыводМассива.txt", КодировкаТекста.UTF8);
Способ 2: Использование отладчика
Если вы работаете в конфигураторе, можно поставить точку останова и просмотреть содержимое массива в окне Отладка → Локальные переменные. Для этого:
- Откройте модуль с кодом в конфигураторе.
- Установите точку останова на строке после заполнения массива (клавиша
F9). - Запустите отладку (
F5). - В окне
Локальные переменныенайдите ваш массив и разверните его содержимое.
⚠️ Внимание: при записи в файл на сервере 1С убедитесь, что у процессаragentесть права на запись в указанную папку. В противном случае возникнет ошибка доступа. Для тестов лучше использовать пути вида%TEMP%илиКаталогВременныхФайлов().
Для отладки сложных массивов комбинируйте методы: сначала используйте ЗаписьJSON для общего обзора, затем анализируйте отдельные элементы через цикл или отладчик.
FAQ: Частые вопросы по выводу массивов в 1С
Как вывести массив в сообщение, если в нем больше 1000 элементов?
Для больших массивов используйте постраничный вывод или запись в файл. Пример:
Для Инд = 0 По Массив.ВГраница() Цикл
Если Инд % 100 = 0 Тогда // Каждые 100 элементов
Сообщить("Обработано: " + Инд + " из " + Массив.ВГраница());
КонецЕсли;
// Ваша логика вывода
КонецЦикла;
Или запишите массив в файл целиком с помощью ЗаписьJSON.
Можно ли вывести массив в таблицу значений для дальнейшей обработки?
Да, для этого создайте ТаблицаЗначений и заполните её данными из массива:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Значение");
Для Каждого Элемент Из Массив Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Значение = Элемент;
КонецЦикла;
Как вывести массив структур с вложенными массивами?
Используйте рекурсивную функцию или ЗаписьJSON. Пример рекурсии:
Процедура ВывестиСтруктуру(Структура, Уровень = 0)
Для Каждого Ключ Из Структура.Ключи() Цикл
Значение = Структура[Ключ];
Если ТипЗнч(Значение) = Тип("Структура") Тогда
Сообщить(Повтор(Сивол.Таб, Уровень) + Ключ + ":");
ВывестиСтруктуру(Значение, Уровень + 1);
ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
Сообщить(Повтор(Сивол.Таб, Уровень) + Ключ + " [Массив]:");
Для Каждого Эл Из Значение Цикл
Сообщить(Повтор(Сивол.Таб, Уровень + 1) + "- " + Эл);
КонецЦикла;
Иначе
Сообщить(Повтор(Сивол.Таб, Уровень) + Ключ + ": " + Значение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Почему при выводе массива объекты 1С отображаются как "СсылкаНаОбъект"?
Это происходит потому, что по умолчанию Сообщить() выводит только ссылку на объект. Чтобы получить читаемое представление, используйте свойство Наименование или Представление():
Сообщить(СправочникСсылка.Наименование);
Сообщить(ДокументСсылка.Представление());
Как вывести массив в HTML-документ для веб-отчета?
Используйте объект HTMLДокумент или сгенерируйте HTML-строку вручную:
HTML = "|1|";
Для Каждого Элемент Из Массив Цикл
HTML = HTML + "|
" + Элемент + " |";
КонецЦикла;
HTML = HTML + "||";
Новый HTMLДокумент.УстановитьТекст(HTML);
Новый HTMLДокумент.Показать();