В управляемом приложении не работают подключаемые обработки?

1. Климов Сергей 27.09.18 16:57 Сейчас в теме
Давным-давно были написаны правила конвертации из УТ10.3 в БП2.0. Переписываю их на БП3.0. В этих правилах используются подключаемые обработки, как при выгрузке данных, так и при загрузке. В частности, при загрузке, в глобальном обработчике "После загрузки объекта" есть такой код:
Попытка
    // Если это документ, то заменяем в нём всевозможные договоры контрагентов на один.
    // Для замены отбирается не помеченный на удаление договор с одинаковыми с заменяемым значениями:
    // - Организация;
    // - Владелец;
    // - ВидДоговора;
    // с минимальным из возможных значением кода
    Если Метаданные.Документы.Содержит(Объект.Метаданные()) Тогда
        сообщить("Заменяем договоры в " + Объект + ". Был " + Объект.ДоговорКонтрагента);
        ДопОбработки.ДоговорыУТ.ЗаменитьДоговорыВДокументе(Объект, Параметры.ДоговорыПомеченныеНаУдаление);
        сообщить("Стал " + Объект.ДоговорКонтрагента);
        сообщить("-----");
        СчетаУчетаВДокументах.ЗаполнитьПередЗаписью(Объект, РежимЗаписиДокумента.Проведение);
    КонецЕсли;
Исключение
КонецПопытки
Показать


Этот код работал при загрузке в БП2, но не работает при загрузке в БП3:
1. Действия, которые, как ожидается, должны быть выполнены в процедуре ДопОбработки.ДоговорыУТ.ЗаменитьДоговорыВДокументе() не выполняются, договоры не заменzются. Добавил запись отладочного сообщения в комментарий документа - не пишется.
2. Отладочные сообщения, вставленные в эту процедуру, не появляются.
3. Отладочные сообщения, вставленные в обработчик после вызова этой процедуры тоже не выводятся. Т.е. выводятся только сообщения "Заменяем договоры в ...". А те, которые после вызова процедуры - нет. Если закомментировать вызов процедуры - выводятся все сообщения.
4. Никаких сообщения об ошибках нет.
5. Сама процедура, если вызывать её не из конвертации, а как внешнюю обработку, отрабатывает как ожидается, замена происходит. Т.е. сам код обработки работоспособен.

Загружать пробовал как встроенной обработкой "Универсальный обмен данными в формате XML", так и V8Exchan83.epf из КД 2.1.8.2 (после соответствующего допиливания).

Код работал в БП2 и не работает в БП3. Вопрос: в управляемом приложении, в "Универсальном обмене" не работают подключаемые обработки? Или я ещё чего-то не вижу?
По теме из базы знаний
Найденные решения
7. Климов Сергей 28.09.18 13:25 Сейчас в теме
Итак, проблема решена.
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
	Если ИспользуетсяПриЗагрузке Тогда
		Если РежимОбмена = "Загрузка" Тогда
			//++ИНИС.Климов
			УникальныйИдентификатор = Новый УникальныйИдентификатор();
			ИмяВременногоФайла      = КаталогВременныхФайлов() + УникальныйИдентификатор + ".epf";
			ХранилищеОбработки.Получить().Записать(ИмяВременногоФайла);
			ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
			УдалитьФайлы(ИмяВременногоФайла);
            ДопОбработки.Вставить(Имя, ВнешняяОбработка);
			//--ИНИС.Климов
		Иначе
			ЗаписьXML.ЗаписатьНачалоЭлемента("Обработка");
			УстановитьАтрибут(ЗаписьXML, "ИспользуетсяПриЗагрузке", Истина);
			УстановитьАтрибут(ЗаписьXML, "Имя",                     Имя);
			УстановитьАтрибут(ЗаписьXML, "Наименование",            Наименование);
			УстановитьАтрибут(ЗаписьXML, "ЭтоОбработкаНастройки",   ЭтоОбработкаНастройки);
			ЗаписьXML.ЗаписатьТекст(XMLСтрока(ХранилищеОбработки));
			ЗаписьXML.ЗаписатьКонецЭлемента();
		КонецЕсли;
	КонецЕсли;
Показать
v_moskalyk; Drivingblind; echo77; Olenevod; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. user705522_constantin_h 37 28.09.18 09:53 Сейчас в теме
(1)Попробуйте в исключении что-нибудь сообщать. Может узнаете причину ошибки.
Климов Сергей; +1 Ответить
4. Климов Сергей 28.09.18 10:48 Сейчас в теме
(3) Спасибо за наводку! Выдаётся сообщение типа:
Не удалось заменить договор в Реализация (акт, накладная) 00000010489 от 23.07.2018 17:00:22: {(12)}: Поле объекта не обнаружено (ДоговорыУТ)
Т.е. получается, что как-то не так подключена обработка ДоговорыУТ. Что с ней может быть не так?
5. Климов Сергей 28.09.18 10:49 Сейчас в теме
(4) Что-то с картинкой не совладал.
Прикрепленные файлы:
2. insurgut 208 27.09.18 19:42 Сейчас в теме
Алгоритмы вроде во всех типовых правилах юзаются. Если честно, даже никогда ДопОбработки при переносах не использовал.
6. YannikAlx 28 28.09.18 11:26 Сейчас в теме
В управляемом приложении прекрасно работают внешние подключаемые обработки, написанные для УФ.
Но обработки написанные для обычных форм не смогут работать в УФ в принципе.
Необходимы серьезные переделки. Основное отличие - разделение на Клиента и Сервер, то есть часть кода выполняется на клиенте а часть на сервере, при чем куча процедур не моежет быть выполнена в принципе выполнена не в своей сфере
7. Климов Сергей 28.09.18 13:25 Сейчас в теме
Итак, проблема решена.
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
	Если ИспользуетсяПриЗагрузке Тогда
		Если РежимОбмена = "Загрузка" Тогда
			//++ИНИС.Климов
			УникальныйИдентификатор = Новый УникальныйИдентификатор();
			ИмяВременногоФайла      = КаталогВременныхФайлов() + УникальныйИдентификатор + ".epf";
			ХранилищеОбработки.Получить().Записать(ИмяВременногоФайла);
			ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
			УдалитьФайлы(ИмяВременногоФайла);
            ДопОбработки.Вставить(Имя, ВнешняяОбработка);
			//--ИНИС.Климов
		Иначе
			ЗаписьXML.ЗаписатьНачалоЭлемента("Обработка");
			УстановитьАтрибут(ЗаписьXML, "ИспользуетсяПриЗагрузке", Истина);
			УстановитьАтрибут(ЗаписьXML, "Имя",                     Имя);
			УстановитьАтрибут(ЗаписьXML, "Наименование",            Наименование);
			УстановитьАтрибут(ЗаписьXML, "ЭтоОбработкаНастройки",   ЭтоОбработкаНастройки);
			ЗаписьXML.ЗаписатьТекст(XMLСтрока(ХранилищеОбработки));
			ЗаписьXML.ЗаписатьКонецЭлемента();
		КонецЕсли;
	КонецЕсли;
Показать
v_moskalyk; Drivingblind; echo77; Olenevod; +4 Ответить
8. echo77 1921 28.03.19 13:30 Сейчас в теме
(7) Да, но это только решает для обработок, которые используются при Загрузке
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот