В современной разработке на платформе 1С:Предприятие 8.3, особенно при работе с типовыми конфигурациями (ERP, КА, УТ 11, БП 3.0), всё чаще возникает вопрос: стоит ли создавать собственные формы для отчетов на СКД (Схема компоновки данных) или лучше использовать стандартные механизмы? Прошли те времена, когда разработчики искали или рисовали уникальные шаблоны форм. Сегодня БСП (Библиотека стандартных подсистем) предоставляет мощный программный интерфейс, позволяющий изменять поведение отчета, не прибегая к визуальному редактированию форм.
В этой статье мы разберем, как правильно дорабатывать отчеты, использовать возможности БСП для ограничения выбора периода (например, только до месяца) и программно управлять элементами формы.
Для начала проанализируем, почему не рекомендуется создавать свои формы отчетов «с нуля». Когда мы создаем собственную форму, мы берем на себя ответственность за поддержку всех сервисных функций БСП: рассылку отчетов, сохранение вариантов, печать, отправку по почте и другие механизмы. Чтобы сохранить этот функционал, лучше использовать внедрение кода в модуль объекта отчета или использовать расширения.
Рассмотрим ключевую точку входа для настройки поведения отчета — процедуру ОпределитьНастройкиФормы. Она располагается в модуле объекта отчета и позволяет передать параметры в общую форму еще до того, как она будет полностью построена.
Разберем пример, как через структуру НастройкиФормы можно управлять интерфейсом:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, НастройкиФормы) Экспорт
// Разрешаем или запрещаем автоматический расчет сумм в подвале
НастройкиФормы.РазрешитьАвтосумму = Истина;
// Указываем, нужно ли формировать отчет сразу при открытии
НастройкиФормы.СформироватьПриОткрытии = Ложь;
// Можно подключить дополнительные обработчики событий через этот интерфейс
КонецПроцедуры
Часто возникает специфическая задача: нужно запретить пользователю выбирать произвольный период (например, несколько лет) и разрешить только выбор конкретного месяца. В типовых формах БСП для этого существует штатный метод в модуле ОтчетыКлиентСервер.
Проанализируем ситуацию: если мы хотим внедрить ограничение, нам не нужно перерисовывать календарь. Мы можем использовать метод УстановитьОграничениеВыбораПериода. Это позволяет программно ограничить доступные даты без вмешательства в визуальную схему компоновки данных. Если же требуется, чтобы при нажатии на выбор периода открывалась специальная форма «выбора месяца», это реализуется через подписку на события элементов формы.
Выясним причину, по которой многие разработчики сталкиваются с трудностями при попытке изменить элементы в ПриСозданииНаСервере. В типовых отчетах БСП форма генерируется динамически. Элементы «быстрого доступа» (параметры и отборы, вынесенные пользователем на форму) создаются программно в процессе инициализации.
Чтобы программно влиять на эти элементы, мы можем использовать механизм «СобытияФормыОтчета». Рассмотрим алгоритм действий:
Параметров выбора непосредственно в схеме СКД на закладке «Параметры».ПриКомпоновкеРезультата модуля объекта.Если штатных настроек ОпределитьНастройкиФормы недостаточно, наиболее корректным методом будет использование расширений конфигурации. Посмотрим на два основных способа перехвата управления:
1. Перехват события «ПередЗагрузкойВариантаНаСервере»
Этот метод позволяет модифицировать настройки компоновщика (фильтры, параметры) до того, как они будут применены к форме и отображены пользователю.
2. Использование аннотации «&После» для «ПриСозданииНаСервере»
Хотя элементы быстрых настроек создаются динамически, к моменту завершения процедуры ПриСозданииНаСервере (в блоке &После) коллекция элементов формы уже содержит все сгенерированные поля. Мы можем найти их перебором:
&После("ПриСозданииНаСервере")
Процедура ИмяРасширения_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Каждого ЭлементФормы Из ЭтаФорма.Элементы Цикл
// БСП присваивает имена на основе идентификаторов настроек СКД
Если Найти(ЭлементФормы.Имя, "ПользовательскаяНастройка_") > 0 Тогда
// Здесь мы можем программно изменить свойства элемента,
// например, назначить новый обработчик изменения.
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Бывают ситуации, когда отчет требует крайне сложного интерактивного взаимодействия, например, работы с диаграммами через Drag-and-drop или интеграции с внешними API в режиме реального времени. В этом случае использование типовой формы может стать избыточным или ограничивающим.
В такой ситуации рекомендуем следующий порядок действий:
ОтчетыСервер.ПриСозданииНаСервере() и соответствующие клиентские вызовы). Это позволит сохранить функционал рассылок и вариантов отчетов.Напоследок разберем еще одну возможность — программное управление Условным оформлением. Часто разработчики создают десятки вариантов отчета только для того, чтобы покрасить строки в разные цвета для разных пользователей. Вместо этого мы можем программно добавлять элементы условного оформления в процедуре ПриКомпоновкеРезультата. Это позволяет менять шрифты, цвета или доступность полей в зависимости от прав текущего пользователя или значений других параметров системы, сохраняя схему СКД чистой и универсальной.
Таким образом, современный подход к отчетам на СКД заключается в максимальном использовании программных интерфейсов БСП и расширений, что обеспечивает легкость обновления конфигурации и сохранение всех сервисных возможностей системы.