При разработке отчетов в системе компоновки данных (СКД), формировании печатных форм или выводе данных на форму разработчики часто сталкиваются с ситуацией, когда год отображается с разделителем групп разрядов: например, вместо 2024 выводится 2 024. Выясним причину такого поведения платформы 1С и подробно разберем все способы корректного устранения этой проблемы.
Разберем природу возникновения проблемы. В платформе 1С функция Год(Дата) возвращает значение примитивного типа Число, а не дату и не готовую строку. По умолчанию в региональных настройках русской локализации для всех чисел больше 999 включено автоматическое разделение триад (группировка разрядов). При этом в качестве разделителя платформа использует не стандартный пробел (код ASCII 32), а специальный символ — неразрывный пробел Символы.НПП (символ с кодом 160 / U+00A0). Поэтому любое четырехзначное число при стандартном выводе форматируется с пробелом.
Рассмотрим основной и самый универсальный метод — явное отключение группировки разрядов с помощью параметра ЧГ=0 (Число Группировка = 0) в форматной строке.
Разберем по шагам, как применить этот способ в различных местах конфигурации:
Формат() с отключением триад:
ГодЧислом = Год(ТекущаяДата());
ГодСтрокой = Формат(ГодЧислом, "ЧГ=0");
ЧГ=0. Также это можно сделать на вкладке Настройки в разделе Условное оформление для выбранных полей.ЧГ=0.ЧГ=0.Проанализируем ситуацию в отчетах СКД. Если в запросе используется поле с типом Дата, гораздо правильнее не извлекать год числом в запросе, а оставить тип Дата и отформатировать его представление. Это сохранит корректную сортировку и фильтрацию в отчете.
Посмотрим на примеры реализации:
// Получаем год из даты в виде четырех символов
ГодСтрокой = Формат(ТекущаяДата(), "ДФ=yyyy");
ПериодГод или исходную дату документа), а в оформлении поля укажем формат даты: ДФ=yyyy (или русскоязычный аналог ДФ=гггг). В результате платформа отобразит только год, не разбивая его на триады.Рассмотрим альтернативный способ быстрого получения строкового представления числа без триад в программном коде. Функция XMLСтрока() преобразует переданное число в канонический вид XML, игнорируя региональные установки пользователя и не разделяя разряды:
ГодСтрокой = XMLСтрока(Год(Период));
Этот метод часто используется при формировании наименований элементов, служебных строк и ключей аналитики, где важно гарантированно исключить разделители без явного вызова функции Формат().
Разберем ситуацию, когда год уже преобразован в строку стандартными средствами и в ней появился пробел. Обычная замена СтрЗаменить(ГодСтрокой, " ", "") не сработает, так как разделителем является неразрывный пробел. Чтобы удалить его, необходимо использовать системное перечисление Символы.НПП:
ГодСтрокой = СтрЗаменить(Строка(Год(НачалоПериода)), Символы.НПП, "");
Обратите внимание: данный способ является обходным (костылем) и не рекомендуется к использованию в качестве основного решения, так как правильнее сразу задавать корректный формат числа или даты на уровне источника или элемента отображения.
Важное предупреждение: не меняйте региональные настройки информационной базы ради исправления отображения года. Изменение разделителя групп разрядов на уровне конфигурации или операционной системы приведет к тому, что во всей программе перестанут разделяться суммы и финансовые показатели, что ухудшит читаемость отчетов и документов.