Коллизии обмена и метод ИзменениеЗарегистрировано #492610


#0 by TormozIT
Метод ИзменениеЗарегистрировано часто используется для обнаружения коллизий при обмене данными. Но при таком его использовании возникает один существенный недостаток. Рассмотрим пример. База А изменила объект. База А выгрузила для базы Б сообщение обмена. База Б загружает (принимает) его, но не делает сразу выгрузки (скажем из-за ошибки блокировки). База Б меняет объект. База Б выгружает сообщение обмена для базы А. База А загружает его и использует метод ИзменениеЗарегистрировано для определения коллизии, который возвращает Истина. У базы А приоритет и изменение базы Б будет отклонено. В таком случае в таблице изменений базы А в колонке "НомерСообщения" записан номер сообщения, которое указано в поле "НомерПринятого" загружаемого сообщения обмена. По логике данная ситуация не является коллизией. База А при фиксации загруженного сообщения обмена удаляет регистрацию объекта. Получаем рассогласование данных объекта между базами. Конечно, вероятность такого события невелика, но она есть. Чтобы правильно проверить коллизию необходимо считывать номер сообщения из записи в таблице изменений. Если он NULL или больше номера принятого (отправителем), то коллизия есть.
#1 by НетуаНадо
есть регистры коллизий обмена в стандартных конфах в них пишутся версии объектов, потом оттуда можно восстановить правильную версию
#2 by TormozIT
Рассогласование между базами этот регистр не исправит.
#3 by hhhh
ну смотришь в него и вручную исправляешь. Такая коллизия бывает раз в год.
#4 by TormozIT
Ранее я считал, что метод ЗакончитьЧтение удаляет регистрацию по номеру принятого отправителем сообщения. Однако я ошибался. Удаление регистрации изменений в моем случае производилось отдельно. Я перенес его, поместив сразу за НачатьЧтение. Теперь проблемы нет.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С