Имя: Пароль:
1C
1С v8
Создание характеристик программно
,
0 bebibo
 
15.11.22
13:26
Всем доброго времени суток!

Получился вот такой код:

Для каждого стр из ТабЗначенийИзФайлаЭксель цикл
        НаименованиеНоменклатуры = стр.КакПланируемНаименование;
        НаименованиеКатегории = стр.КАКПЛАНИРУЕМНАИМЕНОВАНИЕ;
        ПроизводительЗнач = стр.Производитель;
        СуффиксЗнач = стр.Суффикс;
        ЕдИзм = стр.ЕдИзм_;
        ЦенаНом = стр.ЦенаВРФРуб_;
        
        //Создание категории        
        НайденаКатегория = Справочники.КатегорииНоменклатуры.НайтиПоНаименованию(НаименованиеКатегории);
        Если НЕ ЗначениеЗаполнено(НайденаКатегория)  тогда
            обКатегория = Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
            
            обКатегория.Наименование = НаименованиеКатегории;
            обКатегория.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
            
            обКатегория.ИспользоватьХарактеристики = Истина;
            обКатегория.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдИзм);
            
            обКатегория.Записать();
            НайденаКатегория = обКатегория.Ссылка;
        КонецЕсли;
        
        //Находим или создаем номенклатуру
        НайденаНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеНоменклатуры);
        Если НЕ ЗначениеЗаполнено(НайденаНоменклатура) тогда
            НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
            НовыйЭлементНоменклатуры.Наименование =НаименованиеНоменклатуры;
            НовыйЭлементНоменклатуры.КатегорияНоменклатуры = НайденаКатегория;
            НовыйЭлементНоменклатуры.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдИзм);
            НовыйЭлементНоменклатуры.НаименованиеПолное = НаименованиеНоменклатуры;
            НовыйЭлементНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас;
            НовыйЭлементНоменклатуры.ИспользоватьХарактеристики = Истина;
            НовыйЭлементНоменклатуры.Записать();
            НайденаНоменклатура = НовыйЭлементНоменклатуры.Ссылка;
        КонецЕсли;
        //
        
        НоваяТЗ = новый ТаблицаЗначений;
        НоваяТЗ.Колонки.Добавить("Свойство");
        НоваяТЗ.Колонки.Добавить("Значение");
        
        Суффикс = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Суффикс", Истина);
        ЗначениеРеквизита = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        ЗначениеРеквизита.Наименование = СуффиксЗнач;
        ЗначениеРеквизита.Владелец = Суффикс;
        ЗначениеРеквизита.Записать();
        Стр = НоваяТЗ.Добавить();
        Стр.Свойство = Суффикс;
        Стр.Значение = ЗначениеРеквизита.Ссылка;
                
        Производитель = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Производитель", Истина);
        ЗначениеРеквизита = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        ЗначениеРеквизита.Наименование = ПроизводительЗнач;
        ЗначениеРеквизита.Владелец = Производитель;
        ЗначениеРеквизита.Записать();
        Стр = НоваяТЗ.Добавить();
        Стр.Свойство = Производитель;
        Стр.Значение = ЗначениеРеквизита.Ссылка;
                
        НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
        НоваяХарактеристика.Владелец = НайденаНоменклатура;
        НоваяХарактеристика.Наименование = СуффиксЗнач+", "+ПроизводительЗнач;
        НоваяХарактеристика.НаименованиеДляПечати = СуффиксЗнач+", "+ПроизводительЗнач;  
        НоваяХарактеристика.Записать();
        
        УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(НоваяХарактеристика.Ссылка,НоваяТЗ);
КонецЦикла;

Вот у номенклатуры характеристика создалась, всё нормально. Но заходя в эту характеристику на форме в табличной части пусто. То есть в ТЧ нет свойств и их значений.
Пишет они указываются в категории номенклатуры. Захожу в категорию - там тоже пусто.
Что не хватает в моём коде? Почему тч со свойствами не заполняется?
1 bebibo
 
15.11.22
13:49
Я думал вот эта строчка: "УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(НоваяХарактеристика.Ссылка,НоваяТЗ);"  - всё решит..Но нет..
2 Ryzeman
 
15.11.22
13:58
(1) УправлениеСвойствами - для дополнительных реквизитов и сведений. У характеристики это дополнительные реквизиты или другая табличная часть?
Ну или что за конфа? начнём с этого...
3 bebibo
 
15.11.22
14:00
(2) Конфа УНФ 1.6.
У характеристики - доп реквизит
4 lamme
 
15.11.22
14:03
обычно - Характеристика - это отдельный справочник, а не доп.реквизит.
о чем у тебя в коде и написано
Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();

что касается  - не отображается
"Но заходя в эту характеристику на форме в табличной части пусто"

зайди все в тот же конфиг
в карточку товара
и посмотри - из чего он заполняет эту таблицу (если это таблица вообще, а не какой ниб РС)
5 lamme
 
15.11.22
14:07
штатно
в УНФ 1,6 - хар-ка - это справочник
и отображение хар-к - это большой запрос
6 lamme
 
15.11.22
14:08
те ты когда сюда жмякаешь
https://skr.sh/sGvc7CYAeI9

попадаешь вот сюда
https://skr.sh/sGvSt602nP9
7 lamme
 
15.11.22
14:09
и да ..
вспомнил
8 bebibo
 
15.11.22
14:09
(4) Да, хар-ка это справочник. Просто в (2) спросили у хар-ки это доп реквизиты или другая тч. Я ответил- доп реквизиты.

Я захожу в номенклатуру - в ней сверху перехожу по гиперссылке "Характеристики". Она там моя есть, которую я загрузил. Жму на неё 2 раза, открывается форма "Характеристика номенклатуры", снизу есть поле "Свойства и значения". Вот это поле пустое. А снизу пишется - "Состав свойств изменяется в карточке Категории номенклатуры".

Иду опять в номенклатуру и перехожу из нее в её категорию. Внизу на форме категории тоже есть поля "Свойства хар-к" и "Свойства ном-ры" - оба пустые.
9 lamme
 
15.11.22
14:09
при программном создании карточки товара

обКатегория.ИспользоватьХарактеристики = Истина;

этого мало
10 bebibo
 
15.11.22
14:10
(6) Блин..Вот попадос..
11 lamme
 
15.11.22
14:11
там есть доп реквизит - в котором так же указываешь что Хар-ки использовать
12 lamme
 
15.11.22
14:11
найду- покажу
13 bebibo
 
15.11.22
14:11
(9) Мне надо программно тч заполнить еще? Только не у категории я так понимаю. Есть справочник "Наборы дополнительных реквизитов и сведений", туда что ли?
14 lamme
 
15.11.22
14:13
13
нет.
там еще доп реквизит есть
у него тип - перечисление.

те
обКатегория.ИспользоватьХарактеристики = Истина;
там еще надо ставить
обКатегория.<ЧегоТо> = Перечисления....Использовать;

но не вижу какой это реквизит
ищу
15 lamme
 
15.11.22
14:20
не - не вижу.
просто знаю - что с такой же ситуацией сталкивался
и тоже тупил.
16 bebibo
 
15.11.22
14:34
(14) хм..Сложно..На форумах просмотрел ничего такого не нашел(
17 bebibo
 
15.11.22
14:39
(15) То есть по коду у меня всё верно, я просто не заполнил какой то реквизит. Так?
18 lamme
 
15.11.22
14:39
на мой взгляд - да
19 lamme
 
15.11.22
14:43
попробуй делать по шагам

те сначала просто создать товар + характеристику

без создания свойств и категорий.
20 lamme
 
15.11.22
14:46
там есть штатная загрузка из ексель

https://skr.sh/sGvl8WtGqIt

посмотри там
21 Ryzeman
 
15.11.22
14:49
(17) Самое простое решение если "в лоб" - создай ручками номенклатуру и заполни характеристику, потом через консоль запросов поочереди сравни их - номенклатуры, характеристики, допреквизиты. Вот если это не поможет, тогда надо курить формы и смотреть откуда что берётся и как отображается. Сразу делать так конечно правильнее, но ты уже много времени на этот вопрос убил)
22 bebibo
 
15.11.22
15:20
Разобрался. Кому будет полезно может:

Надо было при создании характеристики заполнить тч:

СтрДопРеквизит = НоваяХарактеристика.ДополнительныеРеквизиты.Добавить();
СтрДопРеквизит.Свойство = Производитель;
СтрДопРеквизит.Значение = ЗначениеРеквизита.Ссылка;

И всё сработало.
23 bebibo
 
15.11.22
15:30
(22) Только в категории тоже надо что то заполнить, так как там тоже пусто всё равно.
24 bebibo
 
15.11.22
16:41
(23) Проблема решена этим:

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