Разработка и Конфигурация · 10 мин
Как убрать пробелы между цифрами в 1С
Как убрать пробелы между цифрами в 1С: функция СтрЗаменить, форматная строка, настройки разделителя групп разрядов. Примеры кода и проверка результата.
Пробелы между цифрами в 1С появляются в двух типичных ситуациях: платформа автоматически форматирует число, вставляя разделитель групп разрядов (1 234 567), либо пробелы уже содержатся в исходных данных — в строках, загруженных из Excel, банковских выписок или внешних систем. В первом случае проблему решает форматная строка, во втором — функция СтрЗаменить().
Разделитель групп разрядов — это не обычный пробел. В большинстве конфигураций 1С использует неразрывный пробел (символ с кодом 160), и простая замена обычного пробела с кодом 32 ничего не даст. Именно поэтому попытки убрать разделители «в лоб» часто заканчиваются неудачей.
Ниже разобраны рабочие способы: от одной строки кода до настройки форматов в макетах и запросах. Для каждого варианта указано, когда он подходит, и как проверить результат.
Откуда берутся пробелы между цифрами
Понимание источника пробела определяет способ его удаления. Самый частый случай — вывод числа в отчёт, табличный документ, печатную форму или строку сообщения. Платформа 1С по умолчанию группирует разряды чисел тройками и вставляет между ними разделитель, чтобы число легче читалось.
Второй источник — данные, пришедшие извне. Файлы Excel, CSV, выгрузки из банк-клиентов и сайтов часто содержат суммы, уже отформатированные как текст: «12 500,00». При загрузке такая строка остаётся строкой, и пробелы в ней мешают преобразованию в число — функция Число() вернёт ошибку или ноль.
Третий, более редкий случай — ручной ввод. Пользователь копирует сумму из письма или документа и вставляет в поле вместе с пробелами. Если поле строковое, пробелы сохраняются и дальше мешают поиску, сравнению и обмену данными.
Удаление пробелов через СтрЗаменить
Универсальный способ очистить строку от пробелов — функция СтрЗаменить(). Она заменяет все вхождения подстроки на указанное значение. Чтобы гарантированно убрать оба вида пробелов, выполняют две замены подряд:
СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, Символ(160), "");
СтрокаБезПробелов = СтрЗаменить(СтрокаБезПробелов, Символ(32), "");
Такой подход надёжен при загрузке данных из файлов: сначала строка очищается от пробелов и неразрывных пробелов, затем при необходимости приводится к числу через Число() или ОписаниеТипа. Порядок важен: сначала очистка, потом преобразование, иначе преобразование завершится ошибкой.
Если нужно убрать не только пробелы, но и другие непечатаемые символы (табуляцию, перевод строки), добавьте замены для Символ(9), Символ(10) и Символ(13). Для защиты от ошибок преобразования полезно обернуть вызов Число() в попытку-исключение и обработать некорректные значения отдельно.
СтрокаБезПробелов = СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, Символ(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Удалите неразрывные пробелы: СтрЗаменить(Строка, Символ(160), "")
- 2Удалите обычные пробелы: СтрЗаменить(Строка, Символ(32), "")
- 3При необходимости замените запятую на точку для корректного преобразования
- 4Преобразуйте в число через Число() внутри попытки-исключения
- 5Проверьте результат на контрольном примере: 1 234,50 должен стать 1234.5
Проверка результата и типичные ошибки
Проверить, действительно ли пробел удалён, можно длиной строки: СтрДлина() до и после замены должна отличаться на количество удалённых символов. Для наглядности выведите строку в сообщение, обрамив её маркерами, например квадратными скобками: [1234567] — так видно наличие пробелов по краям и внутри.
Для чисел контрольный признак прост: Формат(1234567, "ЧГ=0") должен вернуть строку «1234567» без каких-либо символов между цифрами. Если пробел остался, значит, либо формат не применился (проверьте, куда именно передаётся форматная строка), либо пробел был в исходных данных.
Как выбрать подходящий способ
Выбор зависит от того, где возникает пробел. Если это представление числа при выводе — используйте форматную строку ЧГ=0: это штатный механизм, он не трогает данные и работает везде, где поддерживается формат. Если пробелы находятся в самих данных — только СтрЗаменить() с последующим контролем результата.
Комбинированный сценарий тоже встречается: строка из файла очищается заменами, преобразуется в число, а затем выводится в отчёт уже с нужным форматом. Не смешивайте подходы в обратную сторону — форматировать строку функцией Формат() бессмысленно, она работает с числами и датами.
Как выбрать действие
Частые вопросы
Почему СтрЗаменить с обычным пробелом не убирает разделитель разрядов?
Потому что 1С в качестве разделителя групп разрядов обычно вставляет неразрывный пробел — символ с кодом 160, а не обычный пробел с кодом 32. Добавьте замену СтрЗаменить(Строка, Символ(160), ""), и разделители будут удалены.
Как убрать пробелы в числе в запросе 1С?
В языке запросов нет прямого аналога СтрЗаменить для произвольных символов. Практичный путь — выгрузить результат запроса и обработать значения в коде, либо решать задачу на этапе вывода через форматную строку ЧГ=0 в настройках отчёта или поля.
Как убрать разделитель разрядов в отчёте на СКД?
В схеме компоновки данных откройте вкладку «Наборы данных» или настройки поля, найдите нужное числовое поле и в параметре «Оформление» (либо в формате поля набора данных) задайте форматную строку ЧГ=0. Разделитель перестанет выводиться без изменения запроса.
Можно ли отключить разделитель разрядов для всей базы сразу?
Глобальной настройки, отключающей группировку разрядов во всех местах вывода, в платформе нет. Формат задаётся локально: в форматной строке, свойствах полей, макетах и настройках отчётов. Региональные настройки сеанса влияют на символ разделителя, но не отменяют саму группировку.
Число() возвращает 0 после очистки строки — в чём причина?
Скорее всего, в строке остались символы, мешающие преобразованию: неразрывный пробел, буква валюты, табуляция или запятая вместо точки в английской настройке. Выведите очищенную строку в сообщение с маркерами по краям и проверьте коды оставшихся символов через КодСимвола().
Как убрать пробелы только в начале и конце строки?
Для этого есть отдельная функция СокрЛП() — она удаляет незначащие символы (включая пробелы) слева и справа, не трогая содержимое внутри строки. Есть также варианты СокрЛ() и СокрП() для односторонней обрезки.
Что важно запомнить
Пробелы при выводе чисел убираются форматной строкой ЧГ=0, пробелы в данных — функцией СтрЗаменить с обязательной заменой неразрывного пробела Символ(160). Преобразование в число выполняйте только после полной очистки строки, а массовую обработку данных — после резервного копирования.