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