|
Конвертация данных: Поле объекта не обнаружено! | ☑ | ||
---|---|---|---|---|
0
breakthrough
05.12.12
✎
14:03
|
Здравствуйте!
При загрузке в 8-ку ловлю следующую ошибку: Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7082)}: Поле объекта не обнаружено При этом какое поле не обнаружено совершенно непонятно. Кто-нибудь знает как запустить отладку обработки "Универсальный обмен данными в формате XML" ? |
|||
1
leonidkorolev
05.12.12
✎
14:07
|
Всё как обычно. Это обычная обработка. Ставь точку в модуле на строке 7082
|
|||
2
Stim
05.12.12
✎
14:08
|
запускай загрузку в режиме отладки
|
|||
3
breakthrough
05.12.12
✎
14:11
|
(1) Ок. Попробую. Спасибо.
А как пользоваться встроенным в обработку механизмом отладки? Например я сделал все по инструкции: Включил режим отладки, перенес код обработчиков в модуль новой внешней обработки, подключил ее. А дальше что делать не понимаю. |
|||
4
acsent
05.12.12
✎
14:12
|
(3) дальше обычная отладка
|
|||
5
breakthrough
05.12.12
✎
14:15
|
(4) Т.е. запускаю отладчик и в нем открываю внешнюю обработку с модулем отладки?
|
|||
6
breakthrough
05.12.12
✎
14:16
|
(4) Обычная отладка в моем представлении возможно по самой универсальной обработке обмена данными, а вот как отладить выгруженный модуль отладки, ведь он содержит правила обмена, которые подключаются в момент начала загрузки данных?
|
|||
7
echo77
05.12.12
✎
14:20
|
(6) так и отлаживаешь, вызываются процедуры из него
|
|||
8
breakthrough
05.12.12
✎
14:25
|
(1) Вот так выглядит часть кода модуля обработки:
Имя = одАтрибут(ФайлОбмена, одТипСтрока, "Имя"); НеЗамещатьСвойство = одАтрибут(ФайлОбмена, одТипБулево, "НеЗамещать"); ИмяПКО = одАтрибут(ФайлОбмена, одТипСтрока, "ИмяПКО"); Это строка 7082 - Если НЕ ЭтоПараметрДляОбъекта И ((ОбъектНайден И НеЗамещатьСвойство) ИЛИ (Имя = "ЭтоГруппа") ИЛИ (Объект[Имя] = NULL)) Тогда // неизвестное свойство одПропустить(ФайлОбмена, ИмяУзла); Продолжить; КонецЕсли; Не понимаю где здесь может быть затык и про какое поле имеется в виду.( |
|||
9
breakthrough
05.12.12
✎
14:26
|
(7) А можно по действиям? Вот я подключил внешнюю обработку с модулем отладки в "Универсальный обмен данными в формате XML". Что потом?
|
|||
10
echo77
05.12.12
✎
14:30
|
(9) Там инструкции нет?
1. Открываешь конфигуратор, 2. Из него запускаешь отладку 3. В конфигураторе открывает твою вновь созданную обработку с модулем, что хочешь отладить 4. Ставишь где нужно точку останова 5. В режиме предприятие запускаешь "Универсальный обмен данными в формате XML". Настраиваешь её для выполениня отадки, грузишь правила 6. Выгружаешь/загружаешь данные с поможщью обработки Универсальный обмен данными в формате XML" 7. На точке остановке конфигуратор встанет |
|||
11
zippygrill
05.12.12
✎
14:31
|
ставишь галку "Останавливать по ошибки" и смотришь в каком месте валится.
|
|||
12
Skylark
05.12.12
✎
14:32
|
(8) Объект[Имя]
Скорее всего вот здесь. Смотри, что за объект (Объект) и что за свойство (Имя). |
|||
13
zippygrill
05.12.12
✎
14:32
|
(10) ему придется проитись по всем процедурам выгрузки/загрузки по этому наверное быстрее будет ставить галку "останавливать по ошибки" чтобы найти это место.
|
|||
14
Skylark
05.12.12
✎
14:35
|
Чтобы поймать, можно этот проблемный участок вставить в Попытка / Исключение и точку останова поместить в Исключение.
|
|||
15
breakthrough
05.12.12
✎
15:09
|
(12) Нашел Имя. Оно равно "". Т.е. пустое.
|
|||
16
breakthrough
05.12.12
✎
15:11
|
(11) А где такую галку найти? В обработке или в отладчике конфигуратора?
|
|||
17
breakthrough
05.12.12
✎
15:13
|
(14) Кстати, весь код выше и так обернут в попытка/исключение. Как раз по исключению и вываливается ошибка.
|
|||
18
breakthrough
05.12.12
✎
15:17
|
(16) нашел. Только это ничего не дало.
|
|||
19
acsent
05.12.12
✎
15:19
|
объект чему равен
|
|||
20
Йохохо
05.12.12
✎
15:20
|
в отладчике
выше по коду глянь условие попадания в эту ветку в принципе, задача кода что-то пропустить, если косяк, просто помоги ему. Было такое, тупо добавил доп проверку |
|||
21
breakthrough
05.12.12
✎
15:24
|
(19) Ссылка на элемент номенклатуры.
|
|||
22
acsent
05.12.12
✎
15:28
|
имяПКО? Что из тебя вытягивать всю инфу чтоли?
|
|||
23
breakthrough
05.12.12
✎
15:36
|
(22) ИмяПКО пустое.
|
|||
24
breakthrough
05.12.12
✎
15:37
|
(22)ИмяПКО=""
|
|||
25
breakthrough
05.12.12
✎
15:38
|
(22) Ошибка вылетает на этой логической конструкции
Если НЕ ЭтоПараметрДляОбъекта И ((ОбъектНайден И НеЗамещатьСвойство) ИЛИ (Имя = "ЭтоГруппа") ИЛИ (Объект[Имя] = NULL)) Тогда Хотя она верная. |
|||
26
breakthrough
05.12.12
✎
15:46
|
Вот скрины самих правил из-за которых вываливается ошибка:
1. http://imageshost.ru/photo/3939607/id2588679.html 2. http://imageshost.ru/photo/3939607/id2588676.html |
|||
27
breakthrough
05.12.12
✎
15:47
|
Вот такой код обработчика перед выгрузкой одного из ПКС номенклатуры:
Если Источник.Прекурсор = 0 Тогда Отказ = 1; КонецЕсли; ИсходящиеДанные=СоздатьОбъект("СписокЗначений"); ИсходящиеДанные.Установить("Категория","Прекурсор"); ИсходящиеДанные.Установить("Объект",Источник); ИсходящиеДанные.Установить("Активность",1); |
|||
28
breakthrough
05.12.12
✎
15:48
|
Вот такой код обработчика ПКС для ПКО КатегорииОбъектовРегистрСведений:
ИсходящиеДанные=СоздатьОбъект("СписокЗначений"); ИсходящиеДанные.Установить("Наименование", ПолучитьЗначение(ВходящиеДанные, "Категория")); |
|||
29
breakthrough
05.12.12
✎
15:50
|
Кстати, сама выгрузка категорий нормально проходит по одной номенклатуре. Сам элемент полностью выгружается. А вот до второго дело не доходит.
|
|||
30
breakthrough
06.12.12
✎
07:28
|
ау!
|
|||
31
jackal-655600
06.12.12
✎
07:53
|
Отключи выгрузку выделенных свойств. У ПКО "Номенклатура" в обработчике "Перед выгрузкой" добавь примерно такой код
Если ПустоеЗначение(Источник.ПодГруппа) = 0 Тогда ВыгрузитьПоПравилу(Источник,,,, "КатегорииОбъектовРегистрСведений"); КонецЕсли; |
|||
32
jackal-655600
06.12.12
✎
07:59
|
Посмотри какие параметры можно передать в процедуру "ВыгрузитьПоПравилу". Возможно часть информации придется передавать через переменные ВходящиеДанные и ИсходящиеДанные.
У тебя ошибка валится из-за пустого приемника в последних трех свойствах. |
|||
33
breakthrough
06.12.12
✎
10:05
|
(32) Так кое что проясняется. А как это обойти?
Я и так передаю все через ВходящиеДанные и ИсходящиеДанные. |
|||
34
breakthrough
06.12.12
✎
10:07
|
(31) Что это даст? Я так понимаю в таком случае создастся одна запись в регистре сведений. Т.к. выгрузка будет привязана к ПКО, а не ПКС.
|
|||
35
breakthrough
06.12.12
✎
15:02
|
Всем спасибо! Разобрался сам. Если кому пригодиться, то вот решение:
Создал ПВД с произвольным алгоритмом. В обработчик "перед обработкой" воткнул следующий код: СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура"); СпрНоменклатура.ВыбратьЭлементы(); Пока СпрНоменклатура.ПолучитьЭлемент()=1 Цикл Если (ПустоеЗначение(СпрНоменклатура.ЭтоАнастетик)=0) ТОгда ВходящиеДанные = СоздатьОбъект("СписокЗначений"); ВходящиеДанные.Установить("Объект",СпрНоменклатура.ТекущийЭлемент()); ВходящиеДанные.Установить("Категория","Анестетик"); ВходящиеДанные.Установить("Активность",1); ВыгрузитьПоПравилу(,, ВходящиеДанные,, "КатегорииОбъектовРегистрСведений"); КонецЕсли; Если (ПустоеЗначение(СпрНоменклатура.Прекурсор)=0) ТОгда ВходящиеДанные = СоздатьОбъект("СписокЗначений"); ВходящиеДанные.Установить("Объект",СпрНоменклатура.ТекущийЭлемент()); ВходящиеДанные.Установить("Категория","Прекурсор"); ВходящиеДанные.Установить("Активность",1); ВыгрузитьПоПравилу(,, ВходящиеДанные,, "КатегорииОбъектовРегистрСведений"); КонецЕсли; Если (ПустоеЗначение(СпрНоменклатура.ЭтоОборудование)=0) ТОгда ВходящиеДанные = СоздатьОбъект("СписокЗначений"); ВходящиеДанные.Установить("Объект",СпрНоменклатура.ТекущийЭлемент()); ВходящиеДанные.Установить("Категория","Оборудование"); ВходящиеДанные.Установить("Активность",1); ВыгрузитьПоПравилу(,, ВходящиеДанные,, "КатегорииОбъектовРегистрСведений"); КонецЕсли; КонецЦикла; И дальше через ИсходящиеВходящие данные выгрузил из одного ПКО в другое с поиском по наименованию. |
|||
36
breakthrough
06.12.12
✎
15:03
|
Проверку на группы не делал, т.к. они не проходят по условиям.
|
|||
37
breakthrough
06.12.12
✎
15:04
|
В результате выгружается 3 категории для каждой номенклатуры, если они установлены.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |