Добрый день! Подскажите пожалуйста как открыть файл из хранилища. Делаю следующим образом, не получается

Добавление файла:

```1c
    &НаКлиенте
    Процедура ЗагрузитьФайлыСДискаОповещение(ЭтотОбъект)

    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    //Если пользователь отказался от выбора файла, то закрываем форму
    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Модифицированность = Истина;

    ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);

    КонецПроцедуры

    &НаСервере
    Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

    ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);

    НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
    НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
    НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
    НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка

    СтруктураДанныхФайла = Новый Структура;
    СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
    СтруктураДанныхФайла.Вставить("ДанныеФайла", ПолучитьИзВременногоХранилища(Адрес));

    НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения

    НовыйФайл.Записать();

    КонецПроцедуры
```

Открытие файла

```1c
    &НаКлиенте
    Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    НачатьПолучениеКаталогаДокументов(Новый ОписаниеОповещения("КаталогДокументовЗавершение", ЭтотОбъект));

    КонецПроцедуры

    &НаКлиенте
    Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт

    Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ИмяФайла = ";

    ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла);

    ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;

    МассивПолучаемыхФайлов = Новый Массив;
    МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));

    НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);

    КонецПроцедуры

    &НаКлиенте
    Процедура ОткрытьФайлЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПолученныеФайлы = Неопределено
    И Не (ТипЗнч(ПолученныеФайлы) = Тип("Массив")
    И ПолученныеФайлы.Количество()) Тогда
    Возврат;
    КонецЕсли;

    НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);

    КонецПроцедуры

    &НаКлиенте
    Процедура НачатьЗапускПриложенияЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт
    КонецПроцедуры

    &НаСервере
    Процедура ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла)

    СтруктураФайла = Справочники.ХранилищеФайлов.НайтиПоНаименованию(ИмяФайла);

    ПоместитьВоВременноеХранилище(СтруктураФайла.Файлы, Адрес);

    КонецПроцедуры
```
---
Добила это открытие. Вот что получилось:

Загрузка файла

```1c
    &НаКлиенте
    Процедура ЗагрузитьДоговор(Команда)

    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    //Если пользователь отказался от выбора файла, то закрываем форму
    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Модифицированность = Истина;

    ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);

    КонецПроцедуры

    &НаСервере
    Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

    ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);

    НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
    НовыйФайл.Наименование = ВыбранныйФайл.Имя;
    НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя;
    НовыйФайл.ВладелецФайла = Объект.Ссылка;

    //Записываем данные файла из временного хранилища в реквизит формы справочника.
    Если ЭтоАдресВременногоХранилища(Адрес) Тогда
    НовыйФайл.Файлы = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
    КонецЕсли;

    НовыйФайл.Записать();

    КонецПроцедуры
```

Открытие (оно же сохранение)

```1c
    &НаКлиенте
    Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    СсылкаНаФайл = ПолучитьНавигационнуюСсылку(Элементы.СписокФайлов.ТекущиеДанные.Файл, "Файлы");
    ПолучитьФайл(СсылкаНаФайл, Элементы.СписокФайлов.ТекущиеДанные.Файл);

    КонецПроцедуры
```
---
а что конкретно не получается ? В каком месте ошибка, или что у вас происходит ?

и в этой строке, если отладчиком встать

```1c
    НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);
```

то что находится в ПолученныеФайлы[0].Имя ? Это нормальное имя файла, с расширением, или абракадаберное временное имя без расширения ?
---
он сюда даже не заходит
останавливается по ошибки

```1c
    НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);
```

тут
```1c
    МассивПолучаемыхФайлов = Новый Массив;
    МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));
```
 вроде все получает
---
Попробуйте через ДвоичныеДанные

```1c
    &НаСервере
    Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

    ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);

    НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
    НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
    НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
    НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка

    СтруктураДанныхФайла = Новый Структура;
    СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
    СтруктураДанныхФайла.Вставить("ДанныеФайла", Новый ДвоичныеДанные(ВыбранныйФайл.Имя));

    НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения

    НовыйФайл.Записать();

    КонецПроцедуры
```
---
Новый ДвоичныеДанные(ВыбранныйФайл.Имя)
При загрузки файла пишит Файл не обнаружен
---
Да, все правильно пишет. Извиняюсь, недостаточно внимательно код прочитал. У вас сохранение на клиенте идет и потом имя файла на клиенте передается на сервер. Там оно уже не актуально.... Нужно сохранять двоичные данные на клиенте, помещать в хранилище на клиенте и адрес передавать на сервер.

```1c
    &НаКлиенте
    Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    //Если пользователь отказался от выбора файла, то закрываем форму
    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Модифицированность = Истина;

    ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранноеИмяФайла);
    Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные)
    ЗаписатьВложениеНаСервере(Результат, Адрес, ДополнительныеПараметры);

    КонецПроцедуры

    &НаСервере
    Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ДополнительныеПараметры)

    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
    ВыбранноеИмяФайла = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные.Записать(ВыбранноеИмяФайла);
    ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);

    НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
    НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
    НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
    НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка

    СтруктураДанныхФайла = Новый Структура;
    СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
    СтруктураДанныхФайла.Вставить("ДанныеФайла", ДвоичныеДанные);

    НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения

    НовыйФайл.Записать();

    КонецПроцедуры
```

Както так...
---
А как его дальше открыть?
---
вот здесь бы я не передавал на сервер адрес а сделал бы функцию серверную.
Ну и имя файла тоже...

```1c
    &НаКлиенте
    Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт

    // Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ИмяФайла = ПолучитьИмяВременногоФайла();

    Адрес = ПолучитьДанныеФайлаНаСервереБезКонтекста(ИмяКаталогаДокументов);
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
    ДвоичныеДанные.Записать(ИмяФайла);

    // Это тогда не надо
    // ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;

    МассивПолучаемыхФайлов = Новый Массив;
    МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес));

    НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);

    КонецПроцедуры

    &НаСервере
    Функция ПолучитьДанныеФайлаНаСервереБезКонтекста(ИмяФайла)

    СтруктураФайла = Справочники.ХранилищеФайлов.НайтиПоНаименованию(ИмяФайла);

    возврат ПоместитьВоВременноеХранилище(СтруктураФайла.Файлы);

    КонецФункции
```

Вот. На 100% правильность не претендую, т.к. код не отлаживал и в принципе его в 1с не проверял щас. но общая идея такая
---
Может тогда и начать получение файлов тоже не надо. может уже на этом этапе можно открывать внешнее приложение
---
Добила это открытие. Вот что получилось:

Загрузка файла

```1c
    &НаКлиенте
    Процедура ЗагрузитьДоговор(Команда)

    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);

    КонецПроцедуры

    &НаКлиенте
    Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    //Если пользователь отказался от выбора файла, то закрываем форму
    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Модифицированность = Истина;

    ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);

    КонецПроцедуры

    &НаСервере
    Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

    ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);

    НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
    НовыйФайл.Наименование = ВыбранныйФайл.Имя;
    НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя;
    НовыйФайл.ВладелецФайла = Объект.Ссылка;

    //Записываем данные файла из временного хранилища в реквизит формы справочника.
    Если ЭтоАдресВременногоХранилища(Адрес) Тогда
    НовыйФайл.Файлы = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
    КонецЕсли;

    НовыйФайл.Записать();

    КонецПроцедуры
```

Открытие (оно же сохранение)

```1c
    &НаКлиенте
    Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    СсылкаНаФайл = ПолучитьНавигационнуюСсылку(Элементы.СписокФайлов.ТекущиеДанные.Файл, "Файлы");
    ПолучитьФайл(СсылкаНаФайл, Элементы.СписокФайлов.ТекущиеДанные.Файл);

    КонецПроцедуры
```
---
Сделал точно так же. Вышла ошибка

HTTP: Not acceptable
Ошибка при работе с ресурсом /e1cib/files?cmd=GetInfoBaseFileURL