Почему возникает ошибка "Метод Объекта не обнаружен (ПриСозданииНаСервере)" при открытии внешнего отчета?

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

При разработке внешних отчетов, особенно простых отчетов на Системе Компоновки Данных (СКД), можно столкнуться с неожиданной ошибкой при их запуске в пользовательском режиме. Отчет, который идеально формируется в конфигураторе, при открытии как файл (*.erf) выдает сообщение: "Метод Объекта не обнаружен (ПриСозданииНаСервере)". Эта ситуация может сбить с толку, поскольку разработчик мог вообще не добавлять никакого кода в модуль отчета.

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

Анализируем причину: роль типовых механизмов и общего модуля "ОтчетыПереопределяемый"

В большинстве современных конфигураций 1С используется БСП, которая предоставляет набор готовых инструментов для унификации и стандартизации разработки. Одной из задач БСП является централизованное управление поведением отчетов, в том числе и внешних. Это позволяет применять общие правила, добавлять стандартные команды (например, "Отправить по почте") или изменять вид формы для всех отчетов в системе.

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

Ключевой фрагмент кода, который приводит к ошибке, выглядит примерно так:


Если Форма.НастройкиОтчета.Внешний Тогда
    Форма.НастройкиОтчета.События.ПриСозданииНаСервере = Истина;
КонецЕсли;

Что означает эта строка? Она говорит платформе 1С: "Для этого внешнего отчета нужно обязательно выполнить процедуру с именем ПриСозданииНаСервере, которая должна находиться в его модуле объекта". Платформа пытается это сделать, но поскольку в вашем простом отчете на СКД этой процедуры нет, она не может ее найти и генерирует исключение "Метод Объекта не обнаружен".

Часто этот код находится внутри более общей экспортной процедуры в модуле ОтчетыПереопределяемый, например, такой:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    // ... прочий код ...

    // Этот код устанавливает флаги для вызова обработчиков событий в отчете
    Настройки.События.ПриСозданииНаСервере = Истина;
    Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина;
    Настройки.События.ПриЗагрузкеВариантаНаСервере = Истина;

    // ... прочий код ...
КонецПроцедуры

Таким образом, ваш внешний отчет должен соответствовать "правилам игры", установленным типовой конфигурацией, и предоставлять ожидаемые ею процедуры-обработчики.

Решение: добавляем требуемую процедуру в модуль отчета

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

Рассмотрим по шагам, что нужно сделать:

  1. Откройте ваш внешний отчет в конфигураторе.
  2. Перейдите в модуль объекта отчета (не в модуль формы, это важно!).
  3. Добавьте следующий код:

Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
    // В данный момент процедура не выполняет никаких действий.
    // Она необходима для корректной работы отчета в типовых конфигурациях,
    // использующих Библиотеку Стандартных Подсистем (БСП).
КонецПроцедуры

Сохраните отчет и попробуйте открыть его в пользовательском режиме снова. Ошибка должна исчезнуть.

Проанализируем ключевые моменты этого решения:

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

В итоге, ошибка "Метод Объекта не обнаружен (ПриСозданииНаСервере)" для внешних отчетов — это не ошибка в вашем коде, а следствие работы стандартных механизмов типовых конфигураций. Решение заключается в добавлении пустой экспортной процедуры-заглушки в модуль объекта отчета для обеспечения совместимости.

← На главную