Ошибка при обмене данными
Подскажите пожалуйста, как можно исправить такую ошибку :
Предыстория. Обмен между двумя УПП. После выгрузки из одной, при загрузке во второй появляется ошибка:
Ошибка записи объекта
ТипОбъекта = Справочник ссылка: Номенклатурные группы
Объект = Блоки бетонные стен подвалов
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица Reference130.
ПозицияМодуля = Обработка.ОбменДаннымиXML(3784)
КодСообщения = 26
Ошибка при чтении изменений из файла обмена.
Ошибка записи объекта
ТипОбъекта = Справочник ссылка: Номенклатурные группы
Объект = Блоки бетонные стен подвалов
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица Reference130.
ПозицияМодуля = Обработка.ОбменДаннымиXML(3784)
КодСообщения = 26
Чтение данных из файла обмена завершено с ошибками!
Как сие можно исправить?
Решил поменять процедуру Записи в Обработке «ОбменДаннымиXML»:
Возможно ли что это вызовет какие нибудь ошибки в будущем?
Если все это хозяйство уже в попытке, то вылетит по ошибке с надписью «В этой транзакции уже происходили ошибки» или что-то вроде этого.
Но все таки лучше разобраться почему ругается.
Презабавнейшая история битвы с самим собой:
Общая ситуация такая:
Выгружаю данные из БП в УПП с помощью КД. Взял стандратный обмен, он отстает от текущих на 10 версий, довел до ума и тестирую обмен.
При выгрузке справочников выдается ошибка:
Ошибка при загрузке данных: <ВнешняяОбработка.УниверсальныйОбменДаннымиXML(3326)>: Ошибка записи объекта
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица Reference102.
Причем, если мы выгружаем все справочники, то ошибка есть, если только контрагенты, то ошибки нет.
Проблема оказалась в том, что при включенной галке «Оптимизированная запись» при записи Свойства объекта происходит не запись, а сохранение объекта в стеке, которое подразумевает отложенную запись.
Но отложенной записи не происходит и получается такая ситуация – в стеке висит структура, которая хранит одновременно объект и ссылку.
Как только требуется обработать еще один объект, мы получаем ссылку по тому же ГУИД, привязываем ссылку к новому объекту и сохраняем. В структуре стека объект отвязывается от нашей ссылки и содержит пустую ссылку с идентификатором «00000000-0000-0000-0000-000000000000». Как только мы, наконец, доходим до самого объекта, он видит, что в стеке есть данные и использует их, причем считая что объект связан со ссылкой, а это, как мы помним, не так.
Все лечится тем, что убираем галку Оптимизированная запись.
Идем вниз по стеку вызовов:
НайтиОбъектПоСсылке перед завершением устанавливает СвойстваОбъектаМодифицированы = Истина; но этот признак никто не обрабатывает, объект зависает в стеке, ссылка теряется и потом мы получаем то, что получаем.
Возможно еще попробовать записать текст ошибки в Настройке плана обмена на закладке «Интерактивные обмен» в Текстах сообщений, которые не являются ошибками. (о как!)
А так уже по 40.000 перенеслось. обмен конечно не самый большой, но ошибок пока не было.
В итоге оставил окончательный вариант следующий:
В обработке ОбменДаннымиXML, в модуле объекта подправил процедуру.
Обработка ошибок, возникающих при обмене данными в распределенной информационной базе
Общие ошибки, возникающие при работе с XML
Сообщение обмена данными является документом XML, поэтому имеет смысл описать возможные ошибки, которые могут возникнуть во время чтения/записи сообщений обмена данными при использовании средств чтения/записи данных XML, предоставляемых платформой «1С:Предприятие 8». При работе с данными в формате XML может возникать множество различных ситуаций, однако в данной статье будут рассмотрены только те, которые так или иначе имеют отношение к обмену данными в рамках распределенной информационной базы.
| Сообщение об ошибке | Описание ошибки |
| Возможные пути исправления ошибки | |
| Не установлен MS XML Core Services 4.0 | На компьютере не установлен Microsoft XML Core Services 4.0, используемый «1С:Предприятием 8» для работы с XML |
| Установить Microsoft XML Core Services 4.0. При установке «1С:Предприятия 8» Microsoft XML Core Services 4.0 устанавливается автоматически | |
| Ошибка разбора XML | Ошибка, возникающая при синтаксическом анализе данных XML в процессе чтения. Все ошибки, определенные в SAX2, трансформируются в данную ошибку, генерируемую платформой «1С:Предприятие 8» |
| Проверить правильность оформления и синтаксис данных XML (см. http://www.w3.org/TR/REC-xml). | |
| Ошибочный порядок записи XML | Методы записи содержимого документа XML вызываются в неправильном порядке. Например, запись атрибута вызывается после записи текста элемента. |
| Выявить и исправить места некорректного порядка вызова методов | |
| Текст XML содержит недопустимые символы | Записываемый текст XML содержит недопустимые символы. |
| Текст XML должен соответствовать требованиям, изложенным в главе 2.2 рекомендации XML (см. http://www.w3.org/TR/REC-xml#charsets) | |
| Недопустимое имя XML | Записываемое имя XML содержит недопустимые символы. |
| Имя XML должно соответствовать требованиям, изложенным в главе 2.3 рекомендации XML (см. http://www.w3.org/TR/REC-xml#NT-Name) | |
| Пустое значение URI допустимо только для пространства имен по умолчанию | Производится попытка записать соответствие пространства имен, в котором URI пространства имен, представленному пустой строкой, соответствует непустой префикс. |


