1С: передать файл с сервера на клиент

Задача: Открыть файл прикрепленный к справочнику на клиенте приложением по умолчанию (передать файл с сервера на клиент)

Решение: любой файл который «прикреплен» к справочнику, если используется БСП , на самом деле находится в справочнике Файлы. Это для старых версий БСП. В новых версиях имя справочника носит шаблонное имя [ИмяСправочника]ПрисоединенныеФайлы. В обоих вариантах у этик справочников есть реквизит «Владелец файла». Вот по нему и получим самый первый прикрепленный файл.

&НаСервере
Функция ОткрытьФайлНаСервере()    		    
			фф="";
			Запрос = Новый Запрос;
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Файлы.Ссылка КАК Ссылка,
				|	Файлы.ПолноеНаименование КАК ПолноеНаименование,
				|	Файлы.ТекущаяВерсияПутьКФайлу КАК ТекущаяВерсияПутьКФайлу,
				|	Файлы.ТекущаяВерсияТом.ПолныйПутьWindows КАК ТекущаяВерсияТомПолныйПутьWindows,
				|	Файлы.ГлавныйФайл КАК ГлавныйФайл,
				|	Файлы.ТекущаяВерсияРасширение КАК ТекущаяВерсияРасширение,
				|	Файлы.Наименование КАК Наименование
				|ИЗ
				|	Справочник.Файлы КАК Файлы
				|ГДЕ
				|	Файлы.ВладелецФайла = &ВладелецФайла
				|	И Файлы.ПометкаУдаления = ЛОЖЬ";	
			Запрос.УстановитьПараметр("ВладелецФайла", объект.ДокОб);	
			РезультатЗапроса = Запрос.Выполнить();	
			ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();	
			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                сообщить(ВыборкаДетальныеЗаписи.Ссылка);
				фф=ВыборкаДетальныеЗаписи.ТекущаяВерсияТомПолныйПутьWindows+ВыборкаДетальныеЗаписи.ТекущаяВерсияПутьКФайлу;
			КонецЦикла;		

			если фф<>"" тогда
				Двоичное=Новый ДвоичныеДанные(фф);
				Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
				Возврат Новый Структура("error,address,filename",false,Адрес,ВыборкаДетальныеЗаписи.Наименование+"."+ВыборкаДетальныеЗаписи.ТекущаяВерсияРасширение);	
			иначе
				Возврат Новый Структура("error,address,filename",true);
			конецесли			
КонецФункции

На клиенте таким образом мы получим имя файла и адрес во временном хранилище. Остаётся сохранить файл во временный каталог и открыть его приложением по умолчанию:

&НаКлиенте
Процедура ОткрытьФайл(Команда)
	рез=ОткрытьФайлНаСервере();
	если рез.error=false тогда
		Двоичное=ПолучитьИзВременногоХранилища(рез.address);			
		ИмяФайла = КаталогВременныхФайлов() + рез.filename;		
		Двоичное.Записать(ИмяФайла);
		ЗапуститьПриложение(ИмяФайла);
	конецесли;

КонецПроцедуры
передать файл с сервера на клиент

Другие мои статьи по теме 1С тут