При разработке и кастомизации управляемых форм в среде 1С:Предприятие 8.3 разработчики часто сталкиваются с задачей изменения визуального представления даты. По умолчанию стандартный реквизит Дата любого документа содержит в себе как календарную дату, так и время (часы, минуты, секунды). В некоторых бизнес-сценариях отображение времени на форме избыточно или нежелательно. Например, в кадровых документах или актах выполненных работ точное время часто не имеет значения, и пользователи просят оставить только привычный формат «ДД.ММ.ГГГГ».
В этой статье мы подробно рассмотрим, как правильно управлять выводом даты на управляемых формах, разберем разницу между основными свойствами форматирования, выясним причины «магического» исчезновения времени в типовых конфигурациях (таких как ЗУП 3.1, ERP, КА) и научимся преодолевать неприятный баг Конфигуратора 1С, связанный с палитрой свойств стандартных реквизитов.
Для начала проанализируем ситуацию с точки зрения хранения данных в СУБД. В платформе 1С тип данных Дата всегда содержит и дату, и время. Физически невозможно сохранить в реквизите типа Дата только день, месяц и год, полностью исключив временную составляющую. Если мы записываем дату без указания времени, платформа автоматически подставляет нулевое время — полночь (00:00:00).
Таким образом, наша задача сводится не к физическому удалению времени из базы данных, а к настройке его визуального отображения на управляемой форме. Для пользователя время должно стать невидимым как при обычном просмотре документа, так и в момент непосредственного ввода или изменения даты.
Чтобы скрыть время у поля ввода на форме, нам необходимо настроить два ключевых свойства элемента формы. Выясним, за что отвечает каждое из них:
Рассмотрим подробнее синтаксис конструктора форматной строки. Обычно для скрытия времени разработчики используют локальный формат даты:
ДЛФ=D (или латинский аналог DLF=D)
Буква «Л» (Локальный) здесь критически важна. Она означает, что представление даты будет подстраиваться под региональные настройки операционной системы конкретного пользователя. Если у пользователя на компьютере установлена русская локаль Windows/Linux, дата отобразится как ДД.ММ.ГГГГ. Однако, если база данных развернута в мультиязычной среде или на сервере с американской локалью, формат может измениться на MM/DD/YYYY, что крайне нежелательно.
Чтобы избежать подобных сюрпризов и гарантировать абсолютно одинаковое отображение даты у всех пользователей независимо от их системных настроек, мы рекомендуем использовать жестко заданный формат:
ДФ=dd.MM.yyyy (или латинский вариант DF=dd.MM.yyyy)
При таком подходе дата всегда будет выводиться строго в формате «день.месяц.год» (например, 25.12.2023), а время будет скрыто как при просмотре, так и при редактировании.
Способ настройки также зависит от того, с каким именно реквизитом мы работаем:
Дата (на уровне объекта конфигурации или непосредственно на форме), вы можете зайти в его свойства в дереве метаданных и установить свойство Состав даты в значение Дата. В этом случае платформа сама применит нужные маски отображения, а время при записи всегда будет сбрасываться в 00:00:00.Как справедливо заметили участники обсуждения на форуме, в типовых конфигурациях от 1С (особенно построенных на базе БСП — Библиотеки стандартных подсистем) свойства формата у полей дат в конфигураторе часто остаются незаполненными, но в режиме «1С:Предприятие» время все равно не отображается. Выясним причину этого поведения.
Разработчики фирмы «1С» активно используют программное управление интерфейсом. Форматирование полей настраивается динамически при создании формы на сервере. Специальные общие модули БСП анализируют метаданные документов, определяют тип полей и программно применяют к ним правила условного оформления или устанавливают свойства элементов. Для стандартизации подобных задач можно применить модуль программного изменения элементов управляемых форм.
Посмотрим на пример того, как это можно реализовать программно в модуле управляемой формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Программная настройка формата отображения и редактирования стандартной даты
ЭлементДата = Элементы.Дата;
ЭлементДата.Формат = "ДФ=dd.MM.yyyy";
ЭлементДата.ФорматРедактирования = "ДФ=dd.MM.yyyy";
КонецПроцедуры
Кроме того, скрытие времени может быть реализовано через механизм Условного оформления формы. В свойствах самой управляемой формы (вкладка «Оформление») разработчики могут настроить правила, согласно которым для определенных полей применяется формат отображения даты без времени. В этом случае свойства конкретного элемента формы в конфигураторе также будут визуально выглядеть пустыми. Для получения готового программного кода таких настроек можно использовать обработку для декомпиляции условного оформления форм.
Особое внимание стоит уделить технической проблеме, описанной в сообщениях пользователей форума. При работе в классическом Конфигураторе 1С существует неприятный UX-баг: при переходе по списку стандартных реквизитов объекта (например, при клике на Дата после просмотра свойств реквизита Ссылка) палитра свойств зависает и продолжает отображать параметры предыдущего реквизита. Пользователь видит пустые поля или не те свойства, из-за чего делает ложный вывод, что у стандартного реквизита вообще нет настроек формата.
Проанализируем практические способы обхода этого бага платформы:
Резюмируя все вышесказанное: для надежного скрытия времени у даты на форме всегда используйте явное указание формата ДФ=dd.MM.yyyy в свойствах «Формат» и «Формат редактирования» элемента формы. А при возникновении проблем с отображением свойств в старом Конфигураторе используйте горячую клавишу F4 для принудительного обновления палитры.