Некоторое время назад фирма 1С начала оформлять поле Дата в динамических списках в двух стилях:
- время (09:52) для сегодняшних дат
- дата (28.05.2018) для не сегодняшних дат
Мне кажется это верное направление, но я решил пойти дальше и у меня получилось так:
- дата (28.05.2018) для дат не этого года
- сокращенная дата (28 мая) для дат этого года, но не этой недели
- день недели и время (Пн, 9:52) для дат этой недели, но не этого дня
- время (9:52) для дат этого дня.
Код, который все это делает, выглядит так:
Процедура УстановитьУсловноеОформлениеПоляДата(Форма, ИмяСписка = "Список", ИмяПоляДата = "Дата", ИмяРеквизитаДата = "Дата") Экспорт
УсловноеОформлениеКД = Форма.УсловноеОформление;
УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление";
// Представление даты до начала текущего года "17.04.2017"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ=dd.MM.yyyy",
,
ВариантСтандартнойДатыНачала.НачалоЭтогоГода);
// Представление даты до начала текущей недели "17 апр"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ='dd MMM'",
ВариантСтандартнойДатыНачала.НачалоЭтогоГода,
ВариантСтандартнойДатыНачала.НачалоЭтойНедели);
// Представление даты до начала текущго дня "пн 17:04"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ='ддд ЧЧ:мм'",
ВариантСтандартнойДатыНачала.НачалоЭтойНедели,
ВариантСтандартнойДатыНачала.НачалоЭтогоДня);
// Представление даты сегодня "09:46"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ=ЧЧ:мм",
ВариантСтандартнойДатыНачала.НачалоЭтогоДня,
ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
// Представление даты до окончания этой недели "пн 17:04"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ='ддд ЧЧ:мм'",
ВариантСтандартнойДатыНачала.НачалоСледующегоДня,
ВариантСтандартнойДатыНачала.НачалоСледующейНедели);
// Представление даты до окончания этого года "17 апр"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ='dd MMM'",
ВариантСтандартнойДатыНачала.НачалоСледующейНедели,
ВариантСтандартнойДатыНачала.НачалоСледующегоГода);
// Представление даты после окончания текущего года "17.04.2017"
УстановитьЭлементУсловногоОформленияПоляДата(
УсловноеОформлениеКД,
ИмяСписка + "." + ИмяРеквизитаДата,
ИмяПоляДата,
"ДФ=dd.MM.yyyy",
ВариантСтандартнойДатыНачала.НачалоСледующегоГода,
);
КонецПроцедуры
Процедура УстановитьЭлементУсловногоОформленияПоляДата(УсловноеОформлениеКД, ИмяПоляКД, ИмяОформляемогоПоля, Оформление, ДатаНачала = Неопределено, ДатаОкончания = Неопределено)
ЭлементУсловногоОформления = УсловноеОформлениеКД.Элементы.Добавить();
ЭлементУсловногоОформления.Использование = Истина;
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяОформляемогоПоля);
ЭлементУсловногоОформления.Представление = НСтр("ru = 'Представление даты " + Оформление);;
Если не ДатаНачала = Неопределено Тогда
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоляКД);
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ДатаНачала);
ЭлементОтбораДанных.Использование = Истина;
КонецЕсли;
Если не ДатаОкончания = Неопределено Тогда
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоляКД);
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбораДанных.ПравоеЗначение = Новый СтандартнаяДатаНачала(ДатаОкончания);
ЭлементОтбораДанных.Использование = Истина;
КонецЕсли;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Формат", Оформление);
КонецПроцедуры