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

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

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

Различие между свойствами Формат и ФорматРедактирования

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

  1. Свойство Формат: управляет тем, как значение выглядит в поле, когда оно не активно (курсор не установлен в поле). Например, вы можете видеть дату «01.01.2023», но как только вы кликните по полю, формат может измениться.
  2. Свойство ФорматРедактирования: определяет вид значения в момент, когда пользователь вводит данные или редактирует их.

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

Программное изменение состава даты

Рассмотрим ситуацию из практики: у нас есть реквизит ДатаНачала с типом Дата (состав даты: Дата и время). Нам нужно программно переключать видимость времени. Выясним причину, по которой стандартный код может не срабатывать, и приведем правильный вариант.

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

Разберем пример кода для переключения формата:


Если Объект.УказыватьВремя Тогда
    // Устанавливаем формат отображения и редактирования: Дата + Время
    Элементы.ДатаНачала.Формат = "ДЛФ=ДВ"; 
    Элементы.ДатаНачала.ФорматРедактирования = "DLF=DT";
Иначе
    // Устанавливаем формат отображения и редактирования: Только Дата
    Элементы.ДатаНачала.Формат = "ДЛФ=Д"; 
    Элементы.ДатаНачала.ФорматРедактирования = "DLF=D";
КонецЕсли;

Обратите внимание на используемые коды:

Влияние метаданных на программные настройки

Важно помнить, что программная установка формата не может расширить возможности хранения данных, заложенные в конфигураторе. Проанализируем ситуацию: если у реквизита в метаданных (в дереве конфигурации) свойство «Состав даты» установлено как «Дата», то время в базе данных попросту не сохраняется. Даже если вы программно пропишете DLF=DT, поле ввода не покажет время, так как его нет в источнике данных. Для гибкого управления всегда устанавливайте в метаданных «Дата и время».

Проблема точности чисел при редактировании

Рассмотрим более сложный случай, связанный с числовыми данными. Часто разработчики сталкиваются с тем, что даже при установке формата ЧЦ=15 (без указания дробной части), при редактировании в поле все равно появляются знаки после запятой. Посмотрим на пример настройки для поля Количество:


Элементы.ТоварыКоличество.Формат = "ЧЦ=15; ЧДЦ=0"; 
Элементы.ТоварыКоличество.ФорматРедактирования = "ЧЦ=15; ЧДЦ=0";

Если после выполнения этого кода при вводе числа все равно отображается «0,000», следует проверить дополнительные параметры:

  1. Свойство Маска: Проверьте, не задана ли в элементе формы Маска. Если она содержит разделитель дробной части, платформа будет принудительно его показывать.
  2. Свойство реквизита Точность: Формат редактирования не всегда перекрывает свойство «Точность», заданное у самого реквизита. Если в расширении или основной конфигурации у числа стоит точность 3, платформа будет резервировать место под эти знаки.
  3. Параметр ЧН: При работе с числами полезно также задавать ЧН=0 (представление нуля), чтобы поле не выглядело пустым.

Особенности работы в расширениях

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

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

ЭтаФорма.ОбновитьОтображениеДанных();

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

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

← На главную