Имя: Пароль:
1C
1С v8
Характеристики номенклатуры программно
0 bebibo
 
06.04.22
10:46
Всем добрый день.
Нужно заполнить характеристику номенклатуры. Точнее дозаполнить. Добавили одно свойство, вот его нужно у всех характеристик данной номенклатуры прописать.
Как мне получить характеристику?? Я её получаю, но думаю, что не то я получаю.
Код:

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

    //Вот здесь мне же нужно получить характеристику, а не создать, но как её получить?
    НовыйЭлемент = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
    НовыйЭлемент.Наименование = НовыйЭлемент.СформироватьНаименование(ТаблицаСвойств);
    НовыйЭлемент.Владелец = Ном.Ссылка;
    НовыйЭлемент.Записать();
    
    
    
    Сообщить ("Значение свойства   записано");
1 bebibo
 
06.04.22
10:47
Конфигурация: Комплексная автоматизация, редакция 1.1 (1.1.115.1)
2 hhhh
 
06.04.22
10:55
тут чего-то

    НовЗапись.Объект   = Ном;


по идее должно быть

    НовЗапись.Объект   = НовыйЭлемент.Ссылка;
3 hhhh
 
06.04.22
10:56
и у характеристики может быть несколько свойств.
4 bebibo
 
06.04.22
10:59
(2) То есть РС писать самым последним?
5 bebibo
 
06.04.22
11:00
(3) Да, но мне нужно одно заполнить. Получается у одной номенклатуры - 10 характеристик. В Каждой характеристике мне нужно прописать свойство "Вес 1м,кг" в значение 22
6 bebibo
 
06.04.22
11:05
В РС пишет не корректно. Если создаю руками то в РС:

Объект|Свойство|Значение
  22  |Вес 1,кг|  22

А если программно, то:

    Объект    |Свойство|Значение
Труба моя тест|Вес 1,кг|  22
7 bebibo
 
06.04.22
11:09
Как сделать так? https://dropmefiles.com/rIZ0v
Что я не так делаю? Вообще мне нужно изначально ПОЛУЧИТЬ объект эту характеристику, а я создаю. Но как её получить??
8 bebibo
 
06.04.22
11:27
Получаю характеристику, но там нет того, что нужно заполнить мне..

ВесХарактеристика = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");
    
    СоздЭлементСпр  = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
    СоздЭлементСпр.Владелец     = ВесХарактеристика;
    СоздЭлементСпр.Наименование = "22";
    СоздЭлементСпр.Записать();
    
    ЗначениеРазмер = СоздЭлементСпр.Ссылка;
    
    ЗначениеИзСправочника = ЗначениеРазмер;

    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Номенклатура,
        |    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
        |ИЗ
        |    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        |        ПО ХарактеристикиНоменклатуры.Владелец = Номенклатура.Ссылка
        |ГДЕ
        |    Номенклатура.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ном);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СсылкаНаХарактеристикуНом = ВыборкаДетальныеЗаписи.Характеристика;
        ОбъектХарактеристики  = СсылкаНаХарактеристикуНом.ПолучитьОбъект();
        ОбъектХарактеристики.Записать();
        
        
        
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение,
    |    Ложь КАК ПометкаУдаления
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Объект = &Объект";
    
    Запрос.УстановитьПараметр("Объект", ВесХарактеристика);
    ТаблицаСвойств = Запрос.Выполнить().Выгрузить();
    
    НовыйЭлемент = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
    НовыйЭлемент.Наименование = НовыйЭлемент.СформироватьНаименование(ТаблицаСвойств);
    НовыйЭлемент.Владелец = Ном.Ссылка;
    НовыйЭлемент.Записать();
9 hhhh
 
06.04.22
11:48
(6) объект - это характеристика, а ты лепишь номенклатуру туда. Я же написал в (2), вообще не читаешь?
10 bebibo
 
06.04.22
12:36
(9) Так свойство - это тоже характеристика
11 bebibo
 
06.04.22
12:37
Запись = НаборЗаписейЗначенияСвойств.Добавить();
Запись.Объект   = ??ВотЗдесьЧТо??;
Свойство=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");
Запись.Свойство = Свойство.Ссылка;
Запись.Значение = СоздЭлементСпр;
    
НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(??ВотЗдесьЧТо??);
НаборЗаписейЗначенияСвойств.Отбор.Свойство.Установить(Свойство);
            НаборЗаписейЗначенияСвойств.Записать();
12 bebibo
 
06.04.22
12:38
В РС у Свойства тип: ПланВидовХарактеристикСсылка.СвойстваОбъектов
     у Объекта тип:  ДокументСсылка, СправочникСсылка
13 bebibo
 
06.04.22
12:47
ВОт инфа с ИТС, там в объекте номенклатура

МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    
МенеджерЗаписи.Объект = ПолеВводаНоменклатура;
МенеджерЗаписи.Свойство = ПолеВводаСвойствоНоменклатуры;
МенеджерЗаписи.Значение = ПолеВводаЗначениеСвойства;

МенеджерЗаписи.Записать();

ПОэтому у меня она
14 hhhh
 
06.04.22
12:49
(13) это другое, это свойства номенклатуры, а тебе надо свойства характеристик номенклатуры.
15 bebibo
 
06.04.22
12:51
(14)
Запись.Объект   = откуда взять тогда этот объект?;
Свойство=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");
Запись.Свойство = Свойство.Ссылка;
16 bebibo
 
06.04.22
12:52
(15) аааааа
17 lEvGl
 
гуру
06.04.22
12:53
все смешалось в доме. в коде совсем не видно типа Справочники.ХарактеристикиНоменклатуры. Есть свойства объектов, есть характеристики номенклатуры, это разные справочники, определитесть, что нужно.
пс. Характеристика номенклатуры - не образовано от планвидовХарактеристик
18 bebibo
 
06.04.22
12:54
(16)
Запись.Объект = Характиристика номенклатуры
Запись.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");

Так?
19 lEvGl
 
гуру
06.04.22
13:01
наверно, если надо так. а что нужно? поставить значение свойства на номенклатуру или на характеристику номенклатуры?
20 lEvGl
 
гуру
06.04.22
13:03
и еще есть сомнения насчет того, что вы и к чему добавили
21 bebibo
 
06.04.22
13:05
(19)
Вот код сработал такой, НО наименование не меняется в самой номенклатуре..Не добавляется моя цифра 22..В наименование характеристики

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ХарактеристикиНоменклатуры.Ссылка КАК СсылкаНаХар,
    |    ХарактеристикиНоменклатуры.Наименование
    |ИЗ
    |    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
    |ГДЕ
    |    ХарактеристикиНоменклатуры.Владелец = &Владелец
    |    И ХарактеристикиНоменклатуры.ПометкаУдаления = ЛОЖЬ";
    
    Запрос.УстановитьПараметр("Владелец", Ном);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        РегистрЗначенияСвойствОбъектов = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); //Записываем запись в регистр сведений
        РегистрЗначенияСвойствОбъектов.Значение = ЗначениеИзСправочника;
        РегистрЗначенияСвойствОбъектов.Объект = ВыборкаДетальныеЗаписи.СсылкаНаХар;
        РегистрЗначенияСвойствОбъектов.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");
        РегистрЗначенияСвойствОбъектов.Записать();    
    КонецЦикла;
22 bebibo
 
06.04.22
13:08
(21) То есть сейчас у меня наименование хар-ки: 120*120, 0,78мм
А после добавления моего значения в мое добавленное свойство должно быть: 22, 120*120, 0,78мм
Но это не происходит.
23 bebibo
 
06.04.22
13:12
(22)

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        РегистрЗначенияСвойствОбъектов = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); //Записываем запись в регистр сведений
        РегистрЗначенияСвойствОбъектов.Значение = ЗначениеИзСправочника;
        РегистрЗначенияСвойствОбъектов.Объект = ВыборкаДетальныеЗаписи.СсылкаНаХар;
        РегистрЗначенияСвойствОбъектов.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вес 1м,кг");
        РегистрЗначенияСвойствОбъектов.Записать();
        
/////////НЕ ПОМОГЛИ ЭТИ 2 СТРОЧКИ
                ОбъектХар = ВыборкаДетальныеЗаписи.СсылкаНаХар.ПолучитьОбъект();
        ОбъектХар.Записать();
    КонецЦикла;
24 vicof
 
06.04.22
13:15
Ну посмотри, где наименование формируется, и сделай также.
25 lEvGl
 
гуру
06.04.22
13:16
такое ощущение, что это собеседование на обслуживание
Комплексная автоматизация, редакция 1.1 (1.1.115.1)

Кто разгадает, того возьмут, может быть
26 bebibo
 
06.04.22
13:20
Все получилось. Всем спасибо!
Вот код:


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