Разработка и Конфигурация · 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"
Сумма = 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"), тогда постобработка вообще не нужна.
Проверить наличие скрытых символов помогает вывод строки в сообщение с явными границами, например "[" + Стр + "]", — так сразу видно лишние пробелы и переносы.
Особые случаи: NULL, неопределено и даты
При работе с запросами и выборками в переменной может оказаться не число, а NULL или Неопределено. Попытка сложить такое значение со строкой вызовет ошибку выполнения. Перед преобразованием стоит проверить значение:
Если ЗначениеЗаполнено(Сумма) Тогда
Стр = Формат(Сумма, "ЧГ=0; ЧДЦ=2");
Иначе
Стр = "0,00";
КонецЕсли;
В запросах аналогичную защиту даёт функция ЕСТЬNULL(Поле, 0). Это особенно важно в левых соединениях, где отсутствие связанной записи вернёт NULL.
Отдельно упомянем даты: их тоже часто нужно представить строкой, и там действует та же функция Формат(), но с параметром ДФ (например, Формат(Дата, "ДФ=yyyy-MM-dd")). Не путайте параметры чисел и дат — они несовместимы.
Как выбрать способ
Проверка результата и отладка
После преобразования полезно убедиться, что строка соответствует ожиданиям. Минимальный набор проверок: длина строки, отсутствие пробелов и неразрывных пробелов, корректный разделитель дробной части.
Стр = Формат(Сумма, "ЧРД=.; ЧГ=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 и Неопределено.