Имя: Пароль:
1C
 
УТ 11.4 Помогите извлечь файл из Справочника .ПрисоединенныеФайлы
0 bvb
 
16.04.21
15:12
Есть реализация с прикрепленным файлом
Я нахожу ссылку в справочнике "РеализацияТоваровУслугПрисоединенныеФайлы"

Я поучаю структуру с данными файла
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ССылкаНаЭлементРеализацияТоваровУслугПрисоединенныеФайлы,
        Неопределено, УникальныйИдентификатор, Неопределено, );

Там есть ссылка на имя в рабочем каталоге - но самого файла по данной ссылке не существует
ПутьКФайлуExcel = ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге;

КАк мне выгрузить файл из базы во временный файл на клиенте для его последующей обработки ?

К слову сказать я так и не могу понять где в УТ хранятся двоичные данные самого присоединеного файла.
Реквизит ФайлХранилище = Неопределено
1 bvb
 
16.04.21
15:46
Сделал так :
Походу колхозно - но работает

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ПриОткрытииНаСервере();
    
    ДвоичныеДанные =  ПолучитьДвоичныеданныеФайлExcelИзПрисоединеныхФайлов (ОбъектЗаполнения);
    ПутьКФайлуExcel = ПолучитьИмяВременногоФайла("xlsx");
    ДвоичныеДанные.Записать(ПутьКФайлуExcel);
    
    ПроверкаФайла = Новый Файл (ПутьКФайлуExcel);
    Если ПроверкаФайла.Существует() Тогда
        ПрочитатьExcelНаКлиенте();
        
    КонецЕсли;
    
КонецПроцедуры
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший