Почему 1С выводит год с пробелом как 2 017 и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов в системе компоновки данных (СКД), формировании печатных форм или выводе данных на форму разработчики часто сталкиваются с ситуацией, когда год отображается с разделителем групп разрядов: например, вместо 2024 выводится 2 024. Выясним причину такого поведения платформы 1С и подробно разберем все способы корректного устранения этой проблемы.

Разберем природу возникновения проблемы. В платформе 1С функция Год(Дата) возвращает значение примитивного типа Число, а не дату и не готовую строку. По умолчанию в региональных настройках русской локализации для всех чисел больше 999 включено автоматическое разделение триад (группировка разрядов). При этом в качестве разделителя платформа использует не стандартный пробел (код ASCII 32), а специальный символ — неразрывный пробел Символы.НПП (символ с кодом 160 / U+00A0). Поэтому любое четырехзначное число при стандартном выводе форматируется с пробелом.

Способ 1. Использование форматной строки для чисел (ЧГ=0)

Рассмотрим основной и самый универсальный метод — явное отключение группировки разрядов с помощью параметра ЧГ=0 (Число Группировка = 0) в форматной строке.

Разберем по шагам, как применить этот способ в различных местах конфигурации:

  1. В программном коде: передадим число года в функцию Формат() с отключением триад:
    
    ГодЧислом = Год(ТекущаяДата());
    ГодСтрокой = Формат(ГодЧислом, "ЧГ=0");
    
  2. В схеме компоновки данных (СКД): перейдем на вкладку Наборы данных, найдем числовое поле года, в колонке Оформление нажмем кнопку выбора формата и установим флаг или вручную пропишем в строке формата ЧГ=0. Также это можно сделать на вкладке Настройки в разделе Условное оформление для выбранных полей.
  3. В свойствах ячеек табличного документа (макета): откроем палитру свойств ячейки, найдем категорию Оформление, поле Формат и в открывшемся конструкторе снимем отметку «Группировать» либо пропишем ЧГ=0.
  4. В элементах управляемой формы: выделим элемент поля ввода или надписи, в свойствах найдем пункт Формат и укажем ЧГ=0.

Способ 2. Форматирование исходного значения даты (ДФ=yyyy)

Проанализируем ситуацию в отчетах СКД. Если в запросе используется поле с типом Дата, гораздо правильнее не извлекать год числом в запросе, а оставить тип Дата и отформатировать его представление. Это сохранит корректную сортировку и фильтрацию в отчете.

Посмотрим на примеры реализации:

  1. В программном коде 1С: применим формат даты с маской года:
    
    // Получаем год из даты в виде четырех символов
    ГодСтрокой = Формат(ТекущаяДата(), "ДФ=yyyy");
    
  2. В отчете СКД: оставим в наборе данных поле даты (например, ПериодГод или исходную дату документа), а в оформлении поля укажем формат даты: ДФ=yyyy (или русскоязычный аналог ДФ=гггг). В результате платформа отобразит только год, не разбивая его на триады.

Способ 3. Преобразование через канонический формат XMLСтрока()

Рассмотрим альтернативный способ быстрого получения строкового представления числа без триад в программном коде. Функция XMLСтрока() преобразует переданное число в канонический вид XML, игнорируя региональные установки пользователя и не разделяя разряды:

ГодСтрокой = XMLСтрока(Год(Период));

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

Способ 4. Удаление неразрывных пробелов из готовой строки

Разберем ситуацию, когда год уже преобразован в строку стандартными средствами и в ней появился пробел. Обычная замена СтрЗаменить(ГодСтрокой, " ", "") не сработает, так как разделителем является неразрывный пробел. Чтобы удалить его, необходимо использовать системное перечисление Символы.НПП:

ГодСтрокой = СтрЗаменить(Строка(Год(НачалоПериода)), Символы.НПП, "");

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

Важное предупреждение: не меняйте региональные настройки информационной базы ради исправления отображения года. Изменение разделителя групп разрядов на уровне конфигурации или операционной системы приведет к тому, что во всей программе перестанут разделяться суммы и финансовые показатели, что ухудшит читаемость отчетов и документов.

← На главную