|
КД Ошибка формата файла обмена при загрузке данных 8.3 ОП -> 8.3 УФ | ☑ | ||
---|---|---|---|---|
0
790th
30.09.15
✎
09:40
|
Вопрос: Почему не принимает данные, сформированные в настройке обмена (но при этом принимает если данные сформировать обработкой обмена)?
Создал правила выгрузки одного элементарного справочника из УТ 10.3.16.1 (обычное приложение, платформа 8.2.19.102) в Самописную (управляемое приложение, платформа 8.3.6.2152) Настроил в УТ узлы и планы обмена, сделал настройку обмена данными и выгрузил. В файл данных вошло два элемента справочника. Привожу содержание "ошибочного" XML: <?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена ВерсияФормата="2.0" ДатаВыгрузки="2015-09-30T09:03:50" ИмяКонфигурацииИсточника="УправлениеТорговлей" ИмяКонфигурацииПриемника="Конфигурация" ИдПравилКонвертации="fc7e8361-6fbe-42bb-90d4-6ee69b6c1794" Комментарий=""> <ПравилаОбмена> <ВерсияФормата>2.01</ВерсияФормата> <Ид>fc7e8361-6fbe-42bb-90d4-6ee69b6c1794</Ид> <Наименование>СервисДляCRM --> CRM</Наименование> <ДатаВремяСоздания>2015-09-28T12:18:38</ДатаВремяСоздания> <Источник>УправлениеТорговлей</Источник> <Приемник>Конфигурация</Приемник> <Параметры/> <Обработки/> <ПравилаКонвертацииОбъектов> <Правило> <Код>Направления</Код> <Источник>СправочникСсылка.Айсберг_Направления</Источник> <Приемник>СправочникСсылка.Направления</Приемник> </Правило> </ПравилаКонвертацииОбъектов> <ПравилаОчисткиДанных/> <Алгоритмы/> <Запросы/> </ПравилаОбмена> <ИнформацияОТипахДанных> <ТипДанных Имя="СправочникСсылка.Направления"> <Код>Строка</Код> <ПометкаУдаления>Булево</ПометкаУдаления> <Наименование>Строка</Наименование> <Родитель>СправочникСсылка.Направления</Родитель> <ЭтоГруппа>Булево</ЭтоГруппа> </ТипДанных> </ИнформацияОТипахДанных> <ДанныеПоОбмену ПланОбмена="МоскваCRM" Кому="CRM" ОтКого="Москва" НомерИсходящегоСообщения="5" НомерВходящегоСообщения="0"/> <ДанныеПоФоновомуОбмену ПланОбмена="" Кому="0" ОтКого="0" ДобавлениеОбъектовИзФоновогоОбмена="0" КоличествоОбъектовДляФоновогоОбмена="500" ПереданоОбъектовФоновогоОбмена="0"/> <Объект Нпп="1" Тип="СправочникСсылка.Направления" ИмяПравила="Направления"><Ссылка Нпп="1"> <Свойство Имя="{КлючПоискаВИБИсточнике}"> <Значение>{"#",0bd0deec-1479-4cdf-ae4b-f10e71f3205a,111:9ed000248cc4a20411e26f88824de171}</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБИсточнике}"> <Значение>СправочникСсылка.Айсберг_Направления</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБПриемнике}"> <Значение>СправочникСсылка.Направления</Значение> </Свойство> <Свойство Имя="Код"> <Значение>000000013</Значение> </Свойство> </Ссылка> <Свойство Имя="Наименование"> <Значение>СВЧ</Значение> </Свойство> <Свойство Имя="ПометкаУдаления"> <Значение>false</Значение> </Свойство> <Свойство Имя="Родитель"/> <Свойство Имя="ЭтоГруппа"> <Значение>false</Значение> </Свойство> </Объект> <Объект Нпп="2" Тип="СправочникСсылка.Направления" ИмяПравила="Направления"><Ссылка Нпп="2"> <Свойство Имя="{КлючПоискаВИБИсточнике}"> <Значение>{"#",0bd0deec-1479-4cdf-ae4b-f10e71f3205a,111:9ed000248cc4a20411e26f88824de173}</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБИсточнике}"> <Значение>СправочникСсылка.Айсберг_Направления</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБПриемнике}"> <Значение>СправочникСсылка.Направления</Значение> </Свойство> <Свойство Имя="Код"> <Значение>000000014</Значение> </Свойство> </Ссылка> <Свойство Имя="Наименование"> <Значение>СМ</Значение> </Свойство> <Свойство Имя="ПометкаУдаления"> <Значение>false</Значение> </Свойство> <Свойство Имя="Родитель"/> <Свойство Имя="ЭтоГруппа"> <Значение>false</Значение> </Свойство> </Объект> </ФайлОбмена> Для загрузки использую обработку из поставки КД 2.1.8.2: V8Exchan83.epf в режиме работы На сервере. Получаю ошибки: Ошибка формата файла обмена ИмяУзла = ДанныеПоОбмену ... Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5256)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка "=" ВЫБРАТЬ Ссылка ИЗ Справочник.Направления ГДЕ {ИмяТипаВИБИсточнике} <<?>>= &{ИмяТипаВИБИсточнике} И Код = &Код И {ИмяТипаВИБПриемнике} = &{ИмяТипаВИБПриемнике} И {КлючПоискаВИБИсточнике} = &{КлючПоискаВИБИсточнике} ... Загружено объектов: 0 (см. фото) https://yadi.sk/i/LwzcPBr-jQxMw НО! это при выгрузке из УТ через настройку обмена. Ошибка исчезает если выгружать данные обработкой из поставки КД: V8Exchan82.epf (82 не смотря на то что платформа 83, т.к. в режиме Обычного приложения). Привожу содержание "правильного" XML: <?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена ВерсияФормата="2.0" ДатаВыгрузки="2015-09-30T09:26:42" НачалоПериодаВыгрузки="0001-01-01T00:00:00" ОкончаниеПериодаВыгрузки="0001-01-01T00:00:00" ИмяКонфигурацииИсточника="УправлениеТорговлей" ИмяКонфигурацииПриемника="Конфигурация" ИдПравилКонвертации="fc7e8361-6fbe-42bb-90d4-6ee69b6c1794" Комментарий=""> <ПравилаОбмена> <ВерсияФормата>2.01</ВерсияФормата> <Ид>fc7e8361-6fbe-42bb-90d4-6ee69b6c1794</Ид> <Наименование>СервисДляCRM --> CRM</Наименование> <ДатаВремяСоздания>2015-09-28T12:18:38</ДатаВремяСоздания> <Источник>УправлениеТорговлей</Источник> <Приемник>Конфигурация</Приемник> <Параметры/> <Обработки/> <ПравилаКонвертацииОбъектов> <Правило> <Код>Направления</Код> <Источник>СправочникСсылка.Айсберг_Направления</Источник> <Приемник>СправочникСсылка.Направления</Приемник> </Правило> </ПравилаКонвертацииОбъектов> <ПравилаОчисткиДанных/> <Алгоритмы/> <Запросы/> </ПравилаОбмена> <Объект Нпп="1" Тип="СправочникСсылка.Направления" ИмяПравила="Направления"><Ссылка Нпп="1"> <Свойство Имя="Код" Тип="Строка"> <Значение>000000013</Значение> </Свойство> </Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>СВЧ</Значение> </Свойство> <Свойство Имя="ПометкаУдаления" Тип="Булево"> <Значение>false</Значение> </Свойство><Свойство Имя="Родитель" Тип="СправочникСсылка.Направления"> <Пусто/> </Свойство> <Свойство Имя="ЭтоГруппа" Тип="Булево"> <Значение>false</Значение> </Свойство> </Объект> <Объект Нпп="2" Тип="СправочникСсылка.Направления" ИмяПравила="Направления"><Ссылка Нпп="2"> <Свойство Имя="Код" Тип="Строка"> <Значение>000000014</Значение> </Свойство> </Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>СМ</Значение> </Свойство> <Свойство Имя="ПометкаУдаления" Тип="Булево"> <Значение>false</Значение> </Свойство><Свойство Имя="Родитель" Тип="СправочникСсылка.Направления"> <Пусто/> </Свойство> <Свойство Имя="ЭтоГруппа" Тип="Булево"> <Значение>false</Значение> </Свойство> </Объект> </ФайлОбмена> И еще в Управляемом приложении не позволяет сформировать модуль отладки загрузки. При нажатии на любую из указанных кнопок ничего не происходит (см. фото) https://yadi.sk/i/pk8RMDXxjQyCm |
|||
1
790th
30.09.15
✎
09:47
|
Удалил секции:
<ИнформацияОТипахДанных> <ДанныеПоОбмену.. <ДанныеПоФоновомуОбмену.. Теперь пишет: Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5255)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка "=" ВЫБРАТЬ Ссылка ИЗ Справочник.Направления ГДЕ {ИмяТипаВИБИсточнике} <<?>>= &{ИмяТипаВИБИсточнике} И Код = &Код И {ИмяТипаВИБПриемнике} = &{ИмяТипаВИБПриемнике} И {КлючПоискаВИБИсточнике} = &{КлючПоискаВИБИсточнике} |
|||
2
vicof
30.09.15
✎
09:50
|
выгрузку и загрузку желательно надо проводить обработками одной версии. Или лезть в отладчик.
|
|||
3
790th
30.09.15
✎
09:57
|
Боюсь что затянуть из последней УТ свежую версию Настройки обмена, будет непросто, т.к. этот механизм там не сконцентрирован в одном месте а "размазан" по всей конфигурации (
|
|||
4
790th
30.09.15
✎
10:14
|
Так. А вот еще принципиальное отличние:
"Правильный" файл: <Свойство Имя="Код" Тип="Строка"> <Значение>000000013</Значение> "Ошибочный" файл: <Свойство Имя="{КлючПоискаВИБИсточнике}"> <Значение>{"#",0bd0deec-1479-4cdf-ae4b-f10e71f3205a,111:9ed000248cc4a20411e26f88824de171}</Значение> |
|||
5
Naumov
30.09.15
✎
11:02
|
(4) В этой записи нет никакой ошибки.
|
|||
6
Naumov
30.09.15
✎
11:03
|
А правила не от КД 3.0?
|
|||
7
790th
30.09.15
✎
11:41
|
Правила от КД 2.1.8.2
Удалось избавиться от главной ошибки "Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5255)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка "=" ВЫБРАТЬ Ссылка ИЗ Справочник.Направления ГДЕ {ИмяТипаВИБИсточнике} <<?>>= &{ИмяТипаВИБИсточнике} И Код = &Код И {ИмяТипаВИБПриемнике} = &{ИмяТипаВИБПриемнике} И {КлючПоискаВИБИсточнике} = &{КлючПоискаВИБИсточнике}" Таким образом вставил кусок из обработки из УТ. Поместил в обработку Приемника (коммент //Юрасов): Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта.НайтиЭлементЗапросом(...) ... // не по всем параметрам можно искать Если ИмяПараметра = "{УникальныйИдентификатор}" ИЛИ ИмяПараметра = "{ИмяПредопределенногоЭлемента}" //Юрасов++ ИЛИ ИмяПараметра = "{КлючПоискаВИБИсточнике}" ИЛИ ИмяПараметра = "{КлючПоискаВИБПриемнике}" ИЛИ ИмяПараметра = "{ИмяТипаВИБИсточнике}" ИЛИ ИмяПараметра = "{ИмяТипаВИБПриемнике}" Тогда //Юрасов-- Продолжить; КонецЕсли; Теперь загружает данные, хоть и остались ошибки: Ошибка формата файла обмена ИмяУзла = ДанныеПоОбмену ... Ошибка формата файла обмена ИмяУзла = ДанныеПоФоновомуОбмену |
|||
8
790th
30.09.15
✎
13:09
|
Эти две ошибки тоже убрал. Пришлось перенести еще один кусок в приемник:
Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта.ПроизвестиЧтениеДанных(...) ... ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда //Юрасов++ ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда // обработка удаления объекта из информационной базы ИмяПланаОбмена = одАтрибут(ФайлОбмена, одТипСтрока, "ПланОбмена"); КодКому = одАтрибут(ФайлОбмена, одТипСтрока, "Кому"); КодОтКого = одАтрибут(ФайлОбмена, одТипСтрока, "ОтКого"); УзелОбменаЗагрузкаДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого); Если Не ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда ВызватьИсключение "Не найден узел обмена для загрузки данных. План обмена: " + ИмяПланаОбмена + ", Код: " + КодОтКого; КонецЕсли; мНомерВходящегоСообщения = одАтрибут(ФайлОбмена, одТипЧисло, "НомерИсходящегоСообщения"); НомерПринятогоСообщения = одАтрибут(ФайлОбмена, одТипЧисло, "НомерВходящегоСообщения"); Если УзелОбменаЗагрузкаДанных.НомерПринятого >= мНомерВходящегоСообщения Тогда ВызватьИсключение "Номер сообщения меньше либо равен ранее принятому"; КонецЕсли; //Юрасов++ //ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения); //мЗапросНаличияСтрокВРегистреСоответствия.УстановитьПараметр("Узел", УзелОбменаЗагрузкаДанных); //мЗапросНаличияПустыхДляИсточникаВРегистреСоответствия.УстановитьПараметр("Узел", УзелОбменаЗагрузкаДанных); //Юрасов-- Попытка мПрефиксДокументовПриЗагрузке = СокрЛП(УзелОбменаЗагрузкаДанных.ПрефиксДляЗагружаемыхДокументов); мДлинаПрефиксаДокументовПриЗагрузке = СтрДлина(мПрефиксДокументовПриЗагрузке); Исключение мПрефиксДокументовПриЗагрузке = ""; мДлинаПрефиксаДокументовПриЗагрузке = 0; КонецПопытки; Попытка мДатаДокументовДляУстановкиПрефикса = УзелОбменаЗагрузкаДанных.ДатаНачалаВыгрузкиДокументов; Исключение мДатаДокументовДляУстановкиПрефикса = Неопределено; КонецПопытки; Попытка мИспользоватьИнформациюОМестеСозданияОбъектовПриЗагрузке = УзелОбменаЗагрузкаДанных.ИспользоватьИнформациюОМестеСозданияОбъектовПриВыгрузкеИЗагрузкеДанных; Исключение мИспользоватьИнформациюОМестеСозданияОбъектовПриЗагрузке = Неопределено; КонецПопытки; одПропустить(ФайлОбмена, "ДанныеПоОбмену"); ИначеЕсли ИмяУзла = "ДанныеПоФоновомуОбмену" Тогда // обработка удаления объекта из информационной базы ИмяПланаОбмена = одАтрибут(ФайлОбмена, одТипСтрока, "ПланОбмена"); КодКому = одАтрибут(ФайлОбмена, одТипСтрока, "Кому"); КодОтКого = одАтрибут(ФайлОбмена, одТипСтрока, "ОтКого"); Если Не ПустаяСтрока(ИмяПланаОбмена) Тогда Попытка УзелОбменаЗагрузкаФоновыхДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого); Исключение УзелОбменаЗагрузкаФоновыхДанных = Неопределено; КонецПопытки; Иначе УзелОбменаЗагрузкаФоновыхДанных = Неопределено; КонецЕсли; ДобавлениеОбъектовИзФоновогоОбменаЗагрузка = одАтрибут(ФайлОбмена, одТипЧисло, "ДобавлениеОбъектовИзФоновогоОбмена"); КоличествоОбъектовДляФоновогоОбменаЗагрузка = одАтрибут(ФайлОбмена, одТипЧисло, "КоличествоОбъектовДляФоновогоОбмена"); ПолученоОбъектовФоновогоОбмена = одАтрибут(ФайлОбмена, одТипЧисло, "ПереданоОбъектовФоновогоОбмена"); одПропустить(ФайлОбмена, "ДанныеПоФоновомуОбмену"); // Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда // // Попытка // // Если ФлагРежимОтладкиОбработчиков Тогда // // Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПослеПолученияИнформацииОбУзлахОбмена")); // // Иначе // // Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); // // КонецЕсли; // // Исключение // СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), "ПослеПолученияИнформацииОбУзлахОбмена (конвертация)"); // // Если Не ФлагРежимОтладки Тогда // ВызватьИсключение СтрокаСообщенияОбОшибке; // КонецЕсли; // // //Возврат Ложь; // Возврат; // КонецПопытки; // // КонецЕсли; //Юрасов-- Иначе СтруктураЗаписи = Новый Структура("ИмяУзла", ИмяУзла); ЗаписатьВПротоколВыполнения(9, СтруктураЗаписи); КонецЕсли; |
|||
9
790th
30.09.15
✎
13:13
|
В итоге решение примерно такое. захожу отладчиком при загрудке и смотрю на что ругается. вижу что в коде нет варианта для обработки такого поля или параметра. Иду в конфигурацию откуда выгружал, смотрю как этот код работает там. вижу такую же функцию но с дополнительным кодом. вижу что этого то кода и нехватает что бы обработать данный параметр. копировать/встаить. проверка синтаксиса. ругается. смотрю если что то для меня не важное убираю. если важное разбираюсь почему ругается и что еще нужно копипастнуть. проверяю правила. и так вылизываю пока не пропадут все ошибки при загрузке
|
|||
10
Naumov
30.09.15
✎
14:14
|
у тебя просто древние релизы конфигураций, в них встроенная обработка универсального обмена старой версии.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |