Выгрузка фото из ЗУП в ДО

1. user1074775 17.12.18 11:52 Сейчас в теме
Всем привет! У кого какие есть мысли о том, как можно реализовать выгрузку фото сотрудника из ЗУП в карточку пользователя в Документообороте?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Adilgeriy 25 17.12.18 11:59 Сейчас в теме
думаю можно написать свои правила обмена
3. Adilgeriy 25 17.12.18 12:00 Сейчас в теме
4. user_2010 902 17.12.18 12:22 Сейчас в теме
как-то давно делала веб-сервисом. Но там было ограничение по размеру файла....
5. user1074775 17.12.18 12:37 Сейчас в теме
6. user_2010 902 17.12.18 12:42 Сейчас в теме
7. user1074775 17.12.18 12:51 Сейчас в теме
(6)если не затруднит, буду очень признателен)
8. user_2010 902 17.12.18 21:12 Сейчас в теме +0.1 $m
(7) нашла. Не знаю - поможет ли вам это.
У меня был веб-сервис сторонней программы КИС, я его вызывала из 1С.ЗУП и передавала ему фото. Таким образом фотографии из 1С передавались в стороннюю программу КИС:

// вызывается процедурой этого модуля Процедура ОбменКИСПриЗаписи(Источник, Отказ) Экспорт  
// как обработчик для Подписки на событие.ОбменКИС - используется при изменении фото Справочник.ХранилищеДополнительнойИнформации 
Процедура ПередачаФотоФизЛиц(Флаг, ВключенОбменКИС, КлючВебСервисаКИС)
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ФизическиеЛица.Ссылка,
		|	ФизическиеЛица.Код,
		|	ФизическиеЛица.Наименование,
		|	ФизическиеЛица.ДатаРождения,
		|	ФизическиеЛица.Пол,
		|	ФизическиеЛица.Пол.Порядок,
		|	ХранилищеДополнительнойИнформации.ВидДанных,
		|	ХранилищеДополнительнойИнформации.ИмяФайла,
		|	ХранилищеДополнительнойИнформации.Объект,
		|	ХранилищеДополнительнойИнформации.Хранилище,
		|	ХранилищеДополнительнойИнформации.ТекстФайла,
		|	ЕСТЬNULL(ХранилищеДополнительнойИнформацииИзменения.НомерСообщения, 0) КАК НомерСообщения
		|ИЗ
		|	Справочник.ХранилищеДополнительнойИнформации.Изменения КАК ХранилищеДополнительнойИнформацииИзменения
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
		|			ПО ХранилищеДополнительнойИнформации.Ссылка = ФизическиеЛица.ОсновноеИзображение
		|		ПО ХранилищеДополнительнойИнформацииИзменения.Ссылка = ХранилищеДополнительнойИнформации.Ссылка
		|ГДЕ
		|	(ХранилищеДополнительнойИнформацииИзменения.НомерСообщения > &НомерСообщения
		|			ИЛИ ХранилищеДополнительнойИнформацииИзменения.НомерСообщения ЕСТЬ NULL )
		|	И ХранилищеДополнительнойИнформацииИзменения.Узел = &Узел";

	Point = "Узел";
	СсылкаНаУзел = ПланыОбмена.ОбменКИС.НайтиПоКоду(Point);
	НовыйНомерОтправленного = СсылкаНаУзел.НомерОтправленного + 1; // новый/следующий номер отправленного сообщения, для текущих отправляемых сообщений 
	NomerAd = СсылкаНаУзел.НомерПринятого; // номер последнего приятого удачно сообщения, начиная со следующего сообщения - выгружаем в КИС
	НовыйНомерПринятого = NomerAd;
	Запрос.УстановитьПараметр("Узел", СсылкаНаУзел);
	Запрос.УстановитьПараметр("НомерСообщения", NomerAd);

	РезультатЗапроса = Запрос.Выполнить();
	
	Если НЕ РезультатЗапроса.Пустой() Тогда

		Выборка = РезультатЗапроса.Выбрать();

		URI = "www.xxx.ru/";
	
		Пока Выборка.Следующий() Цикл
		
			Если ВключенОбменКИС Тогда
				// используем метод  СоздатьWSПрокси  типа  WSСсылкаМенеджер.WSСсылка, который создает объект WSПрокси
				// В  WSПрокси мы указываем логин и пароль для доступа к веб-сервису и уже после этого вызываем функцию веб-сервиса. В нашем случае это функция  ListOfDevices().
				WSПроксиКИС = WSСсылки.WSСсылка_КИС_HRM.СоздатьWSПрокси(URI, "HRM", "HRMSoap");
				Попытка
					Ответ = WSПроксиКИС.AddEmlPhoto(КлючВебСервисаКИС, // , 
										GUIDToUUID(XMLСтрока(Выборка.Ссылка)), 
										Выборка.ИмяФайла, 
								        Выборка.Хранилище.Получить().ПолучитьДвоичныеДанные() // возвращает тип ДвоичныеДанные - последовательность байтов файла
										
					
										);    
				Исключение
					Сообщить("При передаче данных в КИС произошла ошибка: "+ОписаниеОшибки());
					Флаг = Ложь; // были ошибки при загрузке в КИС, будем повторно передавать эти же данные
				КонецПопытки;	
			Иначе
				Ответ = "1"; // обмен с КИС выключен, но записи по измененям нужно удалить - поэтому делаем признак - как будто успешно передали изменения в КИС
			КонецЕсли;	
				
			Если Ответ = "1" Тогда
				НовыйНомерПринятого = Макс(?(Выборка.НомерСообщения = 0, НовыйНомерОтправленного, Выборка.НомерСообщения), НовыйНомерПринятого);
			Иначе
				Сообщить("Не передано в КИС фото " + Выборка.Наименование + ". Ответ = "+Строка(Ответ));
				Флаг = Ложь; // были ошибки при загрузке в КИС, будем повторно передавать эти же данные
			КонецЕсли;	
		
		КонецЦикла;	
	
	КонецЕсли;	

КонецПроцедуры
Показать
9. user1074775 18.12.18 10:22 Сейчас в теме
(8)спасибо, надеюсь, мне это чем-нибудь поможет
10. AsPin123 18.12.18 15:21 Сейчас в теме
Добрый день, думаю можно попробовать веб-сервисом.
В базе источнике создаем план-обмена, в который регистрируем изменения.
Используем функции сериализации
С помощью них, можно передавать все что угодно.
Функция ЗначениеИзXMLСтроки(XMLСтрока)
	НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(XMLСтрока);
    Хранилище = НовыйСериализаторXDTO.ПрочитатьXML(ЧтениеXML);
    Значение = Хранилище.Получить();	
	
	Возврат Значение;
КонецФункции

функция ЗначениеВXMLСтроку(Значение)
	НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    НоваяЗаписьXML = Новый ЗаписьXML();
	НоваяЗаписьXML.УстановитьСтроку();
   	ХранилищеПараметровЗапроса = Новый ХранилищеЗначения(Значение, Новый СжатиеДанных(9));
    НовыйСериализаторXDTO.ЗаписатьXML(НоваяЗаписьXML, ХранилищеПараметровЗапроса, НазначениеТипаXML.Явное);
    xmlСтрокаПараметрыЗапроса = НоваяЗаписьXML.Закрыть();
	
	Возврат xmlСтрокаПараметрыЗапроса;
КонецФункции
Показать


В базе источника создаем процедуру в плане обмена
что-то типа:
//МассивСотрудников - все сотрудники которые поставлены на регистрацию в плане обмена
Процедура ОтправитьФотоВУзелОбмена(УзелОбмена, МассивСотрудников)
	
	// Подключение к ВебСервису
	WSПрокси = Неопределено;
	ТекстОшибкиПодключения = ПодключитьWSПрокси(WSПрокси, УзелОбмена.АдресВебСервиса, УзелОбмена.ЛогинВебСервиса, УзелОбмена.ПарольВебСервиса);
			
	Если ЗначениеЗаполнено(ТекстОшибкиПодключения) Тогда
		Возврат; 
	КонецЕсли;
	
	//ФормированиеДанныхДляОтправки
	ТЗФотографий = ПолучитьТаблицуФотографий(МассивСотрудников); //в этой функции можно сделать ТЗ со строками Сотрудник и Фотография.
	
	Если ТЗФотографий.Количество()=0 Тогда
		Возврат;	
	КонецЕсли;
	
	//Отправка данных
	Попытка      
		МассивЗагруженныхУспешно = ЗначениеИзXMLСтроки(WSПрокси.UploadPhoto(ЗначениеВXMLСтроку(ТЗФотографий)));
		СнятьОбъектыСРегистрацииДляУзла(УзелОбмена, МассивЗагруженныхУспешно, ТЗФотографий); // здесь снимаем с регистрации успешные (ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Сотрудник)), в ответе web-сервиса мы отправим успешно загруженных сотрудников обратно 
	Исключение
		ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(),
		УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат;	
	КонецПопытки;
	
КонецПроцедуры
Показать


В базе Приемнике создаем WEB-сервис.
Создаем Операцию UploadPhoto с одним входным параметром String с типом string
Функция UploadPhoto(String)
	МассивЗагруженныхУспешно = Новый Массив;
		
	Попытка
		ТЗФоток = ЗначениеИзXMLСтроки(String);
	Исключение
		Возврат МассивЗагруженныхУспешно ; 	
	КонецПопытки;             	
			
	Для Каждого СтрокаТЗ Из ТЗФоток Цикл              			
		УспешноЗагружено = ЗагрузитьФото(СтрокаТЗ); //Тут уже можно обработать нашу фотку
		Если УспешноЗагружено Тогда
			МассивЗагруженныхУспешно.Добавить(СтрокаТЗ.Сотрудник); //обратно вернем сотрудника
		КонецЕсли;
	КонецЦикла;
	
	Возврат ЗначениеВXMLСтроку(МассивЗагруженныхУспешно);
            	
Показать
11. user1074775 19.12.18 12:35 Сейчас в теме
(10) вы пробовали это решение?
12. AsPin123 19.12.18 13:50 Сейчас в теме
(11) Да, лично я передавал ГУИД, ФИО, ДатуРождения и т.д. физлица. И так же через веб-сервис с помощью сериализации передавали pdf файл
Оставьте свое сообщение

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