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

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

При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача упростить интерфейс для пользователя. Стандартный выбор периода в 1С предлагает либо ввод двух дат, либо использование объекта СтандартныйПериод. Однако для многих аналитических и регламентированных отчетов требуется выбор конкретного месяца (например, "Январь 2024"), чтобы исключить ошибки ввода произвольных дней. Если вы используете стандартную форму отчета из Библиотеки стандартных подсистем (БСП) и не хотите создавать собственную форму, существует несколько эффективных способов решения этой задачи.

Рассмотрим подробно каждый из методов, начиная от простых настроек схемы СКД и заканчивая программным управлением настройками формы в модуле объекта отчета.

Способ 1. Использование механизма ОпределитьНастройкиФормы в БСП

БСП предоставляет специальный программный интерфейс для управления поведением стандартной формы отчета. Все настройки выполняются в модуле объекта отчета (не в модуле формы, так как формы у нас нет). Для этого используется процедура ОпределитьНастройкиФормы.

Разберем, как прописать настройки, которые заставят форму вести себя нужным образом. В модуле объекта внешнего отчета добавьте следующий код:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт    
    // Указываем вариант периода
    Настройки.ВариантПериода = Перечисления.ВариантыПериода.Месяц;
    
    // Устанавливаем представление в виде гиперссылки для удобства
    Настройки.ВариантПредставленияПериода = Перечисления.ВариантыПредставленияПериода.Гиперссылка;
    
КонецПроцедуры

Проанализируем ситуацию: использование Перечисления.ВариантыПериода.Месяц сообщает стандартной форме БСП, что основной акцент при выборе должен быть сделан на месяц. Важно учитывать, что этот метод работает в конфигурациях, где БСП интегрирована достаточно глубоко (например, Бухгалтерия предприятия 3.0 или ERP 2.5). Если в вашей версии БСП такие параметры не поддерживаются, перейдем к более универсальным методам через настройки самой СКД.

Способ 2. Настройка параметров СКД и формата редактирования

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

Выполним следующие шаги в конструкторе СКД (для отладки структуры параметров удобно использовать управляемую консоль запросов и отчетов):

  1. Перейдем на вкладку Параметры.
  2. Для параметра типа Дата (например, ПериодОтчета) найдем колонку Параметры редактирования.
  3. Установим свойство Формат редактирования. Используем строку формата ДФ='MMMM yyyy'. Это позволит отображать дату в виде "Январь 2024".
  4. Чтобы ограничить выбор только началом месяца, мы можем использовать свойство Доступные значения.

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


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    ПараметрМесяц = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Месяц");
    Если ПараметрМесяц <> Неопределено Тогда
        // Здесь можно программно заполнить список доступных значений
        // Но для стандартной формы БСП лучше использовать предопределенный список в СКД
    КонецЕсли;

КонецПроцедуры

Важный нюанс: Чтобы пользователь не мог выбрать произвольную дату внутри месяца, в параметрах редактирования СКД можно указать Маска.

Способ 3. Использование вспомогательного справочника или перечисления

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

Посмотрим на пример реализации через вспомогательный объект:

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

Пример преобразования в запросе:


ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоГода, МЕСЯЦ, &НомерМесяцаИзПараметра - 1) КАК НачалоПериода

Этот способ гарантирует, что на стандартной форме БСП пользователь увидит привычный выпадающий список или форму выбора справочника, где будут только названия месяцев. Это максимально "защищенный" от ошибок пользователя вариант.

Способ 4. Программная модификация элементов формы "на лету"

Даже если у нас нет физической формы отчета в конфигураторе, БСП создает её динамически. Мы можем вмешаться в этот процесс. В процедуре ОпределитьНастройкиФормы мы получаем доступ к объекту Форма. Хотя официально рекомендуется менять только структуру Настройки, опытные разработчики иногда используют этот доступ для изменения свойств элементов управления.

Рассмотрим, как изменить режим выбора для поля периода:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    
    // Это сработает, если форма уже инициализирована
    Для Каждого Элемент Из Форма.Элементы Цикл
        Если Найти(Элемент.Имя, "Период") > 0 Тогда
             // Устанавливаем режим выбора только месяца, если это поддерживается платформой
             Элемент.РежимВыбораИзСписка = Истина;
             Элемент.СписокВыбора.Добавить('20240101', "Январь 2024");
             Элемент.СписокВыбора.Добавить('20240201', "Февраль 2024");
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Внимание: Прямое манипулирование элементами формы в этой процедуре может зависеть от версии БСП. Проверьте, чтобы элемент с именем, содержащим "Период", существовал в коллекции Форма.Элементы в момент вызова процедуры.

Итоги и рекомендации

Подводя итог, проанализируем, какой метод выбрать:

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

← На главную