В управляемом приложении не работают подключаемые обработки?
Давным-давно были написаны правила конвертации из УТ10.3 в БП2.0. Переписываю их на БП3.0. В этих правилах используются подключаемые обработки, как при выгрузке данных, так и при загрузке. В частности, при загрузке, в глобальном обработчике "После загрузки объекта" есть такой код:
Этот код работал при загрузке в БП2, но не работает при загрузке в БП3:
1. Действия, которые, как ожидается, должны быть выполнены в процедуре ДопОбработки.ДоговорыУТ.ЗаменитьДоговорыВДокументе() не выполняются, договоры не заменzются. Добавил запись отладочного сообщения в комментарий документа - не пишется.
2. Отладочные сообщения, вставленные в эту процедуру, не появляются.
3. Отладочные сообщения, вставленные в обработчик после вызова этой процедуры тоже не выводятся. Т.е. выводятся только сообщения "Заменяем договоры в ...". А те, которые после вызова процедуры - нет. Если закомментировать вызов процедуры - выводятся все сообщения.
4. Никаких сообщения об ошибках нет.
5. Сама процедура, если вызывать её не из конвертации, а как внешнюю обработку, отрабатывает как ожидается, замена происходит. Т.е. сам код обработки работоспособен.
Загружать пробовал как встроенной обработкой "Универсальный обмен данными в формате XML", так и V8Exchan83.epf из КД 2.1.8.2 (после соответствующего допиливания).
Код работал в БП2 и не работает в БП3. Вопрос: в управляемом приложении, в "Универсальном обмене" не работают подключаемые обработки? Или я ещё чего-то не вижу?
Попытка
// Если это документ, то заменяем в нём всевозможные договоры контрагентов на один.
// Для замены отбирается не помеченный на удаление договор с одинаковыми с заменяемым значениями:
// - Организация;
// - Владелец;
// - ВидДоговора;
// с минимальным из возможных значением кода
Если Метаданные.Документы.Содержит(Объект.Метаданные()) Тогда
сообщить("Заменяем договоры в " + Объект + ". Был " + Объект.ДоговорКонтрагента);
ДопОбработки.ДоговорыУТ.ЗаменитьДоговорыВДокументе(Объект, Параметры.ДоговорыПомеченныеНаУдаление);
сообщить("Стал " + Объект.ДоговорКонтрагента);
сообщить("-----");
СчетаУчетаВДокументах.ЗаполнитьПередЗаписью(Объект, РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
КонецПопытки
ПоказатьЭтот код работал при загрузке в БП2, но не работает при загрузке в БП3:
1. Действия, которые, как ожидается, должны быть выполнены в процедуре ДопОбработки.ДоговорыУТ.ЗаменитьДоговорыВДокументе() не выполняются, договоры не заменzются. Добавил запись отладочного сообщения в комментарий документа - не пишется.
2. Отладочные сообщения, вставленные в эту процедуру, не появляются.
3. Отладочные сообщения, вставленные в обработчик после вызова этой процедуры тоже не выводятся. Т.е. выводятся только сообщения "Заменяем договоры в ...". А те, которые после вызова процедуры - нет. Если закомментировать вызов процедуры - выводятся все сообщения.
4. Никаких сообщения об ошибках нет.
5. Сама процедура, если вызывать её не из конвертации, а как внешнюю обработку, отрабатывает как ожидается, замена происходит. Т.е. сам код обработки работоспособен.
Загружать пробовал как встроенной обработкой "Универсальный обмен данными в формате XML", так и V8Exchan83.epf из КД 2.1.8.2 (после соответствующего допиливания).
Код работал в БП2 и не работает в БП3. Вопрос: в управляемом приложении, в "Универсальном обмене" не работают подключаемые обработки? Или я ещё чего-то не вижу?
По теме из базы знаний
- Управляемое приложение. Внешняя обработка. Создание связанных объектов
- Управляемое приложение. Внешняя обработка. Заполнение объекта
- Две или несколько касс ККМ Розница 2.3 + Честный знак + Принтер чеков
- Тикеты - система учета задач/Service Desk в 1С (+ мобильное приложение)
- Интерактивная справка [Alt+I] (подключаемое расширение)
Найденные решения
Итак, проблема решена.
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
Если ИспользуетсяПриЗагрузке Тогда
Если РежимОбмена = "Загрузка" Тогда
//++ИНИС.Климов
УникальныйИдентификатор = Новый УникальныйИдентификатор();
ИмяВременногоФайла = КаталогВременныхФайлов() + УникальныйИдентификатор + ".epf";
ХранилищеОбработки.Получить().Записать(ИмяВременногоФайла);
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
УдалитьФайлы(ИмяВременногоФайла);
ДопОбработки.Вставить(Имя, ВнешняяОбработка);
//--ИНИС.Климов
Иначе
ЗаписьXML.ЗаписатьНачалоЭлемента("Обработка");
УстановитьАтрибут(ЗаписьXML, "ИспользуетсяПриЗагрузке", Истина);
УстановитьАтрибут(ЗаписьXML, "Имя", Имя);
УстановитьАтрибут(ЗаписьXML, "Наименование", Наименование);
УстановитьАтрибут(ЗаписьXML, "ЭтоОбработкаНастройки", ЭтоОбработкаНастройки);
ЗаписьXML.ЗаписатьТекст(XMLСтрока(ХранилищеОбработки));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Спасибо за наводку! Выдаётся сообщение типа:
Не удалось заменить договор в Реализация (акт, накладная) 00000010489 от 23.07.2018 17:00:22: {(12)}: Поле объекта не обнаружено (ДоговорыУТ)
Т.е. получается, что как-то не так подключена обработка ДоговорыУТ. Что с ней может быть не так?
Не удалось заменить договор в Реализация (акт, накладная) 00000010489 от 23.07.2018 17:00:22: {(12)}: Поле объекта не обнаружено (ДоговорыУТ)
Т.е. получается, что как-то не так подключена обработка ДоговорыУТ. Что с ней может быть не так?
В управляемом приложении прекрасно работают внешние подключаемые обработки, написанные для УФ.
Но обработки написанные для обычных форм не смогут работать в УФ в принципе.
Необходимы серьезные переделки. Основное отличие - разделение на Клиента и Сервер, то есть часть кода выполняется на клиенте а часть на сервере, при чем куча процедур не моежет быть выполнена в принципе выполнена не в своей сфере
Но обработки написанные для обычных форм не смогут работать в УФ в принципе.
Необходимы серьезные переделки. Основное отличие - разделение на Клиента и Сервер, то есть часть кода выполняется на клиенте а часть на сервере, при чем куча процедур не моежет быть выполнена в принципе выполнена не в своей сфере
Итак, проблема решена.
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
1. Из современной встроенной обработки "Универсальный обмен данными в формате XML" убрана поддержка подключаемых внешних обработок. Равно как и из V8Echan83.epf. Это плохая новость.
2. Путём нехитрой копипасты из старой обработки "Универсальный обмен данными в формате XML" в V8Echan83.epf поддержку удалось вернуть. В процедуру ЗагрузитьОбработку() нужно вставить следующий код (отмечен комментарием):
Если ИспользуетсяПриЗагрузке Тогда
Если РежимОбмена = "Загрузка" Тогда
//++ИНИС.Климов
УникальныйИдентификатор = Новый УникальныйИдентификатор();
ИмяВременногоФайла = КаталогВременныхФайлов() + УникальныйИдентификатор + ".epf";
ХранилищеОбработки.Получить().Записать(ИмяВременногоФайла);
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
УдалитьФайлы(ИмяВременногоФайла);
ДопОбработки.Вставить(Имя, ВнешняяОбработка);
//--ИНИС.Климов
Иначе
ЗаписьXML.ЗаписатьНачалоЭлемента("Обработка");
УстановитьАтрибут(ЗаписьXML, "ИспользуетсяПриЗагрузке", Истина);
УстановитьАтрибут(ЗаписьXML, "Имя", Имя);
УстановитьАтрибут(ЗаписьXML, "Наименование", Наименование);
УстановитьАтрибут(ЗаписьXML, "ЭтоОбработкаНастройки", ЭтоОбработкаНастройки);
ЗаписьXML.ЗаписатьТекст(XMLСтрока(ХранилищеОбработки));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот