Характеристики в номенклатуре , программирование ,как добавить или создать. УНФ 1.6

1. lordguard 37 23.10.20 01:43 Сейчас в теме +2 $m
Задача такая,создать категорию номенклатуры к примеру "обувь" и добавить туда 2 характеристики "размер" и "цвет" .

КатНомен=Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
КатНомен.ТипНоменклатурыПоУмолчанию=Перечисления.ТипыНоменклатуры.Запас;
КатНомен.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.шт ;
КатНомен.Наименование="Обувь";                                           // Имя Категории
Катномен.ИспользоватьХарактеристики=Истина;
КатНомен.Записать();

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

СпрХар = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();     //
СпрХар.Наименование = "Размер";

НовХарСтрокаТЧ = СпрХар.ДополнительныеРеквизиты.Добавить();             //
НовХарСтрокаТЧ.Свойство = Свойство1;
НовХарСтрокаТЧ.Значение = 42;
НовХарСтрокаТЧ = СпрХар.ДополнительныеРеквизиты.Добавить();             //
НовХарСтрокаТЧ.Свойство = Свойство1;
НовХарСтрокаТЧ.Значение = 41;
СпрХар.Записать();
Показать

ошибка: когда записываю свойство1 вылетает, Значение поля "Свойство" не заполнено или заполнено неверно
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. m_nazar 23.10.20 12:13 Сейчас в теме
(1) Если правильно вас понял, то пробуйте как-то так:
СпрНабДопРИС = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
    СпрНабДопРИС.Наименование = "ОбувьТест01";
    СпрНабДопРИС.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_ХарактеристикиНоменклатуры;
    СпрНабДопРИС.Используется = Истина;
    СпрНабДопРИС.Записать();
    
    ТЗДопРекИСв = СпрНабДопРИС.ДополнительныеРеквизиты;
    
    
    ДопРекв = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
    ДопРекв.НаборСвойств = СпрНабДопРИС.Ссылка;
    ДопРекв.Наименование = "Размер02";
    ДопРекв.Заголовок = "Размер02";
    ДопРекв.Виден = Истина;
    ДопРекв.ДополнительныеЗначенияИспользуются = Истина;
    ДопРекв.Доступен = Истина;
    ДопРекв.Записать();
    
    Стр = ТЗДопРекИСв.Добавить();
    Стр.Свойство = ДопРекв.Ссылка; 
    
    Свойство1 = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
    Свойство1.Наименование ="40-02";
    Свойство1.Владелец = ДопРекв.Ссылка;
    Свойство1.Записать();
    Свойство1 = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
    Свойство1.Наименование ="41-02";
    Свойство1.Владелец = ДопРекв.Ссылка;
    Свойство1.Записать();
    
    ДопРекв = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
    ДопРекв.НаборСвойств = СпрНабДопРИС.Ссылка;
    ДопРекв.Наименование = "Цвет02";
    ДопРекв.Заголовок = "Цвет02";
    ДопРекв.Виден = Истина;
    ДопРекв.ДополнительныеЗначенияИспользуются = Истина;
    ДопРекв.Доступен = Истина;
    ДопРекв.Записать();
    
    Стр = ТЗДопРекИСв.Добавить();
    Стр.Свойство = ДопРекв.Ссылка;
    
    Свойство1 = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
    Свойство1.Наименование ="Черный02";
    Свойство1.Владелец = ДопРекв.Ссылка;
    Свойство1.Записать();
    
    СпрНабДопРИС.Записать();
    
    КатНомен=Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
    КатНомен.ТипНоменклатурыПоУмолчанию=Перечисления.ТипыНоменклатуры.Запас;
    КатНомен.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.шт ;
    КатНомен.Наименование="ОбувьТест-"; // Имя Категории
    Катномен.НаборСвойствХарактеристики = СпрНабДопРИС.Ссылка;
    КатНомен.Записать();
Показать
2. Azamatex 12 23.10.20 06:48 Сейчас в теме
Присваивать реквизиту нужно значение типа ссылка, а не объект. То есть должно быть так
НовХарСтрокаТЧ.Свойство = Свойство1.Ссылка; 
6. lordguard 37 23.10.20 09:51 Сейчас в теме
(2)поправил,но все равно ошибка. ругается на строку Свойство1.Записать();
9. Azamatex 12 23.10.20 10:14 Сейчас в теме
3. malikov_pro 1293 23.10.20 06:50 Сейчас в теме
(1) Свойство1 = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
По идее это ПВХ, который добавляется в набор. Набор создается при записи категории и указывается в ней.
7. lordguard 37 23.10.20 09:52 Сейчас в теме
(3)Так что мне нужно подправить и где?
4. uno-c 235 23.10.20 07:06 Сейчас в теме
Свойство1.Владелец = КатНомен.Ссылка;
- здесь ошибка. У Справочник.ЗначенияСвойствОбъектов владельцем является не Справочник.КатегорииНоменклатуры, а ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. Написав
Свойство1.Владелец = КатНомен.Ссылка;
вы фактически вставили туда пустую ссылку на ПВХ.
8. lordguard 37 23.10.20 09:53 Сейчас в теме
(4)
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.
так что в итоге нужно подставить ?
10. FatPanzer 23.10.20 10:27 Сейчас в теме
(8) Странный вопрос. Потому что само собой подразумевающийся на него ответ только один - правильно значение соответствующего типа.
Предлагаю автору изучить - какого типа данные могут содержатся в этом поле, сравнить с уже существующими корректными данными, использовать вариант предложенный ниже, и т.д.... Ну то есть я предлагаю автору заняться аналитической работой, очень полезная вещь, помогает понять, как устроены механизмы изнутри (подсказка: тем кто понимает - больше платят).
11. uno-c 235 23.10.20 12:09 Сейчас в теме
(8) В итоге нужно не подставить, а все переписывать. Например, "Размер" - это должен быть не Справочник.ЗначениеСвойствОбъекта, а ПВХ.ДополнительныеРеквизитыИСведения. Соответственно надо либо создавать ПВХ "Размер", либо использовать уже существующий ПВХ "Размер", что называется "Из другого набора". И там как минимум еще один тип объекта задействован, которого пока нет в Вашем коде.
Нужно или разбираться по примеру (5), или подождать, может у кого есть уже готовый код.
13. uno-c 235 23.10.20 12:17 Сейчас в теме
(8) А в самом справочнике ЗначенияСвойствОбъектов должны быть уже конкретные размеры - 41, 42 и т.д - обычно так делают. Т.е. ПВХ "Размер", а ЗСО "41","42","43" ...
Можно теоретически ПВХ "Размер" сделать типа Число или Строка - тогда вообще не нужно будет использовать Справочник.ЗСО, но так обычно не делают.
5. uno-c 235 23.10.20 07:16 Сейчас в теме
Вообще рекомендую вручную (через пользовательский интерфейс) проделать нечто подобное, посмотреть журнал регистрации - что при этом происходит (какие объекты создаются), в консоли запросов посмотреть объекты, которые увидели в журнале регистрации - и потом воспроизвести в коде аналогичные процессы.
Fox-trot; +1 Ответить
14. malikov_pro 1293 23.10.20 12:25 Сейчас в теме
(13) (10) Приветствую помогающих

(7) Код не тестировал, думаю основная конва работы будет понятна.
Процедура Создать()
	
	обКатегория = Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
	обКатегория.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
	обКатегория.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.шт ;
	обКатегория.Наименование = "Обувь"; // Имя Категории
	обКатегория.ИспользоватьХарактеристики=Истина;
	обКатегория.Записать();
	
	//--
	
	обСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
	обСвойство.Наименование = "Размер";
	обСвойство.НаборСвойств = обКатегория.НаборСвойств;
	обСвойство.ТипЗначения = Новый ОписаниеТипов("Строка");
	обСвойство.Записать();
	
	//--
	
	обНаборСвойств = обКатегория.НаборСвойств.ПолучитьОбъект();
	стрДопРеквизит = обНаборСвойств.ДополнительныеРеквизиты.Добавить();
	стрДопРеквизит.Свойство = обСвойство.Ссылка;
	обНаборСвойств.Записать();
	
	//--
	
	обХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
	обХарактеристика.Владелец = обКатегория.Ссылка;
	
	обХарактеристика.Наименование = "42";
	
	СтрДопРеквизит = обХарактеристика.ДополнительныеРеквизиты.Добавить();
	СтрДопРеквизит.Свойство = обСвойство.Ссылка;
	СтрДопРеквизит.Значение = 42;
	
	обХарактеристика.Записать();
	
	//--
	
	обХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
	обХарактеристика.Владелец = обКатегория.Ссылка;
	
	
	обХарактеристика.Наименование = "41";
	
	СтрДопРеквизит = обХарактеристика.ДополнительныеРеквизиты.Добавить();
	СтрДопРеквизит.Свойство = обСвойство.Ссылка;
	СтрДопРеквизит.Значение = 41;
	
	обХарактеристика.Записать();
	
КонецПроцедуры

Показать
15. uno-c 235 23.10.20 12:50 Сейчас в теме
(14)
обНаборСвойств = обКатегория.НаборСвойств.ПолучитьОбъект();

Это если конфа автоматом создаст НаборСвойств при записи обКатегория . Иначе ошибку выдаст - объект из пустой ссылки.
В общем, направление задано - нужно ковырять дальше )
16. lordguard 37 26.10.20 01:45 Сейчас в теме
(14)
обКатегория = Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
обКатегория.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
обКатегория.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.шт ;
обКатегория.Наименование = "Обувь"; // Имя Категории
обКатегория.ИспользоватьХарактеристики=Истина;
обКатегория.Записать();

Записывает не в характеристики категории номенклатуры? а в свойство, и у свойствва создается пустое значение свойства.
может добьем задачу?

прикрепил фото
Прикрепленные файлы:
17. malikov_pro 1293 26.10.20 02:51 Сейчас в теме
(16) Детальный разбор по объему тянет на статью, поставил в очередь, оптимистично в течении недели сформирую и опубликую.
18. lordguard 37 26.10.20 04:57 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот