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

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

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

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

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

Выбор способа зависит от задачи. Для двух-трёх коротких строк достаточно оператора «+». Если нужно объединить массив значений через разделитель, удобнее СтрСоединить. А когда текст содержит много переменных частей, читаемее всего шаблон со вставками через СтрШаблон.

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

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

Базовый способ — оператор сложения. Он последовательно склеивает операнды слева направо и возвращает новую строку. Исходные переменные при этом не изменяются: результат нужно присвоить переменной или сразу использовать.

Имя = "Иван";

Фамилия = "Петров";

ПолноеИмя = Фамилия + " " + Имя; // "Петров Иван"

Обратите внимание на пробел между частями: оператор «+» ничего не добавляет автоматически. Если разделитель нужен, его включают в выражение явно — как отдельный строковый литерал или внутри одного из операндов.

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

bsl
Результат = Строка1 + Строка2;

Преобразование чисел и дат перед соединением

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

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

Сумма = 1500.5;

Текст = "Итого: " + Формат(Сумма, "ЧДЦ=2") + " руб."; // "Итого: 1500,50 руб."

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

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

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

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

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

Части.Добавить("г. Москва");

Части.Добавить("ул. Ленина");

Части.Добавить("д. 10");

Адрес = СтрСоединить(Части, ", "); // "г. Москва, ул. Ленина, д. 10"

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

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

Формирование текста с подстановками через СтрШаблон

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

Текст = СтрШаблон("Заказ №%1 от %2 на сумму %3 руб.",

НомерЗаказа,

Формат(ДатаЗаказа, "ДЛФ=D"),

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

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

Какой способ выбрать

Оператор «+»

Две-три короткие строки. Минус: громоздко при большом числе частей.

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

Массив значений с одинаковым разделителем. Минус: все элементы должны быть строками.

СтрШаблон

Длинный текст с подстановками. Минус: нужно следить за порядком параметров %1, %2..

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

Для соединения строк с переносом используют системный набор Символы: Символы.ПС — перенос строки, Символы.ВК — возврат каретки, Символы.Таб — табуляция. Обычно достаточно Символы.ПС.

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

+ "ул. Ленина" + Символы.ПС

+ "д. 10";

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

Текст = "Первая строка

|Вторая строка

|Третья строка";

Типичные ошибки
01
Сложение строки с числом без Формат() или Строка() — ошибка выполнения и остановка кода.
02
Пропущенный пробел-разделитель: «ИванПетров» вместо «Иван Петров».
03
Использование Неопределено в выражении — ошибка преобразования; проверяйте значение перед соединением.
04
Перепутанный порядок параметров в СтрШаблон — подстановки встают не на свои места.

Проверка результата и граничные случаи

После соединения полезно проверить результат, особенно если части приходят из данных пользователя или базы. Пустые значения и Неопределено — главные источники сюрпризов: Неопределено в операции «+» вызовет ошибку, а пустая строка просто ничего не добавит, оставив лишние разделители.

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

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

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

Вывод через Сообщить() или в отладчике
Норма

Строка содержит все части с правильными разделителями

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

Слипшийся текст, лишние запятые, пустые фрагменты

Значения из базы
Норма

СокрЛП применён, пустые части исключены

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

Двойные пробелы, разделители в начале или конце

Числа и даты
Норма

Отформатированы через Формат()

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

Ошибка выполнения или нечитаемое представление

Краткий итог и частые вопросы

Для соединения двух строк в 1С чаще всего достаточно оператора «+». При росте числа частей переходите на СтрСоединить или СтрШаблон, а нестроковые значения всегда приводите к строке заранее. Проверяйте результат на пустых и незаполненных данных — это самая частая причина дефектов.

Итог

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

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

Можно ли соединить строку с числом напрямую?

Нет. Выражение вида "Итого: " + 100 вызовет ошибку выполнения. Сначала преобразуйте число: Формат(100, "ЧДЦ=2") или Строка(100), а затем соединяйте.

Чем СтрСоединить лучше цикла с оператором «+»?

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

Как соединить строки с переносом строки?

Используйте Символы.ПС как разделитель: Строка1 + Символы.ПС + Строка2, либо СтрСоединить(Массив, Символы.ПС). Также можно использовать многострочный литерал с символом «|» в начале каждой строки.

Что делать, если одна из частей может быть Неопределено?

Проверьте значение перед соединением: если оно Неопределено, замените его на пустую строку или пропустите часть. Удобный приём — собирать в массив только заполненные значения и соединять их СтрСоединить.

Как убрать лишние пробелы при соединении ФИО из базы?

Примените СокрЛП к каждой части перед соединением: СокрЛП(Фамилия) + " " + СокрЛП(Имя). Если какие-то части могут быть пустыми, добавляйте в массив только непустые и соединяйте через СтрСоединить с пробелом.

Работает ли оператор «+» в запросах 1С?

Нет, в языке запросов сложение строк через «+» не поддерживается. Для объединения полей в запросе используется функция языка запросов или объединение строк выполняется уже после получения выборки, в коде на встроенном языке.