Транслирование реквизитов справочника Номенклатура в дополнительные реквизиты. УНФ 3.0

Разработчик сайта попросил, чтобы реквизиты справочника «Производитель» и «Страна происхождения» транслировались в дополнительные реквизиты, потому что обычные реквизиты номенклатуры он не видит в выгрузке на сайт.

Я реализовал это расширением в событии перед записью Номенклатуры:

Процедура УстановитьСвойствоОбъекта(Объект, Свойство, ЗначениеСвойства) Экспорт
    Иск = Объект.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
	Если Иск = Неопределено Тогда   
		Иск = Объект.ДополнительныеРеквизиты.Добавить();
		Иск.Свойство = Свойство;
		Иск.Значение = ЗначениеСвойства;
	Иначе
		Если Иск.Значение <> ЗначениеСвойства Тогда
			Иск.Значение = ЗначениеСвойства;
		КонецЕсли;
    КонецЕсли;
КонецПроцедуры

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

Функция ДатьЗначениеСвойствоПоСправочнику(Свойство, Ссылка, Создавать = истина)
	
	Если Не ЗначениеЗаполнено(Ссылка) Тогда
		Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
	КонецЕсли;                               
	ИскНаименование = Лев(Строка(Ссылка), 100); //Обрезаем под длину наименования значения
	ИскСсылка = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ИскНаименование, Истина, , Свойство);
	Если ЗначениеЗаполнено(ИскСсылка) Тогда
		Возврат ИскСсылка;
	КонецЕсли;
	
	Если Создавать Тогда
		ИскОбъект = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
		ИскОбъект.Наименование = ИскНаименование;
		ИскОбъект.Владелец = Свойство;
		ИскОбъект.Записать();
		ИскСсылка = ИскОбъект.Ссылка;
		Возврат ИскСсылка;
	Иначе
		Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
	КонецЕсли;	
	
КонецФункции

Процедура УстановитьЗначениеСвойстваПоСправочнику(Объект, Свойство, Ссылка, Создавать = истина) Экспорт
	Если НЕ ЗначениеЗаполнено(Свойство) Тогда
		Возврат;
	КонецЕсли;         
	
	ЗначениеСвойства = ДатьЗначениеСвойствоПоСправочнику(Свойство, Ссылка, Создавать);
	УстановитьСвойствоОбъекта(Объект, Свойство, ЗначениеСвойства);

КонецПроцедуры

Пришлось еще сделать обновление реквизитов в форме после записи — автоматически они не перечитываются в расширении формы номенклатуры:


&НаСервере
Процедура дор_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
	//Необходимо перечитать доп.свойства объекта, т.к. мы их меняем
	УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтаФорма);
КонецПроцедуры

Среда: УНФ 3.0.5.145. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *