|
Файловый обмен данными | ☑ | ||
---|---|---|---|---|
0
Likons
22.07.20
✎
15:01
|
Добрый день , ув.формумчане )
Пол дня бьюсь над , вроде как , над простою бедою ( Условия : Есть самописная конфа которая работает с распределенными базами. Есть план обмена для распределенных ИБ. Если клацнуть правой кнопкой по узлу - появятся кнопки "записать изменения" и "прочитать изменения". Если клацнуть , например , на "записать изменения" , то оно формирует файл zip и спрашивает куда его положить. Цель : хочу сделать кнопку "обмен данными" , что бы оно закидывала эти самые файлики в директорию , из справочника "Настройки обменов" , и соответственно читала их от туда же. Мои попытки : &НаСервере Функция ВыгрузкаИзмененийВФайлОбмена(НастройкаОбмена) Экспорт Если Константы.ПереферийнаяБаза.Получить() = Истина тогда УзелОбмена = ПланыОбмена.ГлавныйУзел(); Иначе УзелОбмена = ПланыОбмена.Основной.НайтиПоКоду(НастройкаОбмена.КодУзлаОбмена); КонецЕсли; ФайлСообщенияОбмена = Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+ПланыОбмена.Основной.ЭтотУзел().Код+".xml"; Сообщить("Выгружаю файл " + ФайлСообщенияОбмена + " из базы "+ ПланыОбмена.Основной.ЭтотУзел().Код); ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.ОткрытьФайл(ФайлСообщенияОбмена); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML,УзелОбмена); Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбмена,ЗаписьСообщения.НомерСообщения); Пока Выборка.Следующий() Цикл Данные = Выборка.Получить(); ЗаписатьXML(ЗаписьXML,Данные); КонецЦикла; ЗаписьСообщения.ЗакончитьЗапись(); КонецФункции &НаСервере Функция ЗагрузкаИзмененийИзФайлаОбмена(НастройкаОбмена) Экспорт Если Константы.ПереферийнаяБаза.Получить() = Истина тогда УзелОбмена = ПланыОбмена.ГлавныйУзел(); Иначе УзелОбмена = ПланыОбмена.Основной.НайтиПоКоду(НастройкаОбмена.КодУзлаОбмена); КонецЕсли; Сообщить("Загружаю файл " + Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+УзелОбмена.Код+".xml" + " в базу "+ ПланыОбмена.Основной.ЭтотУзел().Код); Если НЕ РаботаСФайлами.ПроверитьСуществованиеФайла(Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+УзелОбмена.Код+".xml") тогда Сообщить("Не найден файл " + Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+УзелОбмена.Код+".xml"); Возврат неопределено; КонецЕсли; ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.ОткрытьФайл(Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+УзелОбмена.Код+".xml"); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,ДопустимыйНомерСообщения.Больший); Пока ВозможностьЧтенияXML(ЧтениеXML) цикл Данные = ПрочитатьXML(ЧтениеXML); Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Загрузка = ИСТИНА; Данные.Записать(); КонецЦикла; ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); УдалитьФайлы(Строка(НастройкаОбмена.ДирректорияОбмена) + "message_"+УзелОбмена.Код+".xml"); КонецФункции Этот код , в принципе работает , но есть пара недостатков. Например , таким образом не передается изменения конфигурации , да и файл на выходе в формате xml , он не пакуется в zip. Подозреваю , что для этого есть какой то штатный способ , о котором я не знаю ( Было бы круто , если кто то подсказал , как вызвать метод , который выполняется , когда я клацаю "записать изменения" по конкретному узлу. Буду благодарен за любые наводки ( |
|||
1
Fragster
гуру
22.07.20
✎
15:02
|
Правильное решение - интегрировать БСП и подсистему обмен данными.
|
|||
2
Likons
22.07.20
✎
15:08
|
(1) Спасибо за ответ ) Сейчас погуглю на этот счет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |