Разработка и Конфигурация · 10 мин
Как привести число к строке в 1С
Способы преобразования числа в строку в 1С: функция Строка(), Формат() с форматной строкой, убирание неразрывных пробелов, ведущих нулей и округление.
Во встроенном языке 1С типы «Число» и «Строка» несовместимы: попытка сложить строку с числом через оператор «+» вызовет ошибку «Преобразование значения к типу Число не может быть выполнено». Поэтому перед конкатенацией, выводом в сообщение, записью в текстовый файл или передачей в HTTP-запрос число нужно явно преобразовать в строку.
Для этого существует два основных инструмента: функция Строка(), которая выполняет преобразование «как есть», и функция Формат(), которая позволяет управлять представлением — количеством знаков после запятой, группировкой разрядов, ведущими нулями и символом валюты. Выбор зависит от того, нужен ли вам контроль над внешним видом результата.
Важный нюанс: при преобразовании больших чисел платформа вставляет разделители групп разрядов — неразрывные пробелы. Такая строка непригодна для машинной обработки (XML, JSON, запросы к API), и её нужно дополнительно очистить. Ниже разобраны все типовые сценарии с готовым кодом.
Базовое преобразование функцией Строка()
Самый простой способ — передать число в функцию Строка(). Платформа вернёт текстовое представление значения с учётом региональных настроек текущего сеанса.
Цена = 1250.5;
ТекстСообщения = "Сумма заказа: " + Строка(Цена) + " руб.";
Сообщить(ТекстСообщения); // Сумма заказа: 1 250,5 руб.
Обратите внимание на результат: число 1250.5 превратилось в «1 250,5». Появился разделитель групп (неразрывный пробел между «1» и «250»), а дробная часть отделена запятой. Для сообщения пользователю это нормально, но для записи в файл или обмена данными — проблема.
Функция Строка() универсальна: она принимает значения любых типов (дата, булево, ссылка на объект), но именно для чисел её поведение чаще всего требует «доводки» — из-за разделителей разрядов и регионального формата десятичной части.
Контроль формата функцией Формат()
Функция Формат(Значение, ФорматнаяСтрока) — основной инструмент, когда нужен предсказуемый результат. Форматная строка состоит из параметров вида Имя=Значение, разделённых точкой с запятой.
Сумма = 1234567.891;
// Без разделителей групп, 2 знака после запятой
Результат = Формат(Сумма, "ЧГ=0; ЧДЦ=2"); // "1234567,89"
// С ведущими нулями, общая длина 10 символов
Результат = Формат(42, "ЧЦ=10; ЧВН="); // "0000000042"
Ключевые параметры форматной строки для чисел:
ЧЦ— общая длина поля вывода (включая разделители);ЧДЦ— количество знаков в дробной части, лишние разряды округляются;ЧГ— группировка разрядов:ЧГ=0отключает разделители;ЧВН— вывод ведущих нулей (параметр без значения);ЧН— строка, выводимая вместо нуля, напримерЧН=0,00;ЧО— отображение отрицательных чисел.
Как убрать неразрывные пробелы из строки
Если строка уже получена с разделителями разрядов (например, из чужого кода или из реквизита формы), их можно удалить функцией СтрЗаменить(). Проблема в том, что разделитель — это неразрывный пробел (код 160), а не обычный пробел (код 32), поэтому заменять нужно именно его.
ЧислоСтрокой = Строка(1234567.89); // "1 234 567,89"
// Удаляем неразрывный пробел по его коду
ЧистаяСтрока = СтрЗаменить(ЧислоСтрокой, Символ(160), "");
// Заодно заменяем обычный пробел — на случай других настроек
ЧистаяСтрока = СтрЗаменить(ЧистаяСтрока, " ", "");
Более надёжный подход — не очищать строку постфактум, а сразу формировать её без разделителей через Формат(Число, "ЧГ=0"). Очистка через СтрЗаменить оправдана только тогда, когда источник строки вам неподконтролен.
Число в строку для обмена данными: XML, JSON, HTTP
При выгрузке в XML и JSON разделитель дробной части должен быть точкой, а разделителей групп быть не должно — это требование форматов. Региональные настройки сеанса могут дать запятую, поэтому явное форматирование обязательно.
// Надёжный вариант для обмена
Функция ЧислоВСтрокуДляОбмена(Знач Число)
Результат = Формат(Число, "ЧГ=0; ЧРД=.; ЧДЦ=4");
Возврат Результат;
КонецФункции
Параметр ЧРД задаёт символ-разделитель дробной части: ЧРД=. гарантирует точку независимо от настроек. Для целых чисел достаточно Формат(Число, "ЧГ=0").
Если используете ЗаписьJSON или сериализацию через ЗаписатьJSON, платформа сама корректно сериализует числа — преобразовывать их в строку вручную не нужно и даже вредно: число станет строковым значением в кавычках, что изменит схему данных.
- 1Определите назначение строки: показ пользователю или машинная обработка
- 2Для пользователя: Строка(Число) или Формат() с нужным ЧДЦ
- 3Для обмена: Формат(Число, "ЧГ=0; ЧРД=.") — без разделителей, с точкой
- 4Проверьте результат на большом числе (более 999) и на отрицательном значении
Специальные сценарии форматирования
Ведущие нули для номеров документов
Когда нужно дополнить номер нулями слева до фиксированной длины (например, «0000123»), используйте сочетание ЧЦ и ЧВН:
НомерДокумента = 123;
СтрокаНомера = Формат(НомерДокумента, "ЧЦ=7; ЧВН=; ЧГ=0"); // "0000123"
Округление при выводе
Параметр ЧДЦ не обрезает, а округляет значение по правилам арифметики. Если нужно именно отсечение лишних разрядов, сначала примените Цел() с предварительным умножением, либо округлите функцией Окр() до форматирования — так поведение будет явным и предсказуемым.
Значение = 19.999;
Текст = Формат(Значение, "ЧДЦ=2; ЧГ=0"); // "20,00" — округление!
Представление нуля и пустых значений
По умолчанию Формат(0, ...) может вернуть пустую строку в некоторых сочетаниях параметров. Чтобы ноль отображался явно, задайте ЧН=0 или ЧН=0,00. Это важно в печатных формах, где пустая ячейка вместо нуля выглядит как ошибка.
Сравнение вариантов
Быстро и коротко. Подходит для сообщений пользователю. Не подходит для обмена: зависит от региональных настроек, добавляет разделители разрядов
Полный контроль: разряды, нули, разделители, представление нуля. Требует знания параметров, но это стандарт для серьёзного кода
Только как «заплатка» для строк, полученных извне. Хрупко: зависит от того, какой именно символ-разделитель использовался
Проверка результата и обратное преобразование
После преобразования полезно убедиться, что строка соответствует ожиданиям: не содержит пробелов, имеет правильный разделитель дробной части и корректно преобразуется обратно в число. Обратное преобразование выполняется через Число(Строка) — но оно вызовет исключение, если строка содержит недопустимые символы, поэтому оборачивайте его в Попытка...Исключение.
СтрокаЧисла = Формат(Значение, "ЧГ=0; ЧРД=.");
Попытка
Проверка = Число(СтрЗаменить(СтрокаЧисла, ".", ","));
// или Число(СтрокаЧисла) — зависит от настроек сеанса
Исключение
Сообщить("Строка не является числом: " + СтрокаЧисла);
КонецПопытки;
Для проверки строки без исключений можно использовать ОписаниеТипов с методом ПривестиЗначение() — он вернёт Неопределено или значение по умолчанию вместо ошибки, что удобно при пакетной обработке данных.
Как проверить результат
Строка без пробелов: «1234567,89»
В строке пробелы: «1 234 567,89»
Разделитель — точка: «19.99»
Запятая или непредсказуемый символ из настроек сеанса
Число(Строка) возвращает исходное значение
Исключение или потеря точности
Частые вопросы
Почему Строка(Число) даёт запятую, а мне нужна точка?
Функция Строка() использует региональные настройки текущего сеанса, где в русской локали разделитель дробной части — запятая. Чтобы гарантированно получить точку, используйте Формат(Число, "ЧГ=0; ЧРД=."). Параметр ЧРД явно задаёт символ-разделитель независимо от настроек.
Как преобразовать число в строку в запросе 1С?
В языке запросов прямого аналога Строка() нет. Используйте функцию ПОДСТРОКА с приведением, либо функцию ПРЕДСТАВЛЕНИЕ(Поле) — она возвращает строковое представление значения. Для чисел чаще применяют ВЫРАЗИТЬ(Поле КАК Строка(20)), но это работает не во всех СУБД, поэтому надёжнее преобразовывать уже в коде после выгрузки результата запроса.
Чем опасна конкатенация числа и строки без преобразования?
Оператор «+» между строкой и числом вызывает ошибку времени выполнения, и код останавливается. В отладчике это легко поймать, но в редко выполняемых ветках кода (обработчики ошибок, регламентные задания) такая ошибка может проявиться только в рабочей базе. Всегда оборачивайте число в Строка() или Формат().
Как вывести число прописью?
Для суммы прописью используется функция ЧислоПрописью(Число, ПараметрыПредметаИсчисления, ФорматнаяСтрока). Она формирует текст вроде «сто двадцать три рубля 45 копеек». Параметры предмета исчисления задают род и наименование валюты, форматная строка — язык и денежный формат.
Нужно ли преобразовывать число в строку при записи в JSON?
Нет. При использовании ЗаписьJSON и метода ЗаписатьЗначение платформа сама сериализует число как числовой литерал JSON. Если вы предварительно переведёте его в строку, в JSON уйдёт строковое значение в кавычках, и приёмник получит другой тип данных — это частая причина ошибок интеграции.
Как убрать пробелы из строки, если неизвестно, какой символ использован как разделитель?
Удалите оба варианта последовательно: сначала СтрЗаменить(Строка, Символ(160), "") для неразрывного пробела, затем СтрЗаменить(Строка, " ", "") для обычного. Дополнительно можно проверить символ с кодом 8194 (типографский пробел), который встречается в некоторых локалях.
Что важно запомнить
Строка() — для быстрого вывода пользователю, Формат() — для всего остального. Для обмена данными всегда используйте ЧГ=0 и ЧРД=., чтобы исключить неразрывные пробелы и зависимость от региональных настроек. Проверяйте результат на больших и отрицательных числах.