Сразу оговорюсь: конечно, это баян, т.к. это всего лишь описание ещё одного способа. Наряду с множеством других.
С датой в динамическом списке можно, конечно, много всего сделать - на этапе самого запроса, или с помощью форматирования. Но это обычно делают в конфигураторе, или очень ограниченно вытаскивают функционал (например, меняющий текст запроса) в Предприятие, исходя из возможных потребностей. Панель конструктора форматной строки тоже не всем юзерам легко понятна.
При этом, есть сравнительно простой способ показать "производные" поля от даты, не вставляя никаких функций в запрос дин.списка, и вообще без обращения к серверу явным образом. Речь идёт об условном оформлении колонки, чьи данные имеют тип "Дата". Как известно, условное оформление позволяет использовать поля компоновки данных, и при упоминании такого вызова СКД после получения порции выборки, но до вызова "ПриПолученииДанныхНаСервере" выполняет обработку выборки своими, хорошо нам известными, функциями "НачалоПериода", "КонецПериода" и т.д., а также форматированием. Это и будем применять.
Нам доступны следующие пути к данным для полей:
производная "ДатыНачала": НачалоДня, НачалоНедели, НачалоДекады, НачалоМесяца, НачалоКвартала, НачалоПолугодия, НачалоГода
производная "ДатыКонца": КонецДня, КонецНедели, КонецДекады, КонецМесяца, КонецКвартала, КонецПолугодия, КонецГода
производная "ЧастиДат": День, ДеньНедели, НазваниеДняНедели, ДеньГода, НеделяГода, Месяц, НазваниеМесяца, Квартал, Год
Рассмотрим на примере.
Допустим, дин.список даёт нам колонку "ТестДата". Пользователю надо вывести на интерфейсе не только сами даты, а ещё названия дней недели, или концы декад этих дат.
Если условия задачи позволяют, создаём элементы формы в таб.поле дин.списка, называем их "ДеньНедели" и "КонецДекады", в качестве пути к данным у них - та же "ТестДата". Если условия не позволяют (например, мы в расширении и хочется обойтись только своим программным кодом), то придётся на сервере добавлять элементы:
рИмя="СписокТестДата_ДеньНедели";
элфУО=Элементы.ТабличноеПолеСписок.ПодчиненныеЭлементы.Найти(рИмя);
Если элфУО=Неопределено Тогда
элфУО=Элементы.Добавить(рИмя, Тип("ПолеФормы"), Элементы.ТабличноеПолеСписок);
элфУО.ПутьКДанным="Список.ТестДата"; // какой-то путь нужен
элфУО.Вид=ВидПоляФормы.ПолеВвода;
КонецЕсли;
элфУО.Заголовок="День недели";
// для конца декады аналогично
Собственно, добавим условное оформление, которое решает поставленную задачу:
идУО="ДеньНедели";
элУО=Неопределено; // ищем, создан ли элемент УО
Для каждого эл Из Список.УсловноеОформление.Элементы Цикл
Если эл.ИдентификаторПользовательскойНастройки=идУО Тогда элУО=эл; Прервать КонецЕсли;
КонецЦикла;
Если элУО=Неопределено Тогда
элУО=Список.УсловноеОформление.Элементы.Добавить();
элУО.ИдентификаторПользовательскойНастройки=идУО;
КонецЕсли;
элУО.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ТестДата.ЧастиДат.НазваниеДняНедели"));
// или
элУО.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ТестДата.ДатыКонца.КонецДекады"));
Если элУО.Поля.Элементы.Количество()=0 Тогда
полеУО=элУО.Поля.Элементы.Добавить();
полеУО.Поле=Новый ПолеКомпоновкиДанных("ТестДата");
полеУО.Использование=Истина;
КонецЕсли;
элУО.Использование=Истина;
Никакие условия не задаём, хотя при необходимости, конечно, можно.
В результате колонка дин.списка с, например, днями недели, примет вид, как на рис.1
Конечно, условное оформление текстом - это красиво, но пользователь захочет отборы и сортировки. Отбор пользователь может сам установить, см. рис.2 и 3. Соответствующие производные от даты платформа "разыменовывает" и поддерживает сама. Сортировки, к сожалению, платформа нам в интерфейсе "быстро и просто" не предоставляет, и это печально, т.к. вот тут уж придётся допиливать запрос, но это объяснимо с точки зрения порционной работы дин.списков и связанных с этим требований к производительности. По той же причине производные от даты недоступны в группировках списка.
Недостатком этого способа является невозможность СКД привязывать условное оформление к чему-либо, кроме поля выборки. Таким образом, мы можем оформить неким УО только некую одну колонку дин.списка, неважно, сколько у неё интерфейсных элементов - привязка идёт не к ним, а к самому реквизиту дин.списка. Это, в принципе, тоже обходится несколькими способами, но уже не является темой данной заметки.
На этом всё. Кому пригодится, особенно в расширениях, - хорошо.