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