Имя: Пароль:
1C
 
Перегрузка свойств объектов в УТ10
0 Мисти
 
14.01.18
23:14
Если КорневойКаталог.Пустая() Тогда
        Сообщить("Не выбран Корневой Каталог!");
        Возврат;
    КонецЕсли;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект как Номенклатура,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение,
    |    ЗначенияСвойствОбъектов.Свойство.НазначениеСвойства как НазначениеСвойства
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Объект В ИЕРАРХИИ(&ВыбКаталог)";
    Запрос.УстановитьПараметр("ВыбКаталог",КорневойКаталог);
    СписокСвойств = Запрос.Выполнить().Выгрузить();
    
    Для каждого СтрНомен из СписокСвойств Цикл
        УидВЭтойБазе =СтрНомен.Номенклатура.УникальныйИдентификатор();
        УидВоВнешнейБазе = БазаОткрыта.newobject("УникальныйИдентификатор",Строка(УидВЭтойБазе));
        //Сообщить(Строка(УидВЭтойБазе));
        
        Справочник = БазаОткрыта.Справочники.Номенклатура;
        СправочникОбъект = Справочник.ПолучитьСсылку(УидВоВнешнейБазе).ПолучитьОбъект();
        Если СправочникОбъект = Неопределено тогда
            Сообщить("Не нашли номен "+СтрНомен.Номенклатура);
            Продолжить;
        КонецЕсли;
        Свойство = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.Свойство.Наименование));
        Назн =  БазаОткрыта.ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.НазначениеСвойства.Наименование));
        Если Назн.Наименование = "" Тогда
            Сообщить("Не нашли назн. свойства "+СтрНомен.НазначениеСвойства.Наименование);
            Продолжить;
        КонецЕсли;
        Если Свойство.Наименование = "" Тогда
            СвойствоОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
            СвойствоОб.НазначениеСвойства = Назн;
            СвойствоОб.Наименование =  СтрНомен.Свойство.Наименование;
            СвойствоОб.Записать();
            Свойство = СвойствоОб.Ссылка;
        КонецЕсли;
        Если ТипЗнч(СтрНомен.Значение) = Тип("Число") Тогда
            НовЗнач = СтрНомен.Значение;
        Иначе
            НовЗнач = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(СтрНомен.Значение.Код);
            Если СокрЛП(НовЗнач.Код) = "" Тогда
                НовЗначОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
            Иначе
                НовЗначОб =  НовЗнач.ПолучитьОбъект();
            КонецЕсли;
            
                НовЗначОб.Код = СтрНомен.Значение.Код;
                НовЗначОб.Наименование =  СтрНомен.Значение.Наименование;
                НовЗначОб.НазначениеСвойства = Назн;
                НовЗначОб.Записать();
                НовЗнач = НовЗначОб.Ссылка;
        КонецЕсли;    
        МенеджерЗаписи = БазаОткрыта.РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();         
        МенеджерЗаписи.Объект = СправочникОбъект.Ссылка;        
        МенеджерЗаписи.Свойство = Свойство;         
        МенеджерЗаписи.Значение = НовЗнач;        
        МенеджерЗаписи.Записать();    
        Сообщить("Записано св. "+ СтрНомен.Свойство.Наименование);
    КонецЦикла;
1 Мисти
 
14.01.18
23:15
Что у меня не так?
Перегружаются и свойства и значения - в смысле в список свойств попадает и "бумага" и "белая", при этом "белая" - не имеет типа, а "бумага" - не имеет значений!
2 Мисти
 
14.01.18
23:19
НазначенияСвойствКатегорийОбъектов - ему надо как-то тип присвоить?
3 Maniac
 
14.01.18
23:20
О да ты научилась писать большие запросы!
Лайк
4 Мисти
 
14.01.18
23:21
Я ваще написала отчет на скд с расшифровкой!!!
5 Мисти
 
14.01.18
23:36
Владельца забыла?
6 Мисти
 
14.01.18
23:42
И значение не того типа, а так всё отлично.
7 Мисти
 
15.01.18
00:17
Для каждого СтрНомен из СписокСвойств Цикл
        УидВЭтойБазе =СтрНомен.Номенклатура.УникальныйИдентификатор();
        УидВоВнешнейБазе = БазаОткрыта.newobject("УникальныйИдентификатор",Строка(УидВЭтойБазе));
        //Сообщить(Строка(УидВЭтойБазе));
        
        Справочник = БазаОткрыта.Справочники.Номенклатура;
        СправочникОбъект = Справочник.ПолучитьСсылку(УидВоВнешнейБазе).ПолучитьОбъект();
        Если СправочникОбъект = Неопределено тогда
            Сообщить("Не нашли номен "+СтрНомен.Номенклатура);
            Продолжить;
        КонецЕсли;
        Свойство = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.Свойство.Наименование));
        Назн =  БазаОткрыта.ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.НазначениеСвойства.Наименование));
        Если Назн.Наименование = "" Тогда
            Сообщить("Не нашли назн. свойства "+СтрНомен.НазначениеСвойства.Наименование);
            Продолжить;
        КонецЕсли;
        Если Свойство.Наименование = "" Тогда
            СвойствоОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
            СвойствоОб.НазначениеСвойства = Назн;
            СвойствоОб.Наименование =  СтрНомен.Свойство.Наименование;
            СвойствоОб.Записать();
            Свойство = СвойствоОб.Ссылка;
        КонецЕсли;
        Если ТипЗнч(СтрНомен.Значение) = Тип("Число") Тогда
            НовЗнач = СтрНомен.Значение;
        Иначе
        Если ТипЗнч(СтрНомен.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда
        Иначе
            Сообщить("Не тот тип "+ СтрНомен.Значение);
            Продолжить;
        КонецЕсли;
            Владелец = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(СтрНомен.Значение.Владелец.Код);
            Если СокрЛП(Владелец.Код) = "" Тогда
                ВладелецОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
                ВладелецОб.Код = СтрНомен.Значение.Владелец.Код;
                ВладелецОб.Наименование =  СтрНомен.Значение.Владелец.Наименование;
                ВладелецОб.НазначениеСвойства = Назн;
                ВладелецОб.Записать();
                Владелец = ВладелецОб.Ссылка;
            КонецЕсли;
            НовЗнач = БазаОткрыта.Справочники.ЗначенияСвойствОбъектов.НайтиПоКоду(СтрНомен.Значение.Код);
            Если СокрЛП(НовЗнач.Код) = "" Тогда
                НовЗначОб = БазаОткрыта.Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
            Иначе
                НовЗначОб =  НовЗнач.ПолучитьОбъект();
            КонецЕсли;
            
                НовЗначОб.Код = СтрНомен.Значение.Код;
                НовЗначОб.Наименование =  СтрНомен.Значение.Наименование;
                НовЗначОб.Владелец = Владелец;
                НовЗначОб.Записать();
                НовЗнач = НовЗначОб.Ссылка;
        КонецЕсли;    
        МенеджерЗаписи = БазаОткрыта.РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();         
        МенеджерЗаписи.Объект = СправочникОбъект.Ссылка;        
        МенеджерЗаписи.Свойство = Свойство;         
        МенеджерЗаписи.Значение = НовЗнач;        
        МенеджерЗаписи.Записать();    
        Сообщить("Записано св. "+ СтрНомен.Свойство.Наименование);
    КонецЦикла;    
Вот так получше, всё равно чего-то не хватает.
8 Мисти
 
15.01.18
11:29
В перегруженной базе в элементе свойства объекта не стоит назначение свойства.
А я же, вроде, его записываю? Значения свойства все на месте!
Причем интересно, что назначение - это не сам объект номенклатуры, а группа номенклатуры!
9 Мисти
 
15.01.18
12:45
По сути, разница в том, что у меня используется свойство для всех объектов, а в исходной базе - для выбранных.
Пачиму??
И, кстати, когда я перегружала типовой обработкой, я получила такой же результат!
10 Мисти
 
15.01.18
13:48
??
11 Мисти
 
15.01.18
15:33
Регистр НазначенияСвойствОбъектов надо еще заполнить!
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой