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

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

Как убрать пробел в числе в 1С

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

Пробелы в числах в 1С — это разделители групп разрядов, которые платформа добавляет автоматически при выводе: вместо «1234567» пользователь видит «1 234 567». Визуально это удобно, но при выгрузке в Excel, обмене с банковскими системами, выгрузке в XML или при печати документов такие пробелы часто мешают: внешняя система не распознаёт число, формула перестаёт работать, а сумма «съезжает».

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

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

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

При преобразовании числа в строку платформа по умолчанию группирует разряды по три цифры и разделяет группы неразрывным пробелом. Это поведение задано региональными настройками информационной базы и стандартными правилами форматирования. Результат «1 234 567,89» — нормальное представление, а не ошибка данных.

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

Разделитель появляется при любом неявном преобразовании числа в строку: при выводе в сообщение, при записи в текстовый файл, при формировании печатной формы, при передаче значения в поле с текстовым типом. Если дальше эта строка уходит во внешнюю систему, которая ждёт «чистое» число, начинаются ошибки загрузки.

Как убрать пробел через форматную строку

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

Сумма = 1234567.89;

СтрокаБезПробелов = Формат(Сумма; "ЧГ=0");

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

Форматную строку можно дополнять другими параметрами: ЧЦ — общее количество знаков, ЧДЦ — количество знаков после запятой, ЧН — представление нуля. Например, Формат(Сумма; "ЧЦ=15; ЧДЦ=2; ЧГ=0") даст строку фиксированной длины без пробелов с двумя знаками после запятой.

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

1c
Сумма = 1234567.89;
Результат = Формат(Сумма; "ЧЦ=15; ЧДЦ=2; ЧГ=0");
// Результат: "1234567,89" — без разделителей разрядов

Как убрать пробел через СтрЗаменить

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

Строка = "1 234 567,89";

Строка = СтрЗаменить(Строка, Символ(160), ""); // неразрывный пробел

Строка = СтрЗаменить(Строка, " ", ""); // обычный пробел

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

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

Также полезна функция СокрЛП — она убирает незначащие пробелы по краям строки, которые часто появляются при выгрузке из табличных документов. Типовая связка для «очистки» строки перед преобразованием: СокрЛП, затем две замены пробелов, затем Число().

Как убрать пробелы в печатных формах и макетах

Если пробелы мешают в печатной форме документа, настройка делается в макете. Откройте макет в конфигураторе, выделите ячейку с параметром суммы, вызовите свойства и найдите свойство «Формат». В конструкторе форматной строки снимите флажок «Разделитель групп разрядов» или вручную укажите строку вида ЧЦ=17; ЧДЦ=2; ЧГ=0.

В отчётах на СКД формат настраивается через закладку «Наборы данных» или через вкладку «Настройки» → «Дополнительные настройки» → «Формат» для конкретного поля. Там же можно задать представление нулей и точность. Это удобно, когда один и тот же отчёт нужен и в «читаемом» виде с разрядами, и в виде для выгрузки без них.

Для управляемых форм формат поля ввода задаётся в свойствах элемента формы. Если сумма выводится в надпись или таблицу, форматная строка элемента управляет отображением без изменения кода.

Настройка формата ячейки макета
  1. 1
    Откройте макет печатной формы в конфигураторе
  2. 2
    Выделите ячейку с суммой и откройте палитру свойств
  3. 3
    Найдите свойство «Формат» и откройте конструктор форматной строки
  4. 4
    Снимите флажок разделения групп разрядов или задайте ЧГ=0
  5. 5
    Сохраните макет и сформируйте печатную форму для проверки

Пробелы при выгрузке в Excel и обмене данными

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

В обменах через XML, JSON и текстовые файлы пробелы в числах недопустимы по формату большинства протоколов. Перед записью значения в файл обмена всегда применяйте Формат с ЧГ=0 и проверяйте десятичный разделитель: в XML по стандарту используется точка, а 1С по умолчанию выводит запятую.

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

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

Как выбрать способ

Вы формируете строку в своём кодеИспользуйте Формат(Значение; "ЧГ=0") — самый надёжный вариант
Строка уже получена из чужого кода или файлаПримените СтрЗаменить по Символ(160) и обычному пробелу
Проблема в печатной форме или отчётеНастройте формат ячейки макета или поля СКД без изменения кода
Число уходит в XML или внешнюю системуДополнительно проверьте десятичный разделитель — часто нужна точка

Типичные ошибки и как их избежать

Первая ошибка — замена только обычного пробела. Разделитель разрядов в 1С — неразрывный пробел, поэтому СтрЗаменить(Строка, " ", "") часто не даёт видимого результата. Всегда обрабатывайте оба символа.

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

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

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

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

После настройки сформируйте тестовый пример с крупной суммой, например 1 234 567,89, и проверьте три вещи: разряды выводятся слитно, дробная часть сохранена с нужным разделителем, значение корректно воспринимается принимающей стороной (Excel, банк-клиент, файл обмена).

Для программной проверки полезно вывести длину строки: у «1234567,89» она равна 10 символам, а у строки с двумя неразрывными пробелами — 12. Если длина больше ожидаемой, разделители остались.

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

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

Внешний вид числа
Норма

1234567,89 — разряды слитно

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

1 234 567,89 — разделители остались

Длина строки
Норма

Соответствует количеству цифр и знаков препинания

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

На 1–2 символа больше — в строке неразрывные пробелы

Обратное преобразование Число()
Норма

Возвращает исходное значение с копейками

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

Ошибка преобразования или потеря дробной части

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

Файл принят, суммы совпадают

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

Ошибка формата или расхождение сумм

Итог

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

Пробелы в числах 1С — это неразрывные пробелы, добавляемые при выводе, а не часть значения. Правильное решение — форматная строка с ЧГ=0; для готовых строк — замена Символ(160) и обычного пробела. В макетах и отчётах формат настраивается в свойствах ячейки или поля, а при обмене дополнительно проверяйте десятичный разделитель.

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

Почему СтрЗаменить не убирает пробел в числе?

Скорее всего, вы заменяете обычный пробел (код 32), а 1С использует неразрывный пробел (код 160). Добавьте замену СтрЗаменить(Строка; Символ(160); "") — после этого разделители разрядов удалятся.

Можно ли убрать пробелы во всех числах базы сразу?

Глобально это влияет на региональные настройки информационной базы, но менять их ради отдельной задачи не рекомендуется: изменится отображение чисел во всех документах и отчётах. Правильнее настраивать формат точечно — в конкретных макетах, отчётах и местах выгрузки.

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

Используйте форматную строку с параметром разделителя дробной части, если он поддерживается в вашей версии платформы, либо последовательно примените Формат с ЧГ=0 и замену запятой на точку. Это стандартная потребность при выгрузке в XML и JSON.

Почему после выгрузки в Excel числа стали текстом?

Причина — неразрывные пробелы в строковом представлении суммы: Excel не распознаёт такое значение как число. Формируйте табличный документ с форматом ЧГ=0 или записывайте в ячейки числовые значения, а не строки.

Влияет ли удаление пробелов на сами данные в базе?

Нет. Пробелы существуют только в строковом представлении числа в момент вывода. Числовые значения в базе не содержат разделителей, и никакие настройки формата не изменяют хранимые данные.

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

Если пользователь вставил число с пробелами в текстовое поле, обработайте ввод кодом: СокрЛП, затем замена Символ(160) и обычного пробела, затем Число(). Для полей с числовым типом платформа обычно справляется сама, но вставка из буфера обмена иногда требует такой обработки.