Как программно заменить запятую на точку в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Довольно часто при разработке в 1С возникает необходимость заменить запятую на точку. Например, мы получаем число 1,5, а нам нужно, чтобы система выдала 1.5. Или в случае с числом 10,56 необходимо получить 10.56. Обычно такая потребность возникает при выгрузке данных в сторонние системы (в файлы XML, TXT, CSV), при отправке HTTP-запросов или просто при особом формате вывода информации пользователю.

Рассмотрим подробнее несколько способов решения этой задачи, проанализируем частые ошибки и выберем наиболее оптимальные инструменты платформы 1С.

Использование функции СтрЗаменить для строк

Если исходные данные хранятся в переменной с типом «Строка», то самым простым решением будет использование встроенной функции СтрЗаменить. Разберем по шагам, как это работает.

Синтаксис функции выглядит следующим образом:

Результат = СтрЗаменить(ИсходнаяСтрока, "ЧтоМеняем", "НаЧтоМеняем");

В нашем случае код для замены запятой на точку будет выглядеть так:

СтрокаБезЗапятой = СтрЗаменить(СтрокаБезТочки, ",", ".");

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

Идеологически правильное решение: функция Формат

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

ПредставлениеЧисла = Формат(НашеЧисло, "ЧРД=.");

Здесь параметр ЧРД отвечает за символ разделителя дробной части. В данном случае мы явно указываем точку. Однако в этом решении кроется потенциальная ошибка, которая может сломать интеграцию.

Выясним причину: если число окажется больше 999 (например, 1000,56), то 1С по умолчанию разобьет тысячи пробелом, и результат будет выглядеть как "1 000.56". Чтобы получить слитное число "1000.56", форматную строку обязательно нужно дополнить параметром ЧГ=0, который отключает группировку разрядов.

Правильный код с учетом всех нюансов:

ПредставлениеЧисла = Формат(НашеЧисло, "ЧРД=.; ЧГ=0");

Также форматную строку можно расширить, указав длину и точность. Например, если нам нужны 15 знаков с 2 знаками после запятой (точки) и без группировки:

Результат = Формат(НашеЧисло, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");

Идеальное решение для интеграций: функция XMLСтрока

Проанализируем ситуацию, когда замена запятой на точку требуется для выгрузки данных в сторонние системы. В 1С существует специальная функция XMLСтрока, которая является стандартом («best practice») для таких задач.

При вызове XMLСтрока(ВашеЧисло) платформа автоматически преобразует числовое значение в строку по международным стандартам XML. Разделителем дробной части всегда будет выступать точка, и система гарантированно уберет все пробелы-разделители между тысячами.

СтрокаДляВыгрузки = XMLСтрока(1000.56); // Вернет строку "1000.56"

Обратное преобразование: строка в число

Что делать, если мы получаем извне текст в виде "10.56" и нам нужно совершать с ним математические операции? Не нужно писать код для замены точки обратно на запятую!

Встроенная функция преобразования Число отлично справляется с обеими ситуациями:

  1. Число("10.56")
  2. Число("10,56")

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

Региональные установки базы

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

← На главную