Как программно создать колонку с числом и настроить отображение знаков после запятой в 1С?

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

При программном создании реквизитов формы или колонок таблиц в 1С часто возникает задача задать для числовых полей определенную точность, например, два знака после запятой. Стандартный подход — использовать объекты КвалификаторыЧисла и ОписаниеТипов. Однако иногда, несмотря на правильную настройку квалификаторов, результат в интерфейсе отображается некорректно: вместо ожидаемого "96,00" пользователь видит "96".

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

Исходный код автора выглядел так:


КЧ = Новый КвалификаторыЧисла(15,2);
ОписаниеТиповЧ = Новый ОписаниеТипов(,,,КЧ);
НоваяКолонка = Новый РеквизитФормы("ФактическаяСебестоимость", ОписаниеТиповЧ, "ТаблицаУстановкаЦен","Факт. себестоимость");
МассивРеквизитов.Добавить(НоваяКолонка);
ТЗ_рез.Колонки.Добавить("ФактическаяСебестоимость",ОписаниеТиповЧ);

Проблема кроется в строке ОписаниеТиповЧ = Новый ОписаниеТипов(,,,КЧ);. Конструктор объекта ОписаниеТипов был вызван без указания самого типа данных. Система получила квалификаторы (точность 2), но не знала, к какому типу их применять. В результате тип данных был определен некорректно, и форматирование не сработало. Рассмотрим несколько способов решения этой задачи.

Решение 1: Правильное использование конструктора ОписаниеТипов

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

Конструктор объекта ОписаниеТипов может принимать несколько параметров, и первый из них — это строка с именами типов. Чтобы исправить код, нужно передать строку "Число" в качестве первого параметра.

Посмотрим на исправленный код:


// Создаем квалификатор: 15 знаков всего, 2 из них после запятой
КЧ = Новый КвалификаторыЧисла(15, 2);

// Создаем описание типов, ЯВНО указывая тип "Число"
// и передавая для него созданный квалификатор
ОписаниеТиповЧ = Новый ОписаниеТипов("Число", , , КЧ);

// Дальнейший код остается без изменений
НоваяКолонка = Новый РеквизитФормы("ФактическаяСебестоимость", ОписаниеТиповЧ, "ТаблицаУстановкаЦен", "Факт. себестоимость");
МассивРеквизитов.Добавить(НоваяКолонка);
ТЗ_рез.Колонки.Добавить("ФактическаяСебестоимость", ОписаниеТиповЧ);

Теперь система 1С четко понимает, что реквизит "ФактическаяСебестоимость" и одноименная колонка в таблице значений должны иметь тип Число(15, 2). Такой подход гарантирует не только правильное отображение данных в интерфейсе (например, "96,00"), но и корректное хранение и обработку этих значений с заданной точностью.

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

Решение 2: Использование функции Формат() для строкового представления

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

Эта функция не меняет исходное значение или тип переменной, а возвращает новую строку, отформатированную по заданным правилам.

Синтаксис для форматирования чисел:

Формат(Значение, "ПараметрыФорматнойСтроки")

Рассмотрим пример, как можно было бы получить нужное представление "96,00" из числа 96:


МоеЧисло = 96;
ПредставлениеЧисла = Формат(МоеЧисло, "ЧДЦ=2; ЧН=0.00"); // Результат: строка "96,00"

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

  1. ЧДЦ (Число Десятичных Знаков) — указывает, сколько знаков должно быть в дробной части. ЧДЦ=2 означает два знака.
  2. ЧН (Представление Нулевого Значения) — строка, которая будет выведена, если исходное значение равно нулю. Например, ЧН='-' выведет прочерк вместо "0,00". В нашем примере `ЧН=0.00` гарантирует, что ноль будет показан с двумя знаками.
  3. ЧРД (Разделитель Дробной части) — символ-разделитель. По умолчанию используется тот, что задан в региональных настройках (обычно "," или ".").
  4. ЧРГ (Разделитель Групп) — символ-разделитель триад (тысяч, миллионов). Например, ' ' (пробел).
  5. ЧЦ (Общее Число Знаков) — общее количество позиций для вывода числа, включая разделители.

Когда стоит использовать Формат():

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

Решение 3: Настройка через условное оформление формы

В управляемых формах есть мощный визуальный инструмент для настройки отображения данных — условное оформление. Он позволяет изменять внешний вид полей (цвет, шрифт, формат и т.д.) в зависимости от различных условий без единой строки кода.

Этот способ отлично подходит, если вам нужно изменить формат отображения чисел в уже существующей таблице на форме.

Разберем по шагам, как это сделать:

  1. Откройте нужную форму в конфигураторе.
  2. В дереве элементов формы перейдите на вкладку "Условное оформление".
  3. Нажмите "Добавить", чтобы создать новый элемент оформления.
  4. На вкладке "Оформление" установите флажок напротив свойства "Формат" и в поле справа введите строку формата, аналогичную той, что используется в функции Формат(). Например: ЧДЦ=2; ЧН=0.00
  5. На вкладке "Оформляемые поля" выберите поле или колонку, к которой нужно применить это форматирование (например, "ФактическаяСебестоимость").
  6. При необходимости на вкладке "Условие" можно задать условие, при котором будет срабатывать оформление. Если условие не задавать, оформление будет применяться всегда.

Преимущества этого подхода:

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

← На главную