Довольно часто при разработке в 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");
Проанализируем ситуацию, когда замена запятой на точку требуется для выгрузки данных в сторонние системы. В 1С существует специальная функция XMLСтрока, которая является стандартом («best practice») для таких задач.
При вызове XMLСтрока(ВашеЧисло) платформа автоматически преобразует числовое значение в строку по международным стандартам XML. Разделителем дробной части всегда будет выступать точка, и система гарантированно уберет все пробелы-разделители между тысячами.
СтрокаДляВыгрузки = XMLСтрока(1000.56); // Вернет строку "1000.56"
Что делать, если мы получаем извне текст в виде "10.56" и нам нужно совершать с ним математические операции? Не нужно писать код для замены точки обратно на запятую!
Встроенная функция преобразования Число отлично справляется с обеими ситуациями:
Число("10.56")Число("10,56")В подавляющем большинстве случаев обе конструкции успешно вернут числовой тип независимо от того, какой разделитель был в строке.
Напоследок отметим, что отображение чисел на формах по умолчанию (через запятую или точку) зависит от региональных установок информационной базы. Если в разделе «Региональные установки» установить точку в качестве разделителя дробной части, то все числа в интерфейсе будут выводиться с точкой автоматически, и вам не придется использовать программное форматирование для визуального отображения.