Имя: Пароль:
1C
1С v8
Com-обмен в УниверсальныйОбменДаннымиXML
,
0 Mikhail Volkov
 
08.02.15
10:37
Обычно при обмене файлами процесс загрузки длится в 3-5 раз дольше выгрузки, а при Com-обмене его практически нет!? Процесс обмена заканчивается сообщением "Выгрузка данных выполнена успешно", смотрю приемную базу, действительно все загружено.
На этот факт раньше как-то не обращал внимание, обмены делались раз в месяц (из управленческой базы в базу, в которой ведется бух.учет). Но вот финичке понадобились обмены документами оплаты чуть ли не каждый день. Попросила написать аналогичную обработку, но с расставленными как ей нужно всеми галочками и параметрами обмена, чтобы только период задавать.
Сделал примерно следующее, старался максимально использовать УниверсальныйОбменДаннымиXML:

    // Инициализация обработки УниверсальныйОбменДаннымиXML
    мУниверсальнаяВыгрузкаДанных = Обработки.УниверсальныйОбменДаннымиXML.Создать();

    УникальныйИдентификатор        = Новый УникальныйИдентификатор();
    ИмяВременногоФайлаПравилОбмена = КаталогВременныхФайлов() + УникальныйИдентификатор + ".xml";
    
    МакетПравилОбмена = ПолучитьМакет("ПравилаОбменаТекст");
    МакетПравилОбмена.Записать(ИмяВременногоФайлаПравилОбмена);
    
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
    мУниверсальнаяВыгрузкаДанных.ЗагрузитьПравилаОбмена();
    
    Попытка
        УдалитьФайлы(ИмяВременногоФайлаПравилОбмена);  // Удаляем временный файл правил
    Исключение
    КонецПопытки;
    ЗагруженыПравилаОбмена = Истина;
    
    ТаблицаНастройкиПараметров = мУниверсальнаяВыгрузкаДанных.ТаблицаНастройкиПараметров;

    мУниверсальнаяВыгрузкаДанных.ИмяФайлаОбмена = ИмяФайлаОбмена;
        
    мУниверсальнаяВыгрузкаДанных.РежимОбмена                        = "Выгрузка";
    мУниверсальнаяВыгрузкаДанных.ДатаНачала                       = ДатаНачала;
    мУниверсальнаяВыгрузкаДанных.ДатаОкончания                   = ДатаОкончания;
    мУниверсальнаяВыгрузкаДанных.ВыводВОкноСообщенийИнформационныхСообщений       = Ложь;
    мУниверсальнаяВыгрузкаДанных.НепосредственноеЧтениеВИБПриемнике            = Ложь;
    мУниверсальнаяВыгрузкаДанных.ФлагРежимОтладки                              = Ложь;
    мУниверсальнаяВыгрузкаДанных.ВыполнитьОбменДаннымиВОптимизированномФормате = Истина;
    мУниверсальнаяВыгрузкаДанных.ЭтоИнтерактивныйРежим                         = Ложь;

    // Выгружаем данные
    мУниверсальнаяВыгрузкаДанных.ВыполнитьВыгрузку();

    // Создаем Com-подключение
    ComОбъектПодключения = ВыполнитьComПодключение(Справочники.Организации.ОсновнаяОрганизация);
    мОбработкаДляЗагрузкиДанных = ComОбъектПодключения.Обработки.УниверсальныйОбменДаннымиXML.Создать();
    мОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции          = Ложь;    
    мОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию      = 0;
    мОбработкаДляЗагрузкиДанных.ФлагРежимОтладки              = Ложь;
    мОбработкаДляЗагрузкиДанных.ИмяФайлаПротоколаОбмена          = ИмяФайлаПротоколаОбменаЗагрузка;
    мОбработкаДляЗагрузкиДанных.ДописыватьДанныеВПротоколОбмена      = Ложь;
    мОбработкаДляЗагрузкиДанных.ВыводВПротоколИнформационныхСообщений = Истина;
    мОбработкаДляЗагрузкиДанных.РежимОбмена                  = "Загрузка";
    
    // Загружаем данные
    мОбработкаДляЗагрузкиДанных.ИмяФайлаОбмена                        = ИмяФайлаОбмена;
    мОбработкаДляЗагрузкиДанных.РежимОбмена                           = "Загрузка";
    мОбработкаДляЗагрузкиДанных.ЗапоминатьЗагруженныеОбъекты          = Ложь;
    мОбработкаДляЗагрузкиДанных.ВыводВПротоколСообщенийОбОшибках      = Истина;
    мОбработкаДляЗагрузкиДанных.ВыводВПротоколИнформационныхСообщений = Ложь;
    мОбработкаДляЗагрузкиДанных.ИмяФайлаПротоколаОбмена               = ИмяФайлаПротоколаОбменаЗагрузка;
    
    мОбработкаДляЗагрузкиДанных.ЗагружатьДанныеВРежимеОбмена                        = Истина;
    мОбработкаДляЗагрузкиДанных.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления          = Истина;
    мОбработкаДляЗагрузкиДанных.ОптимизированнаяЗаписьОбъектов                      = Истина;
    мОбработкаДляЗагрузкиДанных.ЗапоминатьЗагруженныеОбъекты                        = Истина;
    мОбработкаДляЗагрузкиДанных.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;    
    
    Сообщить("Начало загрузки: " + ТекущаяДата(), СтатусСообщения.Информация);
    Состояние("Загрузка документов в базу-приемник....");
    мОбработкаДляЗагрузкиДанных.ВыполнитьЗагрузку();
    ФлагОшибкиЗагрузки = мОбработкаДляЗагрузкиДанных.ФлагОшибки;
    ТекстПредупреждения = ?(ФлагОшибкиЗагрузки, "При загрузке данных произошли ошибки", "Загрузка данных выполнена успешно");
    Если ФлагОшибкиЗагрузки Тогда
        ЗапуститьПриложение("notepad.exe " + ИмяФайлаПротоколаОбменаЗагрузка);
    КонецЕсли;
    Сообщить(ТекстПредупреждения + " в " + ТекущаяДата(), ?(ФлагОшибкиЗагрузки, СтатусСообщения.Внимание, СтатусСообщения.Информация));

Все работает, но не так как УниверсальныйОбменДаннымиXML - для загрузки нужно время!?
1 DmitrO
 
08.02.15
10:45
то что пытаются сказать 1сники понять порой невозможно.. :)
2 Mikhail Volkov
 
08.02.15
10:56
(1)  Старался максимально использовать УниверсальныйОбменДаннымиXML, но что-то не учел - не так работает как УниверсальныйОбменДаннымиXML. Что?
3 Мимохожий Однако
 
08.02.15
10:59
Разные механизмы используются, поэтому разная скорость.В чем цель сабжа?
4 Mikhail Volkov
 
08.02.15
11:03
(3) Получается, что я не правильно понимаю механизм Com-обмена в УниверсальныйОбменДаннымиXML. В чем я ошибаюсь?
5 ДенисЧ
 
08.02.15
11:06
я так и не понял в чём проблема...
Что по кому обмен идёт медленней? Так и должно быть...
6 DmitrO
 
08.02.15
11:07
(2)Когда еду на трамвае добираюсь в 3-5 раз дольше чем когда еду на своей машине, причем когда приезжаю смотрю - приезжаю в нужное место, как-то раньше не обращал внимания, но тут понадобилось ездить каждый день.

Начал ездить каждый день на трамвае - приезжаю вроде нормально, но что-то не так, для езды на трамвае нужно время?
7 DmitrO
 
08.02.15
11:28
Суть обмена через COM соединение в том что нет никакого файла обмена, обработка УниверсальныйОбменДаннымиXML в базе-источнике сама подключается к базе-приемнику и следуя правилам обмена выгружает очередной объект и сразу загружает его через COM соединение в базу приемник.
8 DmitrO
 
08.02.15
11:32
(7) так что в автомобиль ты не сел, приведенный в (0) код это все еще трамвай.
9 shuhard
 
08.02.15
11:56
(4) [В чем я ошибаюсь?]
во всём
10 Mikhail Volkov
 
08.02.15
14:12
(7) > Суть обмена через COM соединение в том что нет никакого файла обмена
Я это же подозреваю, но когда отследил процесс по шагам, то все равно выгружается в XMLФайл. Может XMLФайл - это Com-объект в случае Com-обмена? Не нашел как он создается...
11 Mikhail Volkov
 
08.02.15
18:24
Может кто даст ссылку на пример правильного Com-обмена?
12 Mikhail Volkov
 
09.02.15
17:27
Я так понимаю, что Com-подключение
    ComОбъектПодключения = ВыполнитьComПодключение(Справочники.Организации.ОсновнаяОрганизация);
    мОбработкаДляЗагрузкиДанных = ComОбъектПодключения.Обработки.УниверсальныйОбменДаннымиXML.Создать();
надо создать до начала процесса выгрузки, и использовать его вместо ИмяФайлаОбмена?
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаОбмена = мОбработкаДляЗагрузкиДанных;
13 Chameleon1980
 
09.02.15
17:45
а не смотрели механизм перехода из зик в зуп 2,5
дык там как-бы через ком, но файл обмена есть в темпах
там же обработка для выгрузки из зик, правила и обработка для загрузки в зуп
14 Mikhail Volkov
 
10.02.15
09:45
(13) Да, в помощниках перехода с 7-й на 8-ю версию должен предусматриваться какой-то обмен, только я им никогда не пользовался, и 7-ки под рукой нет :(