Програмное создание характеристик

1. user1475554 16.03.23 19:47 Сейчас в теме
Делаю обработку для программного создания характеристик номенклатуры набором по размерному ряду ( Розница ред.2,3) . Характеристики создаются ,наименование, владелец заполняется а вот доп.реквизиты нет, при этом значения в переменных есть на момент создания. Не судите строго за кривой код , только учусь .
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. ovadia 16.03.23 21:41 Сейчас в теме
(1) Запомните! Работа с допреквизитами осуществляется через прикладной объект ПланыВидовХарактеристик. Пример ниже.

&НаСервере
Процедура СоздатьДопРеквизитНаСервере(ИмяРеквизита)
	
    //включим константу использования
    Если Не Константы.ИспользоватьДополнительныеРеквизитыИСведения.Получить() Тогда
        Константы.ИспользоватьДополнительныеРеквизитыИСведения.Установить(Истина);
    КонецЕсли;
	
	//пробуем найти реквизит по наименованию
	ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
	Если НЕ ЗначениеЗаполнено(ДопРеквизитСсылка) Тогда
		//если не нашли реквизит - создаем его
		ДопРеквизитОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
		ДопРеквизитОбъект.Заголовок = ИмяРеквизита;
		ДопРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Контрагенты;
                ДопРеквизитОбъект.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(250));
		ДопРеквизитОбъект.Наименование = ДопРеквизитОбъект.Заголовок + " ("+ДопРеквизитОбъект.НаборСвойств+")";
		ДопРеквизитОбъект.Виден = Истина;
		ДопРеквизитОбъект.Доступен = Истина;
		ДопРеквизитОбъект.ДополнительныеЗначенияИспользуются = Истина;
		//зададим имя нового реквизита
		ДопРеквизитОбъект.Имя = "rek_"+СтрЗаменить(ИмяРеквизита," ","");
		ДопРеквизитОбъект.Записать();
		ДопРеквизитСсылка = ДопРеквизитОбъект.Ссылка;		
	КонецЕсли;
	
    //добавим наш реквизит в набор дополнительных реквизитов контрагента
    НаборДополнительныхРеквизитовКонтрагента = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Контрагенты.ПолучитьОбъект();
    Если НаборДополнительныхРеквизитовКонтрагента.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство") = Неопределено Тогда
        //добавим реквизит в набор
        Стр = НаборДополнительныхРеквизитовКонтрагента.ДополнительныеРеквизиты.Добавить();
        Стр.Свойство = ДопРеквизитСсылка;
	НаборДополнительныхРеквизитовКонтрагента.Записать();
    КонецЕсли;
	
КонецПроцедуры
Показать
16. user1863362 16.03.23 21:50 Сейчас в теме
(12) Вот как в твоей, без сомнения светлой голове, уживаются одновременно
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
И
ДопРеквизитОбъект.Наименование = ДопРеквизитОбъект.Заголовок + " ("+ДопРеквизитОбъект.НаборСвойств+")";


?
17. ovadia 16.03.23 22:00 Сейчас в теме
(16)
Вот как в твоей, без сомнения светлой голове, уживаются одновременно
Ну, а это предмет тёмный и уже не относится к вопросу топикастера ))
2. user1475554 16.03.23 19:47 Сейчас в теме
//Получаем список доп.реквизитов с формы 
	ТипСправочник =  Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") ;
	ТипСтрока     =  Новый ОписаниеТипов("Строка");
	ТЗНаФорме = Объект.ДополнительныеРеквизиты;
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Свойство",ТипСправочник,"Свойство" );
	ТЗ.Колонки.Добавить("Значение",ТипСтрока,"Значение");
	
	Для каждого СтрокаТЗНаФорме Из ТЗНаФорме Цикл
		
		ЗаполнитьЗначенияСвойств(ТЗ.Добавить(),СтрокаТЗНаФорме);
		
	КонецЦикла;
	//Получаем строку со свойством Цвет
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
	Запрос.УстановитьПараметр("ТЗ", ТЗ);
	Запрос.Выполнить();
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	ТЗ.Свойство КАК Свойство,
	               |	ТЗ.Значение КАК Значение
	               |ИЗ
	               |	ТЗ КАК ТЗ
	               |ГДЕ
	               |	ТЗ.Свойство.Наименование ПОДОБНО ""%Цвет%""";
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Сообщить("Необходимо выбрать свойство <Цвет>");
		Возврат;
	КонецЕсли;		
	Выборка = Запрос.Выполнить().Выгрузить();
	
	Для Каждого СтрЦвет Из Выборка Цикл
		Если Выборка.Количество()>1  Тогда
		Сообщить("Необходимо указать только одно свойство <Цвет>");
		Возврат;	
		
		КонецЕсли;
	КонецЦикла;
	//Обходим список свойства Размер и на каждый формируем характеристику
	Для Каждого Стр Из ТЗ Цикл
		Если Стр.Свойство = СтрЦвет.Свойство Тогда
			Прервать;
		Иначе	
			Наименование =  (Стр.Значение + ", " + СтрЦвет.Значение);
			
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			               |	ХарактеристикиНоменклатуры.Наименование КАК Наименование
			               |ИЗ
			               |	Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
			               |ГДЕ
			               |	ХарактеристикиНоменклатуры.Владелец = &Владелец
			               |	И ХарактеристикиНоменклатуры.Наименование = &Наименование";
			Запрос.УстановитьПараметр("Наименование", Наименование);
			Запрос.УстановитьПараметр("Владелец", ВладелецСсылка);
			
			Если Запрос.Выполнить().Выбрать().Количество()<=0 Тогда //Если нет, то задаем характеристику номенклатуре
				
				Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
				Характеристика.Владелец = ВладелецСсылка;
				Характеристика.Наименование = Наименование;
				
				НоваяСтрока  = Характеристика.ДополнительныеРеквизиты.Добавить();
				НоваяСтрока.Свойство = Стр.Свойство;
				НоваяСтрока.Значение = Стр.Значение;
				НоваяСтрока.Свойство = СтрЦвет.Свойство;
				НоваяСтрока.Значение = СтрЦвет.Значение;
				Попытка	
					Характеристика.Записать();
				Исключение	
					ОбщегоНазначения.СообщитьПользователю("Ошибка при записи новой характеристики");
					
				КонецПопытки;
				
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
Показать
3. user1475554 16.03.23 19:59 Сейчас в теме
Как то код плохо выложился, вот дополнительное фото для ясности
Прикрепленные файлы:
4. пользователь 16.03.23 20:12
Сообщение было скрыто модератором.
...
5. user1475554 16.03.23 20:23 Сейчас в теме
6. пользователь 16.03.23 20:52
Сообщение было скрыто модератором.
...
7. user1475554 16.03.23 21:14 Сейчас в теме
К сожалению как записать две разные строчки одной я еще не научился , иначе бы и не клянчил помощи.
Об убогости своих познаний я и сам в курсе, мне бы по делу.
8. пользователь 16.03.23 21:19
Сообщение было скрыто модератором.
...
9. user1475554 16.03.23 21:23 Сейчас в теме
Я в начале описал суть проблемы, строчки не записываются, поэтому и спрашиваю как.
(8)
10. пользователь 16.03.23 21:25
Сообщение было скрыто модератором.
...
11. user1475554 16.03.23 21:29 Сейчас в теме
Борюсь два дня, пока не натолкнуло
13. user1863362 16.03.23 21:41 Сейчас в теме
(11) Иди к постановщику задачи, признавайся, проси денег на курсы.
14. user1475554 16.03.23 21:45 Сейчас в теме
(13)Это я в учебных целях со своей личной базой развлекаюсь.
15. user1863362 16.03.23 21:47 Сейчас в теме
(14) Ну, тогда тяжелей, конечно. Придется свои деньги потратить
18. пользователь 16.03.23 22:47
Сообщение было скрыто модератором.
...
20. пользователь 16.03.23 23:18
Сообщение было скрыто модератором.
...
19. пользователь 16.03.23 22:50
Сообщение было скрыто модератором.
...
21. user1475554 20.03.23 18:41 Сейчас в теме
(20) Создаю характеристику в Розница ред.2.3 отраслевка там идёт размер и цвет предопределеные но кроме них есть доп реквизиты характеристик размер и цвет . В чем затык , когда свойство ищешь по имени находит предопределеные и пишет туда.
Прикрепленные файлы:
22. user1475554 20.03.23 18:42 Сейчас в теме
Если искать по реквизиту находит что нужно но поля остаются пустые
Прикрепленные файлы:
23. пользователь 20.03.23 19:03
Сообщение было скрыто модератором.
...
24. user1475554 20.03.23 20:10 Сейчас в теме
Данные для характеристик берутся с формы элемента характеристик поэтому не существующие цвета или размеры исключаются. Изначально я не искал реквизит через ПВХ потому что он уже отобран на форме.
(23)
25. user1475554 21.03.23 19:37 Сейчас в теме
Нашел в чем проблема, реквизиты имеют тип значения - Дополнительное значение , если добавить тип строка то все работает . Но вот какой тип написать в описании типов чтобы обойтись без строки пока загадка.

(23)
26. пользователь 21.03.23 20:23
Сообщение было скрыто модератором.
...
27. user1475554 21.03.23 20:57 Сейчас в теме
Реквизита два, первый "Цвет" в одном экземпляре а вот второго "Размер" произвольное количество и вот когда запросом к ТЗ отбираю строку цвет нужно описание типов на все колонки, и если со свойством проблем нет то значение делаю строка и судя по всему в этом и проблема так как у реквизита тип значения не строка а дополнительное значение, думаю как обойти проблему.
(26)
28. пользователь 21.03.23 21:06
Сообщение было скрыто модератором.
...
30. user1475554 21.03.23 21:10 Сейчас в теме
(28) Реквизита два, но один из них повторяется в разных размерах, поэтому и записываю программно чтоб за один заход на весь размерный ряд
31. пользователь 21.03.23 21:13
Сообщение было скрыто модератором.
...
32. user1475554 21.03.23 21:15 Сейчас в теме
Это не реквизиты а колонки ТЗ
(31)
33. пользователь 21.03.23 21:15
Сообщение было скрыто модератором.
...
29. user1475554 21.03.23 21:07 Сейчас в теме
(26)В Наборе упаковок добавлена таб.часть где расписана упаковка по размерам какого сколько. В обработке получаю этот список, добавляю цвет, вот и список готов.
34. user1475554 21.03.23 21:17 Сейчас в теме
Колонка свойство - реквизит, значение - значение реквизита
36. пользователь 21.03.23 21:23
Сообщение было скрыто модератором.
...
35. user1475554 21.03.23 21:23 Сейчас в теме
(33)
Прикрепленные файлы:
37. пользователь 21.03.23 21:24
Сообщение было скрыто модератором.
...
38. user1475554 21.03.23 21:26 Сейчас в теме
(37)И что не так, на форме элемента точно так же только реквизиты программно выведены
39. пользователь 21.03.23 21:29
Сообщение было скрыто модератором.
...
40. user1475554 21.03.23 21:31 Сейчас в теме
(39) Да все от туда же
Прикрепленные файлы:
41. пользователь 21.03.23 21:33
Сообщение было скрыто модератором.
...
44. user1475554 21.03.23 21:45 Сейчас в теме
Функционально это форма элемента, записывает реквизит и стандартным путем .
(41)
42. user1475554 21.03.23 21:36 Сейчас в теме
Я на этом моменте не заморачивался пока.
43. user1475554 21.03.23 21:38 Сейчас в теме
Я беру только данные из ТЗ
45. user1475554 22.03.23 14:55 Сейчас в теме
(41) Всем спасибо,разобрался, все работает.
Оставьте свое сообщение

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