Имя: Пароль:
1C
 
Универсальный обмен xml программно
0 Gossar1C
 
26.02.15
14:26
Здравствуйте. Делаю программно выгрузку номенклатуры из одной базы. Хочу также через com соединение не открывая вторую базу сделать загрузку. Подскажите как это можно реализовать? Заранее благодарю!

ОбъектПодключения = ПодключитсяКИнформационнойБазе(СтруктураПодключения);
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    Обработка.РежимОбмена = "Выгрузка";
    Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Истина;
    
    Обработка.ИмяФайлаПравилОбмена = "\\staff\Правила.xml";
    
    Обработка.ИмяФайлаОбмена = "\\staff\ВыгрузкаTrade.xml";
    
    Обработка.ЗагрузитьПравилаОбмена();
    
    ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать();
    Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
        Наименование = СтрокаУровня2.Имя;
        Если Наименование <> "ПеремещениеТоваров00001" Тогда
            СтрокаУровня2.Включить = 0;
        КонецЕсли;
    КонецЦикла;
    
    //Сдесь вы определяете искомое правило выгрузки которое нужно оставить включенным на определенной ветке (сами можите варьировать чего и сколько)
    
    
    Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
        Наименование = СтрокаУровня2.Имя;
        Если Наименование = "Номенклатура" Тогда
            СтрокаУровня2.Включить = 1;
        Иначе
            СтрокаУровня2.Включить = 0;
        КонецЕсли;
    КонецЦикла;
    Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
    
    
    Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
        Наименование = СтрокаУровня2.Имя;
        Если Наименование = "Номенклатура" Тогда
            ТекущееПВД = СтрокаУровня2;
            
            Построитель = Новый ПостроительОтчета;
            //Если ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда
            //    
            //    Построитель.Текст =
            //    "ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
            //    |
            //    |
            //    |{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
            //КонецЕсли;
            
            Построитель.Текст = "ВЫБРАТЬ Разрешенные _.* ИЗ Справочник.Номенклатура КАК _    {ГДЕ _.Ссылка.* КАК Справочник_Номенклатура}";
            
            Отбор = Построитель.Отбор;
            
            Если Отбор.Найти("Справочник_Номенклатура") = Неопределено Тогда
                Отбор.Добавить("Справочник_Номенклатура");
            КонецЕсли;
            
            Массив = Новый Массив;
            Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
            ОписаниеТиповС = Новый ОписаниеТипов(Массив, , );
            
            Отбор["Справочник_Номенклатура"].Использование = Истина;
            Отбор["Справочник_Номенклатура"].Значение = Группа;
            Отбор["Справочник_Номенклатура"].ВидСравнения = ВидСравнения.ВИерархии;
            
            ДоступностьПостроителя = Истина;
            Если Построитель.Отбор.Количество() > 0 Тогда
                ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
                ТекущееПВД.ИспользоватьОтбор    = ИСТИНА;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
    
    //Ну и собственно запускаем саму выгрузку и получаем файл для загрузки:
        
        
    Обработка.АрхивироватьФайл = Истина;
        
    Обработка.ВыполнитьВыгрузку();
    
    
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    МассивФайлов = НайтиФайлы("\\staff\ВыгрузкаTrade.zip");
    
    Для Каждого Стм Из МассивФайлов Цикл
        
            Обработка  = Обработки.УниверсальныйОбменДаннымиXML.Создать();
            Обработка.ИмяФайлаОбмена = Стм.ПолноеИмя;
            Обработка.РежимОбмена    = "Загрузка";
            Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
            Обработка.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
            Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
            Обработка.ВыполнитьЗагрузку();
            УдалитьФайлы(Стм.ПолноеИмя);
        
    КонецЦикла;
1 Gossar1C
 
26.02.15
14:43
проблему решил, если кому интересно все очень просто оказалось :)

МассивФайлов = НайтиФайлы("\\staff\ВыгрузкаTrade.zip");
    
    Для Каждого Стм Из МассивФайлов Цикл
        
            МенеджерОбработки = ОбъектПодключения.Обработки.УниверсальныйОбменДаннымиXML;
            ОбработкаCOM  = МенеджерОбработки.Создать();
            ОбработкаCOM.ИмяФайлаОбмена = Стм.ПолноеИмя;
            ОбработкаCOM.РежимОбмена    = "Загрузка";
            ОбработкаCOM.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
            ОбработкаCOM.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
            ОбработкаCOM.ЗагружатьДанныеВРежимеОбмена = Истина;
            ОбработкаCOM.ВыполнитьЗагрузку();
            УдалитьФайлы(Стм.ПолноеИмя);
        
    КонецЦикла;
2 zippygrill
 
26.02.15
14:49
А что не напрямую (онлайн)?
3 zippygrill
 
26.02.15
14:51
Например у меня, в одну сторону выгружаю в файл на общий диск и через 10 минут из другой программы читаю выгруженный xml.
А обратно онлайн настроил.
4 Gossar1C
 
26.02.15
15:21
(2) так в данном случае я и произвожу онлайн обмен из одной базы из одной обработки + по итогам переноса я снова получаю иерархию номенклатуры другой базы дабы видеть что номенклатура перенеслась