Даты в динамическом списке

20.08.21

Разработка - Механизмы платформы 1С

Красивые представления и функции от дат - простой способ сделать.

Сразу оговорюсь: конечно, это баян, т.к. это всего лишь описание ещё одного способа. Наряду с множеством других.

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

При этом, есть сравнительно простой способ показать "производные" поля от даты, не вставляя никаких функций в запрос дин.списка, и вообще без обращения к серверу явным образом. Речь идёт об условном оформлении колонки, чьи данные имеют тип "Дата". Как известно, условное оформление позволяет использовать поля компоновки данных, и при упоминании такого вызова СКД после получения порции выборки, но до вызова "ПриПолученииДанныхНаСервере" выполняет обработку выборки своими, хорошо нам известными, функциями "НачалоПериода", "КонецПериода" и т.д., а также форматированием. Это и будем применять.

Нам доступны следующие пути к данным для полей:

производная "ДатыНачала": НачалоДня, НачалоНедели, НачалоДекады, НачалоМесяца, НачалоКвартала, НачалоПолугодия,  НачалоГода

производная "ДатыКонца": КонецДня, КонецНедели, КонецДекады, КонецМесяца, КонецКвартала, КонецПолугодия, КонецГода

производная "ЧастиДат": День, ДеньНедели, НазваниеДняНедели, ДеньГода, НеделяГода, Месяц, НазваниеМесяца, Квартал, Год
 

Рассмотрим на примере.

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

Если условия задачи позволяют, создаём элементы формы в таб.поле дин.списка, называем их "ДеньНедели" и "КонецДекады", в качестве пути к данным у них - та же "ТестДата". Если условия не позволяют (например, мы в расширении и хочется обойтись только своим программным кодом), то придётся на сервере добавлять элементы:

рИмя="СписокТестДата_ДеньНедели";
элфУО=Элементы.ТабличноеПолеСписок.ПодчиненныеЭлементы.Найти(рИмя);
Если элфУО=Неопределено Тогда
	элфУО=Элементы.Добавить(рИмя, Тип("ПолеФормы"), Элементы.ТабличноеПолеСписок);
	элфУО.ПутьКДанным="Список.ТестДата"; // какой-то путь нужен
	элфУО.Вид=ВидПоляФормы.ПолеВвода;
КонецЕсли;	
элфУО.Заголовок="День недели";

// для конца декады аналогично

Собственно, добавим условное оформление, которое решает поставленную задачу:

идУО="ДеньНедели";

элУО=Неопределено; // ищем, создан ли элемент УО
Для каждого эл Из Список.УсловноеОформление.Элементы Цикл
	Если эл.ИдентификаторПользовательскойНастройки=идУО Тогда элУО=эл; Прервать КонецЕсли;
КонецЦикла;
Если элУО=Неопределено Тогда
	элУО=Список.УсловноеОформление.Элементы.Добавить();
	элУО.ИдентификаторПользовательскойНастройки=идУО;
КонецЕсли;
	
элУО.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ТестДата.ЧастиДат.НазваниеДняНедели"));
// или
элУО.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ТестДата.ДатыКонца.КонецДекады"));
	
Если элУО.Поля.Элементы.Количество()=0 Тогда
	полеУО=элУО.Поля.Элементы.Добавить();
	полеУО.Поле=Новый ПолеКомпоновкиДанных("ТестДата");
	полеУО.Использование=Истина;
КонецЕсли;
	
элУО.Использование=Истина;

Никакие условия не задаём, хотя при необходимости, конечно, можно.

В результате колонка дин.списка с, например, днями недели, примет вид, как на рис.1

Конечно, условное оформление текстом - это красиво, но пользователь захочет отборы и сортировки. Отбор пользователь может сам установить, см. рис.2 и 3. Соответствующие производные от даты платформа "разыменовывает" и поддерживает сама. Сортировки, к сожалению, платформа нам  в интерфейсе "быстро и просто" не предоставляет, и это печально, т.к. вот тут уж придётся допиливать запрос, но это объяснимо с точки зрения порционной работы дин.списков и связанных с этим требований к производительности. По той же причине производные от даты недоступны в группировках списка.

Недостатком этого способа является невозможность СКД привязывать условное оформление к чему-либо, кроме поля выборки. Таким образом, мы можем оформить неким УО только некую одну колонку дин.списка, неважно, сколько у неё интерфейсных элементов - привязка идёт не к ним, а к самому реквизиту дин.списка. Это, в принципе, тоже обходится несколькими способами, но уже не является темой данной заметки.

 
 Некоторые особенности

На этом всё. Кому пригодится, особенно в расширениях, - хорошо.

Динамический список СКД условное оформление

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2568    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5926    dsdred    55    

83

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5878    YA_418728146    25    

68

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6981    dsdred    36    

113

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19077    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12786    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9410    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6530    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Aftee 20.08.21 15:42 Сейчас в теме
Давным-давно такое делал ... )
Nadin_1; Yashazz; +2 Ответить
2. A_Max 19 24.08.21 11:38 Сейчас в теме
У меня только одно свербит уже давно....
Когда уже у Элементы сделают метод Найти?????
sys1c; epsilon; Yashazz; +3 Ответить
3. Nadin_1 25.08.21 19:00 Сейчас в теме
Оставьте свое сообщение