При разработке новых отчетов в конфигурациях, использующих «1С:Библиотеку стандартных подсистем» (БСП), программисты часто сталкиваются с ситуацией, когда стандартная форма отчета не «подхватывает» программные настройки. Вы добавляете процедуры для создания кнопок или изменения компоновки, но они просто не вызываются. Разберем детально, почему это происходит и как правильно зарегистрировать отчет в экосистеме БСП.
Первая и самая распространенная ошибка — неверное расположение экспортных процедур. Проанализируем ситуацию: в БСП существует разделение логики для внешних и встроенных отчетов. Рассмотрим ключевое различие:
Если вы добавили отчет непосредственно в конфигурацию, убедитесь, что процедуры ОпределитьНастройкиФормы и ПриОпределенииНастроекОтчета находятся в модуле менеджера и помечены ключевым словом Экспорт.
Рассмотрим, какие именно методы должны быть реализованы в модуле менеджера вашего отчета для корректного взаимодействия со стандартной формой. Разберем пример кода, который позволяет программно модифицировать форму:
// В модуле менеджера отчета
// Определяет настройки внешнего вида стандартной формы отчета.
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
// Пример добавления своей кнопки на форму
Настройки.СобытияПриСозданииНаСервере = Истина;
КонецПроцедуры
// Вызывается, если в ОпределитьНастройкиФормы установлено Настройки.СобытияПриСозданииНаСервере = Истина
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
// Здесь мы можем программно добавить кнопки или изменить элементы формы
НоваяКоманда = Форма.Команды.Добавить("МояСпециальнаяКоманда");
НоваяКоманда.Действие = "Подключаемый_ВыполнитьКоманду";
НоваяКнопка = Форма.Элементы.Добавить("МояКнопка", Тип("КнопкаФормы"), Форма.Элементы.ГруппаКоманднаяПанель);
НоваяКнопка.ИмяКоманды = "МояСпециальнаяКоманда";
НоваяКнопка.Заголовок = "Дополнительное действие";
КонецПроцедуры
Важно понимать, что процедура ПриСозданииНаСервере в данном контексте — это не стандартное событие формы, а экспортная процедура модуля менеджера, которую вызывает стандартная форма БСП, если в настройках указано соответствующее разрешение.
Многие разработчики полагают, что вызова процедуры Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника() достаточно для регистрации изменений. Однако для подсистемы «Варианты отчетов» этого мало. Проанализируем механизм кэширования БСП:
Система хранит информацию о наличии настроечных процедур в специальном зашифрованном кэше внутри регистра сведений ПараметрыРаботыПрограммы. Пока этот кэш не будет обновлен, стандартная форма будет «думать», что у отчета нет никаких специальных настроек, и не станет обращаться к его модулю менеджера. Это сделано для повышения производительности, чтобы не сканировать модули сотен отчетов при каждом открытии формы.
Если вы убедились, что код написан верно, но вызов процедур не происходит, необходимо заставить систему пересчитать кэш вариантов отчетов. Рассмотрим несколько способов, от штатных до «ручных».
ВариантыОтчетов.Обновить(Истина);
Параметр Истина указывает на необходимость полного пересчета данных./C ЗапуститьОбновлениеИнформационнойБазы также приводит к инициализации всех механизмов регистрации БСП.Иногда возникают ситуации (особенно при работе с расширениями), когда стандартные методы не помогают. В этом случае можно проанализировать работу модуля ВариантыОтчетов. Выясним причину, заглянув внутрь процесса обновления:
В модуле менеджера регистра сведений ПараметрыРаботыПрограммы или в общем модуле ВариантыОтчетов найдите процедуру СформироватьТаблицуФункциональныхОпций (или аналогичную, отвечающую за сбор настроек). Внутри этой процедуры происходит цикл перебора всех отчетов метаданных. Система проверяет наличие процедур в модуле менеджера с помощью попытки вызова или анализа структуры метаданных.
Если ваш отчет не попадает в этот список как «имеющий настройки», проверьте следующее:
ХранилищеВариантовОтчетов (это критически важно для корректной работы БСП).Если вы добавляете отчет через расширение конфигурации, помните, что механизм регистрации может работать с задержкой. Убедитесь, что расширение не находится в режиме совместимости, который блокирует работу с модулями менеджера. В некоторых версиях БСП для корректной регистрации отчета из расширения требуется вручную вызвать ВариантыОтчетов.Обновить(), так как автоматическое отслеживание изменений в расширениях может не срабатывать при каждом динамическом обновлении.
Подводя итог, скажем: секрет успеха заключается в правильном месте (модуль менеджера) и актуальном кэше (регистр параметров работы программы). Следуя этим шагам, вы обеспечите стабильную работу программных интерфейсов ваших отчетов в любой типовой конфигурации.