Имя: Пароль:
1C
 
дополнительный реквизит в справочнике
0 Flempy
 
21.07.22
12:29
Имеется справочник, в котором есть дополнительный реквизит(Тип значения: Дополнительное значение). Как программно создать элемент справочника вместе с дополнительным реквизитом?

Вот что сделал, но доп реквизит почему-то не создается

    НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
    НоваяХарактеристика.Владелец = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Бурение и строительство с характеристиками скважин");
    НоваяХарактеристика.Наименование = Назначение;
    НоваяХарактеристика.Записать();
    СсылкаНаОбъект = НоваяХарактеристика.Ссылка;
    МассивСтруктур = Новый Массив;
    ДопРеквизит=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Скважины", Истина);
    Структура = Новый Структура("Свойство, Значение",ДопРеквизит,Назначение);      
    МассивСтруктур.Добавить(Структура );
    УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект,МассивСтруктур);
1 Beduin
 
21.07.22
12:32
СсылкаНаОбъект - Здесь объект у кого устанавливаешь значение.
2 Ryzeman
 
21.07.22
12:34
Гм, у тебя какая-то другая версия БСП, у меня просит это:

// Параметры:
//  ВладелецСвойств - ЛюбаяСсылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя и т.д.
//  ТаблицаСвойствИЗначений - ТаблицаЗначений:
//    * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца.
//    * Значение - Произвольный - любое значение, допустимое для свойства (указано в элементе свойства).
//

В СсылкаНаОбъект на момент вызова всё ок? Она не пустая?. Ну так, на всякий...
3 ZDenis
 
21.07.22
12:35
А какой тип доп. реквизита? Какой тип в "Назначение"?
4 ZDenis
 
21.07.22
12:37
(0) Дополнительные значения хранятся в справочнике "ЗначенияСвойствОбьектов"
5 Flempy
 
21.07.22
12:38
(2) В СсылкаНаОбъект возвращает элемент справочника
(3) Назначения это строка, видимо в этом ошибка
6 ZDenis
 
21.07.22
12:39
(5) Тогда так

ЗначениеОеквизита = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(Назначение,Истина)
7 Flempy
 
21.07.22
12:44
(6) Надо же тогда будет сначала создать это значение, прежде чем искать?
Объясню в двух словах идею. пользователь вводит строку и после нажатия на кнопку "Добавить" Создается элемент справочника и дополнительный реквизит с одноименным названием, который находится в этом справочнике
8 Beduin
 
21.07.22
12:52
(7) Что вы искать собрались? Описание метода ЗаписатьСвойстваУОбъекта почитайте. Передают объект кому принадлежит свойство и само свойство со значением во втором параметре.
9 Ryzeman
 
21.07.22
12:55
(8) От версии БСП зависит. Вон в (2) скопипастил что у меня, там ссылка и ТЗ.
10 Beduin
 
21.07.22
12:57
(9)
    Для Каждого СтрокаТаблицыСвойств Из ТаблицаСвойствИЗначений Цикл
        Если СтрокаТаблицыСвойств.Свойство.ЭтоДополнительноеСведение Тогда
            НоваяСтрока = ТаблицаДопСведений.Добавить();
        Иначе
            НоваяСтрока = ТаблицаДопРеквизитов.Добавить();
            
            Если ТипЗнч(СтрокаТаблицыСвойств.Значение) = Тип("Строка")
                И СтрДлина(СтрокаТаблицыСвойств.Значение) > 1024 Тогда
                НоваяСтрока.ТекстоваяСтрока = СтрокаТаблицыСвойств.Значение;
            КонецЕсли;
        КонецЕсли;
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицыСвойств, "Свойство,Значение");
    КонецЦикла;

Такой массив тоже обрабаботает.
11 ZDenis
 
21.07.22
13:00
(8,9) Вы сути не поняли. У нее доп. реквизит имеет тип "Дополнительное значение". И ей это дополнительное значение надо сперва создать/найти, а оно тоже в справочнике храниться
12 Ryzeman
 
21.07.22
13:02
(11) Да я понял. Просто (8) пишет что ошибка в том что объект передаётся. Я говорю что в моей версии БСП нужно ссылку, так что тут скорее всего ошибки нет.
13 Flempy
 
21.07.22
13:31
Всем спасибо, в частности, ZDenis. Вот такой код получился. Вдруг кому пригодится

    НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
    НоваяХарактеристика.Владелец = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Бурение и строительство с характеристиками скважин");
    НоваяХарактеристика.Наименование = Назначение;
    НоваяХарактеристика.Записать();
    МассивСтруктур = Новый Массив;
    Скважина = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Скважины", Истина);
    ЗначениеРеквизита = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
    ЗначениеРеквизита.Наименование = Назначение;
    ЗначениеРеквизита.Владелец = Скважина;
    ЗначениеРеквизита.Записать();
    Структура = Новый Структура("Свойство, Значение",Скважина,ЗначениеРеквизита.Ссылка);      
    МассивСтруктур.Добавить(Структура);
    УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(НоваяХарактеристика.Ссылка,МассивСтруктур);
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн