Имя: Пароль:
1C
 
Перенести картинку из номенклатуры в характеристику
,
0 Олдж
 
24.01.25
22:46
Доброго всем дня, прошу помочь с методикой переноса картинки в базе УНФ из номенклатуры в характеристику. Сами картинки хранятся в НоменклатураПрисоединенныеФайлы и ХарактеристикиПрисоединенныеФайлы.
Делаю вот так:
КартинкаХарактеристики = Справочники.ХарактеристикиНоменклатурыПрисоединенныеФайлы.СоздатьЭлемент();  
		ЗаполнитьЗначенияСвойств(КартинкаХарактеристики, Номенклатура.ФайлКартинки,,"Родитель,Владелец");  
		КартинкаХарактеристики.ВладелецФайла = Характеристика.Ссылка;
		КартинкаХарактеристики.Записать();
		
		ХарактеристикаСКартинкой = Характеристика.ПолучитьОбъект();
		ХарактеристикаСКартинкой.ФайлКартинки = КартинкаХарактеристики.Ссылка;
		ХарактеристикаСКартинкой.Записать();



Ошибок нет, но картинка у характеристики не появляется.
2 lEvGl
 
гуру
24.01.25
23:05
судя по коду
ЗаполнитьЗначенияСвойств(КартинкаХарактеристики, Номенклатура.ФайлКартинки,,"Родитель,Владелец");
КартинкаХарактеристики - элемент справочника, Номенклатура.ФайлКартинки - хранилище значения (наверно), как ЗаполнитьЗначенияСвойств должно тут отработать? Может Номенклатура? Ну и потом, хранилище значения (возможно) надо Получить(), потом копировать, хотя, может и так отработает, попробуйте
зы. УНФов не было, но ЗаполнитьЗначения тут не по теме, либо параметры по-другому передавать надо
3 Олдж
 
24.01.25
23:56
(2) у файлкартинки из характеристики тип "Справочник.ХарактеристикиНоменклатурыПрисоединенныеФайлы", у файлкартинки из номенклатуры "НоменклатураПрисоединенныеФайлы". Справочники НоменклатураПрисоединенныеФайлы и ХарактеристикиНоменклатурыПрисоединенныеФайлы имеют одинаковый набор реквизитов, поэтому и появилась мысль перенести данные таким образом
4 НоваяВолна
 
24.01.25
23:57
(3) Т.е. понимания что есть Номенклатура и чем отличается от ХарактеристикиНоменклатуры за все годы работы так и не появилось?
5 Олдж
 
25.01.25
00:06
(4) у Номенклатуры реквизит "ФайлКартинки" тип "Справочник.НоменклатураПрисоединенныеФайлы". У характеристики номенклатуры реквизит "ФайлКартинки" тип "Справочник.ХарактеристикиНоменклатурыПрисоединенныеФайлы". оба этих справочника имеют одинаковый набор реквизитов. Необходимо скопировать картинку из номенклатуры в характеристику.
Если есть понимание методики просьба помочь
6 lEvGl
 
гуру
25.01.25
08:14
(5) ну чтобы уж точно, то из одного справочника - файл.получить(), это будут двоичные данные, в другом.файл = ДвоичныеДанные первого
ЗаполнитьЗначения наверно должно отработать, но есть сомнения из за типа ХранилищеЗначения, это "обертка"
а, ну да
в другом.файл = Новый ХранилищеЗначение(ДвоичныеДанные первого, Новый СжатиеДанных(1-9))
7 Сергиус
 
25.01.25
03:50
(0)А там случаем не в регистре сведения сами данные то хранятся?
8 Олдж
 
25.01.25
11:01
(7) Похоже, что да
9 Олдж
 
25.01.25
11:20
(7) Вот так заработало, благодарю
Запрос = Новый Запрос;
		Запрос.Текст  ="
		|Выбрать
		|	Файл,
		|	ХранилищеДвоичныхданных
		|ИЗ
		|	РегистрСведений.ХранилищеФайлов
		|ГДЕ
		|	Файл = &выбФайл"; 
		
		Запрос.УстановитьПараметр("выбФайл",Характеристика.Владелец.ФайлКартинки.Ссылка);
		Выборка = Запрос.Выполнить().Выгрузить();
		
		Если Выборка.Количество()>0 Тогда   
			КартинкаХарактеристики = Справочники.ХарактеристикиНоменклатурыПрисоединенныеФайлы.СоздатьЭлемент();  
			ЗаполнитьЗначенияСвойств(КартинкаХарактеристики, Характеристика.Владелец.ФайлКартинки,,"Родитель,Владелец");  
			КартинкаХарактеристики.ВладелецФайла = Характеристика.Ссылка; 
			
			ДвоичныеДанные = Характеристика.Владелец.ФайлКартинки.ТекстХранилище.Получить();
			КартинкаХарактеристики.ТекстХранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
			КартинкаХарактеристики.Записать();
			
			ДвоичныеДанные = Характеристика.Владелец.ФайлКартинки.ФайлХранилище.Получить();
			КартинкаХарактеристики.ФайлХранилище = ДвоичныеДанные;
			КартинкаХарактеристики.Записать();  
			
			Запись = РегистрыСведений.ХранилищеФайлов.СоздатьМенеджерЗаписи();
			Запись.Файл = КартинкаХарактеристики.Ссылка;
			Запись.ХранилищеДвоичныхДанных = Выборка[0].ХранилищеДвоичныхданных;
			Запись.Записать(Ложь);   
			
			ХарактеристикаСКартинкой = Характеристика.ПолучитьОбъект();
			ХарактеристикаСКартинкой.ФайлКартинки = КартинкаХарактеристики.Ссылка;
			ХарактеристикаСКартинкой.Записать();
		КонецЕсли;

10 Tarlich
 
27.01.25
09:34
(9) Похоже вы не перенесли, а скопировали картинку из номенклатуры в её характеристику, а если много характеристик у одной номенклатуры?
11 Гений 1С
 
гуру
26.01.25
14:46
12 Олдж
 
26.01.25
17:39
(10) Да, так и есть, так и нужно :) Было 10 номенклатур, стало одна номенклатура и 10 характеристик. Из неиспользуемых номенклатур задача скопировать картинку в соответствующую характеристику.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn