Проблема с обменом, УниверсальныйОбменДаннымиXML, повторные выгрузки объектов в приемник

1. user1536836 25.09.23 20:26 Сейчас в теме
Доброго времени суток.

Настроен обмен между самописными базами на БСП, Упр.формы,
Обмен двусторонний, настроен через обработку УниверсальныйОбменДаннымиXML, через План обмена.
данные читаются сразу в базе приемнике через COM соединение, флажок Обработка.НепосредственноеЧтениеВИБПриемнике=Истина;

На данный момент проблема такая, документы регистрируются в плане обмена, отрабатывает РЗ для обмена, документов за день регистрируются много, когда выходит ошибка при записи документа в приемнике, документы которые были выгружены успешно до ошибки с регистрации не снимаются, обмен прекращается и следующие документы после документа с ошибкой не выгружаются, когда снова отрабатывает РЗ, документы до ошибки выгружаются повторно, и так постоянно.

Опыта работы с обменами такого рода не имеется, прошу пожалуйста подсказать путь решения.
Вопрос: Возможно ли поочередная выгрузка объектов таким же методом(непосредственным чтение в приемнике, через COM), например в цикле выгружать выборку изменений, чтобы в случае ошибки при загрузке в приемнике, передача объектов продолжалась далее, а те которые успешно выгрузились снимались с регистрации? И чтобы Запись об ошибке сохранялась в ЖР, на данный момент почему то в ЖР ошибка не пишется, хотя в коде прописано.

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

	Обработка.АутентификацияWindowsИнформационнойБазыДляПодключения=Ложь;
	Обработка.ВерсияПлатформыИнформационнойБазыДляПодключения="V83"; 
	
	Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки=1­; //2;
	ИмяВременногоФайлаПравилОбмена = ПолучитьИмяВременногоФайла("xml");	
	МакетПравилОбмена = ПолучитьОбщийМакет("ПравилаОбменаДанными");
	МакетПравилОбмена.Записать(ИмяВременногоФайлаПравилОбмена);	
	Обработка.ЗагрузитьПравилаОбмена(ИмяВременногоФайлаПравилОбмена);	
	
	Обработка.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
	
	//ЕСЛИ НУЖНО ВЫГРУЖАТЬ ПО ПЛАНАМ ОБМЕНА, ТО ВКЛЮЧАЕМ ЭТОТ БЛОК И ПОДСТАВЛЯЕМ СВОЙ УЗЕЛ ПЛАНА ОБМЕНА
	Для Каждого Стр Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл
		Стр.Включить=1;
		Для Каждого Стр1 Из Стр.Строки Цикл
			Стр1.Включить=1;
			Стр1.СсылкаНаУзелОбмена=Узел;
		КонецЦикла;
	КонецЦикла;	
	Попытка    
		Обработка.ВыполнитьВыгрузку(); 
	Исключение
		Отказ = ИСТИНА;
		Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ЗаписьЖурналаРегистрации("Обмен данными", УровеньЖурналаРегистрации.Ошибка, , , Сообщение);
	КонецПопытки;
	
	УдалитьФайлы(ИмяВременногоФайлаПравилОбмена);
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. polax 25.09.23 21:15 Сейчас в теме
Ну так убери Отказ = Истина в Исключении. Пусть при ошибке в одном документе, выгрузка продолжается.
Суть снятия с регистрации выгруженных объектов состоит в обратном ответе противоположной базы. Т.е. отправил ты сообщение №2 в котором 100 зарегистрированных доков, из них 2 не прошло по каким-то причинам. Обмен при ошибке не прекратился (нет Отказ = Истина), противоположная база тоже что-то отправила в ответ и, главное, подтвердила, что приняла сообщение №2. Всё! 98 документов считается переданными и снимаются с регистрации, останутся два с ошибками
Сейчас же у тебя передалось куча доков и вдруг ошибка, обмен прекращается, противоположная база НЕ дает ответ. В итоге переданные доки отмечаются переданными в сообщении №2, но НЕ принятые (нет подтверждения от противоположной базы) и, значит, в след раз снова будут выгружаться тратя ресурсы и время
3. user1536836 26.09.23 08:55 Сейчас в теме
Убрал строку с Отказом = истина, не помогло, все равно обмен прекращается при ошибке, а те которые выгрузились не снимаются.
4. maks_20 169 26.09.23 09:04 Сейчас в теме
(3) А какая ошибка возникает при загрузке? Связана ли она с проведением документа?
5. user1536836 26.09.23 09:38 Сейчас в теме
Ошибки разные могу быть, как и связанаы с проведением, так и запись, так и запись регистра сведений.
7. maks_20 169 26.09.23 10:52 Сейчас в теме
(5) Есть ощущение, что у вас либо в правилах обмена что-то некорректно в обработчиках ПослеЗагрузки (например принудительно вызывается запись объекта), либо в модулях объектов нет проверок в процедурах ПриЗаписи/ПередЗаписью на
Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;


т.к. загрузка объектов происходит в режиме ОбменДанными=Истина и типовые проверки должны пропускаться.
8. user1536836 26.09.23 11:03 Сейчас в теме
(7) Проверки указаны, цель не избавится от ошибок, а в случае ошибки, выгрузку следующих документов продолжать.
9. maks_20 169 26.09.23 12:16 Сейчас в теме
(8) Посмотрите этот топик, возможно поможет в решении https://forum.infostart.ru/forum76/topic58449/
6. polax 26.09.23 09:56 Сейчас в теме
А если попробовать через файл на сервере или фтп?
10. user1536836 29.09.23 10:52 Сейчас в теме
Спасибо за советы, решил проблему по другому.
Реализовал через веб-сервисы, то есть в цикле перебираю выборку регистрации изменений по узлу, формирую массив объектов. Далее в следующем цикле обрабатывается массив этих объектов, и по каждому объекту формирую XML типовой обработкой УниверсальныйОбменДаннымиXML,
затем выгруженный XML объекта передаю на веб сервис базы приемника, в этом веб сервисе прописан код загрузки файла xml через обработку УниверсальныйОбменДаннымиXML, далее в источнике снимается регистрация выгруженного объекта, и так по каждому объекту массива в цикле.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот