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

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

При разработке и кастомизации управляемых форм в среде 1С:Предприятие 8.3 разработчики часто сталкиваются с задачей изменения визуального представления даты. По умолчанию стандартный реквизит Дата любого документа содержит в себе как календарную дату, так и время (часы, минуты, секунды). В некоторых бизнес-сценариях отображение времени на форме избыточно или нежелательно. Например, в кадровых документах или актах выполненных работ точное время часто не имеет значения, и пользователи просят оставить только привычный формат «ДД.ММ.ГГГГ».

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

Физическая природа даты в платформе 1С:Предприятие

Для начала проанализируем ситуацию с точки зрения хранения данных в СУБД. В платформе 1С тип данных Дата всегда содержит и дату, и время. Физически невозможно сохранить в реквизите типа Дата только день, месяц и год, полностью исключив временную составляющую. Если мы записываем дату без указания времени, платформа автоматически подставляет нулевое время — полночь (00:00:00).

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

Разбор по шагам: «Формат» против «Формата редактирования»

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

  1. Свойство «Формат» (Format): Данное свойство определяет, как данные будут выглядеть в поле формы, когда оно находится в режиме покоя (то есть когда пользователь просто просматривает документ и фокус ввода не установлен на этом поле).
  2. Свойство «Формат редактирования» (Edit Format): Это свойство управляет внешним видом поля в тот момент, когда пользователь активирует его (кликает мышкой) для изменения значения. Если настроить только свойство «Формат», то при начале редактирования скрытое время снова отобразится в поле ввода, что может запутать конечного пользователя.

Рассмотрим подробнее синтаксис конструктора форматной строки. Обычно для скрытия времени разработчики используют локальный формат даты:

ДЛФ=D (или латинский аналог DLF=D)

Буква «Л» (Локальный) здесь критически важна. Она означает, что представление даты будет подстраиваться под региональные настройки операционной системы конкретного пользователя. Если у пользователя на компьютере установлена русская локаль Windows/Linux, дата отобразится как ДД.ММ.ГГГГ. Однако, если база данных развернута в мультиязычной среде или на сервере с американской локалью, формат может измениться на MM/DD/YYYY, что крайне нежелательно.

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

ДФ=dd.MM.yyyy (или латинский вариант DF=dd.MM.yyyy)

При таком подходе дата всегда будет выводиться строго в формате «день.месяц.год» (например, 25.12.2023), а время будет скрыто как при просмотре, так и при редактировании.

Различия между стандартными и произвольными реквизитами

Способ настройки также зависит от того, с каким именно реквизитом мы работаем:

Почему в типовых конфигурациях (ЗУП 3.1, ERP) свойства формата пустые, но времени нет?

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

Разработчики фирмы «1С» активно используют программное управление интерфейсом. Форматирование полей настраивается динамически при создании формы на сервере. Специальные общие модули БСП анализируют метаданные документов, определяют тип полей и программно применяют к ним правила условного оформления или устанавливают свойства элементов. Для стандартизации подобных задач можно применить модуль программного изменения элементов управляемых форм.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Программная настройка формата отображения и редактирования стандартной даты
    ЭлементДата = Элементы.Дата;
    ЭлементДата.Формат = "ДФ=dd.MM.yyyy";
    ЭлементДата.ФорматРедактирования = "ДФ=dd.MM.yyyy";
    
КонецПроцедуры

Кроме того, скрытие времени может быть реализовано через механизм Условного оформления формы. В свойствах самой управляемой формы (вкладка «Оформление») разработчики могут настроить правила, согласно которым для определенных полей применяется формат отображения даты без времени. В этом случае свойства конкретного элемента формы в конфигураторе также будут визуально выглядеть пустыми. Для получения готового программного кода таких настроек можно использовать обработку для декомпиляции условного оформления форм.

Как победить баг Конфигуратора с палитрой свойств стандартных реквизитов?

Особое внимание стоит уделить технической проблеме, описанной в сообщениях пользователей форума. При работе в классическом Конфигураторе 1С существует неприятный UX-баг: при переходе по списку стандартных реквизитов объекта (например, при клике на Дата после просмотра свойств реквизита Ссылка) палитра свойств зависает и продолжает отображать параметры предыдущего реквизита. Пользователь видит пустые поля или не те свойства, из-за чего делает ложный вывод, что у стандартного реквизита вообще нет настроек формата.

Проанализируем практические способы обхода этого бага платформы:

  1. Использование клавиши F4 (или комбинации Alt+Enter): Выделите необходимый стандартный реквизит (например, «Дата») в списке конфигуратора и нажмите клавишу F4 на клавиатуре. Это действие принудительно обновит палитру свойств и сфокусирует ее именно на выделенном объекте.
  2. Вызов через контекстное меню: Нажмите правой кнопкой мыши на нужный реквизит и выберите пункт меню «Свойства». Это гарантирует перерисовку палитры свойств под текущий контекст.
  3. Перезапуск окна свойств: Если палитра свойств окончательно зависла, просто закройте ее (нажав на крестик) и откройте заново двойным щелчком по нужному реквизиту.
  4. Открепление палитры (булавка): Проверьте состояние кнопки «Закрепить» (в виде канцелярской кнопки) в правом верхнем углу панели свойств. Если панель находится в режиме автоскрытия или некорректно закреплена, она чаще подвержена сбоям обновления фокуса.
  5. Переход на среду 1С:EDT (Enterprise Development Tools): Стоит отметить, что данный баг полностью отсутствует в современной среде разработки 1С:EDT, созданной на базе Eclipse. В EDT работа с палитрами свойств и метаданными реализована на более продвинутом уровне, и подобные проблемы интерфейса там устранены.

Резюмируя все вышесказанное: для надежного скрытия времени у даты на форме всегда используйте явное указание формата ДФ=dd.MM.yyyy в свойствах «Формат» и «Формат редактирования» элемента формы. А при возникновении проблем с отображением свойств в старом Конфигураторе используйте горячую клавишу F4 для принудительного обновления палитры.

← На главную