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