Имя: Пароль:
1C
 
Конвертация v2: Как у справочника Единицы Измерения поменять тип Владелец?
0 Castlevania
 
14.07.09
12:49
Создали обмен между УТ и УПП. Правила конвертации использовали те, которые создавались автоматически. Появилась проблема: номенклатура выгружается с пустыми единицами измерения. Посоветовали в ПКО Единицы Измерения в событии  ПерезВыгпузкой добавить код :  Если Правила.Номенклатура.Выгруженные[Источник.Владелец] = Неопределено Тогда
   ВыгрузитьПоПравилу(Источник.Владелец);
КонецЕсли;

Но выдается ошибка. Выяснилось, что в ПКО Единицы Измерения у реквизита Владелец пустые значения Источника и Приемника. Попробовала поменяла вручную на СправочникСсылка. Номенклатура и справочник.Ссылка.Номенклатурные группы. Но выдается ошибка "Ошибка при выгрузке данных для узла плана обмена
   ТипОбъекта             =  Документ объект: Реализация товаров и услуг
   Объект                 =  Реализация товаров и услуг М0000000010 от 08.07.2009 13:11:07
   ОписаниеОшибки         =  Ошибка в обработчике события ПередВыгрузкойОбъекта
   ПКО                    =  ЕдиницыИзмерения  (СправочникСсылка.ЕдиницыИзмерения --> СправочникСсылка.ЕдиницыИзмерения)
   Объект                 =  шт  (Справочник ссылка: Единицы измерения)
   Обработчик             =  ПередВыгрузкойОбъекта
   ОписаниеОшибки         =  Получение элемента по индексу для значения не определено"
1 ТелепатБот
 
гуру
14.07.09
12:49
2 DUDE
 
14.07.09
13:53
Я в похожей ситуации добавил в ПКО номенклатуры в ПослеЗагрузки проверку в том случае, когда объект уже повторно переносился, на наличие движений для единицы хранения остатков, а для остальных единиц - проверку на пустоту: если переносимый реквизит на данный момент пуст, то берем значение из реквизита ссылки, иначе - из реквизита самого объекта.

Кроме этого убрал правило выгрузки ЕдиницИзмерения. И стал их выгружать только вместе с номенклатурой.

Саму проблему это решило. Наверное, есть и другие способы, но времени всегда не хватает.
3 Castlevania
 
14.07.09
13:57
(2) Мне сложно представить как это описать
4 Castlevania
 
14.07.09
14:07
(2)Как описать условие, когда объект уже повторно переносился
5 DUDE
 
14.07.09
14:08
У меня это выглядит так:

Если (НЕ Объект.ЭтоГруппа) Тогда
   
   Если ОбъектНайден Тогда
       
       // проверяем ссылки на ед.хранения остатков, для остальных единиц - проверяем, что переносятся непустые
       Запрос = Новый Запрос();
       
       Запрос.УстановитьПараметр("ТекущийВладелец", Ссылка);
       
       ТипНоменклатура = ТипЗнч(Справочники.Номенклатура.ПустаяСсылка());
       
       Запрос.Текст = "";
       
       Для Каждого РегистрНакопления Из Метаданные.РегистрыНакопления Цикл
           Для Каждого РеквизитРегистра Из РегистрНакопления.Измерения Цикл
               Если РеквизитРегистра.Тип.СодержитТип(ТипНоменклатура) Тогда
                   Если Запрос.Текст <> "" Тогда
                       Запрос.Текст = Запрос.Текст + "
                       |ОБЪЕДИНИТЬ ВСЕ
                       |";
                   КонецЕсли;
                   Запрос.Текст = Запрос.Текст + "
                   |ВЫБРАТЬ ПЕРВЫЕ 1
                   |    РегистрНакопления."+РегистрНакопления.Имя+"."+РеквизитРегистра.Имя+" КАК Номенклатура
                   |ГДЕ
                   |    "+РеквизитРегистра.Имя+" = &ТекущийВладелец
                   |";
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
       
       СуществуютСсылки = НЕ Запрос.Выполнить().Пустой();
       
       Попытка
           
           Если (Не Объект.Услуга)
               И (Объект.ЕдиницаХраненияОстатков.Пустая() И (НЕ Ссылка.ЕдиницаХраненияОстатков.Пустая())) Тогда    
               
               Объект.ЕдиницаХраненияОстатков = Ссылка.ЕдиницаХраненияОстатков;                        

           ИначеЕсли (Не Объект.Услуга)
               И (Ссылка.ЕдиницаХраненияОстатков <> Объект.ЕдиницаХраненияОстатков)
               И СуществуютСсылки Тогда
               // не будем ругаться, если единица пустая
               Если НЕ Объект.ЕдиницаХраненияОстатков.Пустая() Тогда
                   ТекстСообщения = "Единица """ + СокрЛП(Ссылка.ЕдиницаХраненияОстатков) + """ является единицей хранения остатков для """ + Объект.Наименование + """
                   |и уже участвует в товародвижении.
                   |Изменить эту единицу уже нельзя!";
                   ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения);
               КонецЕсли;    
               
               Объект.ЕдиницаХраненияОстатков = Ссылка.ЕдиницаХраненияОстатков;                        
           КонецЕсли;
           
       Исключение // не подменяем ед.изм.
           Объект.ЕдиницаХраненияОстатков = Ссылка.ЕдиницаХраненияОстатков;                        
       КонецПопытки;
       
       Объект.ЕдиницаДляОтчетов = ?(Объект.ЕдиницаДляОтчетов.Пустая(), Ссылка.ЕдиницаДляОтчетов, Объект.ЕдиницаДляОтчетов);
       Объект.ЕдиницаИзмеренияМест = ?(Объект.ЕдиницаИзмеренияМест.Пустая(), Ссылка.ЕдиницаИзмеренияМест, Объект.ЕдиницаИзмеренияМест);
   
   КонецЕсли;        
   
КонецЕсли;        

Заранее извиняюсь за недостатки форматирования.
6 DUDE
 
14.07.09
14:10
Факт повторно переноса, по идее, указывается флагом ОбъектНайден (то есть, что этот объект по УИД или полям поиска был найден в базе-получателе.

Код кривоват, но задачу решает.
7 Castlevania
 
14.07.09
14:11
(6) Спасибо огромное сейчас попробую. А тогда тип Приемника и Источника какой будет?
8 DUDE
 
14.07.09
14:14
Код выполняется уже при загрузке данных. А тип Приемника, Источника регулирует выгрузку, их я не менял - Номенклатура в Номенклатура, Ед.изм. в Ед. изм.
9 Castlevania
 
14.07.09
15:05
(8)Не работает:(
10 Castlevania
 
14.07.09
15:07
Единицы измерения не переносятся
11 DUDE
 
14.07.09
15:21
На каком этапе не работает? При выгрузке или загрузке?

Кстати, возвращаясь к (0), может быть в "Правила.Номенклатура.Выгруженные[Источник.Владелец]" нужно передавать или тип владельца строкой или делать поиск (я так понимаю это массив выгруженных объектов): Правила.Номенклатура.Выгруженные.Найти(Источник.Владелец) = НЕОПРЕДЕЛЕНО так как оператор [] не предполагает передачи самого значения.
12 Castlevania
 
14.07.09
15:31
(11) Отключила выгрузку Единиц Измерения, в ПКО Номенклатура в событии после загрузки добавила данный код. Выгрузила документы из УТ-загрузила в УПП. Но номенклатура все также без единиц измерения.

А насчет [Источник.Владелец]-У меня было правило для первоначального переноса-там этот код работал. Для автообмена я взяла правило, которое создается при натройке обмена, и добавила к нему установку счетов номенклатуры
13 DUDE
 
14.07.09
15:34
Попробуй выгрузить один документ в файловом режиме и посмотреть сам файл - все ли выгружается.
14 Castlevania
 
14.07.09
15:48
(13) Единица измерения не проставлятся в Номенклатуре
15 Castlevania
 
14.07.09
15:49
(13) Пробовала документы кидать этими же правилами через Унивесальный Обмен в формате XML-та же беда
16 Castlevania
 
14.07.09
15:51
Пробовала в план обмена запихнуть свои рабочие правила-но такая ошибка:  Получение элемента по индексу для значения не определено
Хотя через Унивесальный Обмен в формате XML они работают
17 DUDE
 
14.07.09
15:54
Если данных нет уже в файле обмена, значит проблемы с выгрузкой.
18 Castlevania
 
14.07.09
16:16
Сделала! В ПКО Единицы Измерения у реквизита Владелец задала Правило Конвертации-Номенклатура. Алгоритм использовала тот, который вы написали. Теперь номенклатура с единицами измерения
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.