Не получается программно изменить значение доп. реквизита номенклатуры

1. user1218998 19.11.19 09:42 Сейчас в теме
Уважаемые коллеги!

У номенклатуры есть доп. реквизит "Код товара". Необходимо программно присвоить ему значение (Артикул. jpg).
В моем коде значение присваивается, но перезапись не происходит. Помогите, что делаю не так((!

&НаСервере
Процедура ПерезаполнитьНаСервере()


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();



Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Номенкл = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");

Значение = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);


Если Значение = Неопределено Тогда

Значение = Строка(Номенкл.Артикул) + ".jpg";

КонецЕсли;

Номенкл.Записать();

КонецЦикла;


КонецПроцедуры
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Marliiin 19.11.19 10:24 Сейчас в теме +0.09 $m
Если тип вашего доп реквизита просто строка (можно посмотреть в предприятии), то делается вот так:

ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");

ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);

Если ДопРеквизит <> Неопределено тогда 
	
	ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
	
Иначе
	
	ДопРеквизит              = Номенкл.ДополнительныеРеквизиты.Добавить();
	ДопРеквизит.Свойство     = ДопСвойство; 
	ДопРеквизит.Значение     = Строка(Номенкл.Артикул) + ".jpg";
	
КонецЕсли;

Номенкл.Записать();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. ZergKRSK 129 19.11.19 09:55 Сейчас в теме
(1)
Значение = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);

ДополнительныеРеквизиты это табличная часть справочника?
Если да то Значение это строка табличной части а не значение реквизита!

Будет что-то вроде такого:
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
СтрокаТЧ = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если СтрокаТЧ <> Неопределено Тогда
СтрокаТЧ.ЗначениеМоегоРеквизита = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
2. user1218998 19.11.19 09:47 Сейчас в теме
3. Aleksandr_prof 192 19.11.19 09:52 Сейчас в теме
Ставьте точку останова на строке Значение = Строка(Номенкл.Артикул) + ".jpg". Если этот код исполняется, тогда смотрите чему равна переменная "Значение" и её тип.
4. yurikmellon 6 19.11.19 09:52 Сейчас в теме
попробуйте сделать запись через
Попытка
Номенкл.Записать();
Предупреждение("Не удалось записать объект """ + Номенкл + """!
|" + ОписаниеОшибки(), 60);
КонецПопытки;
6. гаврюша 2 19.11.19 10:12 Сейчас в теме
Дополнительные реквизиты записываются не в справочник "Номенклатура", у Вас запись только объекта "Номенклатура", а его Вы не изменяете.
В УПП это регистр сведений "Значения свойств объектов"
7. YannikAlx 43 19.11.19 10:21 Сейчас в теме
(6) извините , а при чем тут вообще УПП?
Дополнительные реквизиты в УТ записываются в ТАбличную часть справочника Номенклатура!
8. Marliiin 19.11.19 10:24 Сейчас в теме +0.09 $m
Если тип вашего доп реквизита просто строка (можно посмотреть в предприятии), то делается вот так:

ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");

ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);

Если ДопРеквизит <> Неопределено тогда 
	
	ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
	
Иначе
	
	ДопРеквизит              = Номенкл.ДополнительныеРеквизиты.Добавить();
	ДопРеквизит.Свойство     = ДопСвойство; 
	ДопРеквизит.Значение     = Строка(Номенкл.Артикул) + ".jpg";
	
КонецЕсли;

Номенкл.Записать();
Показать
10. user1218998 19.11.19 10:27 Сейчас в теме
Да, тип строка, сейчас попробую, спасибо
13. user1218998 19.11.19 10:31 Сейчас в теме
(8)
Получилось как вы сказали!!!! Спасибо огромное!
14. ZergKRSK 129 19.11.19 10:34 Сейчас в теме
(13) я в (5) еще это написал.
9. user1218998 19.11.19 10:26 Сейчас в теме
Скрин Отладки. Все выводит
Прикрепленные файлы:
11. Marliiin 19.11.19 10:28 Сейчас в теме
(9) "Если значение = Неопределенно" значит программа не нашла доп реквизит. И в переменной "Значение" нет ничего.
После этого вы присваиваете туда строку.
Отладчик это и показывает. Но в доп реквизит то вы не записываете. Сделайте как я написал в (8) и все заработает.
12. lefthander 19.11.19 10:29 Сейчас в теме
(1) Я в ЕРП 2.4 пишу такой код для создания доп реквизита у нового партнера при программном создании.

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


Данные мои, так что вам надо подставить свои данные и соответственно не справочник партнеры использовать а справочник номенклатура.
Оставьте свое сообщение

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