Разработка и Конфигурация · 9 мин
Как соединить две строки в одну в 1С
Способы соединить две строки в одну в 1С: оператор «+», шаблоны СтрШаблон, СтрСоединить, переносы строк и типичные ошибки при конкатенации с примерами кода.
Соединение строк (конкатенация) — одна из самых частых операций во встроенном языке 1С. Она нужна при формировании сообщений пользователю, сборке ФИО из отдельных полей, создании путей к файлам, заголовков отчётов и текстов запросов. В языке 1С для этого есть несколько инструментов: оператор «+», функции СтрШаблон, СтрСоединить и механизм многострочных литералов.
Выбор способа зависит от задачи: для двух-трёх коротких строк достаточно оператора «+», для подстановки значений в текст удобнее шаблон, а для объединения массива строк — специальная функция. Ниже разобраны все рабочие варианты с примерами кода, которые можно сразу перенести в свою конфигурацию.
Соединение строк оператором «+»
Базовый способ — оператор сложения. Если оба операнда имеют тип Строка, платформа выполняет конкатенацию и возвращает новую строку:
Фамилия = "Иванов";
Имя = "Пётр";
ПолноеИмя = Фамилия + " " + Имя;
// Результат: "Иванов Пётр"
Обратите внимание: платформа не добавляет разделители автоматически. Пробел, запятую, дефис или перенос строки нужно вставлять в выражение явно, иначе значения «склеятся» вплотную. Это самая частая причина результата вида «ИвановПётр».
Оператор «+» удобен для коротких выражений из двух-пяти фрагментов. При большем количестве частей цепочка плюсов становится трудно читаемой, и лучше перейти к СтрШаблон или СтрСоединить.
Соединение строки с числом, датой и другими типами
Оператор «+» в 1С не выполняет неявное преобразование произвольных типов к строке. Выражение вида «Сумма: » + 100 вызовет ошибку «Преобразование значения к типу Строка не может быть выполнено» либо неожиданный результат в зависимости от порядка операндов.
Правильный подход — явное преобразование через функцию Строка() или, что предпочтительнее для чисел и дат, через Формат():
СуммаДокумента = 12500.5;
Текст = "Сумма документа: " + Формат(СуммаДокумента, "ЧДЦ=2") + " руб.";
// Результат: "Сумма документа: 12 500,00 руб."
ДатаОтгрузки = '20260315';
Сообщение = "Отгрузка запланирована на " + Формат(ДатаОтгрузки, "ДЛФ=D");
Функция Формат() даёт контроль над представлением: количеством знаков после запятой, форматом даты, подавлением нулевых значений. Строка() подходит для простых случаев и для ссылочных типов, когда нужно получить стандартное представление объекта.
Подстановка значений через СтрШаблон
Когда нужно вставить несколько значений в готовый текст, удобнее функция СтрШаблон. В шаблоне места подстановки обозначаются маркерами %1, %2 и так далее:
Текст = СтрШаблон("Документ №%1 от %2 проведён, сумма %3 руб.",
НомерДокумента,
Формат(ДатаДокумента, "ДЛФ=D"),
Формат(СуммаДокумента, "ЧДЦ=2"));
Такой код читается легче цепочки плюсов, особенно когда фрагментов больше трёх. Шаблон легко править: текст сообщения меняется в одном месте, не затрагивая логику подстановки. Это же упрощает локализацию, если конфигурация поддерживает несколько языков.
Учтите, что параметры подставляются в строковом представлении, поэтому для чисел и дат всё равно стоит применять Формат() внутри вызова, как показано в примере.
Объединение массива строк через СтрСоединить
Если строки уже собраны в массив, соединить их одной операцией позволяет функция СтрСоединить. Первым параметром передаётся массив, вторым — разделитель:
Части = Новый Массив;
Части.Добавить("Иванов");
Части.Добавить("Пётр");
Части.Добавить("Сергеевич");
ФИО = СтрСоединить(Части, " ");
// Результат: "Иванов Пётр Сергеевич"
Разделитель может быть любым: запятая с пробелом для перечислений, точка с запятой для CSV-подобных строк, перенос строки для многострочного результата. Если разделитель не указать, фрагменты склеятся без промежутков.
Этот же приём решает задачу производительности в циклах: вместо многократного наращивания строки добавляйте части в массив и соединяйте один раз после цикла.
Сравнение способов соединения
Для двух-пяти фрагментов и простых выражений. Требует явного преобразования типов и ручных разделителей
Для подстановки значений в готовый текст сообщения. Удобен при трёх и более параметрах, легко редактируется
Для массива строк и сборки результата в цикле. Единственный разумный вариант при большом числе частей
Многострочные строки и переносы
Для соединения строк с переходом на новую строку используется системный набор символов Символы.ПС (перевод строки) или Символы.ВК + Символы.ПС:
Адрес = "г. Москва" + Символы.ПС
+ "ул. Примерная, д. 1" + Символы.ПС
+ "офис 10";
В языке 1С также допустимы многострочные литералы: строка в кавычках может продолжаться на следующей строке кода, если каждая новая часть начинается с символа «|». Такой литерал уже содержит переносы:
ТекстПисьма = "Уважаемый клиент!
|Ваш заказ принят в работу.
|Срок выполнения — два рабочих дня.";
Вертикальная черта в начале строки говорит компилятору, что это продолжение строкового литерала. Всё, что стоит после черты, попадает в строку, включая фактический перенос.
Конкатенация в запросах и в тонком клиенте
В языке запросов 1С соединение строк тоже выполняется оператором «+», но с ограничением: складывать можно только строковые выражения, а длина результата может обрезаться по правилам СУБД. Для объединения полей в запросе часто применяют ВЫРАЗИТЬ с приведением к строке фиксированной длины.
При работе в тонком и веб-клиенте имейте в виду: тяжёлая сборка больших строк лучше выполняется на сервере. Если формируете длинный текст (например, тело письма из сотен строк табличной части), делайте это в серверной процедуре и передавайте на клиент готовый результат — так вы избежите лишних серверных вызовов и передачи промежуточных данных.
Проверка результата и отладка
Самый быстрый способ убедиться, что строка собралась правильно, — вывести её через Сообщить() или СообщениеПользователю и посмотреть в панели сообщений. Для сложных выражений поставьте точку останова в конфигураторе и посмотрите значение переменной в табло или через вычисление выражения.
Обращайте внимание на три признака корректного результата: наличие разделителей между частями, читаемый формат чисел и дат, отсутствие лишних пробелов по краям. Лишние пробелы удобно убрать функцией СокрЛП, которая обрезает незначащие символы слева и справа.
Как проверить результат
Между значениями есть пробел или нужный символ
Значения склеены вплотную
Числа с нужным числом знаков, даты в привычном виде
Дата вида 20260315000000 или число без разделителей разрядов
Нет лишних пробелов в начале и конце
Лидирующие или хвостовые пробелы — примените СокрЛП
Текст разбит на строки как задумано
Весь текст в одну строку — проверьте Символы.ПС
Часто задаваемые вопросы
Как соединить строки без пробела между ними в 1С?
Просто не добавляйте разделитель: Результат = Строка1 + Строка2. Если используете СтрСоединить, передайте пустую строку в качестве разделителя или опустите второй параметр — фрагменты склеятся вплотную.
Почему выражение "Текст" + 100 выдаёт ошибку?
Оператор «+» не преобразует число к строке автоматически в таком контексте. Нужно явное приведение: "Текст" + Строка(100) или, для управления форматом, "Текст" + Формат(100, "ЧГ=0").
Чем СтрШаблон лучше оператора «+»?
СтрШаблон отделяет текст сообщения от подставляемых значений, поэтому код легче читать и править, особенно при трёх и более параметрах. Для одного-двух значений разницы практически нет — выбирайте по удобству.
Как объединить строки с переносом на новую строку?
Используйте Символы.ПС между фрагментами: Строка1 + Символы.ПС + Строка2. Альтернатива — многострочный литерал с вертикальной чертой «|» в начале каждой продолжающей строки кода.
Можно ли соединять строки прямо в запросе?
Да, в языке запросов работает оператор «+» для строковых выражений. Учитывайте, что СУБД может обрезать результат по длине, поэтому для гарантированного размера применяйте ВЫРАЗИТЬ с приведением к строке нужной длины.
Что делать, если строка собирается в цикле из тысяч частей?
Не наращивайте строку оператором «+» на каждой итерации — это медленно, так как каждый раз создаётся новая строка. Складывайте части в массив, а после цикла вызовите СтрСоединить один раз.
Что важно запомнить
Для простых случаев соединяйте строки оператором «+» с явными разделителями, числа и даты преобразуйте через Формат(). При нескольких подстановках используйте СтрШаблон, при массиве частей и сборке в цикле — СтрСоединить. Проверяйте результат на разделители, форматы и лишние пробелы.