При разработке документов или справочников разработчики часто сталкиваются с ситуацией, когда в колонках табличной части вместо компактного времени отображается полная строка вида 01.01.0001 14:00:00. Выясним причину такого поведения платформы 1С и разберем по шагам, как настроить корректный вывод данных.
Проанализируем архитектуру хранения данных в платформе. В 1С тип данных Дата всегда физически содержит в себе две составляющие: календарную дату и время. Платформа не имеет отдельного чистого типа «Время» на уровне базы данных. Если реквизит предназначен только для фиксации времени, система автоматически подставляет пустую системную дату по умолчанию — 01.01.0001.
Если для реквизита табличной части не задан требуемый состав даты или не определена строка форматирования на форме, элемент управления отображает значение целиком. Рассмотрим основные способы исправления этой ситуации.
Разберем самое простое и правильное решение на уровне дерева метаданных конфигурации. Если данные вводятся напрямую в реквизит табличной части, состав даты необходимо настроить у самого реквизита.
ВремяНачала или ВремяОкончания) и откроем его свойства.Дата.Дата и время (или Дата) на Время.После такой настройки элемент управления на форме по умолчанию начнет отображать только временную часть, скрывая дату по умолчанию.
Бывают ситуации, когда реквизит уже существует в рабочей базе, используется в других механизмах или данные выводятся через точку от связанного справочника (например, Объект.ТЧ.График.Время1). В таких случаях изменение типа в метаданных может быть нежелательным или недоступным. Настроим отображение непосредственно в свойствах элемента формы.
Разберем по шагам настройку элемента управления таблицы:
ДФ=ЧЧ:мм:сс или ДФ=ЧЧ:мм).Формат, то при входе пользователя в режим редактирования ячейки платформа может снова попытаться открыть выбор полной даты. Зададим в свойстве ФорматРедактирования ту же строку формата: ДФ=ЧЧ:мм:сс.Если требуется применить правила отображения динамически или без изменения структуры элементов, используем механизм условного оформления формы или конкретной таблицы.
ДФ=ЧЧ:мм:сс.Рассмотрим случай, когда реквизиты времени берутся из связанного справочника. Здесь возможны два сценария:
СсылкаНаСправочник.Время1, такое поле доступно только для чтения. Состав даты реквизита справочника не всегда автоматически наследуется колонкой таблицы, поэтому для такого поля обязательно задаем свойство Формат вручную на форме.ПриИзменении значения времени переносятся в собственные реквизиты табличной части документа, важно следить, чтобы состав даты (Время) совпадал и у реквизитов справочника, и у реквизитов табличной части документа.Посмотрим на пример правильного программного заполнения строк таблицы при изменении ссылки на справочник:
&НаКлиенте
Процедура ТЧГрафикПриИзменении(Элемент)
СтрокаТЧ = Элементы.ТЧ.ТекущиеДанные;
Если СтрокаТЧ <> Неопределено Тогда
ЗаполнитьВремяПоСправочникуНаСервере(СтрокаТЧ.ГрафикРаботы, СтрокаТЧ.НомерСтроки);
КонецЕсли;
КонецПроцедуры
Помним также об особенности вычислений: если в дальнейшем потребуется рассчитывать интервал между началом и окончанием (например, длительность смены), значения с датой 01.01.0001 нельзя напрямую вычитать из дат текущего дня, иначе разница в секундах вернет некорректное число из-за разницы в годах. Для корректных расчетов оба значения должны иметь одинаковую дату.