Как реализовать сохранение файла с указанием имени пользователем в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разберем, как правильно организовать диалог сохранения файла в управляемом приложении, чтобы пользователь мог самостоятельно задать имя будущего файла. Часто возникает ситуация, когда программно заданное имя не устраивает конечного пользователя, и возникает необходимость открыть стандартное окно сохранения Windows или macOS.

Основные причины проблемы при выборе файла

В процессе разработки мы часто путаем два различных режима диалога: РежимДиалогаВыбораФайла.ВыборКаталога и РежимДиалогаВыбораФайла.Сохранение. Если в коде указан режим выбора каталога, система ожидает от пользователя только путь к папке, что приводит к ошибкам при попытке склеить путь с именем файла вручную. Для того чтобы пользователь мог видеть текущее имя файла и редактировать его, необходимо использовать именно режим сохранения.

Реализация асинхронного сохранения

Поскольку современная платформа 1С требует использования асинхронных методов в управляемых формах, вместо устаревшего метода Выбрать(), мы будем использовать метод Показать(). Это позволит интерфейсу оставаться отзывчивым, пока пользователь выбирает место для сохранения.

Рассмотрим по шагам правильную реализацию процедуры сохранения:

  1. Создаем объект ДиалогВыбораФайла с параметром РежимДиалогаВыбораФайла.Сохранение.
  2. Указываем заголовок окна и фильтр расширений (например, *.png), чтобы ограничить выбор пользователя и сделать интерфейс понятнее.
  3. Используем ОписаниеОповещения для обработки результата после закрытия диалога.

Вот как выглядит корректный пример кода для инициации диалога:


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

Обработка завершения выбора файла

После того как пользователь нажмет кнопку «Сохранить» в диалоговом окне, управление передается в процедуру, указанную в ОписаниеОповещения. В этой процедуре важно правильно обработать возвращаемый массив ВыбранныеФайлы. Важно помнить, что если выбран режим сохранения, в первом элементе массива будет содержаться уже полный путь к файлу, включая его имя, которое ввел пользователь.

Проанализируем пример кода для завершения операции:


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

    // В ВыбранныеФайлы[0] находится полный путь, выбранный пользователем
    ПутьКФайлу = ВыбранныеФайлы[0];

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

Ключевые рекомендации

При работе с файловой системой в 1С, обратите внимание на следующие моменты:

Теперь вы можете легко дать пользователю возможность самостоятельно управлять процессом сохранения файлов, что значительно повысит удобство вашей разработки в 1С.

← На главную