1С: передать файл с сервера на клиент
Задача: Открыть файл прикрепленный к справочнику на клиенте приложением по умолчанию (передать файл с сервера на клиент)
Решение: любой файл который «прикреплен» к справочнику, если используется БСП , на самом деле находится в справочнике Файлы. Это для старых версий БСП. В новых версиях имя справочника носит шаблонное имя [ИмяСправочника]ПрисоединенныеФайлы. В обоих вариантах у этик справочников есть реквизит «Владелец файла». Вот по нему и получим самый первый прикрепленный файл.
&НаСервере
Функция ОткрытьФайлНаСервере()
фф="";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Файлы.Ссылка КАК Ссылка,
| Файлы.ПолноеНаименование КАК ПолноеНаименование,
| Файлы.ТекущаяВерсияПутьКФайлу КАК ТекущаяВерсияПутьКФайлу,
| Файлы.ТекущаяВерсияТом.ПолныйПутьWindows КАК ТекущаяВерсияТомПолныйПутьWindows,
| Файлы.ГлавныйФайл КАК ГлавныйФайл,
| Файлы.ТекущаяВерсияРасширение КАК ТекущаяВерсияРасширение,
| Файлы.Наименование КАК Наименование
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайла
| И Файлы.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ВладелецФайла", объект.ДокОб);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
сообщить(ВыборкаДетальныеЗаписи.Ссылка);
фф=ВыборкаДетальныеЗаписи.ТекущаяВерсияТомПолныйПутьWindows+ВыборкаДетальныеЗаписи.ТекущаяВерсияПутьКФайлу;
КонецЦикла;
если фф<>"" тогда
Двоичное=Новый ДвоичныеДанные(фф);
Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
Возврат Новый Структура("error,address,filename",false,Адрес,ВыборкаДетальныеЗаписи.Наименование+"."+ВыборкаДетальныеЗаписи.ТекущаяВерсияРасширение);
иначе
Возврат Новый Структура("error,address,filename",true);
конецесли
КонецФункции
На клиенте таким образом мы получим имя файла и адрес во временном хранилище. Остаётся сохранить файл во временный каталог и открыть его приложением по умолчанию:
&НаКлиенте
Процедура ОткрытьФайл(Команда)
рез=ОткрытьФайлНаСервере();
если рез.error=false тогда
Двоичное=ПолучитьИзВременногоХранилища(рез.address);
ИмяФайла = КаталогВременныхФайлов() + рез.filename;
Двоичное.Записать(ИмяФайла);
ЗапуститьПриложение(ИмяФайла);
конецесли;
КонецПроцедуры

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