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

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

Как соединить две строки в одну в 1С

Способы соединить две строки в одну в 1С: оператор «+», шаблоны СтрШаблон, СтрСоединить, переносы строк и типичные ошибки при конкатенации с примерами кода.

Соединение строк (конкатенация) — одна из самых частых операций во встроенном языке 1С. Она нужна при формировании сообщений пользователю, сборке ФИО из отдельных полей, создании путей к файлам, заголовков отчётов и текстов запросов. В языке 1С для этого есть несколько инструментов: оператор «+», функции СтрШаблон, СтрСоединить и механизм многострочных литералов.

Выбор способа зависит от задачи: для двух-трёх коротких строк достаточно оператора «+», для подстановки значений в текст удобнее шаблон, а для объединения массива строк — специальная функция. Ниже разобраны все рабочие варианты с примерами кода, которые можно сразу перенести в свою конфигурацию.

Соединение строк оператором «+»

Базовый способ — оператор сложения. Если оба операнда имеют тип Строка, платформа выполняет конкатенацию и возвращает новую строку:

Фамилия = "Иванов";

Имя = "Пётр";

ПолноеИмя = Фамилия + " " + Имя;

// Результат: "Иванов Пётр"

Обратите внимание: платформа не добавляет разделители автоматически. Пробел, запятую, дефис или перенос строки нужно вставлять в выражение явно, иначе значения «склеятся» вплотную. Это самая частая причина результата вида «ИвановПётр».

Оператор «+» удобен для коротких выражений из двух-пяти фрагментов. При большем количестве частей цепочка плюсов становится трудно читаемой, и лучше перейти к СтрШаблон или СтрСоединить.

Соединение строки с числом, датой и другими типами

Оператор «+» в 1С не выполняет неявное преобразование произвольных типов к строке. Выражение вида «Сумма: » + 100 вызовет ошибку «Преобразование значения к типу Строка не может быть выполнено» либо неожиданный результат в зависимости от порядка операндов.

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

СуммаДокумента = 12500.5;

Текст = "Сумма документа: " + Формат(СуммаДокумента, "ЧДЦ=2") + " руб.";

// Результат: "Сумма документа: 12 500,00 руб."

ДатаОтгрузки = '20260315';

Сообщение = "Отгрузка запланирована на " + Формат(ДатаОтгрузки, "ДЛФ=D");

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

Типичные ошибки
01
Сложение строки и числа без преобразования — ошибка выполнения или неверный результат
02
Отсутствие пробела-разделителя между значениями — склеенный текст
03
Использование Строка() для дат — получение нечитаемого вида вместо привычного формата
04
Конкатенация в цикле по большому массиву — заметное падение производительности

Подстановка значений через СтрШаблон

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

Текст = СтрШаблон("Документ №%1 от %2 проведён, сумма %3 руб.",

НомерДокумента,

Формат(ДатаДокумента, "ДЛФ=D"),

Формат(СуммаДокумента, "ЧДЦ=2"));

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

Учтите, что параметры подставляются в строковом представлении, поэтому для чисел и дат всё равно стоит применять Формат() внутри вызова, как показано в примере.

Объединение массива строк через СтрСоединить

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

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

Части.Добавить("Иванов");

Части.Добавить("Пётр");

Части.Добавить("Сергеевич");

ФИО = СтрСоединить(Части, " ");

// Результат: "Иванов Пётр Сергеевич"

Разделитель может быть любым: запятая с пробелом для перечислений, точка с запятой для CSV-подобных строк, перенос строки для многострочного результата. Если разделитель не указать, фрагменты склеятся без промежутков.

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

Сравнение способов соединения

Оператор «+»

Для двух-пяти фрагментов и простых выражений. Требует явного преобразования типов и ручных разделителей

СтрШаблон

Для подстановки значений в готовый текст сообщения. Удобен при трёх и более параметрах, легко редактируется

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

Для массива строк и сборки результата в цикле. Единственный разумный вариант при большом числе частей

Многострочные строки и переносы

Для соединения строк с переходом на новую строку используется системный набор символов Символы.ПС (перевод строки) или Символы.ВК + Символы.ПС:

Адрес = "г. Москва" + Символы.ПС

+ "ул. Примерная, д. 1" + Символы.ПС

+ "офис 10";

В языке 1С также допустимы многострочные литералы: строка в кавычках может продолжаться на следующей строке кода, если каждая новая часть начинается с символа «|». Такой литерал уже содержит переносы:

ТекстПисьма = "Уважаемый клиент!

|Ваш заказ принят в работу.

|Срок выполнения — два рабочих дня.";

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

Конкатенация в запросах и в тонком клиенте

В языке запросов 1С соединение строк тоже выполняется оператором «+», но с ограничением: складывать можно только строковые выражения, а длина результата может обрезаться по правилам СУБД. Для объединения полей в запросе часто применяют ВЫРАЗИТЬ с приведением к строке фиксированной длины.

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

Проверка результата и отладка

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

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

Контрольные точки

Как проверить результат

Разделители между частями
Норма

Между значениями есть пробел или нужный символ

Тревожный признак

Значения склеены вплотную

Формат чисел и дат
Норма

Числа с нужным числом знаков, даты в привычном виде

Тревожный признак

Дата вида 20260315000000 или число без разделителей разрядов

Края строки
Норма

Нет лишних пробелов в начале и конце

Тревожный признак

Лидирующие или хвостовые пробелы — примените СокрЛП

Переносы строк
Норма

Текст разбит на строки как задумано

Тревожный признак

Весь текст в одну строку — проверьте Символы.ПС

Часто задаваемые вопросы

Как соединить строки без пробела между ними в 1С?

Просто не добавляйте разделитель: Результат = Строка1 + Строка2. Если используете СтрСоединить, передайте пустую строку в качестве разделителя или опустите второй параметр — фрагменты склеятся вплотную.

Почему выражение "Текст" + 100 выдаёт ошибку?

Оператор «+» не преобразует число к строке автоматически в таком контексте. Нужно явное приведение: "Текст" + Строка(100) или, для управления форматом, "Текст" + Формат(100, "ЧГ=0").

Чем СтрШаблон лучше оператора «+»?

СтрШаблон отделяет текст сообщения от подставляемых значений, поэтому код легче читать и править, особенно при трёх и более параметрах. Для одного-двух значений разницы практически нет — выбирайте по удобству.

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

Используйте Символы.ПС между фрагментами: Строка1 + Символы.ПС + Строка2. Альтернатива — многострочный литерал с вертикальной чертой «|» в начале каждой продолжающей строки кода.

Можно ли соединять строки прямо в запросе?

Да, в языке запросов работает оператор «+» для строковых выражений. Учитывайте, что СУБД может обрезать результат по длине, поэтому для гарантированного размера применяйте ВЫРАЗИТЬ с приведением к строке нужной длины.

Что делать, если строка собирается в цикле из тысяч частей?

Не наращивайте строку оператором «+» на каждой итерации — это медленно, так как каждый раз создаётся новая строка. Складывайте части в массив, а после цикла вызовите СтрСоединить один раз.

Итог

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

Для простых случаев соединяйте строки оператором «+» с явными разделителями, числа и даты преобразуйте через Формат(). При нескольких подстановках используйте СтрШаблон, при массиве частей и сборке в цикле — СтрСоединить. Проверяйте результат на разделители, форматы и лишние пробелы.