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

Разработка и Конфигурация · 9 мин

1С: формат числа — как убрать пробелы

Как убрать пробелы в числах в 1С: функция Формат, СтрЗаменить, форматная строка, настройки в макетах и отчётах. Примеры кода и типичные ошибки.

Пробелы между разрядами чисел (например, «1 234 567,89») — стандартное поведение платформы 1С при выводе чисел в отчётах, печатных формах, табличных документах и при преобразовании числа в строку. Платформа автоматически группирует разряды для удобства чтения, но часто такой формат мешает: при обмене данными с внешними системами, выгрузке в XML и Excel, формировании штрихкодов или передаче значений в API.

Убрать пробелы можно несколькими способами: через функцию Формат() с явной форматной строкой, через строковую функцию СтрЗаменить(), через свойство «Формат» элемента формы или области макета, а также через региональные настройки информационной базы. Выбор зависит от того, где именно возникает проблема — в коде, в макете печатной формы или в отчёте на СКД.

Важно понимать: пробел, который вставляет 1С, — это не обычный символ с кодом 32, а неразрывный пробел (код 160). Поэтому простая замена обычного пробела иногда не срабатывает, и это одна из самых частых причин «неработающего» кода.

Почему 1С вставляет пробелы в числа

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

Неразрывный пробел (символ с кодом 160) внешне неотличим от обычного, но для строковых функций это разные символы. Если вы пишете СтрЗаменить(Строка, " ", "") и результат не меняется — почти наверняка в строке именно неразрывный пробел.

Способ 1: функция Формат с параметром ЧГ=0

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

Число = 1234567.89;

Результат = Формат(Число, "ЧГ=0");

// Результат: "1234567,89"

Дополнительно можно управлять количеством знаков после запятой и общей длиной через параметры ЧДЦ (число десятичных знаков) и ЧЦ (общая длина):

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

// Результат: "1234567,89" — без пробелов, с двумя знаками после запятой

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

bsl
СуммаСтрокой = Формат(СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧГ=0");

Способ 2: СтрЗаменить с учётом неразрывного пробела

Если число уже преобразовано в строку с пробелами (например, получено из табличного документа, из текста сообщения или из внешнего источника), используйте СтрЗаменить(). Чтобы гарантированно удалить оба вида пробелов, выполните две замены:

СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, Символ(160), "");

СтрокаБезПробелов = СтрЗаменить(СтрокаБезПробелов, " ", "");

Первый вызов удаляет неразрывные пробелы (код 160), второй — обычные (код 32). Порядок не важен, но обе замены нужны, если источник строки неизвестен. Если вы точно знаете, что строку сформировала 1С, достаточно замены Символ(160).

Способ 3: формат в макетах, формах и отчётах СКД

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

Макет табличного документа

Выделите ячейку макета с параметром числа, откройте палитру свойств и в поле «Формат» укажите строку вида ЧЦ=15; ЧДЦ=2; ЧГ=0. После этого при заполнении области число выведется без разделителей разрядов, и дополнительная обработка в коде не потребуется.

Поле формы

Для поля ввода или надписи на управляемой форме свойство «Формат» задаётся аналогично — в палитре свойств элемента. Это удобно, когда пользователь должен видеть число без группировки, например номер счёта или артикул, хранящийся как число.

Отчёт на СКД

В конструкторе настроек отчёта перейдите на закладку «Наборы данных» или «Настройки» → «Пользовательские поля» / «Оформление», найдите нужное поле и в параметре «Формат» укажите ту же строку ЧГ=0. Для вычисляемых полей формат задаётся в свойствах ресурса.

Как убрать пробелы в макете печатной формы
  1. 1
    Откройте макет документа в конфигураторе
  2. 2
    Выделите ячейку с числовым параметром
  3. 3
    В палитре свойств найдите поле «Формат»
  4. 4
    Введите строку: ЧЦ=15; ЧДЦ=2; ЧГ=0
  5. 5
    Сохраните макет и сформируйте печатную форму для проверки

Способ 4: региональные настройки информационной базы

Глобальный вариант — изменить разделитель групп разрядов для всей базы. В конфигураторе откройте «Администрирование» → «Региональные установки информационной базы» и очистите или замените символ группировки разрядов. После этого все числа, выводимые без явной форматной строки, перестанут содержать разделитель.

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

Сравнение способов

Формат с ЧГ=0

Точечно, в коде. Надёжно, не зависит от символа-разделителя. Требует правки кода.

СтрЗаменить

Когда число уже в виде строки. Нужно учитывать неразрывный пробел Символ(160).

Формат в макете или СКД

Без изменения кода, только для конкретной печатной формы или отчёта.

Региональные настройки ИБ

Глобально для всей базы. Влияет на всех пользователей, применять с осторожностью.

Типичные ошибки и как их проверить

Самая частая ошибка — замена обычного пробела вместо неразрывного. Код выполняется без ошибок, но строка не меняется, и разработчик теряет время на поиск причины. Диагностика проста: выведите КодСимвола(Сред(Строка, НомерПозиции, 1)) для символа-разделителя и посмотрите код — 32 или 160.

Вторая ошибка — попытка убрать пробелы после преобразования обратно в число. Если нужно получить число из строки с пробелами, сначала очистите строку, затем используйте Число() или приведение типа, иначе получите ошибку преобразования или ноль.

Третья ошибка — применение СокрЛП() в надежде убрать разделители разрядов. СокрЛП() удаляет только краевые пробелы и не трогает символы внутри строки.

Типичные ошибки
01
Замена обычного пробела вместо Символ(160) — строка не меняется, разделители остаются
02
Использование СокрЛП для удаления разрядов — функция работает только с краями строки
03
Удаление пробелов во всей строке с текстом — склеиваются слова и ломается содержимое
04
Преобразование строки с пробелами в Число() без очистки — ошибка приведения типа

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

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

Для обменов с внешними системами дополнительно проверьте десятичный разделитель: многие форматы (XML, JSON, CSV для загрузки в сторонние программы) требуют точку вместо запятой. Это решается параметром ЧРД в форматной строке, например: Формат(Число, "ЧДЦ=2; ЧРД=.; ЧГ=0").

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

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

Число 1 234 567,89 после обработки
Норма

Строка «1234567,89» без пробелов

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

Пробелы остались или число обрезано

Отрицательное число
Норма

Минус сохранён, пробелов нет

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

Минус потерян или слипся с цифрами

Выгрузка во внешнюю систему
Норма

Файл принимается без ошибок формата

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

Система отклоняет значения как нечисловые

Итог

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

Основной способ убрать пробелы в числе — Формат(Число, "ЧГ=0"). Помните, что 1С использует неразрывный пробел (Символ(160)), поэтому обычная замена пробела может не сработать. Для макетов и отчётов задавайте форматную строку в свойствах, а глобальную смену региональных настроек применяйте только при реальной необходимости.

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

Почему СтрЗаменить(Строка, " ", "") не убирает пробелы в числе?

Потому что 1С разделяет разряды неразрывным пробелом с кодом 160, а не обычным пробелом с кодом 32. Используйте СтрЗаменить(Строка, Символ(160), "") или перейдите на функцию Формат с параметром ЧГ=0, которая вообще не зависит от вида разделителя.

Как убрать пробелы только в одной печатной форме, не трогая код?

Откройте макет в конфигураторе, выделите ячейку с числовым параметром и в свойстве «Формат» укажите строку вида ЧЦ=15; ЧДЦ=2; ЧГ=0. Изменение затронет только этот макет, остальные формы и отчёты останутся без изменений.

Как преобразовать строку «1 234,56» обратно в число?

Сначала удалите разделители разрядов: СтрЗаменить(Строка, Символ(160), ""). Затем примените Число() к очищенной строке. Если десятичный разделитель в строке точка, а региональные настройки ожидают запятую, предварительно замените точку на запятую или обработайте значение вручную.

Можно ли убрать пробелы сразу для всей базы?

Да, через «Администрирование» → «Региональные установки информационной базы», очистив символ группировки разрядов. Учтите, что это изменит отображение чисел для всех пользователей и во всех отчётах без явного формата, поэтому для разовых выгрузок лучше использовать Формат() локально.

Как вывести число без пробелов и с точкой вместо запятой для XML?

Используйте комбинацию параметров в форматной строке: Формат(Число, "ЧДЦ=2; ЧРД=.; ЧГ=0"). Параметр ЧРД задаёт десятичный разделитель, ЧГ=0 отключает группировку разрядов — в результате получится строка вида «1234567.89», пригодная для обмена.