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