Как скрыть или настроить отображение времени в дате документа в 1С 8.3?

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

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

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

Особенность стандартного реквизита «Дата»

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

Однако стандартный реквизит Дата — это системное поле, жестко зашитое в платформу «1С:Предприятие». Он всегда имеет тип Дата с составом «Дата и время». Платформа спроектирована таким образом из-за критической важности хронологической последовательности документов. Время документа напрямую влияет на расчет итогов по регистрам, проведение по партиям и корректность остатков на определенный момент времени. Именно поэтому состав этого реквизита заблокирован для изменения в конфигураторе.

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

Шаг 1. Настройка визуального отображения на управляемой форме

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

Обратите внимание, что настраивать нужно два ключевых свойства:

  1. Формат (Format): Данное свойство отвечает за то, в каком виде данные представлены на форме, когда поле неактивно (например, когда пользователь просто просматривает документ). Чтобы скрыть время, откройте конструктор форматной строки в палитре свойств и выберите нужный формат даты. Например, форматная строка ДФ=dd.MM.yyyy выведет дату в виде «31.12.2023». Также можно использовать локальный формат ДЛФ=D.
  2. Формат редактирования (EditFormat): Это важнейшая настройка, о которой часто забывают начинающие разработчики. Она определяет представление данных в тот момент, когда пользователь активирует поле ввода для изменения значения. Если вы настроите только «Формат», то при попытке отредактировать дату пользователь снова увидит время или строку «00:00:00», что может его запутать. Установите в «Формате редактирования» точно такую же строку: ДФ=dd.MM.yyyy.

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

Шаг 2. Механизм «Автовремя» формы документа

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

Рассмотрим основные режимы свойства «Автовремя» в расширении формы документа:

Если ваша задача — строго записывать документы «без времени» (то есть ровно в «00:00:00»), то в свойствах формы вам необходимо установить значение свойства «Автовремя» в положение «НеИспользовать».

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

Шаг 3. Программный контроль времени при записи

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

Рассмотрим, как гарантировать запись документа на начало дня с помощью кода. Проанализируем правильное место для размещения этого алгоритма — это модуль объекта документа, обработчик события ПередЗаписью.

Разберем пример кода, который решает эту задачу:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	// Принудительно приводим дату документа к началу дня (время сбрасывается в 00:00:00)
	ЭтотОбъект.Дата = НачалоДня(ЭтотОбъект.Дата);
	
	// Отключаем автоматическое назначение времени платформой
	ЭтотОбъект.УстановитьВремя(РежимАвтоВремя.НеИспользовать);
	
КонецПроцедуры

Давайте детально разберем, что происходит в этом коде:

  1. Функция НачалоДня() получает переданную дату и возвращает ее со значением времени «00:00:00». Таким образом, мы очищаем часы, минуты и секунды в самом объекте.
  2. Метод УстановитьВремя() с параметром РежимАвтоВремя.НеИспользовать указывает платформе, что при транзакции записи не нужно пытаться автоматически корректировать время или подстраивать его под текущее. Запишется именно то значение, которое мы явно присвоили свойству Дата на предыдущем шаге.

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

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

Используйте комбинацию из настройки свойств «Формат» / «Формат редактирования» на управляемой форме и программного приведения к началу дня через метод НачалоДня() в модуле объекта. Это обеспечит стабильную работу системы и удобство для пользователей.

← На главную