Загрузка изображения программно в 1с вариант 1



Для этого будем использовать стандартную процедуру общего модуля
РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыРасширениеПредложено

Создаем внешнюю обработку. На форму добавляем реквзит номенклатура (тип справочникСсылка.номенклатура)

Делаем кнопку "добавить фото".

На кнопку вешаем эту процедуру.



&НаКлиенте
Процедура добавить(Команда)
Параметрыф=новый Структура;
Параметрыф.Вставить("фильтр","все картинки");
Параметрыф.Вставить("ПолноеИмяФайла","d:\sisadmin.jpg"); \\ путь до нужной картинки относительно клиента
Параметрыф.Вставить("ВладелецФайла",Объект.номенклатура); \\ номенклатура, владелец картинки
Параметрыф.Вставить("ИдентификаторФормы",новый УникальныйИдентификатор);
Параметрыф.Вставить("ГруппаФайлов",неопределено);

РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыРасширениеПредложено(истина,Параметрыф);
КонецПроцедуры

В других конфигурациях думаю в глобальном модуле есть такая же или похожая процедура.


Загрузка изображения программно в 1с вариант 2



Бывают ситуации когда нужно загрузить картинки в справочник номенклатура с сервера. Процедура, приведенная ниже, работает в УНФ и УТ точно.



//номенклатура - ссылка на спрНоменклатура
//путь - путь относительно сервера!!! к картинке

&НаСервере
Процедура ЗагрузитьКартинкуНаСервере(Номенклатура, Путь)
			
	Попытка		
		НачатьТранзакцию();
		
		ФайлИзображения = новый Файл(Путь);
		Если ФайлИзображения.Существует() Тогда
			ДвоичныеДанные = Новый ДвоичныеДанные(Путь);
			АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
			
			Если ЗначениеЗаполнено(Номенклатура.ФайлКартинки) Тогда
				ИнформацияОФайле = Новый Структура;
				ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище",АдресВременногоХранилищаФайла);
				ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста","");
				ИнформацияОФайле.Вставить("ИмяБезРасширения"              ,ФайлИзображения.ИмяБезРасширения);
				ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная"  ,ТекущаяДата());
				ИнформацияОФайле.Вставить("Расширение"                    ,СтрЗаменить(ФайлИзображения.Расширение,".",""));
				
				ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(Номенклатура.ФайлКартинки,ИнформацияОФайле);
				ЗафиксироватьТранзакцию();
				Сообщить("УСПЕШНО загружено изображение в "+Номенклатура);
			Иначе 
				ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл(Номенклатура,ФайлИзображения.ИмяБезРасширения,СтрЗаменить(ФайлИзображения.Расширение,".",""),ТекущаяДата(),ТекущаяДата(),АдресВременногоХранилищаФайла,,"Изображение загружено обработкой по данным файла Excel");
				
				Если ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда
					НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
					НоменклатураОбъект.ФайлКартинки = ПрисоединенныйФайл;
					
					НоменклатураОбъект.Записать();
					ЗафиксироватьТранзакцию();
					Сообщить("УСПЕШНО загружено изображение в "+Номенклатура);
				Иначе
					Сообщить("Не удалось добавить в базу файл "+Путь);
					ОтменитьТранзакцию();
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			Сообщить("Файл "+Путь+" не найден");
			ОтменитьТранзакцию();
		КонецЕсли;
	Исключение
		Сообщить("При добавлении файла "+Путь+" произошла ошибка "+ОписаниеОшибки());
		ОтменитьТранзакцию();
	КонецПопытки;

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