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