Выбор имени файла для сохранения и сохранение файла из 1С на диск
Разберем задачу по шагам:
- В нашем случае изображение хранится в реквизите объекта типа ХранилищеЗначения и отображается на форме через реквизит формы типа Строка с названием АдресКартинки. В эту переменную в процедуре ПриСозданииНаСервере помещаем навигационную ссылку на данные файла:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Изображение"); КонецПроцедуры
- Далее создаем команду формы с названием, например, СохранитьФайл. В ней сначала проверяем, что реквизит Изображение в текущем объекте заполнен. Создаем ее обработчик, в котором определяем переменную типа ДиалогВыбораФайла, указываем оповещение (событие), которое сработает после закрытия диалога выбора файла. И открываем диалог с помощью метода Показать():
Функция КартинкиНеЗаполненаНаСервере() ОбъектНоменклатура = РеквизитФормыВЗначение("Объект"); Возврат ОбъектНоменклатура.Изображение.Получить() = Неопределено; КонецФункции &НаКлиенте Процедура СохранитьФото(Команда) Если Не ЗначениеЗаполнено(АдресКартинки) Или КартинкиНеЗаполненаНаСервере() Тогда Возврат; КонецЕсли; ДиалогСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогСохранения.Заголовок = "Укажите имя файла для сохранения картинки"; Оповещение = Новый ОписаниеОповещения("ПослеВыбораСохранения", ЭтотОбъект); ДиалогСохранения.Показать(Оповещение); КонецПроцедуры
- В обработчике оповещения после закрытия диалога выбора файла сначала проверяем, что имя файла вообще было указано, что в диалоге не была нажата кнопка Отмена. Для этого сравниваем со значением Неопределено. Инициализируем оповещение после завершения помещения файла и стартуем помещение с помощью команды НачатьПолучениеФайлов:
&НаКлиенте Процедура ПослеВыбораСохранения(ВыбранныеФайлы, ДопПараметр) Экспорт Если ВыбранныеФайлы = Неопределено Тогда Возврат; КонецЕсли; ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПослеПолученияФайлов", ЭтотОбъект); ПолучаемыеФайлы = Новый Массив(); ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ВыбранныеФайлы[0], АдресКартинки)); НачатьПолучениеФайлов(ОповещениеОЗавершении, ПолучаемыеФайлы, , Ложь); КонецПроцедуры
- И уже после получения файла сообщаем об этом пользователю. Этот код не является необходимым для задачи. Если есть какая-то другая задача, которую необходимо выполнить после сохранения файла из данных базы 1С на диск на клиенте, тут можно реализовать алгоритм для нее. В нашем случае просто сообщим о том, удачно ли прошло сохранение файла. Пример:
&НаКлиенте Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы, ДопПараметр) Экспорт Если ПолученныеФайлы = Неопределено Тогда Сообщить("Не получилось сохранить файл"); КонецЕсли; Для Каждого Файл Из ПолученныеФайлы Цикл Сообщить("Сохранен файл по адресу: " + Файл.ПолноеИмя); КонецЦикла; КонецПроцедуры