Функция МетодДоступен(Компонента, ИмяМетода)
Попытка
Выполнить("Компонента." + ИмяМетода + "()");
Возврат Истина;
Исключение
// "Метод объекта не обнаружен" — метода нет.
// "Недостаточно фактических параметров" и прочее — метод есть.
Возврат Найти(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), "не обнаружен") = 0;
КонецПопытки;
КонецФункции
В ОтправитьВКафку сразу после создания компоненты:
ЕстьПакет = МетодДоступен(Компонента, "ОтправитьПакетСРезультатом");
ЕстьТаймаут = МетодДоступен(Компонента, "УстановитьТаймаутОчисткиПродюсера");
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , ,
СтрШаблон("Сборка компоненты: пакетная отправка %1, таймаут очистки %2.",
?(ЕстьПакет, "есть", "НЕТ"), ?(ЕстьТаймаут, "есть", "НЕТ")));
Если ЕстьТаймаут Тогда
Компонента.УстановитьТаймаутОчисткиПродюсера(60000);
КонецЕсли;
Дальше ЕстьПакет передавай в ОтправитьПакетами и на нём же ветвись — вместо Попытка вокруг вызова. Так ты в журнале сразу видишь, какая сборка отработала, и молчаливых переходов на фолбэк больше не будет.
Остановка продюсера
ОчередьОчищена = Истина;
Попытка
ОчередьОчищена = Компонента.ОстановитьПродюсера();
Исключение
Попытка
Компонента.ОстановитьПродюсера();
// 1.4.4: процедура, подтверждения flush нет — считаем успехом.
Исключение
ОчередьОчищена = Ложь;
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПопытки;
Проверка результата отправки — обязательно так
Успешно = (РезультатОтправки = 0) ИЛИ (РезультатОтправки = Истина);