В процессе разработки на платформе 1С:Предприятие программисты часто сталкиваются с тем, что при преобразовании числа в строку система автоматически добавляет неразрывный пробел в качестве разделителя групп разрядов (например, 2 500 вместо 2500). Это поведение удобно для отображения данных в интерфейсе пользователю, но создает критические ошибки при передаче данных во внешние системы, формировании имен файлов или записи данных в JSON/XML. Разберем подробно, как решить эту задачу различными методами.
Самый правильный и гибкий способ управления отображением числа — это использование функции Формат(). Рассмотрим стандартную ситуацию, когда нам нужно получить число без пробелов. Для этого используется параметр ЧГ (группировка разрядов).
Проанализируем пример кода, который часто встречается в работе:
// Неправильно (будет пробел, если число больше 1000)
Результат = Строка(Объект.Сумма);
// Правильно (группировка отключена)
Результат = Формат(Объект.Сумма, "ЧГ=0");
Разберем, что именно мы сделали. Параметр ЧГ=0 сообщает платформе, что группировку разрядов (разделение на тысячи, миллионы и т.д.) выполнять не нужно. Существует также альтернативный вариант — использование параметра ЧРГ (символ разделителя групп).
Рассмотрим разницу между ними:
Важный нюанс: некоторые программисты используют конструкцию Строка(Формат(Число, "ЧГ=0")). Это является избыточным, так как функция Формат сама по себе всегда возвращает значение типа Строка. Повторное преобразование через Строка() лишь создает лишнюю нагрузку на систему.
Если ваша задача заключается в передаче данных на сервер, в веб-сервис или сохранении в файл, рассмотрим более надежный метод — функцию XMLСтрока(). Этот метод часто называют «лайфхаком» опытных разработчиков.
Выясним преимущества этого подхода:
Формат, которая опирается на региональные настройки Windows или сервера 1С, XMLСтрока всегда возвращает число в каноническом виде.Посмотрим на пример:
ЧислоДляПередачи = 2500.50;
СтрокаДляСервера = XMLСтрока(ЧислоДляПередачи);
// Результат всегда будет "2500.50" вне зависимости от настроек системы
Для тех, кто только осваивается в системе 1С, проще всего воспользоваться визуальным помощником. Рассмотрим, как это сделать по шагам:
Формат(."ЧГ=0".Иногда программисты пытаются решить проблему «в лоб», удаляя пробелы из уже сформированной строки. Здесь кроется главная ловушка: 1С использует не обычный пробел (код 32), а неразрывный пробел (код 160).
Проанализируем ситуацию: обычный СтрЗаменить(Текст, " ", "") не сработает. Чтобы замена прошла успешно, нужно использовать системную константу или код символа.
Посмотрим на пример правильной замены:
// Используем системную константу
Результат = СтрЗаменить(СтрокаСПробелом, Символы.НПП, "");
// Или через код символа (менее предпочтительно, но допустимо)
Результат = СтрЗаменить(СтрокаСПробелом, Симв(160), "");
Однако помните, что использование Формат или XMLСтрока гораздо эффективнее и правильнее с точки зрения архитектуры кода.
Часто вопрос удаления пробелов возникает не в коде, а при выводе данных в отчет. В Системе компоновки данных (СКД) это решается через свойства поля или условное оформление.
Разберем ситуацию, когда нам нужно выводить 3 знака после запятой для дробных чисел и 0 знаков для целых, при этом убрав разделение групп разрядов:
Это позволит числу 10 отображаться как 10, а числу 10.5556 — как 10,556 (без пробелов в тысячах).
Рассмотрим, почему «вчера все работало, а сегодня сломалось». Если вы используете стандартное преобразование Строка(Число), результат напрямую зависит от региональных стандартов операционной системы. Если на сервере, где выполняется код, в настройках языка стоит пробел как разделитель, вы получите "1 000". Если настройки изменятся (например, при переносе базы на другой сервер), формат может измениться на "1,000" или "1.000".
Важный совет: Всегда жестко задавайте формат при выгрузке данных в файлы или внешние системы, чтобы не зависеть от настроек окружения.
Подведем итог нашего анализа:
Формат(Число, "ЧГ=0").XMLСтрока(Число).СтрЗаменить(Текст, Символы.НПП, "").Использование этих методов сделает ваш код надежным и устойчивым к изменениям настроек серверов и операционных систем.