Примеры реализации
Регистрация обработчиков
// В модуле ДатаХабПоставляемыеОбъектыИнтеграцииПереопределяемый
Процедура ПриПолученииПоставляемыхОбъектовИнтеграции(
ОписанияПоставляемыхОбъектовИнтеграции, ПараметрОбновления) Экспорт
// Входящий: Catalog_Контрагенты -> Справочник.Контрагенты
ОписаниеОбъектаИнтеграции = ДатаХабПоставляемыеОбъектыИнтеграции.НовоеОписаниеОбъектаИнтеграции();
ОписанияПоставляемыхОбъектовИнтеграции.Добавить(ОписаниеОбъектаИнтеграции);
ОписаниеОбъектаИнтеграции.Наименование = "Catalog_Контрагенты -> Справочник.Контрагенты";
ОписаниеОбъектаИнтеграции.ИмяКлассаОбъекта = "Catalog_Контрагенты";
ОписаниеОбъектаИнтеграции.ИмяОбъекта = "Справочник.Контрагенты";
ОписаниеОбъектаИнтеграции.ТипИнтеграции = Перечисления.ДатаХабТипыИнтеграции.Входящая;
ОписаниеОбъектаИнтеграции.Статус = Перечисления.ДатаХабСтатусыОбработчиков.Включен;
ОписаниеОбъектаИнтеграции.ОчередностьОбработки = 100;
ОписаниеОбъектаИнтеграции.ИмяПроцедурыОбработкиВКонфигурации = "Catalog_Контрагенты_Входящая";
ОписаниеОбъектаИнтеграции.Версия = 1;
// Исходящий: Справочник.Контрагенты -> Catalog_Контрагенты
ОписаниеОбъектаИнтеграции = ДатаХабПоставляемыеОбъектыИнтеграции.НовоеОписаниеОбъектаИнтеграции();
ОписанияПоставляемыхОбъектовИнтеграции.Добавить(ОписаниеОбъектаИнтеграции);
ОписаниеОбъектаИнтеграции.Наименование = "Справочник.Контрагенты -> Catalog_Контрагенты";
ОписаниеОбъектаИнтеграции.ИмяКлассаОбъекта = "Справочник.Контрагенты";
ОписаниеОбъектаИнтеграции.КлассСообщения = "Catalog_Контрагенты";
ОписаниеОбъектаИнтеграции.МетодХранения = Перечисления.ДатаХабМетодХранения.ПоСсылке;
ОписаниеОбъектаИнтеграции.ТипИнтеграции = Перечисления.ДатаХабТипыИнтеграции.Исходящая;
ОписаниеОбъектаИнтеграции.Статус = Перечисления.ДатаХабСтатусыОбработчиков.Включен;
ОписаниеОбъектаИнтеграции.ОчередностьОбработки = 100;
ОписаниеОбъектаИнтеграции.ИмяПроцедурыОбработкиВКонфигурации = "Справочник_Контрагенты_Исходящая";
ОписаниеОбъектаИнтеграции.Версия = 1;
КонецПроцедуры
Исходящий обработчик справочника
Процедура Справочник_Контрагенты_Исходящая(
ПроцедураОбработки, ОбъектОбработки, Результат, Отказ,
Обработчик, ДополнительныеСвойства, ЗадержкаОбработкиСообщенияПриОшибке) Экспорт
Если ОбъектОбработки.ПометкаУдаления Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Результат = Новый Структура;
ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(Результат, "Id", ОбъектОбработки);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ОбъектОбработки);
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка = &Ссылка";
РезультатЗапроса = Запрос.ВыполнитьПакет();
Строка = РезультатЗапроса[0].Выгрузить()[0];
Для Каждого Колонка Из РезультатЗапроса[0].Выгрузить().Колонки Цикл
ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(
Результат, Колонка.Имя, Строка[Колонка.Имя]);
КонецЦикла;
КонецПроцедуры
Входящий обработчик справочника
Процедура Catalog_Контрагенты_Входящая(
ПроцедураОбработки, ОбъектОбработки, Отказ, ОбъектСообщение,
Обработчик, Результат, ЗадержкаОбработкиСообщенияПриОшибке) Экспорт
ТипПриемника = Обработчик.ИмяКлассаОбъекта; // "Catalog_Контрагенты"
ИмяСправочника = "Контрагенты";
НачатьТранзакцию();
Попытка
Объект = ДатаХабИнтеграция.НайтиСоздатьСправочникОбъект(
ОбъектОбработки.Id, ИмяСправочника, ТипПриемника);
Объект.Наименование = ОбъектОбработки.Наименование;
Если ОбъектОбработки.Свойство("ИНН") Тогда
Объект.ИНН = ОбъектОбработки.ИНН;
КонецЕсли;
Если ОбъектОбработки.Свойство("КПП") Тогда
Объект.КПП = ОбъектОбработки.КПП;
КонецЕсли;
Объект.ДополнительныеСвойства.Вставить("ДатаХабНеобрабатывать", Истина);
Если Не Объект.ПроверитьЗаполнение() Тогда
ВызватьИсключение "Не заполнены обязательные поля";
КонецЕсли;
Объект.Записать();
Результат = Объект.Ссылка;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
Обработка ссылок на зависимые объекты
Если объект ссылается на другой, который может ещё не прийти из шины, используется ЗадержкаОбработкиСообщенияПриОшибке для организации ожидания:
// Попытка найти связанный объект
ГруппаКонтрагента = ДатаХабИнтеграция.НайтиОбъектПоИдентификатору(
ОбъектОбработки.ГруппаId, "ГруппыКонтрагентов", "Catalog_ГруппыКонтрагентов");
Если ГруппаКонтрагента = Неопределено Тогда
// Зависимость не пришла — отложить обработку на 30 секунд
ЗадержкаОбработкиСообщенияПриОшибке = 30;
ВызватьИсключение "Зависимый объект ГруппыКонтрагентов не найден";
КонецЕсли;