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

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

Как убрать пробелы между цифрами в 1С

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

Пробелы между цифрами в 1С появляются в двух типичных ситуациях: платформа автоматически форматирует число, вставляя разделитель групп разрядов (1 234 567), либо пробелы уже содержатся в исходных данных — в строках, загруженных из Excel, банковских выписок или внешних систем. В первом случае проблему решает форматная строка, во втором — функция СтрЗаменить().

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

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

Откуда берутся пробелы между цифрами

Понимание источника пробела определяет способ его удаления. Самый частый случай — вывод числа в отчёт, табличный документ, печатную форму или строку сообщения. Платформа 1С по умолчанию группирует разряды чисел тройками и вставляет между ними разделитель, чтобы число легче читалось.

Второй источник — данные, пришедшие извне. Файлы Excel, CSV, выгрузки из банк-клиентов и сайтов часто содержат суммы, уже отформатированные как текст: «12 500,00». При загрузке такая строка остаётся строкой, и пробелы в ней мешают преобразованию в число — функция Число() вернёт ошибку или ноль.

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

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

Универсальный способ очистить строку от пробелов — функция СтрЗаменить(). Она заменяет все вхождения подстроки на указанное значение. Чтобы гарантированно убрать оба вида пробелов, выполняют две замены подряд:

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

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

Такой подход надёжен при загрузке данных из файлов: сначала строка очищается от пробелов и неразрывных пробелов, затем при необходимости приводится к числу через Число() или ОписаниеТипа. Порядок важен: сначала очистка, потом преобразование, иначе преобразование завершится ошибкой.

Если нужно убрать не только пробелы, но и другие непечатаемые символы (табуляцию, перевод строки), добавьте замены для Символ(9), Символ(10) и Символ(13). Для защиты от ошибок преобразования полезно обернуть вызов Число() в попытку-исключение и обработать некорректные значения отдельно.

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

Форматная строка: запрет разделителя групп разрядов

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

СуммаСтрокой = Формат(Сумма, "ЧГ=0");

Значение ЧГ=0 отключает разделитель групп разрядов полностью, и число 1234567 будет выведено как «1234567», а не «1 234 567». Этот же параметр работает в свойствах полей формы, в макетах табличных документов и в схеме компоновки данных — везде, где задаётся форматная строка.

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

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

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

Если печатная форма формируется программно через ТабличныйДокумент, формат можно задать и в коде: Область.Формат = "ЧГ=0" либо выводить в область уже отформатированную строку через Формат(). Второй вариант удобен, когда одна и та же область используется для разных типов значений.

Отдельная ситуация — выгрузка в Excel. Если в ячейку табличного документа выводится строка с пробелами, Excel воспримет её как текст, и дальнейшие вычисления в Excel окажутся невозможны. Выводите в такие ячейки числа без форматирования с разделителями либо очищенные строки.

Очистка пробелов при загрузке данных из файлов

При загрузке сумм, артикулов и кодов из Excel или CSV пробелы нужно удалять до записи в базу. Типовой порядок обработки значения выглядит так: прочитать значение из файла, удалить неразрывные и обычные пробелы, при необходимости заменить запятую на точку, преобразовать в число, записать в объект.

Для числовых полей документов и справочников платформа при вводе через форму сама игнорирует разделители разрядов, но при программной записи строки с пробелами в строковые реквизиты (номера договоров, ИНН, штрихкоды) пробелы сохранятся. ИНН « 7707 083 890 » и «7707083890» — разные значения для поиска и обмена.

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

Порядок очистки строки с числом
  1. 1
    Удалите неразрывные пробелы: СтрЗаменить(Строка, Символ(160), "")
  2. 2
    Удалите обычные пробелы: СтрЗаменить(Строка, Символ(32), "")
  3. 3
    При необходимости замените запятую на точку для корректного преобразования
  4. 4
    Преобразуйте в число через Число() внутри попытки-исключения
  5. 5
    Проверьте результат на контрольном примере: 1 234,50 должен стать 1234.5

Проверка результата и типичные ошибки

Проверить, действительно ли пробел удалён, можно длиной строки: СтрДлина() до и после замены должна отличаться на количество удалённых символов. Для наглядности выведите строку в сообщение, обрамив её маркерами, например квадратными скобками: [1234567] — так видно наличие пробелов по краям и внутри.

Для чисел контрольный признак прост: Формат(1234567, "ЧГ=0") должен вернуть строку «1234567» без каких-либо символов между цифрами. Если пробел остался, значит, либо формат не применился (проверьте, куда именно передаётся форматная строка), либо пробел был в исходных данных.

Типичные ошибки
01
Замена только обычного пробела Символ(32) — неразрывный пробел с кодом 160 остаётся, и строка выглядит неизменной
02
Число() применяется до очистки строки — преобразование падает с ошибкой или возвращает 0
03
Формат задаётся при выводе в Сообщить(), но не в макете печатной формы — на бумаге пробелы остаются
04
Очистка пробелов в числах, где пробел значим, например в номерах банковских счетов при выводе по форме — нарушается требуемый формат представления

Как выбрать подходящий способ

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

Комбинированный сценарий тоже встречается: строка из файла очищается заменами, преобразуется в число, а затем выводится в отчёт уже с нужным форматом. Не смешивайте подходы в обратную сторону — форматировать строку функцией Формат() бессмысленно, она работает с числами и датами.

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

Как выбрать действие

Пробелы появляются только при выводе числа на экран или печатьИспользуйте форматную строку ЧГ=0 в Формат(), свойствах поля или макете
Пробелы содержатся в загружаемой из файла строкеОчистите строку через СтрЗаменить() по Символ(160) и Символ(32), затем преобразуйте в число
Пробелы уже записаны в реквизитах справочников или документовВыполните обработку массовой очистки на копии базы, затем в рабочей базе
Нужно выгрузить числа в Excel для дальнейших расчётовВыводите числа без разделителей разрядов, чтобы Excel распознал их как числа

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

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

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

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

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

Как убрать разделитель разрядов в отчёте на СКД?

В схеме компоновки данных откройте вкладку «Наборы данных» или настройки поля, найдите нужное числовое поле и в параметре «Оформление» (либо в формате поля набора данных) задайте форматную строку ЧГ=0. Разделитель перестанет выводиться без изменения запроса.

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

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

Число() возвращает 0 после очистки строки — в чём причина?

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

Как убрать пробелы только в начале и конце строки?

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

Итог

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

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