Вход | Регистрация

1С:Предприятие ::

Метки: 

Перегрузка свойств объектов в УТ10

Я
   Мисти
 
14.01.18 - 23:14
Если КорневойКаталог.Пустая() Тогда
        Сообщить("Не выбран Корневой Каталог!");
        Возврат;
    КонецЕсли;
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект как Номенклатура,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение,
    |    ЗначенияСвойствОбъектов.Свойство.НазначениеСвойства как НазначениеСвойства
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Объект В ИЕРАРХИИ(&ВыбКаталог)";
    Запрос.УстановитьПараметр("ВыбКаталог",КорневойКаталог);
    СписокСвойств = Запрос.Выполнить().Выгрузить();
    
    Для каждого СтрНомен из СписокСвойств Цикл
        УидВЭтойБазе =СтрНомен.Номенклатура.УникальныйИдентификатор();
        УидВоВнешнейБазе = БазаОткрыта.newobject("УникальныйИдентификатор",Строка(УидВЭтойБазе));
        //Сообщить(Строка(УидВЭтойБазе));

        
        Справочник = БазаОткрыта.Справочники.Номенклатура;
        СправочникОбъект = Справочник.ПолучитьСсылку(УидВоВнешнейБазе).ПолучитьОбъект();
        Если СправочникОбъект = Неопределено тогда
            Сообщить("Не нашли номен "+СтрНомен.Номенклатура);
            Продолжить;
        КонецЕсли;
        Свойство = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.Свойство.Наименование));
        Назн =  БазаОткрыта.ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.НайтиПоНаименованию(СокрЛП(СтрНомен.НазначениеСвойства.Наименование));
        Если Назн.Наименование = "" Тогда
            Сообщить("Не нашли назн. свойства "+СтрНомен.НазначениеСвойства.Наименование);
            Продолжить;
        КонецЕсли;
        Если Свойство.Наименование = "" Тогда
            СвойствоОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
            СвойствоОб.НазначениеСвойства = Назн;
            СвойствоОб.Наименование =  СтрНомен.Свойство.Наименование;
            СвойствоОб.Записать();
            Свойство = СвойствоОб.Ссылка;
        КонецЕсли;
        Если ТипЗнч(СтрНомен.Значение) = Тип("Число") Тогда
            НовЗнач = СтрНомен.Значение;
        Иначе
            НовЗнач = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(СтрНомен.Значение.Код);
            Если СокрЛП(НовЗнач.Код) = "" Тогда
                НовЗначОб = БазаОткрыта.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент(); 
            Иначе
                НовЗначОб =  НовЗнач.ПолучитьОбъект();
            КонецЕсли;
            
                НовЗначОб.Код = СтрНомен.Значение.Код;
                НовЗначОб.Наименование =  СтрНомен.Значение.Наименование;
                НовЗначОб.НазначениеСвойства = Назн;
                НовЗначОб.Записать();
                НовЗнач = НовЗначОб.Ссылка;
        КонецЕсли;    
        МенеджерЗаписи = БазаОткрыта.РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();         
        МенеджерЗаписи.Объект = СправочникОбъект.Ссылка;        
        МенеджерЗаписи.Свойство = Свойство;         
        МенеджерЗаписи.Значение = НовЗнач;        
        МенеджерЗаписи.Записать();    
        Сообщить("Записано св. "+ СтрНомен.Свойство.Наименование);
    КонецЦикла;
 
  Рекламное место пустует
   Мисти
 
1 - 14.01.18 - 23:15
Что у меня не так?
Перегружаются и свойства и значения - в смысле в список свойств попадает и "бумага" и "белая", при этом "белая" - не имеет типа, а "бумага" - не имеет значений!
   Мисти
 
2 - 14.01.18 - 23:19
НазначенияСвойствКатегорийОбъектов - ему надо как-то тип присвоить?
   Maniac
 
3 - 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
Регистр НазначенияСвойствОбъектов надо еще заполнить!


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует