Разработка и Конфигурация · 11 мин
Как убрать разделитель в числе 1С
Как убрать разделитель групп разрядов в числе 1С: настройки форматирования, функция Формат(), СтрЗаменить, вывод в Excel и печатные формы. Пошаговые инструкции.
Разделитель групп разрядов (неразрывный пробел между тысячами, например «1 234 567,89») в 1С появляется автоматически: платформа форматирует числа по региональным настройкам. Чаще всего убрать его нужно при выгрузке данных в Excel, формировании файлов обмена, выгрузке сумм в банк-клиент, передаче чисел через API или при подготовке печатных форм, где пробел ломает дальнейшую обработку.
Проблема в том, что «1 234» с точки зрения 1С — это уже не число, а строка. Если такое значение попадает в файл обмена или формулу Excel, программа на стороне приёмника может не распознать его как число, и расчёты «посыплются». Поэтому важно понимать, где именно возникает разделитель и каким способом его убрать — на уровне отображения, кода или выгрузки.
Ниже разобраны все практические способы: от простой настройки форматной строки до обработки уже сформированных строковых значений. Способы применимы к платформе 1С:Предприятие 8.3 и типовым конфигурациям на её основе.
Почему в 1С появляется разделитель разрядов
По умолчанию платформа применяет к числам региональные установки информационной базы или операционной системы. В русской локали принято разделять группы разрядов неразрывным пробелом (символ с кодом 160), а дробную часть отделять запятой. Поэтому число 1234567.89 при выводе превращается в «1 234 567,89».
Разделитель появляется в нескольких местах: в полях ввода на формах, в табличных документах и печатных формах, при преобразовании числа в строку функциями Строка() или Формат() без параметров, а также при выгрузке в текстовые и XML-файлы, если разработчик не задал формат явно.
Важно понимать: само число в памяти не содержит никаких пробелов. Разделитель — это только результат форматирования при выводе. Поэтому корректный подход — не «чистить» строки после форматирования, а сразу форматировать число без группировки. Но когда источник данных уже строковый (например, загрузка из чужого файла), приходится работать с заменой символов.
Способ 1. Убрать разделитель через функцию Формат()
Основной и самый правильный способ — использовать встроенную функцию Формат() с параметром, отключающим группировку разрядов. Он подходит везде, где вы сами формируете строковое представление числа: в запросах к печати, при выгрузке в файлы, при передаче данных вовне.
Число = 1234567.89;
Результат = Формат(Число; "ЧГ=0");
// Результат: "1234567,89" — без пробелов между разрядами
Если дополнительно нужно зафиксировать количество знаков после запятой и убрать разделитель дробной части (актуально для выгрузок, где ожидается точка или число без дробной части), форматную строку расширяют:
// Два знака после запятой, без группировки:
Формат(Число; "ЧДЦ=2; ЧГ=0"); // "1234567,89"
// Целое число без дробной части и разделителей:
Формат(Число; "ЧДЦ=0; ЧГ=0"); // "1234568"
// Точка вместо запятой в дробной части:
Формат(Число; "ЧДЦ=2; ЧРД=.; ЧГ=0"); // "1234567.89"
Параметр ЧРД задаёт разделитель дробной части, ЧДЦ — количество десятичных знаков, ЧН — представление нуля. Комбинируя их, можно получить практически любой формат, который требует внешняя система.
- 1Определите место в коде, где число преобразуется в строку или выводится в документ
- 2Замените Строка(Число) или Формат(Число) без параметров на Формат(Число; "ЧГ=0")
- 3При необходимости добавьте ЧДЦ для фиксации знаков после запятой и ЧРД для замены запятой на точку
- 4Проверьте результат на числах с разным порядком: сотни, тысячи, миллионы
- 5Убедитесь, что принимающая система корректно распознаёт итоговое значение
Способ 2. Удалить разделитель из готовой строки через СтрЗаменить
Если значение уже пришло в виде строки с пробелами — например, загружено из Excel, текстового файла или сформировано чужим кодом, — форматная строка не поможет: сначала нужно очистить строку, потом преобразовать её в число. Здесь работает СтрЗаменить.
Ключевой нюанс: между разрядами стоит не обычный пробел (код 32), а неразрывный пробел (код 160). Если заменять только обычный пробел, разделитель останется. Надёжный вариант — удалять оба символа:
СтрокаСПробелами = "1 234 567,89";
Очищенная = СтрЗаменить(СтрокаСПробелами, Символ(160), "");
Очищенная = СтрЗаменить(Очищенная, " ", "");
Очищенная = СтрЗаменить(Очищенная, ",", "."); // если нужен числовой формат с точкой
Число = Число(Очищенная);
Функция Число() в 1С воспринимает запятую как разделитель дробной части, поэтому для русской локали замена запятой на точку не обязательна. Но она нужна, если очищенное значение дальше уходит в JSON, XML-схемы или внешние API, где стандартом является точка.
Способ 3. Настройка формата поля в форме и печатной форме
Когда разделитель нужно убрать только визуально — в поле на форме, колонке таблицы или ячейке печатной формы, — менять код не требуется. Достаточно задать форматную строку в свойствах элемента.
Для поля ввода или колонки таблицы формы: откройте форму в конфигураторе, выделите нужный элемент, в палитре свойств найдите «Формат» (или «ФорматнаяСтрока») и укажите ЧГ=0. После этого значение в поле будет отображаться без разделителей разрядов, при этом само значение останется числом.
Для печатной формы (табличного документа) логика та же: выделите ячейку или область макета, в свойствах задайте формат ЧДЦ=2; ЧГ=0. Если макет заполняется программно через Параметры, формат ячейки применяется к выводимому значению автоматически.
В управляемых формах формат можно задать и динамически из кода через свойство элемента формы, что удобно, когда представление зависит от настроек пользователя или вида документа.
Убрать разделитель при выгрузке в Excel и файлы обмена
Выгрузка в Excel — самый частый сценарий, где разделитель мешает. Если вы сохраняете табличный документ или таблицу значений в Excel, а числа потом не участвуют в формулах, причина почти всегда в том, что значения записаны как текст с пробелами, а не как числа.
Правильный подход при программной выгрузке: записывать в ячейки именно числовые значения, а не отформатированные строки. Тогда Excel сам распознает число, а его отображение будет управляться форматом ячейки Excel, а не строкой из 1С. Если же требуется текст (например, длинные номера, которые Excel не должен «портить»), используйте Формат(Значение; "ЧГ=0") и осознанно передавайте строку.
Для XML, JSON и CSV действует то же правило: сначала Формат() с нужными параметрами, потом запись. Для XML-схем и JSON обычно требуется точка как разделитель дробной части и полное отсутствие группировки: Формат(Значение; "ЧРД=.; ЧГ=0; ЧДЦ=2").
Сравнение способов
Подходит, когда вы сами формируете вывод числа. Самый чистый способ, но требует доступа к месту форматирования
Подходит для уже готовых строк из внешних источников. Требует аккуратности: легко пропустить неразрывный пробел
Подходит для отображения на формах и в печатных формах без изменения кода. Не влияет на выгружаемые данные
Типичные ошибки и как их избежать
Самая распространённая ошибка — попытка убрать разделитель заменой обычного пробела. Строка визуально не меняется, разработчик решает, что «замена не работает», хотя причина проста: между разрядами стоит неразрывный пробел с кодом 160. Всегда заменяйте оба варианта.
Вторая ошибка — преобразование числа в строку через Строка() и последующая передача результата в файл обмена. Строка() применяет форматирование по умолчанию, и в выгрузке появляются пробелы. Для любых обменов используйте только Формат() с явными параметрами.
Третья ошибка — очистка строки, но потеря дробной части. Если исходная строка «1 234,56», а после обработки получилось «123456» (например, из-за удаления запятой вместе с пробелами), сумма исказится в сто раз. После любой очистки проверяйте результат на контрольном примере с копейками.
Как проверить результат
После применения любого способа проверьте результат на контрольном наборе: число меньше тысячи (разделителя быть не должно изначально), число порядка миллионов (несколько групп разрядов), число с копейками и нулевое значение. Это покрывает все ветки форматирования.
Для выгрузок в файлы дополнительно откройте итоговый файл в текстовом редакторе или в принимающей системе и убедитесь, что числа записаны в ожидаемом виде: без пробелов, с правильным разделителем дробной части. Если файл уходит в банк или контрагенту, согласуйте формат заранее — требования к разделителю дробной части у разных систем отличаются.
Как проверить результат
Строка "1234567,89" или "1234567.89" без пробелов
Остались пробелы или неразрывные пробелы между разрядами
Число() возвращает исходное значение без ошибки
Исключение или искажённое значение
Копейки сохранились, порядок числа не изменился
Дробная часть потеряна или сумма выросла в 100 раз
Что важно запомнить
Разделитель разрядов в 1С — это результат форматирования, а не часть числа. Для собственного вывода используйте Формат(Число; "ЧГ=0"), для чужих строк — СтрЗаменить с Символ(160), для форм и печатных форм — свойство Формат. Всегда проверяйте результат на числе с копейками.
Частые вопросы
Почему СтрЗаменить с пробелом не убирает разделитель?
Потому что между группами разрядов 1С ставит неразрывный пробел с кодом 160, а не обычный пробел с кодом 32. Используйте СтрЗаменить(Строка; Символ(160); "") — и для надёжности дополнительно заменяйте обычный пробел.
Как убрать разделитель в запросе 1С?
В языке запросов функции Формат нет. Выведите число из запроса как есть, а форматирование выполните уже в коде при обходе выборки через Формат(Выборка.Сумма; "ЧГ=0"). Для представления в отчётах СКД формат задаётся в настройках поля на вкладке «Наборы данных» или «Настройки».
Как сделать, чтобы в Excel числа сразу были числами?
Записывайте в ячейки Excel числовые значения, а не отформатированные строки. Если выгружаете через табличный документ, задайте ячейкам тип «Число» и нужный формат. Строки с пробелами Excel воспринимает как текст, и формулы с ними не работают.
Можно ли отключить разделитель разрядов глобально для всей базы?
Глобальной настройки отключения группировки в платформе нет: форматирование по умолчанию следует региональным установкам. Менять региональные настройки информационной базы ради этого не стоит — это повлияет на все представления дат и чисел. Правильнее задавать формат точечно там, где разделитель мешает.
Как убрать разделитель в печатной форме без изменения кода?
Откройте макет печатной формы в конфигураторе, выделите ячейку с числовым параметром и в свойствах задайте формат «ЧДЦ=2; ЧГ=0». Если печатная форма внешняя, аналогичное свойство есть у ячеек её макета. Код заполнения менять не потребуется.
Что делать, если после очистки строки Число() выдаёт ошибку?
Значит, в строке остались посторонние символы: знак валюты, буквы, двойные пробелы или табуляция. Выведите строку в сообщение перед преобразованием и посмотрите, что мешает. Для надёжности оберните преобразование в Попытка/Исключение и обрабатывайте ошибочные значения отдельно.