Часто приходится сталкиваться с тем, что необходимо внести изменения в типовую конфигурацию, но очень не хочется снимать её с поддержки. Для этого в 1С существует ряд инструментов. Эта короткая статья посвящена тому, как подучить возможность подключения внешних отчетов к объекту конфигурации при помощи расширения на примере 1С:ERP Управление предприятием 2.
Допустим, стоит задача добавить объекту конфигурации справочник - "ВариантыКомплектацииНоменклатуры" возможность заполнения табличной части из файла эксель. Самый простой вариант это создать внешнюю обработку, которая будет читать данные из файла, обрабатывать их нужным образом и заполнять таблицу на форме или записывать в ссылку на объект. Но при попытке подключить созданную обработку к объекту конфигурации справочник - "ВариантыКомплектацииНоменклатуры" типовым методом через обработку подключения внешних отчетов и обработок мы увидим что в списке объектов размещения данный справочник отсутствует. Однако не стоит отчаиваться.
Для добавления возможности подключения внешних отчетов и обработок к объектам конфигурации в 1С:ERP Управление предприятием 2 в общем модуле «ДополнительныеОтчетыИОбработки» в функции «ПодключенныеОбъектыМетаданных» достаточно в возвращаемую таблицу достаточно добавить строку с нужным объектом метаданных.
Для этого в расширение добавляем функцию «ПодключенныеОбъектыМетаданных» из общего модуля «ДополнительныеОтчетыИОбработки». В расширении в функции «ПодключенныеОбъектыМетаданных» общего модуля «ДополнительныеОтчетыИОбработки» создаем функцию
&Вместо("ПодключенныеОбъектыМетаданных")
Функция ChenkNemo_ПодключенныеОбъектыМетаданныхВместо(Вид) Экспорт
Результат = ПродолжитьВызов(Вид);
ОбъектМетаданных = Метаданные.Справочники.ВариантыКомплектацииНоменклатуры;
СтрокаТаблицы = Результат.Добавить();
СтрокаТаблицы.Метаданные = ОбъектМетаданных;
Если ОбъектМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда
СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола();
СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка();
СтрокаТаблицы.Вид = "Подсистема";
СтрокаТаблицы.Представление = НСтр("ru = 'Начальная страница'");
Иначе
СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
СтрокаТаблицы.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных);
СтрокаТаблицы.Вид = Лев(СтрокаТаблицы.ПолноеИмя, СтрНайти(СтрокаТаблицы.ПолноеИмя, ".") - 1);
СтрокаТаблицы.Представление = ОбъектМетаданных.Представление();
КонецЕсли;
СтрокаТаблицы.ПолноеПредставление = СтрокаТаблицы.Представление + " (" + СтрокаТаблицы.Вид + ")";
Возврат Результат;
КонецФункции
Теперь наш справочник доступен в списке объектов размещения, остается только добавить в расширение нужную форму объекта метаданных. В расширении для добавленного объекта метаданных в модуле формы создаем процедуру «ПриСозданииНаСервереПосле» и переносим из любого подходящего объекта метаданных процедуры отвечающие за подключаемые команды. Например:
&НаСервере
Процедура ChenkNemo _ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры