Как в отчете на СКД сделать выбор месяца вместо конкретной даты без создания формы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем ограничения платформы 1С:Предприятие и рассмотрим несколько проверенных способов решения этой задачи исключительно встроенными средствами СКД без доработки форм.

Ограничения стандартного типа «Дата» в СКД

Проанализируем, почему обычная настройка формата даты не решает задачу полностью:

  1. Если параметру назначен тип Дата, при нажатии на кнопку выбора платформа всегда открывает стандартное окно календаря, где отображаются числа месяца.
  2. Установка формата редактирования (например, ДФ='ММММ гггг') лишь маскирует текстовое отображение даты в поле ввода, но диалоговое окно выбора остается прежним.
  3. Штатного диалога платформы «только Месяц + Год» для стандартного поля даты в автогенерируемых формах СКД не предусмотрено.

Способ 1. Использование типа «СтандартныйПериод»

Рассмотрим наиболее быстрый и стандартный способ, предложенный в обсуждении. Платформа 1С содержит предопределенный тип СтандартныйПериод, который предоставляет пользователю удобное окно с готовыми вариантами выбора («Этот месяц», «Прошлый месяц», конкретные месяцы года и т. д.).

Разберем пошаговую настройку схемы компоновки данных:

  1. Перейдем на вкладку Параметры в схеме компоновки данных.
  2. Добавим новый параметр, например ПериодОтчета, и укажем ему тип СтандартныйПериод. Включим его в пользовательские настройки.
  3. Для скрытых параметров запроса &НачалоПериода и &КонецПериода установим флаг Ограничение доступности, чтобы скрыть их от пользователя.
  4. В колонке Выражение для параметров запроса пропишем вычисление границ периода:
    
    // Для параметра НачалоПериода:
    &ПериодОтчета.ДатаНачала
    
    // Для параметра КонецПериода:
    &ПериодОтчета.ДатаОкончания
    

При необходимости скорректировать конец периода до конца дня можно использовать стандартную функцию СКД: КонецПериода(&ПериодОтчета.ДатаОкончания, "День"). Данный подход позволяет пользователю в один клик выбирать нужный месяц из готового списка вариантов.

Способ 2. Заполнение доступных значений даты

Если требуется, чтобы пользователь выбирал месяц из фиксированного выпадающего списка, разберем настройку таблицы доступных значений.

  1. Откроем вкладку Параметры схемы компоновки данных.
  2. Найдем параметр Период с типом Дата.
  3. В свойстве Доступные значения заполним список: в колонку Значение введем начальные даты (например, 01.01.2024 00:00:00, 01.02.2024 00:00:00), а в колонку Представление — понятный текст («Январь 2024», «Февраль 2024»).

В интерфейсе поле ввода автоматически трансформируется из календаря в выпадающий список. Основным ограничением этого способа является статичность: список периодов необходимо периодически дополнять вручную в конфигураторе.

Способ 3. Разделение на параметры «Месяц» и «Год»

Рассмотрим универсальный вариант, позволяющий пользователю гибко указывать любой год и выбирать месяц из списка без использования календаря.

Разберем реализацию схемы:

  1. Создадим пользовательский параметр Год с типом Число (длина 4, без дробной части).
  2. Создадим пользовательский параметр Месяц с типом Число. В его свойстве Доступные значения зададим 12 строк (значения от 1 до 12 с представлениями «Январь», «Февраль» ... «Декабрь»).
  3. Для рабочего параметра запроса &ДатаНачала установим ограничение доступности и пропишем расчетное выражение через встроенную функцию СКД: ДатаВремя(&Год, &Месяц, 1)
  4. Для параметра &ДатаОкончания укажем выражение: КонецПериода(ДатаВремя(&Год, &Месяц, 1), "Месяц")

Посмотрим на результат: в шапке отчета пользователь видит два простых поля — числовое поле для ввода года и выпадающий список месяцев. Служебные параметры дат рассчитываются автоматически и передаются в текст запроса.

Способ 4. Использование перечисления месяцев

Если в конфигурации присутствует стандартное перечисление МесяцыГода, проанализируем возможность его применения:

  1. Создадим параметр ВыбранныйМесяц с типом ссылки на перечисление.
  2. Создадим параметр Год с типом Число.
  3. Итоговую дату начала месяца получим с помощью вызова функции общего модуля с признаком повторного использования или через конструкцию условий СКД, формирующую итоговое значение ДатаВремя.

Итоги

Выбор конкретного решения зависит от требований к интерфейсу отчета:

  1. Для большинства типовых отчетов оптимально использовать параметр с типом СтандартныйПериод — это штатный механизм платформы 1С, не требующий ручного заполнения списков.
  2. Если требуется строго ограничить выбор отдельным месяцем текущего года, разделим настройки на параметры Месяц и Год с вычислением даты через ДатаВремя().
← На главную