Создать дополнительный реквизит

Версия для печатиPDF-версия

Платформа:

Здравствуйте. Нужно создать внешнюю обработку, которая присваивает значение дополнительного реквизита Артикул склада. При этом значение будет равным значению Артикул товара. Сделал вот такой программный код и не присваивается Артикул склада. Что сделал не так?

Вы пытаетесь присвоить значение табличной части справочника. Странно, что ошибок не вылезает.

А ошибок не выдаёт, потому что в цикл обхода выборки не заходит. Результат запроса всегда будет пустой, т.к. поле НоменклатураДополнительныеРеквизиты.Свойство имеет тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения, а не Строка.

Т. е. нужно в запросе обращаться к Плану видов характеристик и из него вытаскивать свойство?

Не обязательно. Можно вывести нужное свойство на форму как реквизит формы либо искать его по наименованию.

Строку в запросе 

НоменклатураДополнительныеРеквизиты.Свойство = ""Артикул склада""

заменить на 

НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоАртикулСклада

И установить соответствующий параметр запроса:

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

 

В цикле обхода выборки тоже ошибки:

1. ПолучитьОбъект() без скобок написано.

2. Пытаетесь присвоить значение колонке ТЧ (ДополнительныеРеквизиты.Значение).

 

ПС. Просьба выкладывать код текстом, а не скришотами, чтобы в ответе вручную не перебивать. Как выделить код 1С можно прочитать здесь.

В общем у меня вот такой программный код и все равно не присваивается Артикул склада:


Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НоменклатураДополнительныеРеквизиты.Свойство КАК ДополнительныйРеквизит,
		|	НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
		|	Номенклатура.Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
		|		ПО Номенклатура.Ссылка = НоменклатураДополнительныеРеквизиты.Ссылка
		|ГДЕ
		|	НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоАртикулСклада
		|	И НоменклатураДополнительныеРеквизиты.Значение = """"
		|	И Номенклатура.Артикул <> """"
		|	И Номенклатура.Ссылка В ИЕРАРХИИ(&Группы)";
	
	Запрос.УстановитьПараметр("Группы", Группы.ВыгрузитьЗначения());
	Запрос.УстановитьПараметр("СвойствоАртикулСклада", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Артикул склада"));
		
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
	АртикСклада = Выборка.Ссылка.ПолучитьОбъект();
	АртикСклада.ДополнительныеРеквизиты.Свойство.АртикулСклада = АртикСклада.Артикул;
	АртикСклада.Записать();
	
	Сообщить("Номенклатуре: " + Выборка.Ссылка + " присвоен артикул склада: " + АртикСклада.Артикул);

	КонецЦикла;

Запрос в консоли проверяли? Результаты есть?

Да, только что проверил. Пишет вот такую ошибку:


{(3, 3)}: Синтаксическая ошибка "|  НоменклатураДополнительныеРеквизиты.Свойство"
<>|  НоменклатураДополнительныеРеквизиты.Свойство КАК ДополнительныйРеквизит,
 

Палки надо удалить.

Теперь уже новая проблема. Когда пытаюсь в консоли установить параметры, то пишет индекс находится за пределами массива.

Тут не знаю чем помочь. Поищите другую консоль.

В общем скачал заново консоль. И в ней выдает пустой результат запроса.

А если такой запрос запустить:

ВЫБРАТЬ
	НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
	НоменклатураДополнительныеРеквизиты.НомерСтроки КАК НомерСтроки,
	НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
	НоменклатураДополнительныеРеквизиты.Значение КАК Значение
ИЗ
	Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
	НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоАртикулТовара

?

Если не указывать параметр, то результат запроса будет. А если указывать, то тоже пустой. Тип параметра Строка?

Нет. ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.

Вот у такого запроса выдало результат. 

В общем сам запрос в консоли проходит. А в обработке так ничто и не меняется. В цикле правильно я обращаюсь к Артикулу склада? 

 


АртикСклада.ДополнительныеРеквизиты.Свойство.АртикулСклада = АртикСклада.Артикул;

Обращение неправильное. Надо сначала найти строку в ТЧ с нужным значением Свойства, а затем в этой строке установить найденное Значение.

Ошибку выдаёт?

Нет, ничто не пишет.

Странно. А в цикл-то заходит?

Честно говоря даже не знаю. А как проверить? Отладчиком?

Отладчиком. Ставите точку останова перед циклом и вперёд.