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

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

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

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

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

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

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

Способ 1. Функция Строка() — простое приведение типа

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

Число = 12345.67;

Результат = Строка(Число);

// Результат: "12 345,67" (зависит от региональных настроек)

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

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

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

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

Число = 12345.678;

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

Текст1 = Формат(Число, "ЧДЦ=2; ЧГ=0");

// "12345,68"

// Ведущие нули, общая длина 10 символов

Текст2 = Формат(42, "ЧЦ=10; ЧН=0; ЧВН=");

// "0000000042"

// Представление нуля пустой строкой

Текст3 = Формат(0, "ЧН=");

// ""

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

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

Отдельно обратите внимание на параметр ЧРД: при выгрузке в XML, JSON или CSV часто требуется точка как разделитель дробной части, а не запятая из русской локали. Явно задавайте ЧРД=., чтобы не зависеть от настроек сервера.

Способ 3. ЧислоПрописью() — сумма словами для документов

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

Сумма = 1234.56;

Пропись = ЧислоПрописью(Сумма, "Л=ru_RU",

"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

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

// Без валюты — просто число словами

ТекстЧисла = ЧислоПрописью(125, "Л=ru_RU");

// "Сто двадцать пять"

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

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

Как вывести сумму прописью в печатной форме
  1. 1
    Определите сумму документа в нужной валюте
  2. 2
    Вызовите ЧислоПрописью() с параметрами валюты или используйте типовую функцию конфигурации
  3. 3
    При необходимости сделайте первую букву заглавной: ВРег(Лев(Пропись,1)) + Сред(Пропись,2)
  4. 4
    Подставьте результат в параметр макета печатной формы
  5. 5
    Проверьте печать на суммах с копейками, круглых суммах и сумме 0

Преобразование числа в текст в запросах

В языке запросов 1С прямого аналога функции Формат() нет. Приведение к строке выполняется через ВЫРАЗИТЬ(Поле КАК Строка(...)), но для числовых полей такое приведение ограничено и не всегда доступно — зависит от типа поля и СУБД.

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

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

СуммаТекстом = Формат(Выборка.Сумма, "ЧДЦ=2; ЧГ=0");

// дальнейшая обработка

КонецЦикла;

Если форматирование нужно в СКД (система компоновки данных), используйте вкладку «Наборы данных» → поле → «Оформление» → параметр «Формат», где задаётся та же форматная строка. Это правильнее, чем приводить число к строке в самом запросе: сохраняется возможность итогов и сортировки по числу.

Типичные ошибки и как их избежать

Большинство проблем при преобразовании чисел в текст связаны не с самими функциями, а с неявными зависимостями от окружения и невнимательностью к форматным строкам.

Типичные ошибки
01
Использование Строка(Число) для выгрузки в файл — в строке появляется неразрывный пробел между разрядами, файл не проходит загрузку у получателя
02
Отсутствие параметра ЧГ=0 в Формат() — та же проблема с разделителями групп при обмене данными
03
Зависимость от региональных настроек сервера: на одном сервере разделитель дробной части запятая, на другом точка — задавайте ЧРД явно
04
Сравнение отформатированных строк вместо сравнения чисел: '1 200' и '1200' как строки не равны, хотя число одно
05
Использование ЧислоПрописью() без указания локали Л=ru_RU на сервере с английскими настройками — сумма выводится на английском языке

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

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

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

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

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

Число 0 в печатной форме
Норма

Выводится '0,00' или 'Ноль рублей 00 копеек' по требованиям формы

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

Пустая строка там, где ожидается сумма, или 'рублей 00 копеек' без целой части

Сумма с копейками, например 1000,05
Норма

'1 000,05' в интерфейсе или '1000.05' в файле обмена

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

Потерянные копейки или лишние пробелы внутри числа

Выгружаемый XML/CSV файл
Норма

Числа без пробелов, разделитель дробной части соответствует формату приёмника

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

Неразрывные пробелы, запятая вместо точки, ошибки загрузки у контрагента

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

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

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

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

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

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

Итог

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

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

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

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

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

Почему ЧислоПрописью() выводит сумму на английском языке?

Проверьте второй параметр функции: должно быть указано "Л=ru_RU". Если локаль не задана, используется язык по умолчанию из настроек сеанса или сервера. На серверах с английской локалью без явного параметра сумма выводится по-английски.

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

Задайте параметр ЧДЦ в форматной строке: Формат(Число, "ЧДЦ=2") выведет два знака, дополняя нулями при необходимости. Учтите, что лишние знаки округляются по правилам арифметического округления, а не отсекаются.

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

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

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

ЧислоПрописью() возвращает строку со строчной буквы. Примените конструкцию: ВРег(Лев(Пропись, 1)) + Сред(Пропись, 2). В типовых конфигурациях для этого часто есть готовые функции в общих модулях печати.

Чем отличается Окр() от округления через Формат()?

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