При разработке отчетов на базе системы компоновки данных (СКД) часто возникает задача ограничить выбор пользователя определенным периодом — например, предоставить возможность выбирать только месяц и год, исключив необходимость кликать по конкретным дням в календаре. При этом стандартное поведение поля ввода с типом Дата открывает календарь с днями, а создание отдельной формы отчета и обработка событий выбора даты в коде усложняют разработку.
Разберем ограничения платформы 1С:Предприятие и рассмотрим несколько проверенных способов решения этой задачи исключительно встроенными средствами СКД без доработки форм.
Проанализируем, почему обычная настройка формата даты не решает задачу полностью:
Дата, при нажатии на кнопку выбора платформа всегда открывает стандартное окно календаря, где отображаются числа месяца.ДФ='ММММ гггг') лишь маскирует текстовое отображение даты в поле ввода, но диалоговое окно выбора остается прежним.Рассмотрим наиболее быстрый и стандартный способ, предложенный в обсуждении. Платформа 1С содержит предопределенный тип СтандартныйПериод, который предоставляет пользователю удобное окно с готовыми вариантами выбора («Этот месяц», «Прошлый месяц», конкретные месяцы года и т. д.).
Разберем пошаговую настройку схемы компоновки данных:
ПериодОтчета, и укажем ему тип СтандартныйПериод. Включим его в пользовательские настройки.&НачалоПериода и &КонецПериода установим флаг Ограничение доступности, чтобы скрыть их от пользователя.
// Для параметра НачалоПериода:
&ПериодОтчета.ДатаНачала
// Для параметра КонецПериода:
&ПериодОтчета.ДатаОкончания
При необходимости скорректировать конец периода до конца дня можно использовать стандартную функцию СКД: КонецПериода(&ПериодОтчета.ДатаОкончания, "День"). Данный подход позволяет пользователю в один клик выбирать нужный месяц из готового списка вариантов.
Если требуется, чтобы пользователь выбирал месяц из фиксированного выпадающего списка, разберем настройку таблицы доступных значений.
Период с типом Дата.01.01.2024 00:00:00, 01.02.2024 00:00:00), а в колонку Представление — понятный текст («Январь 2024», «Февраль 2024»).В интерфейсе поле ввода автоматически трансформируется из календаря в выпадающий список. Основным ограничением этого способа является статичность: список периодов необходимо периодически дополнять вручную в конфигураторе.
Рассмотрим универсальный вариант, позволяющий пользователю гибко указывать любой год и выбирать месяц из списка без использования календаря.
Разберем реализацию схемы:
Год с типом Число (длина 4, без дробной части).Месяц с типом Число. В его свойстве Доступные значения зададим 12 строк (значения от 1 до 12 с представлениями «Январь», «Февраль» ... «Декабрь»).&ДатаНачала установим ограничение доступности и пропишем расчетное выражение через встроенную функцию СКД:
ДатаВремя(&Год, &Месяц, 1)
&ДатаОкончания укажем выражение:
КонецПериода(ДатаВремя(&Год, &Месяц, 1), "Месяц")
Посмотрим на результат: в шапке отчета пользователь видит два простых поля — числовое поле для ввода года и выпадающий список месяцев. Служебные параметры дат рассчитываются автоматически и передаются в текст запроса.
Если в конфигурации присутствует стандартное перечисление МесяцыГода, проанализируем возможность его применения:
ВыбранныйМесяц с типом ссылки на перечисление.Год с типом Число.ДатаВремя.Выбор конкретного решения зависит от требований к интерфейсу отчета:
ДатаВремя().