Вход | Регистрация
 

Файловый обмен данными

Файловый обмен данными
Я
   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.
Подозреваю , что для этого есть какой то штатный способ , о котором я не знаю (
Было бы круто , если кто то подсказал , как вызвать метод , который выполняется , когда я клацаю "записать изменения" по конкретному узлу.
Буду благодарен за любые наводки (
   Fragster
 
1 - 22.07.20 - 15:02
Правильное решение - интегрировать БСП и подсистему обмен данными.
   Likons
 
2 - 22.07.20 - 15:08
(1) Спасибо за ответ ) Сейчас погуглю на этот счет.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.