Имя: Пароль:
1C
1С v8
Конвертация данных: Поле объекта не обнаружено!
,
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 категории для каждой номенклатуры, если они установлены.
Основная теорема систематики: Новые системы плодят новые проблемы.