Дублирование документов в обмене РИБ

1. user1559729 01.11.21 14:47 Сейчас в теме
Обмен РИБ. Узел и Центральная. Ситуация:
1. Документ Рапорт создается в подчиненном узле РИБ с незаполненным реквизитом ссылкой на ОтчетПроизводстваЗаСмену.
2. Далее обменом Рапорт передается в ЦБ. В центральной базе доработанный план обмена. Документ Рапорт загружается и в процедуре ПриПолученииДанныхОтПодчиненного() проверяется, если реквизит ОтчетПроизводстваЗаСмену не заполнен, то создаётся новый и записывается в этот реквизит.

Двусторонний обмен настроен - загрузка/выгрузка на обеих сторонах, каждые 5 мин расписанием.
При обмене во второй операции обмена происходит дублирование документа ОтчетПроизводстваЗаСмену.

Понимаю так, что в ЦБ происходит повторная загрузка необновленных данных (пустая ссылка в реквизите ОтчетПроизводстваЗаСмену).
Как решить вопрос?

Авторегистрация для документа ОтчетПроизводстваЗаСмену в составе плана обмена отключена.
В процедуре ПриПолученииДанныхОтПодчиненного параметр ОтправкаНазад также не установлен для документа Рапорт.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. masterb 63 01.11.21 15:15 Сейчас в теме
Обработчик ПриПолученииДанныхОтПодчиненного выполняется перед записью в ИБ, возможно, этот объект уже есть в ЦБ и у него уже заполнен реквизит документ вида ОтчетПроизводстваЗаСмену а у получаемого - нет. Поэтому надо проверить на существование документа Рапорт в ЦБ и использовать ссылку на документ вида ОтчетПроизводстваЗаСмену из имеющегося документа.
3. user1559729 01.11.21 15:22 Сейчас в теме
(2) Отчет создается в коде при наличии пустой ссылки в Рапорте кодом в модуле плана обмена:

				Если ЭлементДанных.ДокументОПС.Пустая() Тогда
					ЭлементДанных.Записать(РежимЗаписиДокумента.Запись);
					ДокОПС = ЭлементДанных.ЗаполнитьОтчетПроизводстваЗаСменуПоРапорту(ЭлементДанных.Ссылка, ЭлементДанных.ДокументОПС.Ссылка);
					ДокОПС.Записать(РежимЗаписиДокумента.Запись);
					
					ЭлементДанных.ДокументОПС = ДокОПС.Ссылка;
					ЭлементДанных.Записать(РежимЗаписиДокумента.Запись);
				КонецЕсли;	
4. masterb 63 01.11.21 15:57 Сейчас в теме
ЭлементДанных это то, что получается и понятно что там пустая ссылка на ОтчетПроизводстваЗаСмену. Надо проверить на существование самого ЭлементДанных. Например ОбщегоНазначения.СсылкаСуществует(ЭлементДанных.Ссылка) или что-то типа того.
5. user1559729 01.11.21 16:13 Сейчас в теме
(4) Из справки:
<ЭлементДанных>
При вызове обработчика события данный параметр содержит элемент данных, прочитанный из сообщения обмена данными. Элементами данных могут быть КонстантаМенеджерЗначения.<Имя константы>, объекты базы данных, наборы записей регистров, последовательностей или перерасчетов.
6. gybson 01.11.21 16:59 Сейчас в теме
Если вы меняете документ, вы должны его поставить на выгрузку в подчиненный узел. При загрузке из подчиненного должна быть проверка, что объект не был изменен в текущей базе и если был, то не грузить.

Но вообще схема со всех сторон кошмар, бомба и засада. Вариантов того, что может пойти не так огромное количество.
7. user1559729 01.11.21 17:07 Сейчас в теме
(6) Как его поставить на выгрузку? Авторегистрация подойдет? Или м.б. ОтправкаНазад = Истина?
8. gybson 01.11.21 17:25 Сейчас в теме
(7)ПланыОбмена.ЗарегистрироватьИзменения ... но надо смотреть не будет ли где блокировка какая.
9. user1559729 02.11.21 09:25 Сейчас в теме
(8) Ну, а если Авторегистрацию включить для Отчета, то при создании он же по идее должен зарегистрироваться к изменениям?

А также ОтправкаНазад = Истина не очень понимаю, как работает. Если для типа входящих данных Рапорт поставить в коде ОтправкаНазад = Истина, то он выгрузит сразу в этой итерации измененные данные?
Оставьте свое сообщение

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