Имя: Пароль:
1C
 
Конвертация данных, ВыгрузитьПоПравилу
0 avtomoda
 
01.04.25
11:16
Всем привет!
Тема уже поднималась тут.
Конвертация данных, ВыгрузитьПоПравилу, РС СоответствиеОбъектовИнформационныхБаз
Имеем УТ 10.3 односторонний обмен с БП 3.0
Необходимо выгрузить из УТ РегистрСведений "КомплектующиеНоменклатуры" в БП Справочник.СпецификацииНоменклатуры
Если тестировать правила через Универсальный обмен данными - проблем нет. Выгружаются данные из базы источника и загружаются данные в базу приемник.
Проблема возникает при обмене через узел обмена.
В ПКО_Номенклатура_ПослеВыгрузкиОбъекта:
Если НЕ Источник.Ссылка.ЭтоГруппа Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    КомплектующиеНоменклатуры.Комплектующая КАК Номенклатура,
        |    КомплектующиеНоменклатуры.Количество
        |ИЗ
        |    РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
        |ГДЕ
        |    КомплектующиеНоменклатуры.Номенклатура = &Номенклатура";
        Запрос.УстановитьПараметр("Номенклатура",Источник.Ссылка);
        ИсходныеКомплектующие = Запрос.Выполнить().Выгрузить();
        Если ИсходныеКомплектующие.Количество()>0 Тогда

            ИсходящиеДанные = Новый Структура("Владелец,ИсходныеКомплектующие,Наименование");
            ИсходящиеДанные.Вставить("Владелец",Источник.Ссылка);
            ИсходящиеДанные.Вставить("Наименование",Источник.Ссылка.Наименование);
            ИсходящиеДанные.Вставить("ИсходныеКомплектующие",ИсходныеКомплектующие);

            ВыгрузитьПоПравилу(Источник.Ссылка,, ИсходящиеДанные,, "СпецификацииНоменклатуры");
        КонецЕсли;
    КонецЕсли;
ПКС_СпецификацииНоменклатуры_Владелец:
Тип приемника СправочникСсылка.Номенклатура
Получить значение из входящих данных - отмечено.
Соответсвенно Тип источника - не заполнен.
Ошибка возникает при повторном обмене, когда БП отсылает данные об выгруженном объекте.
источник ошибки из отладчика:

Обработка.КонвертацияОбъектовИнформационныхБаз
Функция ПрочитатьИнформациюОРегистрацииОбъекта()
    // Присваиваем ПЕРЕКРЕСТНЫЕ значения переменным; РС симметричен.
    УникальныйИдентификаторПриемника = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификаторИсточника");
    УникальныйИдентификаторИсточника = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификаторПриемника");
    ТипПриемника                     = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника");
    ТипИсточника                     = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника");
    ПустойНабор                      = одАтрибут(ФайлОбмена, ТипБулево, "ПустойНабор");
Идентификаторы есть, ТипПриемника есть, ТипИсточника - нет
1 craxx
 
01.04.25
11:19
(0) я так понимаю регистр включен в регистрацию плана обмена?
2 avtomoda
 
01.04.25
11:20
Кто нибудь может помочь в данном вопросе.
Я так понимаю надо в ПКО СпецификацииНоменклатуры добавить Тип источника.
Как это сделать
3 craxx
 
01.04.25
11:25
4 avtomoda
 
01.04.25
11:24
я так понимаю регистр включен в регистрацию плана обмена?
Нет. Регистр Сведений КомплектующиеНоменклатуры в обмен не включен
5 Волшебник
 
01.04.25
11:27
Что за проблема-то? Какая ошибка?
6 avtomoda
 
01.04.25
11:33
Ошибка при загрузке данных: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(8203)}: Тип не определен
7 Ёпрст
 
01.04.25
11:33
(0) это же баян
8 Ёпрст
 
01.04.25
11:34
источник может быть или ссылка или объект, сечешь ?
9 Волшебник
 
01.04.25
11:35
(6) Поставьте точку останова на строке 8203 и проверьте типы
10 avtomoda
 
01.04.25
11:36
Нет не секу
ВыгрузитьПоПравилу(Источник.Ссылка,, ИсходящиеДанные,, "СпецификацииНоменклатуры");
Разве это не то?
11 avtomoda
 
01.04.25
11:40
Поставьте точку останова на строке 8203 и проверьте типы
Так и сделал.
ТипПриемника = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника");
СправочникСсылка.СпецификацииНоменклатуры
ТипИсточника = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника");
""
12 lucky_
 
01.04.25
11:41
(0) первое, что на ум приходит: попробуй убрать из ПВД номенклатуру.
таскай номенклатуру только ту, которая в документах.
13 lucky_
 
01.04.25
11:45
(9) в(8) всё указано. зачем проверять типы когда понятно, что там коллекция.
14 avtomoda
 
01.04.25
11:50
таскай номенклатуру только ту, которая в документах.
Нет документов. Есть справочник Номенклатура в УТ 10.3
В номенклатуре ест комплектующие (РегистрСведений - КомплектующиеНоменклатуры)
При чем здесь документы?
Нужно - создалась новая номенклатура, заполнилась комплектующими. В плане обмена Номенклатура зарегистрировалась.
При обмене выгрузилась номенклатура и в БП в справочнике СпецификацииНоменклатуры заполнилась комплектующими
15 avtomoda
 
01.04.25
11:53
Поставьте точку останова на строке 8203 и проверьте типы
Надо в ПКО каким то образом передать Тип Источника.
Вот как это сделать - здесь и прошу помощи.
16 lucky_
 
01.04.25
11:53
(14) утверждаешь, что тебе нужен список спецификаций без привязки к документам? и для чего тебе в БП спецификации? просто посмотреть?
17 lucky_
 
01.04.25
11:55
(15) ну дак убери свои ИсходящиеДанные , выгружай просто ссылки. тем более, что (14)
18 avtomoda
 
01.04.25
11:59
ну дак убери свои ИсходящиеДанные , выгружай просто ссылки. тем более, что (14)
Не понимаю.
Вы мне предлагаете в план обмена добавить регистрацию регистра сведений?
Если я уберу Исходящие данные на основании чего будет заполняться справоник СпецификацииНоменклатуры?
19 avtomoda
 
01.04.25
12:04
утверждаешь, что тебе нужен список спецификаций без привязки к документам? и для чего тебе в БП спецификации? просто посмотреть?
К обмену стоят документы РеализацияТоварУслуг.
Поскольку номенклатура в данным документах в основном это комплекты, было написано правило, что на основании каждого документа реализации (если номенклатура это комплект), создать документ в БП Документ.ОтчетПроизводстваЗаСмену.
Данный докмуент заполняется номенклатурой, а материалы берет из справочника СпецификацииНоменклатуры
20 lucky_
 
01.04.25
12:26
(18) я предлагаю тебе регать к обмену всю номенклатуру комплекта , если это комплект.
что-бы сильно не менять код, в своём обработчике проверяешь, что это номенклатура комплекта.
в ПКО номенклатуры создаёшь ПКС булево с признаком "комплект", передаёшь его в параметр, вместе с родителем номенклатуры.
при загрузке проверяешь что параметр в наличии, ищешь запросом нужный элемент справочника, дозаполняешь, если нужно.
всё это унылый говнокод. регистр передать проще.
21 lucky_
 
01.04.25
12:31
простого решения типа "заполнитьТипИсточника" у этой задачи нет.
(либо я его не знаю).