Разработка и Конфигурация · 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") даст строку фиксированной длины без пробелов с двумя знаками после запятой.
Этот подход предпочтителен, потому что он работает на этапе формирования строки и не зависит от того, какой именно символ-разделитель использует платформа. Код остаётся устойчивым даже при смене региональных настроек базы.
Сумма = 1234567.89;
Результат = Формат(Сумма; "ЧЦ=15; ЧДЦ=2; ЧГ=0");
// Результат: "1234567,89" — без разделителей разрядовКак убрать пробел через СтрЗаменить
Если строка уже сформирована и менять место её получения нельзя, пробелы удаляют функцией СтрЗаменить. Но заменять нужно оба варианта пробела — обычный и неразрывный:
Строка = "1 234 567,89";
Строка = СтрЗаменить(Строка, Символ(160), ""); // неразрывный пробел
Строка = СтрЗаменить(Строка, " ", ""); // обычный пробел
// Результат: "1234567,89"
Символ(160) — это и есть неразрывный пробел, который 1С ставит между разрядами. Если заменить только обычный пробел, строка визуально не изменится, и при обратном преобразовании в число через Число() можно получить ошибку или неверное значение.
Также полезна функция СокрЛП — она убирает незначащие пробелы по краям строки, которые часто появляются при выгрузке из табличных документов. Типовая связка для «очистки» строки перед преобразованием: СокрЛП, затем две замены пробелов, затем Число().
Как убрать пробелы в печатных формах и макетах
Если пробелы мешают в печатной форме документа, настройка делается в макете. Откройте макет в конфигураторе, выделите ячейку с параметром суммы, вызовите свойства и найдите свойство «Формат». В конструкторе форматной строки снимите флажок «Разделитель групп разрядов» или вручную укажите строку вида ЧЦ=17; ЧДЦ=2; ЧГ=0.
В отчётах на СКД формат настраивается через закладку «Наборы данных» или через вкладку «Настройки» → «Дополнительные настройки» → «Формат» для конкретного поля. Там же можно задать представление нулей и точность. Это удобно, когда один и тот же отчёт нужен и в «читаемом» виде с разрядами, и в виде для выгрузки без них.
Для управляемых форм формат поля ввода задаётся в свойствах элемента формы. Если сумма выводится в надпись или таблицу, форматная строка элемента управляет отображением без изменения кода.
- 1Откройте макет печатной формы в конфигураторе
- 2Выделите ячейку с суммой и откройте палитру свойств
- 3Найдите свойство «Формат» и откройте конструктор форматной строки
- 4Снимите флажок разделения групп разрядов или задайте ЧГ=0
- 5Сохраните макет и сформируйте печатную форму для проверки
Пробелы при выгрузке в Excel и обмене данными
При сохранении табличного документа в Excel числа с неразрывными пробелами могут распознаваться как текст. Признак: значения прижаты к левому краю ячейки, а формулы над ними возвращают ошибку. Решение — формировать табличный документ с форматом ЧГ=0 или выгружать данные программно, записывая в ячейки именно числовые значения, а не строки.
В обменах через XML, JSON и текстовые файлы пробелы в числах недопустимы по формату большинства протоколов. Перед записью значения в файл обмена всегда применяйте Формат с ЧГ=0 и проверяйте десятичный разделитель: в XML по стандарту используется точка, а 1С по умолчанию выводит запятую.
Для выгрузки с точкой вместо запятой используют либо параметр ЧРД в форматной строке, либо замену: СтрЗаменить(Строка, ",", "."). Первый вариант надёжнее, так как не трогает возможные запятые в других частях строки.
Как выбрать способ
Типичные ошибки и как их избежать
Первая ошибка — замена только обычного пробела. Разделитель разрядов в 1С — неразрывный пробел, поэтому СтрЗаменить(Строка, " ", "") часто не даёт видимого результата. Всегда обрабатывайте оба символа.
Вторая ошибка — попытка «очистить» само число. Числовое значение не содержит пробелов, и применять строковые функции к числу бессмысленно: платформа сначала неявно преобразует его в строку с разделителями, и вы получите ту же исходную ситуацию.
Третья ошибка — потеря дробной части при обратном преобразовании. Если после удаления пробелов строку передают в Число(), а десятичный разделитель не соответствует ожиданиям платформы, можно получить неправильное значение. Проверяйте результат на контрольном примере с копейками.
Как проверить результат
После настройки сформируйте тестовый пример с крупной суммой, например 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) и обычного пробела, затем Число(). Для полей с числовым типом платформа обычно справляется сама, но вставка из буфера обмена иногда требует такой обработки.