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

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

Как массив вывести в строку в 1С

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

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

Выбор метода зависит от версии платформы, типа элементов массива и требований к разделителю. Для массива строк достаточно одной функции, а для массива ссылок или чисел потребуется предварительное приведение типов. Ниже разобраны рабочие варианты с примерами кода, ограничениями и типичными ошибками.

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

Базовый способ: функция СтрСоединить

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

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

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

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

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

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

// Результат: "Стол, Стул, Шкаф"

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

Функция работает только со строковыми элементами. Если в массив попадёт число, дата или ссылка, поведение зависит от контекста: в ряде случаев платформа выполнит неявное преобразование, но надеяться на это не стоит — безопаснее привести типы явно.

Универсальный способ: соединение в цикле

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

Результат = "";

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

Если Не ПустаяСтрока(Результат) Тогда

Результат = Результат + "; ";

КонецЕсли;

Результат = Результат + Строка(Элемент);

КонецЦикла;

Проверка Если Не ПустаяСтрока(Результат) нужна, чтобы разделитель не появился перед первым элементом. Альтернатива — добавлять разделитель после каждого элемента, а в конце обрезать последний лишний через Лев(), но первый вариант читается проще.

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

Вывод массива ссылок, чисел и дат

На практике массив редко состоит из готовых строк. Чаще это ссылки на элементы справочника, отобранные документы или числовые значения. Каждый тип требует своей обработки перед соединением.

Массив ссылок на справочник

Если нужно вывести наименования номенклатуры из массива ссылок, обращайтесь к реквизиту явно. Это надёжнее, чем полагаться на представление объекта:

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

Для Каждого Ссылка Из МассивНоменклатуры Цикл

Части.Добавить(СокрЛП(Ссылка.Наименование));

КонецЦикла;

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

Приём «собрать строки в новый массив, потом соединить» сочетает гибкость цикла и краткость СтрСоединить. Это рекомендуемый шаблон для большинства прикладных задач.

Массив чисел и дат

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

Части.Добавить(Формат(Сумма, "ЧГ="));      // без разделителей групп

Части.Добавить(Формат(ДатаДок, "ДЛФ=D")); // короткая дата

Порядок действий для смешанного массива
  1. 1
    Определите типы элементов массива отладчиком или по коду заполнения
  2. 2
    Создайте новый массив для строковых представлений
  3. 3
    В цикле приведите каждый элемент к строке: Строка(), Формат() или обращение к реквизиту
  4. 4
    Соедините результат через СтрСоединить с нужным разделителем
  5. 5
    Проверьте вывод на тестовых данных, включая пустой массив и массив из одного элемента

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

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

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

Сообщить(Результат);

Для вывода в элемент формы достаточно присвоить строку реквизиту формы типа «Строка» неограниченной длины. Если реквизит имеет ограничение длины, лишний текст будет обрезан без предупреждения — проверьте свойства реквизита заранее.

При формировании текста запроса из массива (например, списка значений для условия В) не склеивайте значения в строку запроса вручную — это риск ошибок синтаксиса и инъекций. Передавайте массив параметром: конструкция ГДЕ Товар В (&МассивТоваров) принимает массив напрямую, и преобразование в строку вообще не требуется.

Производительность и ограничения

Строковое сложение в цикле (Результат = Результат + Часть) на больших массивах работает медленнее, чем СтрСоединить, потому что каждая операция создаёт новую строку в памяти. Для массивов из тысяч элементов разница становится ощутимой. Правило простое: сначала соберите части в массив, затем соедините один раз.

Ограничений на длину итоговой строки в неограниченной строке практически нет, но дальше результат обычно куда-то передаётся: в реквизит объекта с фиксированной длиной, в файл, в HTTP-запрос. На каждой границе проверяйте допустимый размер, иначе данные будут молча усечены.

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

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

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

Цикл со строковым сложением

Максимальный контроль над каждым элементом: фильтрация, форматирование, нумерация. Медленнее на больших объёмах.

Новый массив строк + СтрСоединить

Рекомендуемый компромисс: гибкая обработка в цикле и быстрое соединение одним вызовом.

Типичные ошибки и как их проверить

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

Вторая ошибка — пустые элементы массива, которые дают двойные разделители подряд («Стул, , Шкаф»). Если пустые значения возможны, пропускайте их в цикле через Если ПустаяСтрока(Строка(Элемент)) Тогда Продолжить;.

Третья группа ошибок связана с типами: вывод ссылки вместо наименования, числа с пробелами-разделителями, даты в неожиданном формате. Все они лечатся явным приведением через Формат() или обращением к нужному реквизиту.

Типичные ошибки
01
Разделитель перед первым элементом — добавляйте его только когда строка уже не пустая
02
Двойные разделители из-за пустых элементов — фильтруйте пустые значения в цикле
03
Вывод ссылки вместо наименования — обращайтесь к реквизиту Ссылка.Наименование явно
04
Числа с пробелами-разделителями групп — используйте Формат(Число, "ЧГ=")
05
Конкатенация значений в текст запроса — передавайте массив параметром

FAQ

Чем СтрСоединить отличается от устаревшей конструкции со строковым сложением?

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

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

Передайте разделитель без пробела: СтрСоединить(Массив, ","). Разделитель — произвольная строка, пробел добавляется только если вы его явно указали.

Можно ли вывести в строку массив структур?

Напрямую нет — структура не имеет осмысленного строкового представления. В цикле извлекайте нужные поля каждой структуры (например, Элемент.Код и Элемент.Наименование), формируйте из них строку и добавляйте в промежуточный массив, который затем соединяйте.

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

Либо перестройте логику: добавляйте разделитель перед элементом, только если строка уже не пуста. Либо в конце обрежьте хвост: Результат = Лев(Результат, СтрДлина(Результат) - СтрДлина(Разделитель)) — но предварительно убедитесь, что строка не пуста.

Что делать, если массив пустой?

СтрСоединить вернёт пустую строку, ошибки не будет. Если пустой результат недопустим по смыслу (например, строка идёт в печатную форму), добавьте проверку Массив.Количество() = 0 и выведите осмысленную заглушку вроде «Не указано».

Итог

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

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