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