1С: передать файл с сервера на клиент
Задача: Открыть файл прикрепленный к справочнику на клиенте приложением по умолчанию (передать файл с сервера на клиент)
Решение: любой файл который «прикреплен» к справочнику, если используется БСП , на самом деле находится в справочнике Файлы. Это для старых версий БСП. В новых версиях имя справочника носит шаблонное имя [ИмяСправочника]ПрисоединенныеФайлы. В обоих вариантах у этик справочников есть реквизит «Владелец файла». Вот по нему и получим самый первый прикрепленный файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
&НаСервере Функция ОткрытьФайлНаСервере() фф=""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Файлы.Ссылка КАК Ссылка, | Файлы.ПолноеНаименование КАК ПолноеНаименование, | Файлы.ТекущаяВерсияПутьКФайлу КАК ТекущаяВерсияПутьКФайлу, | Файлы.ТекущаяВерсияТом.ПолныйПутьWindows КАК ТекущаяВерсияТомПолныйПутьWindows, | Файлы.ГлавныйФайл КАК ГлавныйФайл, | Файлы.ТекущаяВерсияРасширение КАК ТекущаяВерсияРасширение, | Файлы.Наименование КАК Наименование |ИЗ | Справочник.Файлы КАК Файлы |ГДЕ | Файлы.ВладелецФайла = &ВладелецФайла | И Файлы.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("ВладелецФайла", объект.ДокОб); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл сообщить(ВыборкаДетальныеЗаписи.Ссылка); фф=ВыборкаДетальныеЗаписи.ТекущаяВерсияТомПолныйПутьWindows+ВыборкаДетальныеЗаписи.ТекущаяВерсияПутьКФайлу; КонецЦикла; если фф<>"" тогда Двоичное=Новый ДвоичныеДанные(фф); Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор); Возврат Новый Структура("error,address,filename",false,Адрес,ВыборкаДетальныеЗаписи.Наименование+"."+ВыборкаДетальныеЗаписи.ТекущаяВерсияРасширение); иначе Возврат Новый Структура("error,address,filename",true); конецесли КонецФункции |
На клиенте таким образом мы получим имя файла и адрес во временном хранилище. Остаётся сохранить файл во временный каталог и открыть его приложением по умолчанию:
1 2 3 4 5 6 7 8 9 10 11 12 |
&НаКлиенте Процедура ОткрытьФайл(Команда) рез=ОткрытьФайлНаСервере(); если рез.error=false тогда Двоичное=ПолучитьИзВременногоХранилища(рез.address); ИмяФайла = КаталогВременныхФайлов() + рез.filename; Двоичное.Записать(ИмяФайла); ЗапуститьПриложение(ИмяФайла); конецесли; КонецПроцедуры |
Другие мои статьи по теме 1С тут