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

Администрирование · 9 мин

Как поменять запятые на точки в 1С

Как заменить запятую на точку в 1С: настройка разделителя в Windows, функция СтрЗаменить, форматные строки и исправление загрузки данных из Excel и CSV.

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

Способ решения зависит от задачи. Разовую замену в строке выполняют функцией СтрЗаменить, массовую проблему ввода решают региональными настройками Windows, а выгрузку во внешние системы — форматной строкой или преобразованием при записи файла. Ниже разобраны все варианты: от пользовательских настроек до кода для разработчика.

Определите, где именно нужна замена

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

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

Как выбрать действие

Числа из Excel или CSV загружаются как текст или с ошибкойПреобразуйте строку функцией СтрЗаменить перед переводом в число
Выгрузка во внешнюю систему требует точку как разделительИспользуйте Формат(Число, "ЧРД=.") или замену при записи файла
Пользователь хочет вводить дробные числа точкой с цифрового блокаИзмените разделитель в региональных настройках Windows
Нужно исправить уже введённые текстовые данные в базеВыполните групповую обработку с заменой и проверкой результата

Отдельный случай — веб-сервисы и обмены в форматах JSON и XML. Там числовые значения по стандарту записываются с точкой, и если выгружать число «как есть» через преобразование в строку, русская региональная настройка подставит запятую, и внешняя система отвергнет файл.

Замена запятой на точку функцией СтрЗаменить

Универсальный способ для строковых значений — встроенная функция СтрЗаменить. Она заменяет все вхождения подстроки и работает одинаково в тонком клиенте, веб-клиенте и на сервере.

bsl
СтрокаСЗапятой = "123,45";
СтрокаСТочкой = СтрЗаменить(СтрокаСЗапятой, ",", ".");
// Результат: "123.45"

// Преобразование в число после замены
Попытка
    ЧисловоеЗначение = Число(СтрокаСТочкой);
Исключение
    Сообщить("Не удалось преобразовать: " + СтрокаСЗапятой);
КонецПопытки;

Типичный сценарий — загрузка прайса из CSV-файла, где цены записаны с запятой, а вы планируете дальнейшие вычисления или выгрузку с точкой. Замену выполняют сразу после чтения строки из файла, до преобразования в число. Если в данных встречаются и точки, и запятые, сначала определите, какой символ является разделителем дробной части, а какой — разделителем разрядов: строка «1 234,56» требует сначала удалить пробелы, потом заменить запятую.

Обратите внимание: функция Число() в 1С понимает разделитель согласно региональным настройкам сеанса. Если в настройках запятая, то Число("123.45") вызовет ошибку. Поэтому при загрузке данных с точкой замену иногда делают в обратную сторону — точку на запятую — чтобы корректно получить число. Направление замены всегда зависит от того, что требуется на выходе: число для расчётов или строка для файла.

Выгрузка чисел с точкой через форматную строку

Когда нужно записать число в файл обмена с точкой в качестве разделителя, правильнее использовать не замену символов, а функцию Формат с явным указанием разделителя дробной части. Это надёжнее, потому что не зависит от региональных настроек конкретного сервера или компьютера.

bsl
Цена = 1234.5;
СтрокаДляФайла = Формат(Цена, "ЧРД=.; ЧГ=0");
// Результат: "1234.5" без разделителей групп разрядов

Параметр ЧРД задаёт символ разделителя дробной части, а ЧГ=0 отключает группировку разрядов, чтобы в выгрузке не появились пробелы между тысячами. Именно пробелы-разделители — вторая частая причина отказа внешних систем принимать файл: число «1 234.5» многие парсеры не распознают.

Для выгрузки в XML и JSON проверяйте требования приёмника. В стандартных механизмах сериализации 1С числа обычно записываются корректно автоматически, но при ручном формировании текста файла через ЗаписьТекста или шаблоны ответственность за формат лежит на разработчике.

Настройка разделителя в Windows для ввода данных

Если задача в том, чтобы операторы вводили дробные числа точкой с цифрового блока клавиатуры, менять нужно не 1С, а региональные настройки Windows. 1С берёт разделитель дробной части из операционной системы.

Путь в Windows: Панель управления → «Регион» → кнопка «Дополнительные параметры» → поле «Разделитель целой и дробной части». После смены символа перезапустите сеанс 1С — настройки подхватываются при старте. Учтите, что изменение влияет на все программы на компьютере: Excel, калькулятор и другие приложения тоже переключатся на точку.

В клиент-серверном варианте важно помнить: код, выполняемый на сервере, использует региональные настройки сервера, а не компьютера пользователя. Поэтому серверные обмены должны полагаться на явные форматные строки, а не на настройки ОС.

Загрузка из Excel и CSV: типовой разбор ошибок

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

Типичные ошибки
01
Преобразование Число() без предварительной нормализации строки — при несовпадении разделителя возникает ошибка или неверное значение
02
Замена только запятой при наличии пробелов-разделителей разрядов — строка «1 234.56» после замены всё равно не станет числом
03
Замена всех точек и запятых подряд — в строках с датами или артикулами это портит данные
04
Исправление данных в файле Excel вручную вместо обработки при загрузке — при следующей выгрузке от поставщика проблема вернётся

Надёжный алгоритм загрузки: прочитать значение как строку, удалить пробелы и неразрывные пробелы (Символ(160)), определить разделитель по последнему вхождению точки или запятой, привести строку к виду, который примет функция Число(), и только потом преобразовывать. Все преобразования оборачивайте в Попытка/Исключение с записью проблемных строк в протокол — так вы не потеряете данные при частичных ошибках.

Групповое исправление уже введённых данных

Если ошибочные значения уже попали в базу — например, в текстовом реквизите хранятся числа с запятой, а нужно с точкой, — потребуется сервисная обработка. В типовых конфигурациях есть «Групповое изменение реквизитов» (раздел «Администрирование» → «Обслуживание»), но она выполняет замену значений целиком, а не замену символов внутри строки. Для посимвольной замены нужна обработка с кодом.

Логика обработки проста: запросом выбрать объекты, где реквизит содержит запятую, в цикле выполнить СтрЗаменить и записать объект. Обязательные меры безопасности: сделать резервную копию или сначала прогнать обработку в режиме «только показать, что будет изменено», выполнять запись в транзакции и ограничить выборку тестовым подмножеством.

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

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

Количество изменённых объектов
Норма

Совпадает с числом записей, содержавших запятую

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

Изменено больше записей, чем ожидалось — задеты лишние данные

Содержимое реквизита после обработки
Норма

Десятичный разделитель — точка, остальные символы не изменились

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

Пропали пробелы, изменились даты или артикулы

Работа связанных отчётов и обменов
Норма

Отчёты открываются, выгрузки принимаются приёмником

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

Ошибки преобразования чисел в отчётах или отказ внешней системы

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

Можно ли поменять запятую на точку только для одной базы 1С, не трогая Windows?

Да, если речь о формировании файлов и строк — используйте Формат с параметром ЧРД или СтрЗаменить в коде. Изменить же разделитель ввода в полях только для одной базы штатными средствами нельзя: он берётся из региональных настроек сеанса, которые определяются операционной системой.

Почему Число("123.45") выдаёт ошибку, хотя значение выглядит правильно?

Функция Число() ожидает разделитель дробной части согласно региональным настройкам сеанса. При русских настройках это запятая, поэтому точка вызывает ошибку преобразования. Замените точку на запятую перед преобразованием или используйте обработку с явным разбором строки.

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

Используйте форматную строку с параметром ЧГ=0, например: Формат(Сумма, "ЧРД=.; ЧГ=0"). Это отключит группировку разрядов, и число запишется как «1234.5» без пробелов и неразрывных пробелов.

Замена затронет уже проведённые документы?

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

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

Определяйте разделитель по позиции последнего символа: как правило, дробный разделитель стоит ближе к концу числа и после него одна-две цифры. Символ, идущий раньше и повторяющийся, — разделитель разрядов, его нужно удалить. Универсальной заменой «всё сразу» такие файлы обрабатывать нельзя — это искажает значения.

Итог

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

Для строк используйте СтрЗаменить, для выгрузки чисел — Формат с ЧРД=., для ввода — региональные настройки Windows. Перед массовой обработкой делайте копию и проверяйте результат на тестовой выборке, а серверные обмены никогда не привязывайте к настройкам ОС.