(3)
Речь о 1С:Документооборот КОРП, автозаполнение шаблонов файлов данными документа. В конфигурации код подсистемы построен на прямой записи в xml файлы, что применимо для docx и odt файлов. Но не для doc. И не для других типов.
В результате - подготовили расширение конфигурации, производящее автозаполнение через COM объекты.
Проблема, собственно, в том, что в 1С:ДО предусмотрено автозаполнение и на клиенте, и на сервере (опционально). Автозаполнение на сервере переписали, проблем нет. Переписали на ДлительныеОперации. Но код в 1С:ДО для клиента был СИНХРОННЫМ! Естественно, на работу в ВебКлиенте он вообще не рассчитан. Но потребность есть.
В связи с этим подготовлен код и для исполнения автозаполнения на клиенте. В тонком клиенте он работает. Но, учитывая, что работаем с COM объектом, необходима обработка исключений.
Как-то так:
Код |
---|
Процедура ОбработчикВыполненияАлгоритмаЧерезОповещение(
ПредыдущийРезультат = Неопределено,
ДополнительныеПараметры) Экспорт
Попытка
//опасные код
Исключение
АсинхронныеОперацииКлиентИТГ.ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке(),, ДополнительныеПараметры);
КонецПопытки;
КонецПроцедуры
Процедура ОбработатьИсключениеВОбработчикеОповещения(Знач ИнформацияОбОшибке, СтандартнаяОбработка = Истина, ДополнительныеПараметры = Неопределено) Экспорт
Если СтандартнаяОбработка Тогда
ПеременныеПоследовательностиОповещений = ОбновитьИВернутьПеременныеОбработчикаОповещения(ИнформацияОбОшибке, ДополнительныеПараметры, "ИнформацияОбОшибке");
ПодготовленныйОбработчикОшибки = АсинхронныеОперацииСлужебныйКлиентИТГ.ПодготовитьОписаниеОповещенияДляОбработкиРезультата(ДополнительныеПараметры);
Если ПодготовленныйОбработчикОшибки <> Неопределено Тогда
Попытка
ВыполнитьОбработкуОповещенияОбОшибке(ПодготовленныйОбработчикОшибки, ИнформацияОбОшибке, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке, СтандартнаяОбработка, ПодготовленныйОбработчикОшибки.ДополнительныеПараметры);
КонецЕсли;
Исключение
ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке(), СтандартнаяОбработка, ПодготовленныйОбработчикОшибки.ДополнительныеПараметры);
КонецПопытки;
Иначе
АсинхронныеОперацииСлужебныйКлиентПереопределяемыйИТГ.СтандартныйОбработчикОповещенияОбОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьОбработкуОповещенияОбОшибке(Знач ОбработчикОшибки, Знач ИнформацияОбОшибке, СтандартнаяОбработка) Экспорт
Если ОбработчикОшибки.ИмяПроцедурыОбработкиОшибки <> "" Тогда
Выражение =
?(ОбработчикОшибки.МодульОбработкиОшибки <> Неопределено, "ОбработчикОшибки.МодульОбработкиОшибки.", "")
+ ОбработчикОшибки.ИмяПроцедурыОбработкиОшибки +
"(ИнформацияОбОшибке, СтандартнаяОбработка, ОбработчикОшибки.ДополнительныеПараметры)";
Выполнить(Выражение);
КонецЕсли;
КонецПроцедуры
|
Итого, смысл в том, что иметь возможность писать код с использованием
Код |
---|
ИмяПроцедурыОбработкиОшибки |
уже сейчас, с расчётом на то, что работа с COM объектом в дальнейшем может быть переписана на работу с внешней компонентой (есть желание нарисовать внешнюю компоненту для работы с Open Office через UNO в целях обеспечения кроссплатформенности). А при работа с расширениями и внешними компонентами платформа уже сейчас использует
Код |
---|
ИмяПроцедурыОбработкиОшибки |
.
Указанный выше код позволяет указывать обработчик ошибки через
Код |
---|
ИмяПроцедурыОбработкиОшибки |
, но вызов его осуществляется через
, что не будет работать на ВебКлиенте, ради которого асинхронность и пытаемся реализовать.