Как кастомизировать форму отчета на СКД в типовых конфигурациях и ограничить выбор периода

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

В современной разработке на платформе 1С:Предприятие 8.3, особенно при работе с типовыми конфигурациями (ERP, КА, УТ 11, БП 3.0), всё чаще возникает вопрос: стоит ли создавать собственные формы для отчетов на СКД (Схема компоновки данных) или лучше использовать стандартные механизмы? Прошли те времена, когда разработчики искали или рисовали уникальные шаблоны форм. Сегодня БСП (Библиотека стандартных подсистем) предоставляет мощный программный интерфейс, позволяющий изменять поведение отчета, не прибегая к визуальному редактированию форм.

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

Использование программного интерфейса БСП вместо правки форм

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

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

Разберем пример, как через структуру НастройкиФормы можно управлять интерфейсом:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, НастройкиФормы) Экспорт
    
    // Разрешаем или запрещаем автоматический расчет сумм в подвале
    НастройкиФормы.РазрешитьАвтосумму = Истина;
    
    // Указываем, нужно ли формировать отчет сразу при открытии
    НастройкиФормы.СформироватьПриОткрытии = Ложь;
    
    // Можно подключить дополнительные обработчики событий через этот интерфейс
КонецПроцедуры

Как ограничить выбор периода программно

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

Проанализируем ситуацию: если мы хотим внедрить ограничение, нам не нужно перерисовывать календарь. Мы можем использовать метод УстановитьОграничениеВыбораПериода. Это позволяет программно ограничить доступные даты без вмешательства в визуальную схему компоновки данных. Если же требуется, чтобы при нажатии на выбор периода открывалась специальная форма «выбора месяца», это реализуется через подписку на события элементов формы.

Работа с пользовательскими настройками и быстрым доступом

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

Чтобы программно влиять на эти элементы, мы можем использовать механизм «СобытияФормыОтчета». Рассмотрим алгоритм действий:

  1. Используем программный интерфейс, который позволяет «подписаться» на события формы прямо из модуля объекта.
  2. Для установки специфических списков выбора (например, загрузка данных из внешних источников) используем установку Параметров выбора непосредственно в схеме СКД на закладке «Параметры».
  3. Если данные динамические, заполняем доступные значения в процедуре ПриКомпоновкеРезультата модуля объекта.

Применение расширений для перехвата событий

Если штатных настроек ОпределитьНастройкиФормы недостаточно, наиболее корректным методом будет использование расширений конфигурации. Посмотрим на два основных способа перехвата управления:

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

2. Использование аннотации «&После» для «ПриСозданииНаСервере»
Хотя элементы быстрых настроек создаются динамически, к моменту завершения процедуры ПриСозданииНаСервере (в блоке &После) коллекция элементов формы уже содержит все сгенерированные поля. Мы можем найти их перебором:


&После("ПриСозданииНаСервере")
Процедура ИмяРасширения_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Для Каждого ЭлементФормы Из ЭтаФорма.Элементы Цикл
        // БСП присваивает имена на основе идентификаторов настроек СКД
        Если Найти(ЭлементФормы.Имя, "ПользовательскаяНастройка_") > 0 Тогда
            // Здесь мы можем программно изменить свойства элемента, 
            // например, назначить новый обработчик изменения.
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Создание кастомных форм для сложных задач

Бывают ситуации, когда отчет требует крайне сложного интерактивного взаимодействия, например, работы с диаграммами через Drag-and-drop или интеграции с внешними API в режиме реального времени. В этом случае использование типовой формы может стать избыточным или ограничивающим.

В такой ситуации рекомендуем следующий порядок действий:

  1. Не редактируйте общую форму отчета конфигурации.
  2. Создайте свою форму в объекте отчета.
  3. Используйте стандартный шаблон «Типовая форма отчета», который доступен в конфигураторе при создании новой формы.
  4. Важно: Чтобы отчет не потерял связь с БСП, в коде формы необходимо вызвать инициализирующие методы библиотечных модулей (обычно это процедуры ОтчетыСервер.ПриСозданииНаСервере() и соответствующие клиентские вызовы). Это позволит сохранить функционал рассылок и вариантов отчетов.

Программное управление оформлением

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

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

← На главную