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

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

Как преобразовать число в строку в 1С

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

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

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

Выбор способа зависит от задачи: вывод на экран, передача в XML/JSON, конкатенация с другим текстом или подготовка номера документа. Ниже разобраны все основные варианты с примерами кода, ограничениями и типичными ошибками.

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

Функция Строка() принимает значение любого типа и возвращает его строковое представление. Для числа синтаксис предельно прост:

Число = 12345.67;

Результат = Строка(Число); // "12 345,67"

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

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

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

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

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

Наиболее востребованные параметры для чисел:

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

Пример форматирования суммы без разделителей групп и с двумя знаками после запятой:

Сумма = 1234567.8;

Результат = Формат(Сумма, "ЧГ=0; ЧДЦ=2"); // "1234567,80"

Пример с точкой в качестве разделителя дробной части — типичная задача при выгрузке в JSON или XML:

Значение = 1234.5;

Результат = Формат(Значение, "ЧРД=.; ЧГ=0; ЧДЦ=2"); // "1234.50"

bsl
Сумма = 1234567.891;
СтрБезПробелов = Формат(Сумма, "ЧГ=0; ЧДЦ=2");        // 1234567,89
СтрДляОбмена  = Формат(Сумма, "ЧРД=.; ЧГ=0; ЧДЦ=2");   // 1234567.89
СтрСНулями    = Формат(42, "ЧЦ=5; ЧВН=");              // 00042

Число прописью: функция ЧислоПрописью

Для печатных форм договоров, счетов и накладных часто требуется сумма прописью. Для этого служит функция ЧислоПрописью():

Сумма = 1520.75;

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

// "Одна тысяча пятьсот двадцать рублей 75 копеек"

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

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

Дополнение числа нулями слева

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

Это делается через параметры ЧЦ (общая длина) и ЧВН (вывод ведущих нулей):

Номер = 42;

Код = Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); // "000042"

Обратите внимание: параметр ЧВН указывается с пустым значением. Если его опустить, лидирующие нули выводиться не будут, и строка получится короче заданной длины.

Альтернатива — ручная конкатенация с последующим отбором правых символов через Прав(), но вариант с Формат() короче и читаемее.

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

Строка()

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

Формат()

Полный контроль: разделители, дробная часть, ведущие нули. Рекомендуется для обмена данными и файлов.

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

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

Конкатенация ("" + Число)

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

Удаление пробелов из строкового представления числа

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

Стр = Строка(1234567); // "1 234 567"

Стр = СтрЗаменить(Стр, Символ(160), "");

Стр = СтрЗаменить(Стр, " ", "");

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

Проверить наличие скрытых символов помогает вывод строки в сообщение с явными границами, например "[" + Стр + "]", — так сразу видно лишние пробелы и переносы.

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

Особые случаи: NULL, неопределено и даты

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

Если ЗначениеЗаполнено(Сумма) Тогда

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

Иначе

Стр = "0,00";

КонецЕсли;

В запросах аналогичную защиту даёт функция ЕСТЬNULL(Поле, 0). Это особенно важно в левых соединениях, где отсутствие связанной записи вернёт NULL.

Отдельно упомянем даты: их тоже часто нужно представить строкой, и там действует та же функция Формат(), но с параметром ДФ (например, Формат(Дата, "ДФ=yyyy-MM-dd")). Не путайте параметры чисел и дат — они несовместимы.

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

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

Нужно показать число пользователю в сообщении или заголовкеИспользуйте Строка() или Формат() с ЧДЦ
Строка передаётся в файл, веб-сервис, JSON/XMLФормат(Число, "ЧРД=.; ЧГ=0; ЧДЦ=N") — точка, без пробелов
Нужен код фиксированной длины с нулями слеваФормат(Число, "ЧЦ=N; ЧВН=; ЧГ=0")
Требуется сумма прописью в печатной формеЧислоПрописью() или готовая функция типовой конфигурации

Проверка результата и отладка

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

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

Если СтрНайти(Стр, " ") > 0 Или СтрНайти(Стр, Символ(160)) > 0 Тогда

// в строке остались пробелы — форматная строка задана неверно

КонецЕсли;

Для обратной проверки — что строка действительно представляет число, — используется конструкция ОписаниеТипа("Число") с методом ПривестиЗначение(): если приведение невозможно, вернётся 0 без ошибки, что позволяет безопасно валидировать ввод.

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

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

Разделители групп
Норма

Строка не содержит пробелов и символа 160

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

Внутри строки видны пробелы или «склеенные» при копировании символы

Разделитель дробной части
Норма

Тот символ, который ждёт приёмник (точка или запятая)

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

Разделитель зависит от настроек сервера и меняется между средами

Длина строки с ведущими нулями
Норма

Длина равна значению ЧЦ

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

Строка короче — не задан параметр ЧВН

FAQ

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

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

Как убрать пробелы в строке, полученной из числа?

Лучше не убирать, а не допускать их появления: используйте Формат(Число, "ЧГ=0"). Если строка уже есть, удалите символы через СтрЗаменить(Стр, Символ(160), "") и СтрЗаменить(Стр, " ", "").

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

Передайте в Формат() параметр ЧРД=. — например: Формат(Значение, "ЧРД=.; ЧГ=0; ЧДЦ=2"). Это стандартный приём при выгрузке в JSON, XML и обмене с внешними системами.

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

Используйте Формат(Число, "ЧЦ=6; ЧВН=; ЧГ=0"), где ЧЦ — требуемая общая длина. Например, число 42 превратится в "000042".

Что вернёт Строка() для значения NULL из запроса?

Попытка преобразовать NULL напрямую приведёт к ошибке или непредсказуемому результату в зависимости от контекста. Обрабатывайте NULL в запросе через ЕСТЬNULL(Поле, 0) либо проверяйте значение в коде перед преобразованием.

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

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

Итог

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

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