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

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

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

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

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

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

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

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

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

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

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

Логирование в протокол сделать не могу ввиду нехватки мозгов. Т.к. загрузка выполняется на сервере, я пытался и получить временный файл методом ПолучитьИмяВременногоФайла(txt), и насильно прописывал адрес папки - ругается невозможность записи. ХЗ че делать
14 ДенисЧ
 
28.06.19
10:00
(13) В журнал регистрации пиши )))
15 DiFas
 
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) Во всех обработках обмена, что я видел - был реквизит - путь к файлу обмена. Может, его нужно задать? Присвоив нужно значение?
Или это слишком сложно? )))
17 DiFas
 
28.06.19
15:24
(16) я так уже делал - сервер не видит моего файла, который был создан на моем компе
18 ДенисЧ
 
28.06.19
15:29
(17) положи в сетевую шару, что тебе, как маленькому рассказывать надо...
19 DiFas
 
28.06.19
15:43
(18) безо всяких сетевых шар обошлось. БазаБП это COMОбъект. Я сделал так:

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

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

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