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

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

1С: как преобразовать число в строку и задать нужный формат

Как в 1С преобразовать число в строку: функции Формат() и Строка(), форматная строка ЧН, ЧГ, ЧДЦ, ЧРД, типовые ошибки и примеры кода с пояснениями.

Задача вывести число в виде строки возникает в 1С постоянно: при формировании печатных форм, текстовых файлов обмена, сообщений пользователю, наименований документов и номенклатуры. Число 1234,5 по умолчанию превращается в строку «1 234,5» с неразрывным пробелом в качестве разделителя групп — и это часто ломает выгрузки, где пробелы недопустимы.

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

Ниже разобраны синтаксис обеих функций, ключевые параметры форматной строки (ЧГ, ЧДЦ, ЧН, ЧРД), типовые сценарии от выгрузки в CSV до суммы прописью, а также ошибки, которые чаще всего допускают разработчики.

Функция Строка(): простое преобразование и его ловушки

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

Число = 1234567.89;

Результат = Строка(Число); // "1 234 567,89" — с неразрывными пробелами

Главная ловушка — именно неразрывный пробел. Визуально строка выглядит нормально, но при выгрузке в файл, передаче в веб-сервис или сравнении строк этот символ ломает обработку на принимающей стороне. Функция Число() при обратном преобразовании такой строки тоже может вернуть ошибку, если строка пришла извне.

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

Функция Формат(): синтаксис и параметры форматной строки

Функция Формат(Значение; ФорматнаяСтрока) — основной инструмент управления представлением чисел. Второй параметр — строка вида «Параметр=Значение; Параметр=Значение», где параметры разделяются точкой с запятой.

Формат(1234567.891; "ЧГ=0; ЧДЦ=2"); // "1234567,89"

Формат(0; "ЧН=0,00"); // "0,00" вместо пустой строки

Формат(42; "ЧЦ=5; ЧВН=1"); // "00042" — с ведущими нулями

Ключевые параметры для чисел:

  • ЧЦ — общее количество отображаемых знаков (целая и дробная части вместе с разделителем);
  • ЧДЦ — количество знаков дробной части; лишние цифры округляются;
  • ЧГ — группировка разрядов целой части; значение 0 отключает разделение групп (убирает неразрывные пробелы);
  • ЧН — строка, выводимая вместо нулевого значения;
  • ЧРД — символ разделителя целой и дробной части (например, точка);
  • ЧРГ — символ разделителя групп разрядов;
  • ЧВН — вывод ведущих нулей до указанной в ЧЦ длины;
  • ЧС — сдвиг разрядов (деление на 10^N при отображении).

Убираем пробелы и задаём точку как разделитель

Самая частая практическая задача — получить «машиночитаемое» число: без пробелов между разрядами и с точкой вместо запятой. Такой формат требуют XML, JSON, CSV-обмены и большинство API.

Формат(Сумма; "ЧГ=0; ЧРД=.; ЧДЦ=2"); // "1234567.89"

Порядок параметров в строке значения не имеет — платформа разбирает их по именам. Важно не забыть ЧГ=0: без него даже при заданном ЧРД пробелы между группами останутся.

Если нужен фиксированный разделитель групп, например апостроф или обычный пробел, используйте ЧРГ. Учтите, что ЧГ=0 и ЧРГ взаимоисключающие по смыслу: первый отключает группировку, второй задаёт её символ.

Как получить число для выгрузки в файл
  1. 1
    Определите требования приёмника: разделитель дробной части, допустимость пробелов, число знаков после запятой
  2. 2
    Составьте форматную строку, например ЧГ=0; ЧРД=.; ЧДЦ=2
  3. 3
    Вызовите Формат(Значение; ФорматнаяСтрока) и запишите результат в файл
  4. 4
    Проверьте выгрузку на граничных значениях: ноль, отрицательное число, значение без дробной части

Типовые сценарии: ноль, ведущие нули, округление

Замена нуля пустой строкой или текстом

В отчётах и печатных формах нулевые значения часто нужно скрыть. Параметр ЧН задаёт строку, которая выводится вместо нуля: Формат(Остаток; "ЧН=") вернёт пустую строку для нулевого остатка. Если задать ЧН=—, вместо нуля выведется тире.

Ведущие нули для кодов и номеров

Для кодов фиксированной длины (например, «00042») применяют связку ЧЦ=5; ЧВН=1. Это удобно при формировании штрихкодов, номеров ГТД и идентификаторов для обмена, где длина поля строго регламентирована.

Округление при выводе

Параметр ЧДЦ округляет значение при отображении по правилам арифметического округления, но само исходное число не меняется. Если округлённое значение нужно для дальнейших расчётов, используйте функцию Окр() до форматирования, иначе сумма отформатированных строк может не сойтись с итогом.

Число прописью и шаблоны вывода

Для сумм в печатных формах документов в 1С есть отдельный механизм — функция ЧислоПрописью(). Она формирует представление вида «сто двадцать три рубля 45 копеек» с учётом склонений и параметров предмета исчисления.

СуммаСтрокой = ЧислоПрописью(123.45; "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

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

Для произвольных шаблонов вида «Итого: 1 234,56 руб.» удобна функция СтрШаблон(): СтрШаблон("Итого: %1 руб.", Формат(Сумма; "ЧДЦ=2")). Она заменяет подстановки %1, %2 и так далее на переданные значения, что делает код читаемее длинной конкатенации.

Чем преобразовывать число в строку

Строка()

Быстрое преобразование без настроек. Подходит для отладки и сообщений, но опасна в обменах из-за неразрывных пробелов и региональных настроек.

Формат()

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

ЧислоПрописью()

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

СтрШаблон()

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

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

Типичные ошибки
01
Забыли ЧГ=0 — в строку попали неразрывные пробелы, файл обмена отклонён приёмником
02
Используют СтрЗаменить() для удаления пробелов вместо ЧГ=0 — лишний код и риск зацепить значащие символы
03
Округляют через ЧДЦ, а потом суммируют отформатированные строки — итог не сходится с первичными данными
04
Полагаются на региональные настройки сервера — на другом сервере разделитель дробной части оказался другим
05
Применяют Число() к строке с пробелами из внешнего источника — получают исключение при загрузке

Отдельная группа проблем — обратное преобразование. Функция Число() строга: она не принимает неразрывные пробелы и требует «правильный» разделитель. Перед вызовом строку из внешнего источника стоит очистить: заменить неразрывный пробел (Символ(160)) на пустую строку и привести разделитель к ожидаемому.

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

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

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

Строка с числом для файла обмена
Норма

Только цифры, минус и один разделитель дробной части

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

Пробелы любого вида, запятая вместо ожидаемой точки

Нулевое значение в отчёте
Норма

Пустая строка или заданный в ЧН текст

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

Отображается «0» или «0,00» там, где должно быть пусто

Код фиксированной длины
Норма

Все коды одинаковой длины с ведущими нулями

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

Длина «плавает», ведущих нулей нет

Сумма прописью в документе
Норма

Копейки указаны цифрами, валюта и род соответствуют документу

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

Неверные окончания, пропущены копейки

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

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

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

Как вывести число с точкой вместо запятой?

Задайте параметр ЧРД в форматной строке: Формат(Число; "ЧРД=.; ЧГ=0"). Точка в значении параметра указывается как обычный символ, кавычки вокруг неё внутри форматной строки не нужны.

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

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

Как вывести число с ведущими нулями, например 00042?

Используйте связку ЧЦ и ЧВН: Формат(42; "ЧЦ=5; ЧВН=1") вернёт «00042». ЧЦ задаёт общую длину строки, ЧВН=1 включает дополнение нулями слева.

Почему Число() выдаёт ошибку на строке из файла?

Чаще всего в строке есть неразрывный пробел (символ 160), неправильный разделитель дробной части или посторонние символы. Перед вызовом Число() очистите строку: СтрЗаменить(Стр; Символ(160); "") и приведите разделитель к ожидаемому виду.

Меняет ли Формат() само число?

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

Итог

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

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