При программном создании реквизитов формы или колонок таблиц в 1С часто возникает задача задать для числовых полей определенную точность, например, два знака после запятой. Стандартный подход — использовать объекты КвалификаторыЧисла и ОписаниеТипов. Однако иногда, несмотря на правильную настройку квалификаторов, результат в интерфейсе отображается некорректно: вместо ожидаемого "96,00" пользователь видит "96".
Проанализируем ситуацию, с которой столкнулся автор на форуме. Он пытался создать новую колонку и реквизит формы для хранения себестоимости с двумя знаками после запятой. Давайте разберем его код и выясним причину проблемы.
Исходный код автора выглядел так:
КЧ = Новый КвалификаторыЧисла(15,2);
ОписаниеТиповЧ = Новый ОписаниеТипов(,,,КЧ);
НоваяКолонка = Новый РеквизитФормы("ФактическаяСебестоимость", ОписаниеТиповЧ, "ТаблицаУстановкаЦен","Факт. себестоимость");
МассивРеквизитов.Добавить(НоваяКолонка);
ТЗ_рез.Колонки.Добавить("ФактическаяСебестоимость",ОписаниеТиповЧ);
Проблема кроется в строке ОписаниеТиповЧ = Новый ОписаниеТипов(,,,КЧ);. Конструктор объекта ОписаниеТипов был вызван без указания самого типа данных. Система получила квалификаторы (точность 2), но не знала, к какому типу их применять. В результате тип данных был определен некорректно, и форматирование не сработало. Рассмотрим несколько способов решения этой задачи.
Это основной и самый правильный способ решения исходной задачи. Необходимо явно указать системе, для какого типа данных мы задаем квалификаторы. В нашем случае это тип "Число".
Конструктор объекта ОписаниеТипов может принимать несколько параметров, и первый из них — это строка с именами типов. Чтобы исправить код, нужно передать строку "Число" в качестве первого параметра.
Посмотрим на исправленный код:
// Создаем квалификатор: 15 знаков всего, 2 из них после запятой
КЧ = Новый КвалификаторыЧисла(15, 2);
// Создаем описание типов, ЯВНО указывая тип "Число"
// и передавая для него созданный квалификатор
ОписаниеТиповЧ = Новый ОписаниеТипов("Число", , , КЧ);
// Дальнейший код остается без изменений
НоваяКолонка = Новый РеквизитФормы("ФактическаяСебестоимость", ОписаниеТиповЧ, "ТаблицаУстановкаЦен", "Факт. себестоимость");
МассивРеквизитов.Добавить(НоваяКолонка);
ТЗ_рез.Колонки.Добавить("ФактическаяСебестоимость", ОписаниеТиповЧ);
Теперь система 1С четко понимает, что реквизит "ФактическаяСебестоимость" и одноименная колонка в таблице значений должны иметь тип Число(15, 2). Такой подход гарантирует не только правильное отображение данных в интерфейсе (например, "96,00"), но и корректное хранение и обработку этих значений с заданной точностью.
Важный момент: всегда используйте этот метод при программном определении реквизитов и колонок. Это фундаментальный уровень, который задает свойства типа данных на уровне метаданных или структуры объекта.
Иногда требуется не изменить тип данных колонки, а лишь получить отформатированное строковое представление числа для вывода в сообщение, печатную форму или отчет. В таких случаях на помощь приходит глобальная функция Формат().
Эта функция не меняет исходное значение или тип переменной, а возвращает новую строку, отформатированную по заданным правилам.
Синтаксис для форматирования чисел:
Формат(Значение, "ПараметрыФорматнойСтроки")
Рассмотрим пример, как можно было бы получить нужное представление "96,00" из числа 96:
МоеЧисло = 96;
ПредставлениеЧисла = Формат(МоеЧисло, "ЧДЦ=2; ЧН=0.00"); // Результат: строка "96,00"
Давайте разберем параметры форматной строки, использованные в примере и другие полезные параметры:
ЧДЦ=2 означает два знака.ЧН='-' выведет прочерк вместо "0,00". В нашем примере `ЧН=0.00` гарантирует, что ноль будет показан с двумя знаками.Когда стоит использовать Формат():
Этот метод не подходит для решения исходной задачи автора, так как ему нужно было задать свойства самой колонки на форме, а не получить временное строковое представление.
В управляемых формах есть мощный визуальный инструмент для настройки отображения данных — условное оформление. Он позволяет изменять внешний вид полей (цвет, шрифт, формат и т.д.) в зависимости от различных условий без единой строки кода.
Этот способ отлично подходит, если вам нужно изменить формат отображения чисел в уже существующей таблице на форме.
Разберем по шагам, как это сделать:
Формат(). Например: ЧДЦ=2; ЧН=0.00Преимущества этого подхода:
Этот метод является отличным выбором для настройки визуального представления данных непосредственно в интерфейсе пользователя, когда не требуется изменять структуру данных программно.