Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обмен между УТ 10.3 и БП 2.0 через COM

Обмен между УТ 10.3 и БП 2.0 через COM
Я
   DiFas
 
26.06.19 - 13:28
Всем привет! Нужна ваша помощь! УТ 10.3.13.2 и БП 2.0.66.75. Написал обработку, которая через COM соединение выгружает в базу БП документы по выбору и нужному периоду. УТ успешно создает файл и выгружает в него данные, т.е. пишет "Выгружено объектов: 120". А вот "Загружено объектов: 0". В коде прописываю:

ДвоичныеДанные = ВыгрузитьНаСервереУТ();

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

К базе БП обработка успешно подключается. Файл xml нормально создается. Создал внешнюю обработку с этим же кодом, в которой выбираю этот же файл xml и, блин, всё нормально загружается, т.е. "Загружено объектов: 120". Понять не могу почему из базы УТ грубо говоря один и тот же файл не загружается в БП, а если отдельно, то всё норм. Я понимаю, что многие начнут говорит типа этот функционал есть в обработке "Универсальный обмен в формате XML", но там постоянно надо подгружать правила и т.д. Но моя обработка уже с загруженными правилами и с другими разными удобствами.
 
 
   ДенисЧ
 
1 - 26.06.19 - 13:34
А что в протоколе информационных сообщений?
   DiFas
 
2 - 26.06.19 - 13:39
(1) если ты про журнал регистрации, то он показывает аутентификацию Администратора через COM-соединение и всё... Никаких изменений, проведений. Но если я это делаю через внешнюю обработку для проверки, то он документы, конечно же, заносит в базу
   ДенисЧ
 
3 - 26.06.19 - 13:44
(2) У тебя стоит ВыводВПротоколИнформационныхСообщений = Истина. Значит, где-то должен быть этот самый протокол. Может, ты к нему путь не указал Или не туда указал.
   DiFas
 
4 - 26.06.19 - 15:21
(3) Ну что могу сказать - я проверил эти протоколы "ИмяФайлаПротоколаОбмена" и "ИмяФайлаПротоколаОбменаЗагрузка". Протокол выгрузки показывает выгруженные доки, а протокол загрузки пуст...
   ДенисЧ
 
5 - 26.06.19 - 15:23
Тогда тебе остаётся одно... Фигачить свой лог на каждый чих в БП. И смотреть, куда проваливаешься и где отваливаешься...
   wowik
 
6 - 26.06.19 - 15:48
(0) у меня работает так: создает обработку выгрузки текущей базе, в обработке указывается база примник, загружает правила, делаем выгрузку. Могу поделиться кодом.
   DiFas
 
7 - 26.06.19 - 19:08
(6) если не сложно, можно хотя бы кусочек кода?)
   los_hooliganos
 
8 - 26.06.19 - 19:16
Указал что режим загрузки "На сервере"?
   los_hooliganos
 
9 - 26.06.19 - 19:17
Плюс сервер должен видеть файл для загрузки
   DiFas
 
10 - 26.06.19 - 20:13
(9) завтра попробую указать серверную выгрузку
 
 Рекламное место пустует
   wowik
 
11 - 27.06.19 - 09:21
(7)

ИмяФайлаПравилОбмена = ПолучитьИмяВременногоФайла("xml");
МакетПравил = ПолучитьОбщийМакет("ПравилаОбменаДанными_123");
МакетПравил.Записать(ИмяФайлаПравилОбмена);    

Обработка = Обработки.УниверсальныйОбменДаннымиXML_2_1_7.Создать();
Обработка.РежимОбмена = "Выгрузка";
Обработка.ВыводВПротоколСообщенийОбОшибках   = Истина; 
Обработка.НепосредственноеЧтениеВИБПриемнике = Истина;

Обработка.ТипИнформационнойБазыДляПодключения             = Ложь;  // истина - файловая база, Ложь - серверная база

Обработка.ВерсияПлатформыИнформационнойБазыДляПодключения = "V83";

Обработка.ПользовательИнформационнойБазыДляПодключения = "Администратор";
Обработка.ПарольИнформационнойБазыДляПодключения       = "123";

Обработка.ИмяСервераИнформационнойБазыДляПодключения   = "sql";
Обработка.ИмяИнформационнойБазыНаСервереДляПодключения = "zsdfsdf123";

Обработка.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена//ПутьКПапкеПравиламиИВыгрузкойДанных + "ПравилаОбменаДанными_Консолидация_ФСОТорговля.xml";    

Обработка.ИмяФайлаОбмена       = ПутьКПапкеПравиламиИВыгрузкойДанных + "ВыгрузкаДанных.xml"; 

Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0;// 0 - не снимать регистрацию, 1 - снимать регистрацию

//    "Изменения регистрации для узлов обмена после выгрузки" – поле определяет режим работы с регистрацией изменений данных после завершения выгрузки данных. Возможные значения:

//0 -Не удалять регистрацию – после выгрузки данных регистрация изменений на узле удалена не будет.

//1 -Полностью удалить регистрацию для узла обмена – после выгрузки данных регистрация изменений на узле будет полностью удалена.
//2 -Удалить регистрацию только для выгруженных метаданных – после выгрузки данных регистрация изменений на узле будет удалена только для объектов метаданных, которые были указаны к выгрузке.


Обработка.ЗагрузитьПравилаОбмена(); 

Обработка.ВыполнитьВыгрузку();
   wowik
 
12 - 27.06.19 - 09:24
(11)
    Если  Обработка.ФлагОшибки Тогда        
        СообщенияПользователю = ПолучитьСообщенияПользователю();
        Для Каждого СообщениеПользователю из СообщенияПользователю Цикл
            ТексСообщения = ТексСообщения + Символы.ПС;
            ТексСообщения = ТексСообщения + СообщениеПользователю.Текст;
        КонецЦикла;
        //ОтправитьОшибкиНаПочту(ТексСообщения);

    КонецЕсли;
   DiFas
 
13 - 28.06.19 - 09:45
(12) ты описал очень правильный метод, даже лучше, чем у меня. НО у меня такая ситуация, что нужна не стандартная компонента "V83COMConnector.1", подключение через которую идет в типовых базах, а компонента разных платформ. Долго объяснять не буду, но это мне необходимо, вот ссылка как у меня организовано http://catalog.mista.ru/public/685924/
До сих пор такая порнография:
Выгружено объектов: 303
Загруженно объектов 0
Синхронизация данных выполнена успешно

Логирование в протокол сделать не могу ввиду нехватки мозгов. Т.к. загрузка выполняется на сервере, я пытался и получить временный файл методом ПолучитьИмяВременногоФайла(txt), и насильно прописывал адрес папки - ругается невозможность записи. ХЗ че делать
   ДенисЧ
 
14 - 28.06.19 - 10:00
(13) В журнал регистрации пиши )))
   DiFas
 
15 - 28.06.19 - 14:54
(14) на каждый чих и пук сделал "ЗаписьЖурналаРегистрации". Оказывается происходит ошибка чтение моего файла:
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11122)}: Ошибка при вызове метода контекста (ОткрытьФайл): Ошибка доступа к файлу 'C:\Users\difas\AppData\Local\Temp\v8_C426_26.xml'.

Теперь другой вопрос - как перенести файл на сервер, не затрагивая при этом код типовой конфигурации?
   ДенисЧ
 
16 - 28.06.19 - 15:15
(15) Во всех обработках обмена, что я видел - был реквизит - путь к файлу обмена. Может, его нужно задать? Присвоив нужно значение?
Или это слишком сложно? )))
   DiFas
 
17 - 28.06.19 - 15:24
(16) я так уже делал - сервер не видит моего файла, который был создан на моем компе
   ДенисЧ
 
18 - 28.06.19 - 15:29
(17) положи в сетевую шару, что тебе, как маленькому рассказывать надо...
   DiFas
 
19 - 28.06.19 - 15:43
(18) безо всяких сетевых шар обошлось. БазаБП это COMОбъект. Я сделал так:

ДвоичныеДанные = ВыгрузитьНаСервереУТ();

Обработка = БазаБП.Обработки.УниверсальныйОбменДаннымиXML.Создать();
ВременныйФайлОбменаКлиент = БазаБП.КаталогВременныхФайлов() + Документ + ".xml";
ДвоичныеДанные.Записать(ВременныйФайлОбменаКлиент);
Обработка.РежимОбмена = "Загрузка";
Обработка.ИмяФайлаОбмена = ВременныйФайлОбменаКлиент;             
Обработка.ОткрытьФайлЗагрузки(Истина);
Обработка.АрхивироватьФайл = Ложь;            
Обработка.ВыполнитьЗагрузку();

Всем спасибо за внимание!

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