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

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

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

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

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

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

Ниже разобраны все рабочие способы: от простейшего сложения двух переменных до объединения массива строк и вставки переносов. Примеры приведены на встроенном языке и работают как в толстом, так и в тонком клиенте и на сервере.

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

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

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

Имя = "Петр";

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

Город = "Москва";

Адрес = "г. " + Город + ", ул. Ленина, д. 5";

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

Оператор «+» можно применять many раз в одном выражении — ограничений по количеству слагаемых практически нет. Но при сцепке в цикле большого числа строк (тысячи итераций) лучше собирать части в массив и в конце вызвать СтрСоединить — так код читается лучше и работает предсказуемее.

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

Сцепка строки с числом, датой и булево

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

Сумма = 1250.5;

Текст = "Итого: " + Строка(Сумма) + " руб."; // "Итого: 1250.5 руб."

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

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

Разница между Строка() и Формат() принципиальна. Строка() возвращает внутреннее представление значения — у числа может появиться разделитель дробной части в виде точки, у даты — формат по умолчанию. Формат() позволяет задать точный шаблон: Формат(Число, "ЧГ=0; ЧДЦ=2") уберёт разделители групп и зафиксирует два знака после запятой. Для вывода пользователю почти всегда нужен именно Формат.

Сцепка через СтрШаблон: подстановка значений в шаблон

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

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

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

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

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

СтрШаблон особенно полезен в сообщениях пользователю, потому что текст можно вынести в НСтр() для мультиязычных конфигураций, а порядок подстановок менять, не трогая сами значения. Учтите ограничение: параметров не больше десяти, и каждый параметр всё равно должен быть строкой или приводимым значением — для дат и чисел по-прежнему используйте Формат.

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

Если части строки уже лежат в массиве — например, список товаров, фамилии ответственных, строки адреса — сцеплять их вручную в цикле не нужно. Функция СтрСоединить(Массив, Разделитель) делает это одним вызовом.

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

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

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

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

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

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

Порядок действий при сборке строки из частей
  1. 1
    Соберите непустые части в массив, проверяя каждую через ПустаяСтрока()
  2. 2
    Вызовите СтрСоединить(Массив, Разделитель) с нужным разделителем
  3. 3
    Проверьте результат на тестовых данных: без пустых частей, с одной частью, со всеми пустыми
  4. 4
    Убедитесь, что в результате нет двойных пробелов и разделителей по краям

Сцепка с переносом строки и символами табуляции

Для многострочного текста (подсказки, печатные представления, тело письма) между частями вставляют перенос. В 1С для этого служит системный набор символов Символы и конструкция Символы.ПС (перенос строки), а также Символы.Таб, Символы.ВК и неразрывный пробел Символы.НПП.

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

+ "Ваш заказ №" + Строка(НомерЗаказа) + " готов к выдаче." + Символы.ПС

+ "С уважением, отдел продаж.";

Если строка формируется для выгрузки в файл или обмена, уточните, какой перенос ожидает принимающая сторона: Windows традиционно использует комбинацию ВК+ПС, Linux — только ПС. Для файлов обмена часто критично точное соответствие, иначе файл не пройдёт проверку формата. Внутри интерфейса 1С достаточно Символы.ПС.

Сцепка строк в запросах и динамических текстах

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

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Наименование + "" ("" + Контрагенты.ИНН + "")"" КАК Представление

|ИЗ

| Справочник.Контрагенты КАК Контрагенты";

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

Сравнение способов сцепки

Оператор +

Две-три части, простой код. Требует ручной вставки разделителей и явного приведения типов.

СтрШаблон

Сообщения пользователю и локализуемые тексты. До 10 параметров, значения всё равно нужно форматировать.

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

Массив однотипных частей с единым разделителем. Не подходит для разнородных фрагментов с разной логикой.

Сборка в цикле с +

Гибкая логика по каждой части. При большом числе итераций уступает по читаемости СтрСоединить.

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

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

Типичные ошибки
01
Сцепка без разделителя: «ИвановПетр» вместо «Иванов Петр» — добавляйте пробел или СтрСоединить с разделителем
02
Сложение строки с числом или датой без Строка()/Формат() — ошибка выполнения у пользователя
03
Двойные пробелы и висячие запятые из-за пустых частей — фильтруйте элементы через ПустаяСтрока() перед сборкой
04
Вывод числа через Строка() вместо Формат() — в сообщении появляются точки и разделители групп в неожиданном виде
05
Подстановка пользовательского ввода в текст запроса конкатенацией — риск синтаксических ошибок и инъекций, используйте параметры

Для проверки результата удобно временно вывести строку через Сообщить() или посмотреть её в отладчике (табло, F2 по выделенному выражению). Обращайте внимание на невидимые символы: лишний перенос в конце строки может сломать последующую обработку, например сравнение или запись в файл.

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

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

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

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

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

Слипшиеся слова, двойные пробелы, запятая в конце

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

Формат соответствует ожиданиям пользователя (ДЛФ, ЧДЦ)

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

Внутреннее представление: точки в числах, полная дата со временем

Пустые исходные данные
Норма

Строка корректна при пустых частях, без висячих разделителей

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

Двойные пробелы, «г. , ул. » и подобные артефакты

Итог

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

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

Частые вопросы

Как сцепить строки в запросе 1С?

В тексте запроса используется тот же знак «+»: Поле1 + " " + Поле2. Сцеплять можно только строковые выражения, поэтому нестроковые поля сначала приводят через ВЫРАЗИТЬ или ПРЕДСТАВЛЕНИЕ. Учтите, что ПРЕДСТАВЛЕНИЕ замедляет запрос и не участвует в индексах — для больших выборок лучше сцеплять значения уже в коде после получения результата.

Чем СтрШаблон лучше обычного сложения строк?

СтрШаблон делает текст читаемым как единое целое: «Заказ №%1 от %2» понятнее цепочки из плюсов и кавычек. Его удобно выносить в НСтр() для перевода интерфейса. Минус — максимум десять параметров и необходимость вручную форматировать числа и даты перед подстановкой.

Как добавить перенос строки при сцепке?

Вставьте между частями Символы.ПС: Часть1 + Символы.ПС + Часть2. Для табуляции используйте Символы.Таб, для неразрывного пробела — Символы.НПП. Если строка уйдёт в файл обмена, уточните требуемый тип переноса у принимающей системы: иногда нужна комбинация Символы.ВК + Символы.ПС.

Почему при сцепке с числом возникает ошибка?

Оператор «+» в 1С не преобразует типы: строку можно складывать только со строкой. Приведите значение явно — Строка(Число) для простого представления или Формат(Число, "ЧДЦ=2") для управляемого формата. То же относится к датам, булево и ссылкам на объекты.

Как убрать лишние пробелы в итоговой строке?

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

Есть ли ограничение на длину сцепленной строки?

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