Разработка и Конфигурация · 12 мин
Как убрать пробел в числе в 1С 8
Как убрать пробелы-разделители разрядов в числах 1С 8: СтрЗаменить, Строка(), Формат(), настройка разделителя групп и обработка неразрывных пробелов.
Пробелы внутри чисел в 1С 8 появляются из-за автоматической группировки разрядов: платформа разделяет тысячи, миллионы и миллиарды для удобства чтения. Число 1250000 при выводе превращается в «1 250 000». Для отчётов это удобно, но при обмене данными, выгрузке в файлы, формировании строк запросов к внешним сервисам или поиске по строковому представлению разделители мешают.
Вторая причина появления пробелов — импорт данных из Excel, CSV и других систем, где числа уже отформатированы как текст с разделителями разрядов. При попытке преобразовать такую строку функцией Число() 1С выдаёт ошибку «Неверное значение для преобразования в число», потому что платформа не воспринимает пробелы внутри числового литерала.
Отдельная ловушка — неразрывный пробел (символ с кодом 160), который визуально неотличим от обычного, но не удаляется стандартной заменой символа 32. Ниже разобраны все рабочие способы: от простого удаления в строке до настройки формата вывода и безопасного преобразования в число.
Почему 1С вставляет пробелы в числа
Платформа 1С:Предприятие 8 по умолчанию применяет группировку разрядов при преобразовании числа в строку. Это встроенное поведение форматирования: функция Строка(), вывод в сообщения, отображение в табличных полях и печатных формах используют разделитель групп, заданный в региональных настройках информационной базы или операционной системы.
Разделитель групп и разделитель дробной части задаются в настройках региональных стандартов (для сервера — в параметрах СУБД и учётной записи службы сервера 1С). Поэтому одно и то же число может выводиться по-разному на разных компьютерах: где-то с пробелом, где-то с апострофом, а где-то вообще без разделителя.
Третий источник пробелов — данные, пришедшие извне: выписки, выгрузки из банковских систем, файлы Excel. Там числа часто хранятся как текст вида «1 234 567,89», и 1С воспринимает их как обычные строки. Пока такая строка не очищена, математические операции и сравнения с ней невозможны.
Удаление пробелов из строки через СтрЗаменить
Универсальный способ — функция СтрЗаменить(), которая заменяет все вхождения подстроки в строке. Чтобы убрать обычные пробелы из числа, представленного строкой, достаточно одного вызова:
СтрокаБезПробелов = СтрЗаменить(СтрокаСЧислом, " ", "");
Если данные пришли из Excel или сформированы 1С с группировкой разрядов, внутри почти наверняка находятся неразрывные пробелы. Их нужно удалять отдельно, иначе часть разделителей останется:
Результат = СтрЗаменить(СтрокаСЧислом, " ", "");
Результат = СтрЗаменить(Результат, Символ(160), "");
Обе замены выполняются последовательно над одной переменной. Порядок значения не имеет. После очистки строку можно безопасно передавать в функцию Число() — при условии, что в ней не осталось других посторонних символов: букв, символов валюты, знаков табуляции.
Функция УбратьПробелыИзЧисла(Знач ИсходнаяСтрока)
Результат = СтрЗаменить(ИсходнаяСтрока, " ", "");
Результат = СтрЗаменить(Результат, Символ(160), "");
Результат = СтрЗаменить(Результат, Символы.Таб, "");
Возврат Результат;
КонецФункцииВывод числа без разделителей через Формат()
Если задача — не очистить строку, а сразу получить строковое представление числа без группировки, правильнее использовать функцию Формат() с параметром «ЧГ» (число групп). Значение 0 отключает группировку разрядов:
СтрокаЧисла = Формат(1250000, "ЧГ=0"); // "1250000"
Этот способ предпочтительнее, когда число уже хранится как число и нужно только управлять его выводом: в печатных формах, при формировании имён файлов, в обменах данными. Никакой постобработки строки не требуется — разделители просто не добавляются.
Дополнительно в форматной строке можно управлять количеством знаков после запятой (ЧДЦ) и общим числом выводимых разрядов (ЧЦ), а также подавлением нуля (ЧН). Например, Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧГ=0") выведет сумму с двумя знаками после запятой и без пробелов между разрядами.
СтрЗаменить или Формат
Подходит для очистки строк, полученных извне (Excel, CSV, банковские выгрузки). Работает с любым текстом, но требует отдельной обработки неразрывных пробелов.
Подходит, когда исходное значение — число и нужно управлять только выводом. Чище и быстрее, но не очищает уже существующие строки.
Изменение региональных настроек убирает пробелы глобально, но влияет на всех пользователей и все отчёты базы — применять с осторожностью.
Преобразование строки с пробелами в число
Частая ошибка — попытка напрямую передать в Число() строку вида «1 250 000». Платформа вызывает исключение, и без обработки оно прерывает выполнение кода. Безопасный шаблон выглядит так:
Очищенная = СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, " ", ""), Символ(160), "");
Попытка
ЗначениеЧислом = Число(Очищенная);
Исключение
ЗначениеЧислом = 0;
// запись в журнал регистрации или сообщение пользователю
КонецПопытки;
Обратите внимание на разделитель дробной части: функция Число() ожидает точку или запятую в зависимости от настроек, а в импортированных данных может встречаться любой вариант. Если в строке запятая, а платформа ждёт точку (или наоборот), перед преобразованием выполните замену: СтрЗаменить(Очищенная, ",", ".").
Также стоит проверять, не пуста ли строка после очистки: Число("") тоже вызывает исключение. Простая проверка Если Не ПустаяСтрока(Очищенная) Тогда избавляет от лишних ошибок в журнале.
- 1Удалите обычные пробелы: СтрЗаменить(Строка, " ", "")
- 2Удалите неразрывные пробелы: СтрЗаменить(Результат, Символ(160), "")
- 3При необходимости замените запятую на точку как разделитель дробной части
- 4Проверьте, что строка не пустая и не содержит букв
- 5Выполните Число() внутри конструкции Попытка...Исключение
- 6Проверьте результат на контрольном примере: исходная строка «1 250 000,50» должна дать число 1250000.5
Настройка разделителя групп в параметрах базы
Если пробелы мешают системно — например, все выгрузки из базы должны идти без разделителей — можно изменить региональные настройки информационной базы. В конфигураторе: «Администрирование» → «Региональные установки информационной базы». Там задаётся символ-разделитель групп разрядов, и его можно заменить на пустую строку или другой символ.
Это глобальная настройка: она повлияет на отображение чисел во всех формах, отчётах и печатных документах для всех пользователей базы. Числа станут менее читаемыми в интерфейсе, поэтому менять настройку ради одной выгрузки не стоит — для точечных задач лучше использовать Формат().
Дополнительно разделители зависят от региональных настроек операционной системы, под которой работает клиент или сервер 1С. Если поведение различается на разных компьютерах, сначала проверьте системные настройки языка и региональных стандартов, а уже потом параметры базы.
Типичные ошибки и как их избежать
Самая распространённая ошибка — удаление только обычного пробела и удивление, что Число() всё равно падает. Причина почти всегда в неразрывном пробеле (код 160), который визуально неотличим от обычного. Диагностика простая: проверьте длину строки до и после замены или выведите коды символов через КодСимвола().
Вторая ошибка — использование СтрЗаменить к числу, а не к строке. Функция работает со строками; если передать число, платформа неявно преобразует его в строку с группировкой разрядов, и результат может оказаться неожиданным. Сначала явно приведите значение к строке через Строка() или Формат().
Третья проблема — потеря дробной части при агрессивной очистке. Если удалять из строки все нецифровые символы подряд (например, регулярным выражением через COM-объект), легко заодно удалить и разделитель дробной части, превратив «1 234,56» в 123456. Удаляйте только пробелы и табуляции, а разделитель дробной части обрабатывайте осознанно.
Проверка результата
После очистки строки убедитесь, что она содержит только цифры и один разделитель дробной части. Быстрый способ — попытаться преобразовать строку обратно в число и сравнить с ожидаемым значением на контрольном примере. Возьмите строку «1 250 000,50»: после очистки должно получиться «1250000,50», а Число() должно вернуть 1250000.5 без исключения.
Для массовой обработки (загрузка прайсов, выписок) добавьте подсчёт ошибок: сколько строк не удалось преобразовать. Если ошибок больше нуля — выведите несколько проблемных значений в сообщение или журнал регистрации, чтобы увидеть, какие именно символы мешают. Часто обнаруживаются знаки валют, буквы «р.» или лишние точки.
При выводе через Формат(Число, "ЧГ=0") проверьте результат на числах разного порядка: сотнях, миллионах, отрицательных значениях и нуле. Знак минуса и разделитель дробной части должны сохраняться, а пробелов быть не должно ни в одном случае.
Как проверить результат
Уменьшилась ровно на количество пробелов, цифры на месте
Длина не изменилась — в строке неразрывные пробелы, нужен Символ(160)
Возвращает ожидаемое значение без исключения
Исключение — в строке остались посторонние символы
Знаки после запятой сохранены, значение совпадает с исходным
Дробная часть пропала или значение выросло в 100 раз — удалён разделитель
Число без пробелов, минус и запятая на месте
Пробелы остались — параметр ЧГ не применён или число уже строка
Часто задаваемые вопросы
Почему СтрЗаменить не убирает пробел из числа, хотя пробел виден?
Потому что это неразрывный пробел — символ с кодом 160, который 1С и Excel используют как разделитель разрядов. Обычная замена символа 32 его не затрагивает. Добавьте второй вызов: СтрЗаменить(Строка, Символ(160), ""). Проверить код символа можно функцией КодСимвола(Строка, Позиция).
Как вывести число без пробелов в печатной форме?
В модуле формирования печатной формы примените к числу функцию Формат с отключённой группировкой: Формат(Сумма, "ЧГ=0"). Если используется СуммаПрописью или типовые процедуры формирования, найдите место, где сумма помещается в параметр макета, и примените форматирование там.
Можно ли убрать разделители разрядов сразу для всей базы?
Да, через «Администрирование» → «Региональные установки информационной базы» в конфигураторе — там задаётся символ-разделитель групп. Но это глобальная настройка: она изменит отображение чисел во всех формах и отчётах для всех пользователей. Для отдельных выгрузок лучше использовать Формат() с ЧГ=0.
Число() выдаёт ошибку даже после удаления пробелов. Что ещё мешает?
Частые причины: неразрывный пробел (код 160), символ валюты, буквы «р.» или «руб.», запятая вместо точки как разделитель дробной части, знак табуляции, пустая строка. Выведите строку посимвольно через КодСимвола() — так видно все скрытые символы. Преобразование всегда оборачивайте в Попытка...Исключение.
Как убрать пробелы в числе в запросе 1С?
В языке запросов нет функции замены подстроки, поэтому очистку строк делают до передачи данных в запрос — во встроенном языке. Если пробелы уже хранятся в базе (например, в строковом реквизите), проще выполнить разовую обработку данных: перебрать записи, очистить значения через СтрЗаменить и записать обратно.
Как наоборот добавить пробелы-разделители в число?
Используйте Формат() без параметра ЧГ или с явным указанием разделителя: Формат(1250000, "ЧГ=3,") — число будет сгруппировано по три разряда. Разделитель по умолчанию берётся из региональных настроек базы или системы.
Что важно запомнить
Для очистки строк используйте двойную замену — обычного пробела и Символ(160). Для управления выводом числа применяйте Формат(Число, "ЧГ=0"). Преобразование в число всегда выполняйте внутри Попытка...Исключение, а глобальные региональные настройки базы меняйте только после резервной копии и проверки интеграций.