Передача картинки из ХранилищаЗначения во внешнюю базу на MSSQL

1. 4erv 06.03.18 11:58 Сейчас в теме
Здравствуйте.
Подобный вопрос, скорее всего, неоднократно поднимался, я честно пытался искать по форуму, но не нашел ничего конкретного про мой случай.
Суть такова. Конфигурация УПП 1.3. Требуется фото сотрудника из справочника ФизЛиц передать в СКУД. База СКУД реализована на MSSQL, в ней у таблицы сотрудника для хранения картинки служит поле типа image.

Получил я ДвоичныеДанные

Хранилище = ФизЛицо.ОсновноеИзображение.Хранилище;
Картинка = Хранилище.Получить();
ДвоичныеДанные = Картинка.ПолучитьДвоичныеДанные();


но что с этим делать дальше и как передать на сервер чтоб оно корректно работало, не могу сообразить.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. 4erv 06.03.18 14:53 Сейчас в теме
Сам разобрался. Может, кому пригодится. Да, это для обычного приложения.

	
Процедура ЗагрузитьФото(ФизЛицо)
        Хранилище = ФизЛицо.ОсновноеИзображение.Хранилище;
	Картинка = Хранилище.Получить();
	
	Попытка
		ДвоичныеДанные = Картинка.ПолучитьДвоичныеДанные();
	Исключение
		Сообщить("У пользователя " + ФизЛицо.Наименование + " нет фото");
		Возврат;
	КонецПопытки;
	
	//записать на жесткий
	ИмяФайла = "E:\Photo.jpg"; 
	ДвоичныеДанные.Записать(ИмяФайла);		
	ИдПользователя = ПолучитьИДПользователя(ФизЛицо);
	Если ИдПользователя <> "" Тогда
		ИмпортКартинки(ИмяФайла,ИдПользователя, ФизЛицо);
	Иначе
		Сообщить("Пользователь " + ФизЛицо.Наименование + " не обнаружен на СКУД");
	КонецЕсли;
	УдалитьФайлы(ИмяФайла);

КонецПроцедуры
Показать


Процедура ИмпортКартинки(ИмяФайла,ИдПользователя, ФизЛицо)
	
	Stream = Новый COMОбъект("ADODB.Stream");
	Stream.Type = 1;
	Stream.Open();
	Stream.LoadFromFile(ИмяФайла);

        //ADOСоединение - переменная COMОбъект("ADODB.Connection")
	Connection = ADOСоединение;
		
	RecordSet = Новый COMОбъект("ADODB.Recordset");
	RecordSet.CursorLocation=3;
	RecordSet.LockType=2;
	
	//UserPhotoStream - поле, куда пишется картинка
	Запрос = "Sel ect UserPhotoStream fr om dbo.users where users_id = '" + ИдПользователя + "'";
	RecordSet.Open(Запрос, Connection);
	Если RecordSet.RecordCount=0 Тогда
		Сообщить("В СКУД не обнаружен пользователь " + ФизЛицо.Наименование);	
	Иначе
		RecordSet.MoveFirst();
	КонецЕсли;
	RecordSet.Fields("UserPhotoStream").Value=Stream.Read(-1);
	RecordSet.Upd ate();
	Stream.Close();
	RecordSe t.Close();
	
КонецПроцедуры
Показать
SlavaKron; +1 Ответить
3. ImHunter 319 06.03.18 15:45 Сейчас в теме
А я делал с помощью преобразований в/из base64.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот