Имя: Пароль:
1C
1С v8
Конвертация: перенос единиц хранения остатков
0 TigerPXN
 
02.03.12
17:04
Пишу тут конвертацию из УТ10.3 в такую же УТ.
Столкнулся с известной проблемой: не всегда заполняется реквизит ЕдиницаХраненияОстатков в Номенклатуре.
Постараюсь собрать тут все известное по этой проблеме, предложу уточненное решение и что-нибудь поспрашиваю :)
Для исправления указанной проблемы рекомендуют в ПКО ЕдиницыИзмерения ПередВыгрузкой добавить:

Если Правила.Номенклатура.Выгруженные[Источник.Владелец] = Неопределено Тогда
   ВыгрузитьПоПравилу(Источник.Владелец);
КонецЕсли;

Признаюсь, я не совсем понял идею этого фрагмента. Он позволяет гарантировать, что номенклатура-владелец будет выгружена раньше единицы измерения. Но что нам это дает? Ведь если номенклатура выгружается раньше единицы, то реквизит как раз и не должен быть заполнен. Или тут проблема в том, что единица измерения без владельца не может быть найдена/создана? Кто разбирался, подскажите, пожалуйста.
В любом случае, для решения аналогичной проблемы в обмене УТ-Розница1.0 этого фрагмента кода вполне хватило.
Но при обмене УТ-УТ у меня возникла та же проблема, что и в
v8: Конвертация v2: Как у справочника Единицы Измерения поменять тип Владелец?
А именно: "Получение элемента по индексу для значения не определено" для Правила.Номенклатура.Выгруженные[Источник.Владелец].
Подозреваю, что проблема в том, что у нас в данном случае Владелец может быть разных типов, а не только Номенклатура.
В указанной выше ветке проблему пытались решить сильно обходными путями, что мне не понравилось. Поэтому я покопался и обнаружил, что Правила.Номенклатура.Выгруженные может быть не только соответствием, но и таблицей значений (с колонками Ключ, УзелСсылки, НППСсылки и др.). Честно сказать, удивился, так как в модуле универсальной обработки выгрузки к этой переменной, вроде, обращаются как к соответствию (хотя все 14000 строк модуля я подробно не изучал) и при выгрузке в Розницу все работает, если обращаться, как к соответствию.
Но переписал фрагмент с учетом этого интересного факта:

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

Мне помогло, теперь все выгружается. Надеюсь, и еще кому-нибудь это может быть полезно.
Но мне не понравилось, что я слишком многого не понял в этой истории. Вопросы к знатокам:
1) что конкретно мешает нормально выгружаться номенклатуре со всеми ссылками на подчиненные единицы измерения?
2) какой все-таки тип в каком случае имеет переменная Правила.Номенклатура.Выгруженные? От чего это зависит?
3) каким образом умудряется работать код "Правила.Номенклатура.Выгруженные[Источник.Владелец]", если ключом соответствия является узел XML-документа, а в выгрузке для поиска используется ссылка на элемент справочника? По крайней мере, я нашел только такой код формирования ключа соответствия (с сокращениями):
УзелСсылки = СоздатьУзел("Ссылка");
УстановитьАтрибут(УзелСсылки, "Нпп", Нпп);
УзелСсылки = УзелСсылки.Закрыть();            
ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = УзелСсылки;

Люди добрые, помогите разобраться! :)
1 sergey yevsenya
 
02.03.12
17:09
а зачем писать правила переноса в ТАКУЮ ЖЕ УТ?
2 TigerPXN
 
02.03.12
17:11
(1) Хочу замутить обмен между несколькими взаимосвязанными фирмами, которые торгуют друг с другом, но не хотят вести учет в одной базе.
3 pumbaEO
 
02.03.12
17:13
По ссылке не ходил, но как предложение:
приоритет у номенклатуры выше единиц,
при выгрузки единиц в спомагательное поле писать это едина остатков, единица отчета. И после загрузке проставлять номенклатуре?
Закон Брукера: Даже маленькая практика стоит большой теории.