|   |   | 
| 
 | Обмен между УТ 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"; ДвоичныеДанные.Записать(ВременныйФайлОбменаКлиент); Обработка.РежимОбмена = "Загрузка"; Обработка.ИмяФайлаОбмена = ВременныйФайлОбменаКлиент; Обработка.ОткрытьФайлЗагрузки(Истина); Обработка.АрхивироватьФайл = Ложь; Обработка.ВыполнитьЗагрузку(); Всем спасибо за внимание! | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |