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

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

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

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

По умолчанию 1С при выводе чисел в строку разделяет разряды пробелами: значение 1234567,89 превращается в «1 234 567,89». Для человека так читать удобно, но при выгрузке в файл, передаче по API, формировании платёжных реквизитов или печати документов пробелы часто недопустимы — внешняя система откажется принимать такое значение как число.

Убрать пробелы можно несколькими способами: через функцию Формат с явным указанием форматной строки, через СтрЗаменить, через настройки представления поля в форме или макете. Выбор зависит от того, где возникает проблема — в программном коде, в печатной форме или в отчёте на СКД.

Почему в 1С число выводится с пробелами

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

Разделитель групп зависит от настроек: в русской локали это обычно неразрывный пробел, в английской — запятая. Важный нюанс: символ может быть не обычным пробелом (код 32), а неразрывным (код 160). Это критично при замене через СтрЗаменить — если искать обычный пробел, а в строке стоит неразрывный, замена не сработает.

Также пробелы появляются при выводе в табличный документ, если у параметра или области не задана форматная строка, и в отчётах СКД, где формат берётся из настроек поля.

Способ 1: функция Формат с отключением группировки

Функция Формат — штатный инструмент преобразования значения в строку с контролем представления. Параметр ЧГ (число группировки) управляет разделением разрядов: значение 0 отключает группировку полностью.

Сумма = 1234567.89;

СтрокаБезПробелов = Формат(Сумма, "ЧГ=0");

// Результат: "1234567,89"

Форматную строку можно комбинировать с другими параметрами. Например, ЧДЦ задаёт число знаков после запятой, ЧРД — символ разделителя дробной части. Это полезно, когда внешняя система требует точку вместо запятой:

СтрокаДляXML = Формат(Сумма, "ЧРД=.; ЧГ=0; ЧДЦ=2");

// Результат: "1234567.89"

Параметр ЧН позволяет задать представление нуля — например, пустую строку, чтобы нулевые значения не засоряли выгрузку. Полный синтаксис форматной строки описан в синтакс-помощнике по функции Формат.

Способ 2: СтрЗаменить для готовой строки

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

Строка = "1 234 567,89";

Результат = СтрЗаменить(Строка, Символ(160), ""); // неразрывный пробел

Результат = СтрЗаменить(Результат, " ", ""); // обычный пробел

// Результат: "1234567,89"

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

Для обратной задачи — превратить строку обратно в число — используется функция Число(). Она тоже чувствительна к пробелам и может выдать ошибку преобразования, поэтому перед вызовом строку стоит очистить тем же способом.

Способ 3: формат в печатных формах и макетах

В табличном документе формат задаётся на уровне параметра или ячейки. Если число выводится через параметр макета, форматную строку можно прописать прямо в свойствах параметра в конструкторе макета — поле «Формат». Укажите там ЧГ=0, и платформа выведет значение без разделителей без изменения кода.

При программном формировании печатной формы есть два пути: либо форматировать значение до присвоения параметру (передать уже готовую строку), либо установить формат области через свойство:

Область = Макет.ПолучитьОбласть("Строка");

Область.Параметры.Сумма = Формат(СуммаДокумента, "ЧГ=0");

ТабДок.Вывести(Область);

Учтите: если параметр области имеет тип «Число» и заданный в макете формат, то передача уже отформатированной строки может конфликтовать с настройками. Проще передавать число и управлять форматом в макете, либо передавать строку и убрать формат из параметра.

Способ 4: отчёты на СКД и поля формы

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

Для полей ввода и надписей на управляемой форме формат задаётся в свойствах элемента — поле «Формат» в палитре свойств. Там же есть флажок «Редактирование формата», позволяющий задать разное представление для отображения и для редактирования.

Если формат не срабатывает, проверьте тип поля: форматная строка применяется к числовым значениям. Если в поле уже лежит строка (например, реквизит объявлен строковым), настройка формата эффекта не даст — преобразовывать нужно в коде.

Сравнение вариантов

Формат с ЧГ=0

Универсально для кода, макетов и СКД. Контролирует и разделитель дробной части. Требует доступа к месту формирования значения.

СтрЗаменить

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

Формат в свойствах макета или поля

Без изменения кода, удобно для печатных форм и отчётов. Не работает, если в поле передаётся готовая строка.

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

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

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

Контрольные точки

Как проверить результат

Вывод числа 1234567,89
Норма

Строка "1234567,89" без разделителей разрядов

Тревожный признак

Остались пробелы или появились запятые между разрядами

Число меньше 1000
Норма

Выводится как есть, без изменений

Тревожный признак

Появились лишние символы или ведущие нули

Отрицательное число
Норма

Минус перед числом, разряды слитно

Тревожный признак

Минус отделён пробелом или потерян

Строка после СтрЗаменить
Норма

Число(Строка) выполняется без ошибки

Тревожный признак

Ошибка преобразования — значит, остался неразрывный пробел

Типичные ошибки и ограничения

Самая частая ошибка — попытка убрать неразрывный пробел заменой обычного. Визуально строка выглядит очищенной, но функция Число() падает с ошибкой, а внешняя система отвергает значение. Лечится заменой Символ(160) или использованием Формат вместо ручной обработки.

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

Ограничение подхода с форматом: он меняет только представление, само число в данных не изменяется. Если пробелы требуется убрать в значении, которое хранится в базе как строка (например, в реквизите строкового типа), понадобится обработка данных с записью результата обратно.

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

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

Используйте Формат(Значение, "ЧГ=0") как основной способ. Для готовых строк удаляйте и обычный, и неразрывный пробел (Символ(160)). В макетах и СКД задавайте формат в свойствах поля, а в параметры передавайте число, а не строку.

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

Как вывести число без пробелов и с точкой вместо запятой?

Используйте комбинированную форматную строку: Формат(Значение, "ЧРД=.; ЧГ=0"). Параметр ЧРД задаёт разделитель дробной части, ЧГ=0 отключает группировку разрядов. Такой вариант типичен для выгрузок в XML и JSON, где требуется точка.

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

Скорее всего, в строке стоит неразрывный пробел (код символа 160), а вы заменяете обычный (код 32). Визуально они неотличимы. Добавьте замену Символ(160) или используйте функцию Формат вместо ручной обработки строки.

Как убрать пробелы в уже существующих данных в базе?

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

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

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

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

В языке запросов 1С есть функция ПРЕДСТАВЛЕНИЕ, но она формирует стандартное представление без управления форматом. Для контроля вывода результат запроса нужно обработать в коде после выполнения — применить Формат к числовому полю выборки.

Число без пробелов нужно для номера документа — как быть?

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