Разработка и Конфигурация · 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Определите сумму документа в нужной валюте
- 2Вызовите ЧислоПрописью() с параметрами валюты или используйте типовую функцию конфигурации
- 3При необходимости сделайте первую букву заглавной: ВРег(Лев(Пропись,1)) + Сред(Пропись,2)
- 4Подставьте результат в параметр макета печатной формы
- 5Проверьте печать на суммах с копейками, круглых суммах и сумме 0
Преобразование числа в текст в запросах
В языке запросов 1С прямого аналога функции Формат() нет. Приведение к строке выполняется через ВЫРАЗИТЬ(Поле КАК Строка(...)), но для числовых полей такое приведение ограничено и не всегда доступно — зависит от типа поля и СУБД.
Практический подход такой: не преобразовывайте числа в текст в запросе без необходимости. Выберите числовое значение, а форматирование выполните на встроенном языке при обходе результата запроса или в макете табличного документа, где у ячейки можно задать формат через свойство «Формат».
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СуммаТекстом = Формат(Выборка.Сумма, "ЧДЦ=2; ЧГ=0");
// дальнейшая обработка
КонецЦикла;
Если форматирование нужно в СКД (система компоновки данных), используйте вкладку «Наборы данных» → поле → «Оформление» → параметр «Формат», где задаётся та же форматная строка. Это правильнее, чем приводить число к строке в самом запросе: сохраняется возможность итогов и сортировки по числу.
Типичные ошибки и как их избежать
Большинство проблем при преобразовании чисел в текст связаны не с самими функциями, а с неявными зависимостями от окружения и невнимательностью к форматным строкам.
Ещё одна распространённая ситуация — округление. Функция Формат() с параметром ЧДЦ округляет значение при выводе, но само число не меняется. Если дальше строка используется для расчётов или проверок контрольных сумм, округлите значение явно через Окр() до форматирования, чтобы строка и число гарантированно совпадали.
Проверка результата преобразования
После внедрения преобразования проверьте его на граничных значениях: ноль, отрицательные числа, очень большие суммы, значения с копейками и без, числа с тремя и более знаками после запятой. Именно на границах всплывают ошибки округления и форматирования.
Как проверить результат
Выводится '0,00' или 'Ноль рублей 00 копеек' по требованиям формы
Пустая строка там, где ожидается сумма, или 'рублей 00 копеек' без целой части
'1 000,05' в интерфейсе или '1000.05' в файле обмена
Потерянные копейки или лишние пробелы внутри числа
Числа без пробелов, разделитель дробной части соответствует формату приёмника
Неразрывные пробелы, запятая вместо точки, ошибки загрузки у контрагента
Для отладки удобно выводить промежуточные значения через Сообщить() или смотреть их в табло отладчика, проверяя длину строки: лишние неразрывные пробелы сразу видны по неожиданной длине результата.
Какой способ выбрать
Как выбрать способ
Универсальное правило: число должно оставаться числом как можно дольше. Преобразовывайте его в текст в самой последней точке — непосредственно перед выводом пользователю или записью в файл. Это сохраняет точность расчётов, корректную сортировку и итоги.
Что важно запомнить
Строка() — только для вывода пользователю, Формат() — для контролируемого представления и обмена данными, ЧислоПрописью() — для сумм словами в документах. Всегда задавайте ЧГ=0 и ЧРД явно при выгрузке в файлы и проверяйте результат на нуле, копейках и больших числах.
Частые вопросы
Как убрать пробелы между разрядами при преобразовании числа в строку?
Используйте Формат(Число, "ЧГ=0") — параметр ЧГ=0 отключает группировку разрядов. Функция Строка() такого параметра не имеет, поэтому для технических целей она не подходит. Дополнительно можно применить СтрЗаменить() для удаления неразрывных пробелов, но правильнее сразу формировать строку без них.
Почему ЧислоПрописью() выводит сумму на английском языке?
Проверьте второй параметр функции: должно быть указано "Л=ru_RU". Если локаль не задана, используется язык по умолчанию из настроек сеанса или сервера. На серверах с английской локалью без явного параметра сумма выводится по-английски.
Как вывести число с фиксированным количеством знаков после запятой?
Задайте параметр ЧДЦ в форматной строке: Формат(Число, "ЧДЦ=2") выведет два знака, дополняя нулями при необходимости. Учтите, что лишние знаки округляются по правилам арифметического округления, а не отсекаются.
Можно ли преобразовать число в текст прямо в запросе 1С?
Полноценного форматирования в языке запросов нет. Рекомендуется выбирать числовое значение и форматировать его на встроенном языке при обходе результата, либо задавать формат в макете табличного документа или в настройках поля СКД.
Как сделать первую букву суммы прописью заглавной?
ЧислоПрописью() возвращает строку со строчной буквы. Примените конструкцию: ВРег(Лев(Пропись, 1)) + Сред(Пропись, 2). В типовых конфигурациях для этого часто есть готовые функции в общих модулях печати.
Чем отличается Окр() от округления через Формат()?
Формат() с ЧДЦ округляет только отображаемое значение — исходное число не меняется. Окр() возвращает новое округлённое число, которое можно использовать в дальнейших расчётах. Если округлённое значение участвует в проверках или суммах, применяйте Окр() до форматирования.