Как задать формат представления числа в Плане видов характеристик (ПВХ) в 1С без изменения всех форм

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

При проектировании метаданных в платформе «1С:Предприятие 8.3» разработчики часто сталкиваются со следующей задачей: в базе данных необходимо хранить числа с высокой точностью (например, до 5 знаков после запятой для точных физических величин, валютных курсов или калькуляций стоимости), но в пользовательском интерфейсе (в формах ввода и отчетах) эти числа должны выглядеть лаконично — округленными до 2 знаков после запятой.

Для стандартных реквизитов объектов (справочников, документов) эта задача решается за пару кликов мыши: достаточно открыть палитру свойств реквизита в Конфигураторе и в строке «Формат» написать маску представления (например, ЧДЦ=2). Однако, когда речь заходит о Планах видов характеристик (ПВХ), разработчики обнаруживают, что привычное свойство форматирования в палитре свойств отсутствует.

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

---

Выясняем причину: почему в свойствах ПВХ нет формата представления?

Для начала проанализируем, как устроен План видов характеристик изнутри. ПВХ предназначен для описания видов свойств (например: «Цвет», «Размер», «Плотность», «Температура плавления»). Само значение характеристики хранится отдельно — чаще всего в подчиненном регистре сведений (например, в типовом регистре ЗначенияСвойствОбъектов).

Тип значения, которое может принимать конкретная характеристика, определяется свойством ПВХ ТипЗначенияХарактеристик. Это поле почти всегда имеет составной тип данных. В него могут входить:

Поскольку План видов характеристик описывает лишь метаструктуру (правила допустимости типов), платформа физически не может применить единый статический формат отображения ко всему объекту ПВХ. Форматирование актуально для чисел, но абсолютно бессмысленно для ссылок или строк. Именно по этой причине в конфигураторе для ПВХ и его типов значений отсутствует штатное свойство «Формат».

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

---

Решение 1. Статическая настройка формата в полях ввода на формах

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

Если в вашей конфигурации вывод характеристик осуществляется всего в одной-двух формах, вы можете пойти по этому пути:

  1. Откройте нужную форму в Конфигураторе.
  2. Найдите элемент формы (поле ввода), связанный с реквизитом значения характеристики (например, Элементы.Значение).
  3. Откройте палитру свойств этого элемента.
  4. Найдите свойство «Формат» (и, при необходимости, «Формат редактирования») и задайте там конструктором строку формата. Например: ЧДЦ=2 (Число Десятичных Знаков = 2).

Минусы подхода: Если характеристика имеет составной тип данных, маска ЧДЦ=2 будет применяться платформой ко всем значениям, выводимым в этом поле. Для чисел это сработает отлично, но для других типов данных может повлечь за собой непредсказуемое поведение интерфейса. Кроме того, если форм в системе много, ручное изменение каждой из них превратится в рутину, а последующее изменение требований к точности (например, переход на 3 знака вместо 2) заставит вас проходить этот путь заново.

---

Решение 2. Динамическое управление форматом на формах (Паттерн БСП)

Если мы хотим спроектировать гибкую архитектуру, которая позволит менять точность вывода «на лету» без изменения кода и форм, нам следует перенять опыт разработчиков Библиотеки стандартных подсистем (БСП). В типовых конфигурациях (ERP, КА, УТ) свойства и их форматирование определяются динамически.

Мы можем реализовать аналогичную логику в своей конфигурации. Разберем этот алгоритм по шагам.

Шаг 1. Добавление реквизита формата в ПВХ

Добавим в наш План видов характеристик новый реквизит. Назовем его, например, СтрокаФормата с типом Строка (длина 150 знаков). В режиме «1С:Предприятие» администратор системы сможет указать для конкретной числовой характеристики нужную маску отображения, например, ЧДЦ=2; ЧГ=0 (выводить 2 знака после запятой и не группировать триады чисел).

Шаг 2. Создание общего модуля для обработки интерфейса

Для того чтобы не дублировать код в каждой форме, создадим общий неглобальный модуль (например, РаботаСИнтерфейсомКлиентСервер) и напишем туда процедуру динамической настройки поля ввода:


// Процедура устанавливает формат поля ввода на основании настроек характеристики
Процедура НастроитьФорматПоляВвода(ЭлементФормы, Знач Характеристика) Экспорт
    
    // Проверим, что передан корректный элемент формы
    Если ЭлементФормы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем строку формата из реквизита характеристики
    СтрокаФормата = "";
    Если ЗначениеЗаполнено(Характеристика) Тогда
        СтрокаФормата = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Характеристика, "СтрокаФормата");
    КонецЕсли;
    
    // Если формат задан в ПВХ, применяем его к элементу формы
    Если ЗначениеЗаполнено(СтрокаФормата) Тогда
        ЭлементФормы.Формат = СтрокаФормата;
        ЭлементФормы.ФорматРедактирования = СтрокаФормата;
    Иначе
        // Очищаем формат, если для характеристики индивидуальные настройки не заданы
        ЭлементФормы.Формат = "";
        ЭлементФормы.ФорматРедактирования = "";
    КонецЕсли;
    
КонецПроцедуры

Шаг 3. Внедрение перехвата в формы объектов

Теперь на любой форме, где пользователь выбирает характеристику и вводит её значение, нам достаточно вызвать эту общую процедуру в обработчиках событий. Рассмотрим пример вызова при изменении характеристики:


&НаКлиенте
Процедура ХарактеристикаПриИзменении(Элемент)
    
    // Переопределяем формат поля ввода значения на клиенте
    РаботаСИнтерфейсомКлиентСервер.НастроитьФорматПоляВвода(Элементы.ЗначениеХарактеристики, Объект.Характеристика);
    
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // При открытии формы также настраиваем отображение поля значения
    РаботаСИнтерфейсомКлиентСервер.НастроитьФорматПоляВвода(Элементы.ЗначениеХарактеристики, Объект.Характеристика);
    
КонецПроцедуры

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

---

Решение 3. Динамическое изменение описания типов через Квалификаторы Числа

Иногда задача стоит жестче: нам нужно не просто визуально скрыть лишние знаки после запятой, но и физически ограничить разрядность вводимого пользователем числа на конкретной форме (чтобы пользователь физически не мог ввести более 2 знаков после запятой, несмотря на то, что СУБД готова принять 5 знаков).

Для этого мы можем использовать механизм динамического конструирования ОписаниеТипов с использованием объекта КвалификаторыЧисла. Посмотрим на практический пример реализации такого механизма:


&НаСервере
Процедура ОграничитьВводЧислаНаФорме(ИмяЭлементаЗначения, Точность)
    
    // Определяем квалификаторы числа: общая длина 15, точность передается в параметре
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("Число"));
    
    Квалификаторы = Новый КвалификаторыЧисла(15, Точность);
    НовоеОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , , Квалификаторы);
    
    // Накладываем ограничение типов на поле ввода управляемой формы
    Элементы[ИмяЭлементаЗначения].ОграничениеТипа = НовоеОписаниеТипов;
    
КонецПроцедуры

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

---

Решение 4. Форматирование числовых характеристик в отчетах (СКД)

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

Разберем, как красиво вывести числовые значения ПВХ с точностью до 2 знаков в отчете:

  1. Откройте схему компоновки данных вашего отчета.
  2. Перейдите на вкладку «Наборы данных».
  3. Найдите в списке полей поле, отвечающее за вывод значения характеристики.
  4. В колонке «Оформление» нажмите на кнопку выбора.
  5. В появившемся окне найдите параметр «Формат» и укажите строку формата: ЧДЦ=2.

Если вам требуется выборочное форматирование (форматировать только те строки, где характеристика действительно является числом с плавающей точкой), воспользуйтесь механизмом Условного оформления СКД:

  1. Перейдите на вкладку «Настройки», затем выберите вкладку «Условное оформление».
  2. Добавьте новый элемент оформления.
  3. В поле «Оформление» задайте формат: ЧДЦ=2.
  4. В условиях укажите правило: например, Характеристика.ТипЗначения ПОДОБНО "Число" или отфильтруйте вывод по конкретным элементам ПВХ, для которых актуально данное округление.
  5. В области использования укажите поле значения характеристики.

Этот подход гарантирует корректный и эстетичный вывод числовых данных в отчетах без написания какого-либо программного кода.

---

Подводим итоги

Несмотря на то, что платформа 1С не предоставляет возможности установить формат вывода чисел непосредственно в свойствах конфигуратора для Плана видов характеристик, эта задача легко решается архитектурными методами. Мы рекомендуем использовать Решение №2 (динамическое управление форматом на базе БСП) как наиболее гибкое, масштабируемое и соответствующее стандартам разработки фирмы «1С».

← На главную