При работе в системе 1С программисты и пользователи часто сталкиваются с тем, что большие числа (тысячи, миллионы) автоматически разделяются пробелом. Например, число 15000 превращается в 15 000. Это стандартное поведение платформы, обусловленное региональными настройками, призванное облегчить чтение данных. Однако в ряде случаев — например, при выгрузке данных в сторонние системы, формировании артикулов или штрихкодов — этот пробел становится помехой. Рассмотрим подробнее, какими способами можно избавиться от группировки разрядов.
Самый распространенный и гибкий способ убрать пробелы — это использование встроенной функции Формат(). Разберем по шагам, как она работает. Основной параметр, отвечающий за группировку разрядов, называется ЧГ (Число Группировка). По умолчанию он настроен на разделение по 3 цифры.
Чтобы полностью отключить группировку, необходимо передать в функцию форматную строку, в которой параметр ЧГ равен нулю. Проанализируем пример кода:
// Пример преобразования числа в строку без пробелов
ЧислоДляОбработки = 1500000;
СтрокаБезПробелов = Формат(ЧислоДляОбработки, "ЧГ=0");
// Результат: "1500000"
Обратите внимание, что форматная строка пишется в кавычках. Если вам нужно передать пустую группировку, можно также использовать конструкцию "ЧГ=" без указания нуля — результат будет аналогичным. Это решение идеально подходит для формирования сообщений пользователю или подготовки строк для записи в текстовые файлы.
Иногда задача усложняется: число уже представлено в виде строки с пробелами (например, полученной из другого источника), и обычная функция Формат() к нему неприменима. Первая мысль — использовать функцию СтрЗаменить(Строка, " ", ""). Однако зачастую это не срабатывает. Выясним причину.
Дело в том, что 1С использует для разделения разрядов не обычный пробел (код 32), а специальный неразрывный пробел (код 160). Чтобы гарантированно удалить его, следует использовать системную константу Символы.НПП. Рассмотрим на примере:
// Удаление неразрывного пробела из уже готовой строки
ИсходнаяСтрока = "1 500 000"; // Здесь визуально пробелы, но программно это НПП
ЧистаяСтрока = СтрЗаменить(ИсходнаяСтрока, Символы.НПП, "");
// Результат: "1500000"
Такой подход незаменим при парсинге строковых данных или обработке информации, импортированной из Excel или других внешних источников, где форматирование было задано заранее.
Если нам требуется, чтобы конкретный числовой реквизит (например, «НомерЗаказа» или «Артикул») всегда отображался без пробелов во всей системе, нам не обязательно прописывать код в каждом модуле. Мы можем задать это на уровне метаданных.
ЧГ=0.Этот метод хорош тем, что он применяется централизованно ко всем формам, спискам и стандартным отчетам, где задействован данный реквизит.
При построении отчетов на базе СКД настройки из метаданных могут перекрываться настройками самого отчета. Чтобы убрать пробелы в конкретном поле отчета, выполним следующие действия:
Перейдем на вкладку «Наборы данных» или «Условное оформление» в схеме компоновки. Для выбранного поля в колонке «Оформление» найдем параметр «Формат». Там, аналогично конструктору в метаданных, установим значение ЧГ=0. Проанализируем ситуацию: если формат задан в СКД, он будет иметь приоритет над региональными настройками пользователя и системными настройками платформы. Это гарантирует, что при печати отчета или сохранении его в PDF числа будут выглядеть именно так, как задумал разработчик.
В современных интерфейсах (Управляемое приложение) есть важная деталь. Для элементов управления типа «Поле ввода» существует два похожих свойства: «Формат» и «Формат редактирования».
Если вы установите ЧГ=0 только в свойстве «Формат», то пользователь увидит число без пробелов, пока просто смотрит на форму. Однако, как только он кликнет в поле, чтобы изменить значение, пробелы могут появиться снова. Чтобы этого избежать, мы рекомендуем дублировать настройку в поле «Формат редактирования». Только в этом случае ввод числа будет визуально непрерывным на всех этапах взаимодействия с интерфейсом.
Иногда программисты сталкиваются с тем, что на сервере числа отображаются иначе, чем на локальном компьютере. Выясним причину этого явления. Если в коде используется метод ЧислоВСтроку() или пустая форматная строка, 1С обращается к региональным стандартам операционной системы (Windows или Linux).
Если в настройках ОС в качестве разделителя групп разрядов стоит любой символ (пробел, точка, запятая), 1С подставит его автоматически. Чтобы ваш код работал одинаково у всех пользователей, независимо от их личных настроек Windows, всегда используйте явное указание формата ЧГ=0. Это обеспечит стабильность работы программы в распределенных системах и клиент-серверном варианте работы.
На мобильных устройствах под управлением Android и iOS локальные настройки интерфейса играют еще более значимую роль. Мобильный клиент 1С активно подстраивается под язык системы. Поэтому, если ваше приложение предполагает работу с серийными номерами или кодами, представленными в числовом виде, использование Формат(Значение, "ЧГ=0") является единственным надежным способом обеспечить единообразие отображения данных на разных гаджетах.
Подводя итог, можно сказать, что решение задачи по удалению пробелов в числах почти всегда сводится к правильному использованию параметра ЧГ=0. Будь то программный код, свойства метаданных или настройки отчетов СКД — этот параметр является универсальным ключом к управлению представлением числовой информации в системе 1С:Предприятие.