При работе в современных конфигурациях, таких как УТ 11.4, ERP 2.4 или КА 2.4, пользователи часто сталкиваются с тем, что в журнале документов (например, продажи или закупки) в колонке «Дата» отображается только число, месяц и год. Попытки изменить ситуацию стандартными методами через меню «Ещё — Изменить форму» или установку формата ДЛФ=DT в конфигураторе часто не приносят результата. Система игнорирует настройки и упрямо скрывает время документа.
В этой статье мы подробно разберем, почему так происходит, и рассмотрим несколько эффективных способов решения задачи: от простых настроек в пользовательском режиме до программной корректировки через расширения.
Проанализируем архитектуру конфигурации. В современных решениях на базе Библиотеки стандартных подсистем (БСП) интерфейс форм часто настраивается динамически при открытии. Для журналов документов используется механизм программного установления условного оформления.
Даже если вы установите нужный формат в свойствах элемента формы в конфигураторе, при создании формы на сервере выполняется код БСП, который находит колонку даты и принудительно вешает на нее правило: отображать только дату (ДЛФ=D). Это делается разработчиками для экономии экранного пространства, так как в списках время считается вторичной информацией. Основным «виновником» является вызов процедуры УстановитьУсловноеОформлениеПоляДата в общем модуле СтандартныеПодсистемыСервер.
Наиболее корректным и «чистым» методом решения проблемы является внесение изменений в модуль формы списка документов через механизм расширений. Это позволит сохранить поддержку основной конфигурации и точечно решить задачу именно для журнала продаж.
Нам необходимо найти форму СписокДокументов в обработке ЖурналДокументовПродажи. Разберем по шагам наши действия в модуле этой формы:
ПриСозданииНаСервере.&После для этой процедуры.В коде нам нужно либо найти и изменить существующий элемент условного оформления, либо закомментировать вызов стандартной процедуры БСП. Рассмотрим пример кода, который отключает принудительное форматирование:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура ИЗМ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Находим вызов, который устанавливает формат даты
// В типовом коде это обычно выглядит так:
// СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.Дата", Элементы.СписокДата.Имя);
// Чтобы вернуть отображение времени, мы можем программно переопределить
// условное оформление для конкретного поля:
Для Каждого Элемент Из УсловноеОформление.Элементы Цикл
Для Каждого ОформляемоеПоле Из Элемент.Поля.Элементы Цикл
Если Строка(ОформляемоеПоле.Поле) = "СписокДата" Тогда
// Устанавливаем формат Дата + Время
Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=DT");
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Проанализируем ситуацию: если мы просто закомментируем вызов процедуры БСП, система перестанет принудительно форматировать дату, и тогда начнут работать настройки, заданные в конфигураторе или через «Изменить форму».
Если у вас нет возможности вносить изменения в код, можно попробовать решить задачу через настройки динамического списка в режиме «1С:Предприятие». Этот способ основан на добавлении дублирующего поля.
Дата (или ДатаДокументаИБ, если используется Реестр документов).Важное замечание: Как отмечают опытные разработчики (см. Сообщение 10), использование в выражениях полей через точку (например, Ссылка.Дата) может привести к существенному замедлению работы списка. Однако, если использовать поле Дата напрямую из основного источника данных (регистра РеестрДокументов), падения производительности быть не должно.
Рассмотрим ситуацию, когда необходимо включить время во всех списках документов системы. Для этого придется изменить общий модуль СтандартныеПодсистемыСервер. Найдем функцию УстановитьУсловноеОформлениеПоляДата.
Внутри этой процедуры создается элемент оформления. Мы можем изменить строку установки формата:
// Было:
// ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=D");
// Стало:
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=DT");
Внимание: Этот метод крайне не рекомендуется, так как он затронет все документы (Заказы, Поступления, Акты, Складские ордера и т.д.). Колонки станут шире, и интерфейс может стать перегруженным. Используйте этот вариант только в исключительных случаях.
В УТ 11.4 данные в журнал продаж попадают не напрямую из документов, а из специального вспомогательного регистра сведений РеестрДокументов. Это сделано для ускорения работы больших списков. Проанализируем состав этого регистра: в нем есть измерение Дата и ресурс ДатаДокументаИБ.
При настройке динамического списка в конфигураторе убедитесь, что вы работаете с нужным полем. Если вы решите изменить запрос динамического списка вручную, старайтесь не использовать соединения с таблицами документов по ссылке, так как это «тяжелая» операция для базы данных. Все необходимые данные для отображения списка уже должны быть в регистре РеестрДокументов.
Разберем еще один важный момент. Когда в колонке «Дата» отображается только дата без времени, стандартная группировка списка (например, по дням) работает корректно. Если вы примените формат ДЛФ=DT, это изменит только визуальное представление, но не изменит тип данных. Сортировка по-прежнему будет учитывать секунды, что правильно.
Однако, если вы создадите пользовательское поле-выражение и попытаетесь по нему сгруппировать список, система может создать отдельную группу на каждую секунду. Поэтому для группировки всегда оставляйте исходное поле Дата, а формат «Дата + Время» используйте только для отображения в колонке.
Для изменения формата даты в журнале продаж УТ 11.4 рекомендуется:
ПриСозданииНаСервере формы списка.Такой подход гарантирует стабильность работы системы, легкость будущих обновлений и достижение желаемого результата для пользователей.