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