Как убрать разделение триад (пробелы) в числах при заполнении шаблона наименования в 1С

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

При настройке автоматического формирования рабочих наименований номенклатуры или характеристик по шаблону в программах семейства «1С:Предприятие 8» (например, в «1С:ERP», «1С:Управление торговлей» или «1С:Комплексная автоматизация») пользователи часто сталкиваются с неприятной особенностью. Дополнительный реквизит с типом Число (например, длина в мм, объем или артикул), который в карточке отображается корректно и без пробелов, при подстановке в шаблон наименования внезапно разделяется на триады. Например, вместо ожидаемого значения «Кабель 1200мм» система генерирует наименование «Кабель 1 200мм».

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

Выясняем причину: почему 1С упорно ставит пробелы в числах?

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

При формировании рабочего наименования по шаблону система выполняет следующие действия:

  1. Из базы данных извлекается «чистое» числовое значение дополнительного реквизита (например, 123456).
  2. Настройки формата, заданные в карточке свойства, игнорируются кодом формирования шаблона, так как этот механизм работает напрямую со значениями реквизитов, а не с элементами их экранной формы.
  3. Для преобразования числа в строку платформа использует стандартные региональные настройки текущего сеанса пользователя. По умолчанию в русской локали для любых чисел всегда применяется разделение групп (триад) неразрывным пробелом.

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

Способ 1. Использование функции Формат() в шаблоне наименования

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

Чтобы вывести дополнительный реквизит типа Число без разделения триад, нам достаточно явно переопределить формат вывода в формуле шаблона. Рассмотрим подробнее синтаксис написания такой формулы.

Обычный вывод реквизита выглядит так:

[ДопРеквизит.Длина]

Чтобы отключить группировку триад, нам нужно обернуть этот реквизит в функцию форматирования:

[Формат(ДопРеквизит.Длина, "ЧГ=0")]

Важный нюанс: при использовании параметра ЧГ=0 платформа при значении реквизита, равном нулю, может вернуть пустую строку вместо символа «0». Чтобы шаблон формировался корректно даже при нулевых значениях, обязательно добавляйте параметр представления нуля ЧН=0. Итоговая формула в шаблоне должна выглядеть следующим образом:

[Формат(ДопРеквизит.Длина, "ЧГ=0; ЧН=0")]

Этот метод полностью решает проблему, работает на уровне конкретного шаблона и не затрагивает другие объекты системы.

Способ 2. Изменение типа дополнительного реквизита на "Строка"

Если вы не хотите прописывать сложные формулы форматирования в каждом шаблоне, можно изменить тип данных самого дополнительного реквизита в его карточке с Число на Строка. Текстовые значения подставляются в любые шаблоны «как есть», без применения каких-либо региональных настроек и разделения пробелами.

Однако перед тем, как выбрать этот вариант, обязательно проанализируйте возможные ограничения:

Таким образом, данный способ подходит только для тех реквизитов, по которым никогда не планируется осуществлять математический анализ и сортировку в отчетах.

Способ 3. Автоматизация учета формата свойства через расширение

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

Проанализируем алгоритм работы такого расширения:

  1. При замене параметров в шаблоне система обращается к метаданным дополнительных реквизитов.
  2. Нам нужно перехватить процедуру заполнения шаблона (обычно это функции в общих модулях БСП, связанных со свойствами, или в модулях менеджеров справочников Номенклатура и ХарактеристикиНоменклатуры).
  3. В коде мы считываем значение реквизита ФорматСвойства из плана видов характеристик ДополнительныеРеквизитыИСведения.
  4. Если формат задан в карточке (например, там прописано ЧГ=0), мы применяем его к числу программно перед подстановкой в текст наименования.

Пример реализации программного кода в расширении для общего модуля БСП может выглядеть следующим образом:


&ВОбходе
Функция Расш1_ПолучитьЗначениеСвойстваДляНаименования(Свойство, ИсходноеЗначение)
    
    // Проверяем, что свойство имеет числовой тип
    Если Свойство.ТипЗначения.СодержитТип(Тип("Число")) Тогда
        
        // Получаем строку формата, заданную пользователем в режиме Предприятия
        СтрокаФормата = Свойство.ФорматСвойства;
        
        Если Не ПустаяСтрока(СтрокаФормата) Тогда
            // Применяем пользовательский формат к значению свойства
            Возврат Формат(ИсходноеЗначение, СтрокаФормата);
        КонецЕсли;
        
    КонецЕсли;
    
    // Если формат не задан, возвращаем стандартную обработку
    Возврат ПродолжитьВызов(Свойство, ИсходноеЗначение);
    
КонецФункции

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

Способ 4. Изменение региональных настроек базы данных

В настройках системы существует возможность глобально отключить группировку триад для всех чисел в сеансе. Для этого необходимо перейти в раздел Администрирование — Региональные установки информационной базы и снять флаг Использовать региональные установки текущего сеанса, настроив формат чисел вручную.

Внимание! Мы настоятельно не рекомендуем использовать этот способ! Если вы отключите группировку триад на уровне всей базы данных, эти изменения затронут абсолютно все объекты системы:

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

Резюме и рекомендации

Подведем итог нашего анализа и выберем оптимальный вариант действий:

  1. Если вам нужно быстро решить проблему «здесь и сейчас» без привлечения программистов — используйте Способ 1. Явное прописывание формулы [Формат(ИмяРеквизита, "ЧГ=0; ЧН=0")] в шаблоне наименования является лучшей стандартной практикой.
  2. Если вы только проектируете структуру базы данных и реквизит не будет использоваться в отчетах для математических вычислений, отборов и сортировок — примените Способ 2 (перевод в тип «Строка»).
  3. Если у вас крупная база с сотнями различных шаблонов и вы хотите автоматизировать процесс ввода для обычных пользователей — поручите программисту внедрить Способ 3 через расширение конфигурации.
← На главную