#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
#КонецОбласти
#Область ПрограммныйИнтерфейс
Процедура ВыполнитьОбменДаннымиДляНастройкиОбменаДанными(НастройкаОбменаДанными) Экспорт
Если НЕ ЗначениеЗаполнено(НастройкаОбменаДанными) Тогда
Возврат;
КонецЕсли;
Если
НЕ НастройкаОбменаДанными.OnLineОбмен
ИЛИ НЕ ЗначениеЗаполнено(НастройкаОбменаДанными.УзелИнформационнойБазы)
Тогда
Возврат;
КонецЕсли;
// временные файлы
ПравилаОбмена = НастройкаОбменаДанными.ПравилаОбмена.Получить();
ПравилаОбменаФайл = ПолучитьИмяВременногоФайла("xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПравилаОбменаФайл);
ЗаписьXML.ЗаписатьБезОбработки(ПравилаОбмена);
ЗаписьXML.Закрыть();
ПравилаОбменаДляПриемника = НастройкаОбменаДанными.ПравилаОбменаДляПриемника.Получить();
ПравилаОбменаДляПриемникаФайл = ПолучитьИмяВременногоФайла("xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПравилаОбменаДляПриемникаФайл);
ЗаписьXML.ЗаписатьБезОбработки(ПравилаОбменаДляПриемника);
ЗаписьXML.Закрыть();
ДанныеОбменаФайл = ПолучитьИмяВременногоФайла("xml");
ИмяФайлаПротоколаОбмена = ПолучитьИмяВременногоФайла("txt");
ИмяФайлаПротоколаОбменаЗагрузка = ПолучитьИмяВременногоФайла("txt");
// инициализация
обработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
обработкаОбмена.ДатаНачала = ТекущаяДата();
обработкаОбмена.РежимОбмена = "Выгрузка";
обработкаОбмена.ИмяФайлаПравилОбмена = ПравилаОбменаФайл;
обработкаОбмена.ЗагрузитьПравилаОбмена();
УстановитьУзелОбменаУСтрокДерева(обработкаОбмена.ТаблицаПравилВыгрузки.Строки, НастройкаОбменаДанными.УзелИнформационнойБазы);
// установить ПараметрыCOMСоединенияСПриемником
обработкаОбмена.НепосредственноеЧтениеВИБПриемнике = Истина;
обработкаОбмена.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1;
списокСвойств = "ТипИнформационнойБазыДляПодключения"
+ ",КаталогИнформационнойБазыДляПодключения"
+ ",ИмяСервераИнформационнойБазыДляПодключения"
+ ",ИмяИнформационнойБазыНаСервереДляПодключения"
+ ",АутентификацияWindowsИнформационнойБазыДляПодключения"
+ ",ПользовательИнформационнойБазыДляПодключения"
+ ",ПарольИнформационнойБазыДляПодключения"
+ ",ВерсияПлатформыИнформационнойБазыДляПодключения";
ЗаполнитьЗначенияСвойств(обработкаОбмена, НастройкаОбменаДанными, списокСвойств);
обработкаОбмена.ИмяФайлаОбмена = ДанныеОбменаФайл;
обработкаОбмена.ВыводВПротоколИнформационныхСообщений = Истина;
обработкаОбмена.ВыводВПротоколСообщенийОбОшибках = Истина;
обработкаОбмена.ИмяФайлаПротоколаОбмена = ИмяФайлаПротоколаОбмена;
обработкаОбмена.ИмяФайлаПротоколаОбменаЗагрузка = ИмяФайлаПротоколаОбменаЗагрузка;
обработкаОбмена.ВыполнитьВыгрузку();
обработкаОбмена.ДатаОкончания = ТекущаяДата();
результатВыполненияОбмена = Новый Структура("ДатаНачала,ДатаОкончания,ФлагОшибки");
ЗаполнитьЗначенияСвойств(результатВыполненияОбмена, обработкаОбмена);
обработкаОбмена = Неопределено;
// удаление временных файлов
УдалитьФайлы(ПравилаОбменаФайл);
УдалитьФайлы(ПравилаОбменаДляПриемникаФайл);
УдалитьФайлы(ДанныеОбменаФайл);
// протокол обмена
записьРС = РегистрыСведений.DEV_ОбменБП30.СоздатьМенеджерЗаписи();
записьРС.Период = результатВыполненияОбмена.ДатаНачала;
записьРС.ДатаОкончания = результатВыполненияОбмена.ДатаОкончания;
записьРС.УзелИнформационнойБазы = НастройкаОбменаДанными.УзелИнформационнойБазы;
записьРС.ФлагОшибки = результатВыполненияОбмена.ФлагОшибки;
записьРС.ПротоколОбмена = ДанныеФайла(ИмяФайлаПротоколаОбмена, "ПротоколОбмена");
записьРС.ПротоколОбменаЗагрузка = ДанныеФайла(ИмяФайлаПротоколаОбменаЗагрузка, "ПротоколОбменаЗагрузка");
записьРС.Записать();
УдалитьФайлы(ИмяФайлаПротоколаОбмена);
УдалитьФайлы(ИмяФайлаПротоколаОбменаЗагрузка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УстановитьУзелОбменаУСтрокДерева(СтрокиДерева, УзелОбмена)
Для Каждого строкаДерева Из СтрокиДерева Цикл
Если строкаДерева.ЭтоГруппа Тогда
УстановитьУзелОбменаУСтрокДерева(строкаДерева.Строки, УзелОбмена);
Иначе
строкаДерева.СсылкаНаУзелОбмена = УзелОбмена;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ДанныеФайла(Знач ИмяФайла, Знач ТипФайла)
Попытка
ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла);
Возврат ЧтениеТекста.Прочитать();
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Возврат СтрШаблон("Внимание! Не удалось прочитать файл <%1> (%2)%3%4"
, ИмяФайла
, ТипФайла
, Символы.ПС
, ОписаниеОшибки
);
КонецПопытки;
КонецФункции
#КонецОбласти
#КонецЕсли