1.
serezhka87
6815.02.20 15:47 Сейчас в теме+10 $m
Имеется РИБ. При обмене в одной из периферийных баз появилась ошибка при загрузке данных из центральной базы:
Ошибка чтения файла сообщения обмена: {Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(200)}: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица AccumRg17202.
Посмотрел что это регистра накоплений ТоварыНаСкладах. Попробовал воспользоваться инструкцией https://infostart.ru/public/167386/ и сделал запрос на поиск дублей в этом регистр, запрос дублей не показывает.
Тестировал базу, Кэш удалял. Подскажите пожалуйста, что с этой бедой можно сделать?
Попробовал воспользоваться инструкцией https://infostart.ru/public/167386/ и сделал запрос на поиск дублей в этом регистр, запрос дублей не показывает.
Сейчас дублей в регистре нет, но при попытке обмена дубль возникает, поэтому и ошибка.
Откуда берется дубль? Надо в отладчике ставить точку останова на строку 200 и смотреть - что именно в этой строке вызывает ошибку, какая запись файла обмена обрабатывается?
Ошибка при попытке вставки записи с неуникальным значением ссылки.
Можно еще прикрутить в модуле РН подобное
Процедура ПередЗаписью(Отказ, Замещение)
Если ТипЗнч(ЭтотОбъект.Отбор.Регистратор.Значение) = Тип("ДокументСсылка.ПлатежноеПоручениеВходящее") Тогда
Для Каждого СтрЗаписи Из ЭтотОбъект Цикл
Если СтрНайти(Строка(СтрЗаписи.Сделка), "<Объект не найден>") <> 0 Тогда
СтрЗаписи.Сделка = Документы.ЗаказПокупателя.ПустаяСсылка();// Или Неопределено;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать
Неуникальной ссылка стала после удаления??? насколько я понимаю. ТиИ с очищением поможет, а данный код в этом РН перед записью во время обмена не будет создавать такие записи.
(1) Все советы интересные. Но я думаю, решение такое:
0) Создать тестовую базу на SQL Server
1) Включить инструменты разработчика, выписать все поля и названия на SQL.
2) Зайти в SQL Server отключить индексы у таблицы AccumRg17202.
3) Провести обмен.
4) Включить индексы будет ошибка по конкретной записи. ИЛИ, создать запрос по ключевым полям (записанным раннее 1)*) и выявить задвоение.
5) В инструментах разработчика разобраться по каким значениям ключевых полей вышла ошибка.
6) Ссылки будут на указателями на справочники, документы и т.д. В инструментах разработчика из можно расшифровать и получить полное представление о строках вызвавших проблему.
Проблему точно можно решить этим способом, вопрос в том насколько вы грамотны в вопросах SQL Server. Я точно именно так решал этот вопрос.
Но правильное решение было бы в том, что бы установить конкретную запись отладкой поискав по коду. Для этого нужно включить отладку в режиме фонового задания.
В этом разделе описывается отключение индекса или ограничений в SQL Server 2019 (15.x) с помощью SQL Server Management Studio или Transact-SQL. Отключение индексов предотвращает доступ пользователя к индексам в случае использования кластеризованных индексов к данным базовой таблицы.
Отключение индексов советую делать при отсутствии в базе пользователей и с отключенными фоновыми заданиями.
Индексы можно отключить без запросов SQL Server, буквально в режиме менеджера SQL Server. Я бы посоветовал сгенерировать сначала файлы создания индексов потом их просто удалить, а далее уже после установления задвоений из обратно попробовать поставить и выявить ошибку. Способ точно рабочий и для меня, как для человека постоянно работающего с SQL Server задача ваша на 20 минут, у вас возможно уйдет часа три с изучением материала и установкой SQL Server.
(1) 1C не приветствует такие способы, но они являются невероятно действенными и простыми, главное руку набить. Ничего сложного в этом способе нет, он проще чем пытаться запустить debag фонового задания и отслеживать все запросы при обмене. Поэтому советую изучить, тем более вам необходимо будет получать сертификат Эксперта когда-нибудь.
Пробовали изначально стандартными методами, я имею ввиду сделать в конфигураторе Источника и в конфигураторе Приемника тестирование исправление (Установите все флажки и опцию "При наличиии ссылок на несуществующие объекты" Очищать ссылки = Да) Затем повторно выгрузить данные из Источника и попробовать загрузить в Приемник. Если же у вас идет с обменом еще и обновление конфиуграции, то можно снять блокировку Премника, загрузить в него конфигурацию обновления, затем поставить на замочек как подчиненный узел, после чего попробовать еще раз загрузить сообщение (https://infostart.ru/public/706733/)
Добавьте расширение, которое игнорирует при чтении запись в этот регистр, затем обменяйтесь с цб, затем выгрузите записи регистра через консоль регистрации с отбором по нужном складу
Можно попробовать сбросить регистрацию данных этого регистра в переферии, обменяться в обе стороны, потом перепровести документы в переферии и обменяться снова. Помогает - главное не ворочать большие периоды, к примеру данные за месяц я бы так провернул, потому что легко восстановить если что, данные за больший период уже бы не стал.