Настроить обмен шаг.
Процедура НастроитьОбменШаг1(Сообщение, Отправитель) Экспорт
Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда
Возврат;
КонецЕсли;
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса");
Тело = Сообщение.Body;
КодЭтогоУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[Тело.ExchangePlan].ЭтотУзел(), "Код");
ПсевдонимЭтогоУзла = "";
Если Не ПустаяСтрока(КодЭтогоУзла) И КодЭтогоУзла <> Тело.Code Тогда
ПсевдонимЭтогоУзла = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса());
Если ПсевдонимЭтогоУзла <> Тело.Code Тогда
СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ожидаемый код предопределенного узла в этом приложении ""%1""
|не соответствует фактическому ""%2"" или псевдониму ""%3"". План обмена: %4.'"),
Тело.Code, КодЭтогоУзла, ПсевдонимЭтогоУзла, Тело.ExchangePlan);
ВызватьИсключение СтрокаСообщения;
КонецЕсли;
КонецЕсли;
КонечнаяТочкаКорреспондента = ОбменДаннымиВМоделиСервиса.МенеджерПланаОбменаКонечныхТочек().НайтиПоКоду(Тело.EndPoint);
Если КонечнаяТочкаКорреспондента.Пустая() Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"),
Тело.EndPoint);
КонецЕсли;
Префикс = "";
ПрефиксКорреспондента = "";
ИдентификаторНастройки = "";
Если Сообщение.Установлено("AdditionalInfo") Тогда
ДополнительныеСвойства = СериализаторXDTO.ПрочитатьXDTO(Сообщение.AdditionalInfo);
Если ДополнительныеСвойства.Свойство("Префикс") Тогда
Префикс = ДополнительныеСвойства.Префикс;
КонецЕсли;
Если ДополнительныеСвойства.Свойство("ПрефиксКорреспондента") Тогда
ПрефиксКорреспондента = ДополнительныеСвойства.ПрефиксКорреспондента;
КонецЕсли;
Если ДополнительныеСвойства.Свойство("ИдентификаторНастройки") Тогда
ИдентификаторНастройки = ДополнительныеСвойства.ИдентификаторНастройки;
КонецЕсли;
КонецЕсли;
НастройкиXDTOКорреспондента = Новый Структура;
НастройкиОтбора = СериализаторXDTO.ПрочитатьXDTO(Тело.FilterSettings);
Если НастройкиОтбора.Свойство("НастройкиXDTOКорреспондента") Тогда
НастройкиXDTOКорреспондента = НастройкиОтбора.НастройкиXDTOКорреспондента;
КонецЕсли;
// Создаем настройку обмена.
НастройкиПодключения = Новый Структура;
НастройкиПодключения.Вставить("ИмяПланаОбмена", Тело.ExchangePlan);
НастройкиПодключения.Вставить("ИдентификаторНастройки", ИдентификаторНастройки);
НастройкиПодключения.Вставить("Наименование", ""); // не требуется
НастройкиПодключения.Вставить("НаименованиеКорреспондента", Тело.CorrespondentName);
НастройкиПодключения.Вставить("Префикс", Префикс);
НастройкиПодключения.Вставить("ПрефиксКорреспондента", ПрефиксКорреспондента);
НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыИсточника", КодЭтогоУзла);
НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыПриемника", Тело.CorrespondentCode);
НастройкиПодключения.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента);
НастройкиПодключения.Вставить("НастройкиXDTOКорреспондента", НастройкиXDTOКорреспондента);
НастройкиПодключения.Вставить("Корреспондент"); // выходной параметр
НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", Тело.CorrespondentZone);
НачатьТранзакцию();
Попытка
ОбменДаннымиВМоделиСервиса.СоздатьНастройкуОбмена_3_0_1_1(НастройкиПодключения,
Истина, , ПсевдонимЭтогоУзла);
// Отправляем ответное сообщение об успешной операции.
ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг1УспешноЗавершена());
ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
ОтветноеСообщение.Body.SessionId = Тело.SessionId;
ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(),
УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки);
УдалитьНастройкуСинхронизации(НастройкиПодключения.Корреспондент);
// Отправляем ответное сообщение об ошибке.
НачатьТранзакцию();
ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг1());
ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
ОтветноеСообщение.Body.SessionId = Тело.SessionId;
ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
ОтветноеСообщение.Body.ErrorDescription = ПредставлениеОшибки;
МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
ЗафиксироватьТранзакцию();
КонецПопытки;
МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СообщениеНастроитьОбменШаг1 (БСП)
СообщениеНастроитьОбменШаг2 (БСП)
ОбработкаКомандыНастроитьРасписаниеВыполненияОбмена (БСП)
ПриОпределенииДоступныхВнешнихСистем (БСП)
СообщениеНастройкаОбменаШаг1УспешноЗавершена (БСП)
СообщениеНастройкаОбменаШаг2УспешноЗавершена (БСП)
СообщениеОшибкаНастройкиОбменаШаг1 (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)