Не получается программно изменить значение доп. реквизита номенклатуры
Уважаемые коллеги!
У номенклатуры есть доп. реквизит "Код товара". Необходимо программно присвоить ему значение (Артикул. jpg).
В моем коде значение присваивается, но перезапись не происходит. Помогите, что делаю не так((!
&НаСервере
Процедура ПерезаполнитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Номенкл = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
Значение = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если Значение = Неопределено Тогда
Значение = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
Номенкл.Записать();
КонецЦикла;
КонецПроцедуры
У номенклатуры есть доп. реквизит "Код товара". Необходимо программно присвоить ему значение (Артикул. jpg).
В моем коде значение присваивается, но перезапись не происходит. Помогите, что делаю не так((!
&НаСервере
Процедура ПерезаполнитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Номенкл = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
Значение = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если Значение = Неопределено Тогда
Значение = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
Номенкл.Записать();
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Краткое руководство по внесению изменений в конфигурацию
- Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
- Использование дополнительных реквизитов и сведений в отчетах
Найденные решения
Если тип вашего доп реквизита просто строка (можно посмотреть в предприятии), то делается вот так:
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если ДопРеквизит <> Неопределено тогда
ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
Иначе
ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Добавить();
ДопРеквизит.Свойство = ДопСвойство;
ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
Номенкл.Записать();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ДополнительныеРеквизиты это табличная часть справочника?
Если да то Значение это строка табличной части а не значение реквизита!
Будет что-то вроде такого:
Значение = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
ДополнительныеРеквизиты это табличная часть справочника?
Если да то Значение это строка табличной части а не значение реквизита!
Будет что-то вроде такого:
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
СтрокаТЧ = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если СтрокаТЧ <> Неопределено Тогда
СтрокаТЧ.ЗначениеМоегоРеквизита = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
Если тип вашего доп реквизита просто строка (можно посмотреть в предприятии), то делается вот так:
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код товара");
ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Найти(ДопСвойство);
Если ДопРеквизит <> Неопределено тогда
ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
Иначе
ДопРеквизит = Номенкл.ДополнительныеРеквизиты.Добавить();
ДопРеквизит.Свойство = ДопСвойство;
ДопРеквизит.Значение = Строка(Номенкл.Артикул) + ".jpg";
КонецЕсли;
Номенкл.Записать();
Показать
(9) "Если значение = Неопределенно" значит программа не нашла доп реквизит. И в переменной "Значение" нет ничего.
После этого вы присваиваете туда строку.
Отладчик это и показывает. Но в доп реквизит то вы не записываете. Сделайте как я написал в (8) и все заработает.
После этого вы присваиваете туда строку.
Отладчик это и показывает. Но в доп реквизит то вы не записываете. Сделайте как я написал в (8) и все заработает.
(1) Я в ЕРП 2.4 пишу такой код для создания доп реквизита у нового партнера при программном создании.
Данные мои, так что вам надо подставить свои данные и соответственно не справочник партнеры использовать а справочник номенклатура.
ДопСвед = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип (Клиенты)", Истина);
ЗначениеДС = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Ч",Истина,,ДопСвед);
Попытка
НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(НовыйПартнер.Ссылка);
НаборЗаписей.Отбор.Свойство.Установить(ДопСвед);
НоваяСтрокаНабора = НаборЗаписей.Добавить();
НоваяСтрокаНабора.Объект = НовыйПартнер.Ссылка;
НоваяСтрокаНабора.Свойство = ДопСвед;
НоваяСтрокаНабора.Значение = ЗначениеДС;
НаборЗаписей.Записать();
Исключение
КонецПопытки;
ПоказатьДанные мои, так что вам надо подставить свои данные и соответственно не справочник партнеры использовать а справочник номенклатура.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот