Бочка меда
После публикации пришлось самому испытать свои доработки и стало понятно как сделать жизнь еще легче (например, чтобы для отладки в новых базах не приходилось каждый раз создавать доп реквизит и не указывать путь к доп обработке вручную). Теперь для отладки после подключения расширения нужно всего:
1) загрузить нужную обработку для отладки из каталога, который доступен пользователю сервера 1С;
2) установить Режим отладки в доп обработке.
Чтобы отладка заработала в вашей конфигурации:
1. Добавьте в расширение общий модуль ИнтеграцияПодсистемБСП
&Перед("ПриСозданииВнешнейОбработки")
Процедура _ПриСозданииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат)
_СоздатьВнешнююОбработку(Ссылка, СтандартнаяОбработка, Результат, Ложь)
КонецПроцедуры
&Перед("ПриПодключенииВнешнейОбработки")
Процедура _ПриПодключенииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат)
_СоздатьВнешнююОбработку(Ссылка, СтандартнаяОбработка, Результат);
КонецПроцедуры
Процедура _СоздатьВнешнююОбработку(Знач Ссылка, СтандартнаяОбработка, Результат, ТолькоИмя = Истина)
РеквизитыОбработки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Публикация, Вид");
Если РеквизитыОбработки.Публикация =
Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки Тогда
ПутьКФайлу = "";
ЗначенияСвойств = УправлениеСвойствами.ЗначенияСвойств(Ссылка, Истина,,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "_ПутьКФайлуВнешнейОбработки")));
Если ЗначениеЗаполнено(ЗначенияСвойств) Тогда
Файл = Новый Файл(ЗначенияСвойств[0].Значение);
Если Файл.Существует() Тогда
ПутьКФайлу = Файл.ПолноеИмя;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКФайлу) Тогда
СтандартнаяОбработка = Ложь;
// Получение экземпляра объекта.
Если РеквизитыОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет
ИЛИ РеквизитыОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
Менеджер = ВнешниеОтчеты;
Иначе
Менеджер = ВнешниеОбработки;
КонецЕсли;
Обработка = Менеджер.Создать(ПутьКФайлу, Ложь, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
ИспользуемоеИмяФайла = СтрЗаменить(Обработка.ИспользуемоеИмяФайла,"\","/");
Если ЭтоАдресВременногоХранилища(ИспользуемоеИмяФайла) Тогда
УдалитьИзВременногоХранилища(ИспользуемоеИмяФайла);
Обработка = Менеджер.Создать(ПутьКФайлу, Ложь, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
КонецЕсли;
Если ТолькоИмя Тогда
Результат = Обработка.Метаданные().Имя;
Иначе
Результат = Обработка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
2. чтобы не мучить себя добавлением в каждой новой базе необходимого доп реквизита
Процедура СоздатьПутьКФайлу() Экспорт
Если ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.
НайтиПоРеквизиту("Имя", "_ПутьКФайлуВнешнейОбработки").Пустая() Тогда
Попытка
_ПутьКФайлу = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
_ПутьКФайлу.Наименование = "Путь к файлу внешней обработки";
_ПутьКФайлу.ТипЗначения = Новый ОписаниеТипов("Строка");
_ПутьКФайлу.Виден = Истина;
_ПутьКФайлу.Доступен = Истина;
_ПутьКФайлу.Заголовок = "Путь к файлу внешней обработки";
_ПутьКФайлу.ЗаголовокЯзык1 = _ПутьКФайлу.Заголовок;
_ПутьКФайлу.ЗаголовокЯзык2 = _ПутьКФайлу.Заголовок;
_ПутьКФайлу.Имя = "_ПутьКФайлуВнешнейОбработки";
_ПутьКФайлу.ИдентификаторДляФормул = _ПутьКФайлу.Имя;
_ПутьКФайлу.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Дополнительные отчеты и обработки");
_ПутьКФайлу.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты;
СтрокаН = _ПутьКФайлу.ЗависимостиДополнительныхРеквизитов.Добавить();
СтрокаН.ЗависимоеСвойство = "Виден";
СтрокаН.НаборСвойств = _ПутьКФайлу.НаборСвойств;
СтрокаН.Реквизит = "Публикация";
СтрокаН.Условие = "Равно";
СтрокаН.Значение = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки;
_ПутьКФайлу.Записать();
НаборСвойств = _ПутьКФайлу.НаборСвойств.ПолучитьОбъект();
СтрокаН = НаборСвойств.ДополнительныеРеквизиты.Добавить();
СтрокаН.Свойство = _ПутьКФайлу.Ссылка;
СтрокаН.ИмяПредопределенногоНабора = "Справочник_ДополнительныеОтчетыИОбработки";
НаборСвойств.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Ложка дёгтя
Заметил, что если в рамках одного сеанса будет подключена внешняя обработка типовыми механизмами БСП, то при пересоздании обработки из файла с таким же именем будет использоваться первоначально подключенная. При отладке это нужно учитывать.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.20.91
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.168.25