Здравствуйте!
Создал справочник "СканыДокументов", с реквизитом "ДанныеКартинки" с типом "ХранилищеЗначения".
Создал форму документа. Добавил кнопки выгрузки и загрузки.

Добавил модуль работы кнопок:

```1c
    &НаКлиенте
    Процедура ВыбратьФайлКартинки(Команда)
    //Создаем оповещение, именно процедура "ОбработатьВыборФайла" будет вызвана при закрытии окна выбора файла
    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    //Открываем интерактивно окно для выбора файла
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);

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

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

    &НаСервере
    Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
    ТекущийОбъект.ДанныеКартинки = Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища(СсылкаНаКартинку) );
    КонецЕсли;

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

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеКартинки");
    КонецПроцедуры

    &НаКлиенте
    Процедура ВыгрузитьФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    Диалог.Заголовок = "Выберите папку для сохранения";
    Диалог.МножественныйВыбор = Ложь;
    Если Диалог.Выбрать() Тогда
    ПолучитьДанные(Диалог.Каталог);
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура ПолучитьДанные(Каталог)
    Если Прав(Каталог,1)="\" Тогда
    ИмяФайла=Каталог+Объект.Наименование;
    Иначе
    ИмяФайла=Каталог+"\"+Объект.Наименование;
    КонецЕсли;
    //Знч=Объект.Ссылка.;
    //Знч.Записать(ИмяФайла);
    КонецПроцедуры
```

Сохранить можно любой файл, но корректно можно получить только файлы формата jpg, т.е. графического формата.
Подскажите, пожалуйста, как корректно получать файлы формата, например, pdf?
Спасибо.
---
Перед показом диалога можно настроить его фильтр.

```1c
    Диалог.Фильтр = "Файлы PDF (*.pdf)|*.pdf";
```
---
Попробуйте

```1c
    &НаКлиенте
    Процедура ВыгрузитьВФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Показать(Новый ОписаниеОповещения("ПослеВыбораФайлаСохранения", ЭтотОбъект));
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВыбораФайлаСохранения(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
    АдресВХранилище = ПолучитьДвоичныеДанные();
    Если АдресВХранилище <> Неопределено Тогда
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
    ДвоичныеДанные.Записать(ВыбранныеФайлы[0]);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры

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

```1c
    &НаКлиенте
    Процедура ВыгрузитьВФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Показать(Новый ОписаниеОповещения("ПослеВыбораФайлаСохранения", ЭтотОбъект));
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВыбораФайлаСохранения(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
    АдресВХранилище = ПолучитьДвоичныеДанные();
    Если АдресВХранилище <> Неопределено Тогда
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
    ДвоичныеДанные.Записать(ВыбранныеФайлы[0]);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьДвоичныеДанные()
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Т.ДанныеКартинки
    |ИЗ
    | Справочник.СканыДокументов КАК Т
    |ГДЕ
    | Т.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Возврат Неопределено
    Иначе
    ДвоичныеДанные = РезультатЗапроса.Выгрузить()[0][0].Получить();
    Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные);
    КонецЕсли;
    КонецФункции
```
---
Сделал так как вы указали. Файл выгружается, но при выгрузке нет возможности выбрать тип файла. Можно ли этот момент как-то указать, например всегда при выгрузке файл должен сохраняться в формате pdf?
---
Перед показом диалога можно настроить его фильтр.

```1c
    Диалог.Фильтр = "Файлы PDF (*.pdf)|*.pdf";
```
---
Вот спасибо, огромное. Помогли.
---
А скажите, можно ли не скачивая файл открывать его?
---
Нет, двоичные данные файла у вас хранятся в самой базе - в любом случае придется их "скачивать" в файл на клиенте.
Но можно сделать 2 команды: на сохранение файла и на открытие. Разница будет лишь в том, что в первом случае мы даём возможность пользователю выбрать имя и место сохранения, а во втором - сохраняем скан во временный файл и открываем его средствами ОС:

```1c
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".pdf");
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    ЗапуститьПриложение(ИмяВременногоФайла);
```

Со стороны пользователя всё будет выглядеть так, как будто файл открывается непосредственно из базы.
---
Добавил кнопку "ОткрытьФайл". Прописал код:

```1c
    &НаКлиенте
    Процедура ОткрытьФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимОткрытияФайла.Открыть);
    Диалог.Показать(Новый ОписаниеОповещения("ПослеОткрытия", ЭтотОбъект));
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеОткрытия(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
    АдресВХранилище = ПолучитьДвоичныеДанные();
    Если АдресВХранилище <> Неопределено Тогда
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".pdf");
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    ЗапуститьПриложение(ИмяВременногоФайла);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

Но я уверен что делаю неправильно, но не пойму как правильно.
---
Диалог пользователю показывать не надо: имя файла сохранения присваивается программно (ПолучитьИмяВременногоФайла(".pdf") вернёт что-то типа "C:\Users\User\AppData\Local\Temp\v8_2B69_9.pdf")

```1c
    &НаКлиенте
    Процедура ОткрытьФайл(Команда)
    АдресВХранилище = ПолучитьДвоичныеДанные();
    Если АдресВХранилище <> Неопределено Тогда
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".pdf");
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    ЗапуститьПриложение(ИмяВременногоФайла);
    КонецЕсли;
    КонецПроцедуры
```
---
Ошибку дает:

"{Справочник.СканыДокументов.Форма.ФормаЭлемента.Форма(80)}: Ошибка при вызове метода контекста (ЗапуститьПриложение)
        ЗапуститьПриложение(ИмяВременногоФайла);
по причине:
Использование синхронных методов на клиенте запрещено!"
---
* В вашем тексте так и не нашел команды
Записать(ИмяФайла)
* Закомментированный текст также не верен:
//Знч=Объект.Ссылка.;
//Знч.Записать(ИмяФайла);
* Сохранять можно только двоичные данные, а не Ссылка
ДвоичныеДанные = Объект.ДанныеКартинки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);

Так что я в недоумении: что значит "картинки корректно, другие не корректно" ?
---
вся магия в начатьпомещениефайла почитайте справку на досуге
---
Нашёл ошибку. Нужно было в свойствах конфигурации включить "Использовать" в поле "Режим использования синхронных вызовов расширений платформы и внешних компонент".
---
Только интересно, на что данное изменение повлияет, если я его раньше не использовал, а теперь включил.
---
С базой работают еще рез веб. Скажите, как поправить ошибку?
---
Данная проблема возникает только при использовании веб-интерфейса.
---
Наверно проблема в том, что данная процедура не видна с Веб-интерфейса. Обращение идет откуда?
---
Из формы справочника.
---
Может быть это связано с тем, что для метода "ПолучитьИмяВременногоФайла "

Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). ?