При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача упростить интерфейс для пользователя. Стандартный выбор периода в 1С предлагает либо ввод двух дат, либо использование объекта СтандартныйПериод. Однако для многих аналитических и регламентированных отчетов требуется выбор конкретного месяца (например, "Январь 2024"), чтобы исключить ошибки ввода произвольных дней. Если вы используете стандартную форму отчета из Библиотеки стандартных подсистем (БСП) и не хотите создавать собственную форму, существует несколько эффективных способов решения этой задачи.
Рассмотрим подробно каждый из методов, начиная от простых настроек схемы СКД и заканчивая программным управлением настройками формы в модуле объекта отчета.
БСП предоставляет специальный программный интерфейс для управления поведением стандартной формы отчета. Все настройки выполняются в модуле объекта отчета (не в модуле формы, так как формы у нас нет). Для этого используется процедура ОпределитьНастройкиФормы.
Разберем, как прописать настройки, которые заставят форму вести себя нужным образом. В модуле объекта внешнего отчета добавьте следующий код:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
// Указываем вариант периода
Настройки.ВариантПериода = Перечисления.ВариантыПериода.Месяц;
// Устанавливаем представление в виде гиперссылки для удобства
Настройки.ВариантПредставленияПериода = Перечисления.ВариантыПредставленияПериода.Гиперссылка;
КонецПроцедуры
Проанализируем ситуацию: использование Перечисления.ВариантыПериода.Месяц сообщает стандартной форме БСП, что основной акцент при выборе должен быть сделан на месяц. Важно учитывать, что этот метод работает в конфигурациях, где БСП интегрирована достаточно глубоко (например, Бухгалтерия предприятия 3.0 или ERP 2.5). Если в вашей версии БСП такие параметры не поддерживаются, перейдем к более универсальным методам через настройки самой СКД.
Если нам нужно, чтобы пользователь выбирал значение из выпадающего списка или через календарь, где видны только месяцы, мы можем настроить свойства самого параметра в схеме компоновки данных.
Выполним следующие шаги в конструкторе СКД (для отладки структуры параметров удобно использовать управляемую консоль запросов и отчетов):
Дата (например, ПериодОтчета) найдем колонку Параметры редактирования.ДФ='MMMM yyyy'. Это позволит отображать дату в виде "Январь 2024".Рассмотрим подробнее вариант с Доступными значениями. Если список месяцев ограничен (например, текущий год), вы можете заполнить их статически прямо в схеме. Однако лучше сделать это динамически. Поскольку мы работаем в стандартной форме БСП, мы можем перехватить инициализацию параметров в процедуре ПриКомпоновкеРезультата модуля объекта:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ПараметрМесяц = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Месяц");
Если ПараметрМесяц <> Неопределено Тогда
// Здесь можно программно заполнить список доступных значений
// Но для стандартной формы БСП лучше использовать предопределенный список в СКД
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы пользователь не мог выбрать произвольную дату внутри месяца, в параметрах редактирования СКД можно указать Маска.
Выясним причину, по которой стандартный календарь часто не устраивает разработчиков: он всегда позволяет выбрать конкретное число. Чтобы полностью исключить эту возможность на стандартной форме, можно создать параметр с типом, отличным от Дата.
Посмотрим на пример реализации через вспомогательный объект:
ВыбранныйМесяц с типом ссылки на этот объект.Пример преобразования в запросе:
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоГода, МЕСЯЦ, &НомерМесяцаИзПараметра - 1) КАК НачалоПериода
Этот способ гарантирует, что на стандартной форме БСП пользователь увидит привычный выпадающий список или форму выбора справочника, где будут только названия месяцев. Это максимально "защищенный" от ошибок пользователя вариант.
Даже если у нас нет физической формы отчета в конфигураторе, БСП создает её динамически. Мы можем вмешаться в этот процесс. В процедуре ОпределитьНастройкиФормы мы получаем доступ к объекту Форма. Хотя официально рекомендуется менять только структуру Настройки, опытные разработчики иногда используют этот доступ для изменения свойств элементов управления.
Рассмотрим, как изменить режим выбора для поля периода:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
// Это сработает, если форма уже инициализирована
Для Каждого Элемент Из Форма.Элементы Цикл
Если Найти(Элемент.Имя, "Период") > 0 Тогда
// Устанавливаем режим выбора только месяца, если это поддерживается платформой
Элемент.РежимВыбораИзСписка = Истина;
Элемент.СписокВыбора.Добавить('20240101', "Январь 2024");
Элемент.СписокВыбора.Добавить('20240201', "Февраль 2024");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Внимание: Прямое манипулирование элементами формы в этой процедуре может зависеть от версии БСП. Проверьте, чтобы элемент с именем, содержащим "Период", существовал в коллекции Форма.Элементы в момент вызова процедуры.
Подводя итог, проанализируем, какой метод выбрать:
Настройки.ВариантПериода. Это самый "чистый" метод, предусмотренный разработчиками БСП.Дата, используйте Способ 2 с настройкой Формата редактирования в СКД. Это изменит визуальное представление, но сохранит стандартную логику работы с датами в запросах.Используя эти подходы, вы сможете добиться профессионального вида отчета на стандартных формах БСП, делая работу пользователя более комфортной и эффективной.