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

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

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

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

Соединение числа и строки — одна из самых частых задач при работе со встроенным языком 1С: формирование сообщений пользователю, подписей в печатных формах, наименований файлов, текстов запросов. Встроенный язык не выполняет автоматическое приведение числа к строке при сложении, поэтому прямое выражение вида "Итого: " + 100 завершится ошибкой преобразования типов.

Чтобы соединить значения, число нужно сначала преобразовать в строку с помощью функций Строка() или Формат(), либо использовать инструменты, которые делают это автоматически: СтрШаблон() и СтрСоединить(). Выбор способа зависит от задачи: нужен ли контроль над форматом числа, локализация сообщения или простая склейка нескольких значений.

Ниже разобраны все рабочие варианты с примерами кода, ограничениями каждого подхода и способами проверить результат. Примеры одинаково применимы в управляемых и обычных формах, в тонком и толстом клиенте.

Почему нельзя просто сложить строку и число

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

При этом обратная ситуация — сложение числа со строкой, содержащей число, — тоже небезопасна. Выражение 100 + "200" в ряде контекстов может быть вычислено, но полагаться на неявное приведение типов не стоит: поведение зависит от порядка операндов и приводит к трудноуловимым ошибкам в расчётах.

Правило простое: перед соединением явно приводите число к строке. Это делает код предсказуемым и читаемым для других разработчиков.

Способ 1. Функция Строка() и оператор «+»

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

Количество = 5;

Текст = "В документе " + Строка(Количество) + " позиций.";

Сообщить(Текст); // В документе 5 позиций.

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

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

Способ 2. Функция Формат() — контроль над представлением числа

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

Сумма = 1234567.8;

Текст = "Итого к оплате: " + Формат(Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0");

// Итого к оплате: 1234567.80

Ключевые параметры форматной строки для чисел:

  • ЧДЦ=2 — число десятичных знаков в дробной части;
  • ЧРД=. — разделитель дробной части (точка вместо запятой);
  • ЧГ=0 — не группировать разряды, убирает пробелы между тысячами;
  • ЧН=0 — представление нулевого значения.

Комбинация ЧГ=0 особенно важна при формировании служебных строк: она гарантирует, что число попадёт в строку «чисто», без неразрывных пробелов, которые визуально неотличимы от обычных, но ломают сравнение строк и разбор значений.

bsl
Сумма = 1234567.8;
Текст = "Итого: " + Формат(Сумма, "ЧДЦ=2; ЧГ=0");
Сообщить(Текст); // Итого: 1234567.8

Способ 3. СтрШаблон() — подстановка без явного преобразования

Функция СтрШаблон() подставляет значения в шаблон с маркерами %1, %2 и так далее, самостоятельно приводя их к строке:

Номер = 42;

Сумма = 1500.5;

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

// Документ №42 на сумму 1500.5 руб.

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

Ограничение: СтрШаблон() приводит значения стандартным способом, поэтому для контроля формата числа параметр всё равно нужно предварительно обернуть в Формат():

Текст = СтрШаблон("Остаток: %1 шт.", Формат(Остаток, "ЧДЦ=3; ЧГ=0"));

Способ 4. СтрСоединить() — склейка массива значений

Если нужно соединить несколько значений через разделитель, удобна функция СтрСоединить(). Она принимает массив и строку-разделитель:

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

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

Части.Добавить(Формат(НомерЗаказа, "ЧГ=0"));

Части.Добавить(Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd"));

ИмяФайла = СтрСоединить(Части, "_") + ".xml";

// Заказ_1042_20260115.xml

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

Обратите внимание: элементы массива должны быть строками. Если положить в массив число без преобразования, поведение зависит от версии платформы, поэтому надёжнее явно оборачивать числа в Формат() или Строка().

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

Строка() + оператор «+»

Быстро и просто. Подходит для коротких сообщений. Не контролирует формат числа, возможны разделители разрядов.

Формат() + оператор «+»

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

СтрШаблон()

Лучший выбор для сообщений пользователю и локализуемых текстов. Формат числа при необходимости задаётся вложенным Формат().

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

Удобен для склейки множества частей через разделитель: имена файлов, ключи, составные строки.

Число в запросе и в динамическом коде

Отдельный случай — подстановка числа в текст запроса или в строку, исполняемую через Выполнить(). Здесь конкатенация с преобразованием работает так же, но есть два риска.

Первый — разделитель дробной части. В тексте запроса десятичным разделителем должна быть точка, а Строка() при русских региональных настройках вернёт запятую. Поэтому для запросов используйте Формат(Значение, "ЧРД=.; ЧГ=0").

Второй, более важный: подстановка значений конкатенацией в текст запроса в принципе считается плохой практикой. Используйте параметры запроса (Запрос.УстановитьПараметр()) — это исключает и проблемы форматирования, и ошибки синтаксиса при неожиданных значениях.

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

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

Наиболее частые ошибки при соединении числа и строки:

  • попытка сложить строку и число напрямую — ошибка преобразования типов в момент выполнения;
  • отсутствие пробелов на стыках: "Итого:" + Строка(Сумма) даёт «Итого:100» — пробел нужно добавлять в литерал явно;
  • неразрывные пробелы от Строка() в служебных строках, из-за которых ломается сравнение или разбор;
  • запятая вместо точки в дробной части при подстановке числа в текст запроса или внешний формат данных;
  • потеря дробной части при неявном округлении — если число предварительно округлялось функцией Окр() с нулевой точностью.
Типичные ошибки
01
Сложение "Текст" + Число без преобразования — ошибка «Преобразование значения к типу Число не может быть выполнено».
02
Использование Строка() для имени файла — в число попадают неразрывные пробелы разрядов, файл не находится при последующем обращении.
03
Подстановка числа в текст запроса без ЧРД=. — синтаксическая ошибка запроса из-за запятой в дробной части.
04
Пропуск пробелов в литералах — слитный текст вида «позиций:5» в сообщениях пользователю.

Как выбрать способ под задачу

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

Маршрут решения

Как выбрать действие

Нужно быстро вывести отладочное значениеИспользуйте Строка(Число) и оператор «+»
Строку увидит пользователь или текст будет локализоватьсяПрименяйте СтрШаблон() с параметрами %1, %2
Число денежное или требует заданной точностиОборачивайте его в Формат() с ЧДЦ и ЧГ=0
Формируется имя файла, ключ или служебный идентификаторИспользуйте Формат(Число, "ЧГ=0") и СтрСоединить() для нескольких частей
Число нужно подставить в запросНе конкатенируйте — передавайте значение через Запрос.УстановитьПараметр()
Контрольные точки

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

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

Число отображается в ожидаемом формате, текст читается без склейки слов

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

Ошибка преобразования типов или слитный текст без пробелов

Число внутри итоговой строки
Норма

Нет пробелов между разрядами (для служебных строк), нужный разделитель дробной части

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

Неразрывные пробелы вида «1 500» или запятая вместо точки

Повторное использование строки (разбор, сравнение, имя файла)
Норма

Строка сравнивается и разбирается корректно

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

Сравнение не срабатывает из-за скрытых символов в числе

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

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

Встроенный язык 1С не приводит число к строке автоматически при сложении. Платформа пытается привести строку к числу, и это завершается ошибкой. Преобразуйте число явно: "Текст" + Строка(100).

Чем Строка() отличается от Формат() для числа?

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

Как убрать пробелы между разрядами в числе?

Используйте Формат(Число, "ЧГ=0") — параметр ЧГ=0 отключает группировку разрядов. Это стандартный приём для служебных строк, имён файлов и значений, которые будут разбираться программно.

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

В языке запросов есть функция ПРЕДСТАВЛЕНИЕ(), которая возвращает строковое представление значения, но для чисел её поведение ограничено. Обычно правильнее соединять значения во встроенном языке после выборки, а в запрос передавать числа через параметры.

Что выбрать для сообщения пользователю: конкатенацию или СтрШаблон()?

СтрШаблон() предпочтительнее: шаблон читается целиком, параметры легко переставлять, а текст удобно оборачивать в НСтр() для локализации. Конкатенация оправдана только для самых коротких одноразовых строк.

Как соединить число и строку в имени файла без ошибок?

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

Итог

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

Строку и число в 1С соединяют после явного преобразования: Строка() для простых случаев, Формат() с ЧГ=0 — для точного формата и служебных строк. Для сообщений пользователю удобнее СтрШаблон(), для склейки нескольких частей — СтрСоединить(). В запросы числа передавайте параметрами, а не конкатенацией.