Как исправить ошибку Поле объекта не обнаружено (КонтекстВарианта) при работе с отчетами в БСП

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке или добавлении новых отчетов в конфигурации, использующие Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с ситуацией, когда при попытке сохранить измененный вариант отчета система выдает критическую ошибку: «Поле объекта не обнаружено (КонтекстВарианта)». Эта проблема кажется загадочной, так как она возникает в типовом коде БСП, который обычно не подлежит изменению. В данной статье мы детально разберем природу этого сбоя и выясним, какие настройки необходимо выполнить, чтобы отчет корректно взаимодействовал с механизмами 1С.

Почему возникает ошибка на техническом уровне

Давайте проанализируем ситуацию. Ошибка происходит в форме СохранениеВариантаОтчета, которая входит в состав подсистемы «Варианты отчетов» БСП. Программный код пытается обратиться к владельцу формы (то есть к форме самого отчета) и прочитать значение реквизита КонтекстВарианта. Рассмотрим строку кода, вызывающую исключение:

ЭтоКонтекстныйВариантОтчета = ЗначениеЗаполнено(ВладелецФормы.КонтекстВарианта)

Проблема заключается в том, что если в свойствах объекта Отчет не указана Основная форма отчета, платформа 1С генерирует форму автоматически «на лету». Такая автоматически созданная форма является «пустой» с точки зрения БСП: в ней нет необходимых реквизитов, программных обработчиков и интерфейсных элементов, которые ожидает подсистема вариантов отчетов. Поскольку в генерируемой платформой форме отсутствует реквизит КонтекстВарианта, выполнение программного кода прерывается с ошибкой.

Решение 1: Назначение стандартной формы отчета БСП

Самый правильный и надежный способ решения проблемы — это следование методике разработки на БСП. Для того чтобы механизмы сохранения вариантов работали штатно, необходимо явно указать форму отчета в метаданных. Разберем этот процесс по шагам:

  1. Откроем конфигуратор и найдем наш отчет.
  2. Перейдем на закладку Основные.
  3. В поле Форма отчета нажмем на кнопку выбора (лупу).
  4. В появившемся окне выберем вариант Общая форма и укажем стандартную форму БСП, которая обычно называется ОбщаяФорма.ФормаОтчета.

После этого, когда пользователь откроет отчет, платформа будет использовать не «самоделку», а полнофункциональную форму БСП. В этой форме уже определен реквизит КонтекстВарианта, а также реализована вся необходимая логика для работы с хранилищем настроек, рассылками отчетов и пользовательскими фильтрами.

Решение 2: Добавление реквизита в пользовательскую форму

Рассмотрим ситуацию, когда нам по каким-то причинам необходимо использовать собственную, уникальную форму отчета, а не общую форму БСП. В этом случае мы должны вручную обеспечить совместимость нашей формы с программным интерфейсом библиотеки. Для этого выполним следующие действия:

  1. Создадим форму отчета (если она еще не создана).
  2. На закладке Реквизиты добавим новый реквизит с именем КонтекстВарианта.
  3. Установим тип этого реквизита как Строка или Произвольный.
  4. Обязательно проверим, что в модуле формы присутствуют вызовы соответствующих процедур БСП в обработчиках ПриСозданииНаСервере, ПередЗагрузкойВариантаНаСервере и других, согласно документации к вашей версии библиотеки.

Таким образом, когда форма сохранения варианта обратится к ВладелецФормы.КонтекстВарианта, она успешно найдет это поле, и ошибка исчезнет.

Важность регистрации отчета в справочниках БСП

Даже после назначения правильной формы ошибка может сохраняться, если подсистема «Варианты отчетов» не знает о существовании вашего нового объекта. Выясним, что нужно сделать для полноценной регистрации отчета в системе:

Во-первых, отчет обязательно должен быть включен хотя бы в одну Подсистему, которая отображается в интерфейсе (командном интерфейсе). Если отчет не привязан к подсистемам, механизмы БСП могут игнорировать его при формировании дерева вариантов.

Во-вторых, необходимо обновить справочник Идентификаторы объектов метаданных. В БСП работа со многими объектами идет не напрямую через метаданные, а через этот справочник. Для обновления запустите информационную базу под пользователем с полными правами с параметром командной строки:

/С ЗапуститьОбновлениеИнформационнойБазы

Или воспользуйтесь типовой обработкой «Обновление вспомогательных данных» в составе БСП.

Программная настройка в модуле менеджера

Для того чтобы отчет полностью поддерживал функционал вариантов (включая предопределенные варианты и настройки доступа), рекомендуется добавить в модуль менеджера отчета процедуру настройки. Проанализируем пример кода:


Процедура ПриОпределенииНастроекВариантовОтчетов(Настройки) Экспорт
    Настройки.Размещение.Вставить(Метаданные.Подсистемы.Продажи);
    Настройки.ВыводитьВ ПанелиОтчетов = Истина;
КонецПроцедуры

Эта процедура позволяет системе автоматически подхватить настройки отчета при первом запуске или обновлении конфигурации. Если в вашей конфигурации используется подсистема «Варианты отчетов», наличие этой процедуры является признаком хорошего тона и гарантией стабильной работы.

Что такое КонтекстВарианта и зачем он нужен?

Рассмотрим подробнее назначение этого реквизита, чтобы понимать логику работы программы. КонтекстВарианта используется для так называемых контекстных отчетов. Это отчеты, которые открываются из форм справочников или документов и автоматически фильтруются по текущему объекту (например, «Отчет по взаиморасчетам», открытый из карточки конкретного контрагента).

В обычном отчете этот реквизит пуст, но форма сохранения настроек всегда проверяет его наличие, чтобы решить: сохранять ли данный вариант как «общий» или как «привязанный к контексту». Именно поэтому отсутствие этого поля в самописных или автогенерируемых формах приводит к фатальному завершению работы кода ХранилищеВариантовОтчетов.

Резюме и рекомендации

Подводя итог, можно сказать, что ошибка «Поле объекта не обнаружено (КонтекстВарианта)» — это сигнал о том, что отчет не полностью интегрирован в экосистему БСП. Для устранения проблемы:

  1. Всегда назначайте ОбщаяФорма.ФормаОтчета в качестве основной формы для новых отчетов.
  2. Убедитесь, что в свойствах отчета в поле Хранилище вариантов указано ХранилищеВариантовОтчетов.
  3. Не забывайте обновлять идентификаторы объектов метаданных после добавления новых отчетов в конфигурацию.
  4. Если вы используете расширения, убедитесь, что форма отчета и её реквизиты корректно проброшены в расширение.

Соблюдение этих несложных правил позволит избежать трудностей при разработке и обеспечит пользователям стабильную работу с мощным функционалом вариантов отчетов 1С.

← На главную