Как убрать пробел-разделитель в числах 1С: все способы форматирования

Программист 1С v8.3 (Обычные формы)
← На главную

В процессе разработки на платформе 1С:Предприятие программисты часто сталкиваются с тем, что при преобразовании числа в строку система автоматически добавляет неразрывный пробел в качестве разделителя групп разрядов (например, 2 500 вместо 2500). Это поведение удобно для отображения данных в интерфейсе пользователю, но создает критические ошибки при передаче данных во внешние системы, формировании имен файлов или записи данных в JSON/XML. Разберем подробно, как решить эту задачу различными методами.

Метод 1: Использование встроенной функции Формат

Самый правильный и гибкий способ управления отображением числа — это использование функции Формат(). Рассмотрим стандартную ситуацию, когда нам нужно получить число без пробелов. Для этого используется параметр ЧГ (группировка разрядов).

Проанализируем пример кода, который часто встречается в работе:


// Неправильно (будет пробел, если число больше 1000)
Результат = Строка(Объект.Сумма); 

// Правильно (группировка отключена)
Результат = Формат(Объект.Сумма, "ЧГ=0");

Разберем, что именно мы сделали. Параметр ЧГ=0 сообщает платформе, что группировку разрядов (разделение на тысячи, миллионы и т.д.) выполнять не нужно. Существует также альтернативный вариант — использование параметра ЧРГ (символ разделителя групп).

Рассмотрим разницу между ними:

Важный нюанс: некоторые программисты используют конструкцию Строка(Формат(Число, "ЧГ=0")). Это является избыточным, так как функция Формат сама по себе всегда возвращает значение типа Строка. Повторное преобразование через Строка() лишь создает лишнюю нагрузку на систему.

Метод 2: Использование функции XMLСтрока

Если ваша задача заключается в передаче данных на сервер, в веб-сервис или сохранении в файл, рассмотрим более надежный метод — функцию XMLСтрока(). Этот метод часто называют «лайфхаком» опытных разработчиков.

Выясним преимущества этого подхода:

  1. Независимость от локализации: В отличие от функции Формат, которая опирается на региональные настройки Windows или сервера 1С, XMLСтрока всегда возвращает число в каноническом виде.
  2. Отсутствие разделителей: Функция никогда не вставляет пробелы между тысячами.
  3. Точка в качестве разделителя: Дробная часть всегда отделяется точкой, что является стандартом для большинства языков программирования и протоколов обмена.

Посмотрим на пример:


ЧислоДляПередачи = 2500.50;
СтрокаДляСервера = XMLСтрока(ЧислоДляПередачи);
// Результат всегда будет "2500.50" вне зависимости от настроек системы

Метод 3: Использование конструктора форматной строки

Для тех, кто только осваивается в системе 1С, проще всего воспользоваться визуальным помощником. Рассмотрим, как это сделать по шагам:

  1. В конфигураторе или в модуле напишите слово Формат(.
  2. Нажмите правую кнопку мыши и выберите пункт "Конструктор форматной строки".
  3. В появившемся окне перейдите на вкладку "Число".
  4. Найдите поле "Группировка" и установите значение "0" (или снимите галочку использования разделителя групп).
  5. Нажмите "ОК", и система автоматически сформирует нужную строку параметров, например "ЧГ=0".

Метод 4: Удаление пробела через СтрЗаменить

Иногда программисты пытаются решить проблему «в лоб», удаляя пробелы из уже сформированной строки. Здесь кроется главная ловушка: 1С использует не обычный пробел (код 32), а неразрывный пробел (код 160).

Проанализируем ситуацию: обычный СтрЗаменить(Текст, " ", "") не сработает. Чтобы замена прошла успешно, нужно использовать системную константу или код символа.

Посмотрим на пример правильной замены:


// Используем системную константу
Результат = СтрЗаменить(СтрокаСПробелом, Символы.НПП, "");

// Или через код символа (менее предпочтительно, но допустимо)
Результат = СтрЗаменить(СтрокаСПробелом, Симв(160), "");

Однако помните, что использование Формат или XMLСтрока гораздо эффективнее и правильнее с точки зрения архитектуры кода.

Метод 5: Настройка формата в отчетах СКД

Часто вопрос удаления пробелов возникает не в коде, а при выводе данных в отчет. В Системе компоновки данных (СКД) это решается через свойства поля или условное оформление.

Разберем ситуацию, когда нам нужно выводить 3 знака после запятой для дробных чисел и 0 знаков для целых, при этом убрав разделение групп разрядов:

  1. Откройте вкладку "Наборы данных" в СКД.
  2. Выберите нужное поле и найдите колонку "Оформление".
  3. Нажмите на многоточие и выберите параметр "Формат".
  4. В конструкторе укажите:
    • Группировка: 0.
    • Минимальное количество знаков после запятой: 0.
    • Максимальное количество знаков после запятой: 3.

Это позволит числу 10 отображаться как 10, а числу 10.5556 — как 10,556 (без пробелов в тысячах).

Почему это важно? (Влияние региональных настроек)

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

Важный совет: Всегда жестко задавайте формат при выгрузке данных в файлы или внешние системы, чтобы не зависеть от настроек окружения.

Резюме по функциям

Подведем итог нашего анализа:

Использование этих методов сделает ваш код надежным и устойчивым к изменениям настроек серверов и операционных систем.

← На главную