Имя: Пароль:
1C
1С v8
v8: Вопрос по Конвертации Данных - Обмена
0 Arhont
 
18.07.12
11:17
Создал в Конвертации Данных правила обмена и с их помощью через обработку "Универсальный обмен данными XML" нормально выгружаю документы. Но, при встраивании этих же правил в правила обмена вылезает ошибка:

Ошибка записи объекта
   ТипОбъекта             =  Регистр сведений запись: Штрихкоды
   Объект                 =  РегистрСведенийМенеджерЗаписи.Штрихкоды
   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Операция не выполнена!
   ПозицияМодуля          =  Обработка.ОбменДаннымиXML(3784)
   КодСообщения           =  26

Ошибка при загрузке данных: {Обработка.ОбменДаннымиXML(3791)}: Ошибка записи объекта
   ТипОбъекта             =  Регистр сведений запись: Штрихкоды
   Объект                 =  РегистрСведенийМенеджерЗаписи.Штрихкоды
   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Операция не выполнена!
   ПозицияМодуля          =  Обработка.ОбменДаннымиXML(3784)
   КодСообщения           =  26


Как вообще это возможно, правила ведь одни и те же? Может у кого есть мысли в чем может быть дело?

Сами данные регистра вроде нормальные:

Объект    РегистрСведенийМенеджерЗаписи.Штрихкоды    РегистрСведенийМенеджерЗаписи.Штрихкоды
Активность    истина    Булево
Владелец    Пуф Комби    СправочникСсылка.Номенклатура
ЕдиницаИзмерения    шт    СправочникСсылка.ЕдиницыИзмерения
Качество    Новый    СправочникСсылка.Качество
НомерСтроки    0    Число
Период    01.01.0001 0:00:00    Дата
Регистратор        Неопределено
СерияНоменклатуры        СправочникСсылка.СерииНоменклатуры
ТипШтрихкода    EAN13    ПланВидовХарактеристикСсылка.ТипыШтрихкодов
УдалитьВладелец        Неопределено
УдалитьЕдиницаИзмерения        СправочникСсылка.ЕдиницыИзмерения
УдалитьКачество        СправочникСсылка.Качество
УдалитьКод    0    Число
УдалитьСерияНоменклатуры        СправочникСсылка.СерииНоменклатуры
УдалитьТипШтрихкода        ПланВидовХарактеристикСсылка.ТипыШтрихкодов
УдалитьХарактеристикаНоменклатуры        СправочникСсылка.ХарактеристикиНоменклатуры
УдалитьШтрихкод    ""    Строка
ХарактеристикаНоменклатуры    Кожа ECO 420 ярко-фиолетовый    СправочникСсылка.ХарактеристикиНоменклатуры
Штрихкод    "4690391016030"    Строка
1 Dmitriy_76
 
18.07.12
11:18
"Но, при встраивании этих же правил в правила обмена вылезает ошибка"

это как понять ?
2 Arhont
 
18.07.12
11:18
Сорри, в планы обмена имелось ввиду...
3 Arhont
 
18.07.12
11:23
Сами данные регистра штрих-коды выгружаются через алгоритм:

Если Не Источник.ЭтоГруппа Тогда
   НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   
   НаборЗаписей.Отбор.Владелец.Установить(Источник.Ссылка);
   
   НаборЗаписей.Прочитать();
   Если НаборЗаписей.Количество()>0 Тогда    
       Для каждого ЗаписьНабораЗаписей Из НаборЗаписей Цикл
           ВыгрузитьПоПравилу(ЗаписьНабораЗаписей,,,, "Штрихкоды");
       КонецЦикла;
   КонецЕсли;
КонецЕсли;

Он вызывается из ПКС "ПослеВыгрузки" ПКО "Номенклатура":

Если НЕ Источник.ЭтоГруппа Тогда
   Выполнить(Алгоритмы.ВыгрузитьШтрихКоды);
   Выполнить(Алгоритмы.ВыгрузитьПрикрепленныеФайлы);      
   Выполнить(Алгоритмы.ВыгрузитьПрикрепленныеИзображения);  
КонецЕсли;
4 Defender aka LINN
 
18.07.12
11:26
(3) Ошибка русским по белому говорит, что проблема при записи
5 Arhont
 
18.07.12
11:27
Дык не пойму какая, данные содержимого регистра привел, все вроде указано, но почему то не записывается. И это при том, что с этими же правилами через Универсальный обмен все загружается на ура.
6 Arhont
 
18.07.12
11:30
Вообще начинаю грешить на разницу в функциях "ВыгрузитьПоПравилу" в обработке УниверсальныйОбмен и в обработке ОбменДанными XML (которая используется при обмене через планы обменов). Но, блин, это такая засада...
7 gosn1ck
 
18.07.12
11:34
(6) из танка вылезайте и смотрите (4). у вас записаться набор не может. модуль объекта смотрите или обработчики призаписи правил
8 Йохохо
 
18.07.12
11:55
УдалитьВладелец        Неопределено
УдалитьЕдиницаИзмерения        СправочникСсылка.ЕдиницыИзмерения
УдалитьКачество        СправочникСсылка.Качество
УдалитьКод    0    Число
УдалитьСерияНоменклатуры        СправочникСсылка.СерииНоменклатуры
УдалитьТипШтрихкода        ПланВидовХарактеристикСсылка.ТипыШтрихкодов
УдалитьХарактеристикаНоменклатуры        СправочникСсылка.ХарактеристикиНоменклатуры
УдалитьШтрихкод    ""    Строка
**
как вы этого добились?
9 Arhont
 
19.07.12
12:55
8) Да особо не добивался, видимо при каких-то обновлениях (может еще до меня) разные версии реквизитов. К теме они отношения не имеют, т.к. я их в правилах обмена все равно отключил для выгрузки
10 Arhont
 
19.07.12
12:58
7) из танка вылезти, видимо, не получится, т.к. "следы" пока что все равно ведут к обработкам "ОбменДаннымиXML". Дело в том, что в событии "ПередЗаписью" регистра сведений, в условии:

Если ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;

В случае с обменам черех планы обмена ОбменДанными.Загрузка имеет значение почему то Ложь, а если через УниверсальныйОбмен то как и положено Истина.
11 Arhont
 
19.07.12
12:59
Соответственно в первом случае записать набор записей регистра не удается.
12 zladenuw
 
19.07.12
13:00
может отключен в плане обмена ?
13 Arhont
 
19.07.12
13:05
Да я специально смотрел т.к. тоже не это подумал из-за того, что в процедуре:

Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина) Экспорт
   
   Попытка
       Объект.ОбменДанными.Загрузка = Значение;
   Исключение
   КонецПопытки;
   
   Если УзелОбменаЗагрузкаДанных <> Неопределено
       И НЕ УзелОбменаЗагрузкаДанных.Пустая() Тогда
   
       Попытка
           Объект.ОбменДанными.Отправитель = УзелОбменаЗагрузкаДанных;
       Исключение
       КонецПопытки;
   
   КонецЕсли;
   
КонецПроцедуры // УстановитьОбменДаннымиЗагрузка()

обработки "ОбменДаннымиXML" выдавало:

Объект    РегистрСведенийМенеджерЗаписи.Штрихкоды    РегистрСведенийМенеджерЗаписи.Штрихкоды
Объект.ОбменДанными.Загрузка    {(1)}: Поле объекта не обнаружено (ОбменДанными)

Т.е. у набора записи регистра такого свойства вообще не было. Но я участие этого регистра в данном плане обмена проставил а ситуация не изменилась.
14 Arhont
 
19.07.12
14:48
Пока пришел к тому, что все дело в алгоритме выгрузки. Сначала я хотел выгружать штрих-коды по аналогии с контактной информацией:

Если Не Источник.ЭтоГруппа Тогда

   НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
   
   НаборЗаписей.Отбор.Объект.Установить(Источник.Ссылка);

   Запрос = Новый Запрос;
   Запрос.Текст = "
       |ВЫБРАТЬ
       |    КонтактнаяИнформация.Тип,
       |    КонтактнаяИнформация.Вид
       |ИЗ
       |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
       |ГДЕ
       |    КонтактнаяИнформация.Объект = &Объект
       |    И КонтактнаяИнформация.Вид В(&МассивВидовКИ)";
       
   Запрос.УстановитьПараметр("Объект", Источник.Ссылка);
   Запрос.УстановитьПараметр("МассивВидовКИ", Параметры.МассивВидовКИ);
       
   Выборка = Запрос.Выполнить().Выбрать();

   Пока Выборка.Следующий() Цикл
       
       НаборЗаписей.Отбор.Тип.Установить(Выборка.Тип);
       НаборЗаписей.Отбор.Вид.Установить(Выборка.Вид);
       
       ВыгрузитьПоПравилу(Выборка.Вид);
       
       НаборЗаписей.Прочитать();
       
       ВыгрузитьРегистр(НаборЗаписей,,,,"КонтактнаяИнформация");
       
   КонецЦикла;
   
КонецЕсли;

Но такой вариант не прокатил при использовании УниверсальногоОбменаДанными. Я его переделал:

Если Не Источник.ЭтоГруппа Тогда
   НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   
   НаборЗаписей.Отбор.Владелец.Установить(Источник.Ссылка);
   
   НаборЗаписей.Прочитать();
   Если НаборЗаписей.Количество()>0 Тогда    
       Для каждого ЗаписьНабораЗаписей Из НаборЗаписей Цикл
           ВыгрузитьПоПравилу(ЗаписьНабораЗаписей,,,, "Штрихкоды");
       КонецЦикла;
   КонецЕсли;
КонецЕсли;

Но это не прокатило для планов обмена о чем и тема. Когда я штрих-коды сделал по варианту контактной информации:

Если Не Источник.ЭтоГруппа Тогда

   НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   
   НаборЗаписей.Отбор.Владелец.Установить(Источник.Ссылка);

   НаборЗаписей.Прочитать();
       
   ВыгрузитьРегистр(НаборЗаписей,,,,"Штрихкоды");
       
КонецЕсли;

То все в планах обмена получилось. А вот через УниверсальныйОбменДанными - шиш.
Вот такие вот пироги с котятами в танках.