Как правильно выгрузить файл с сервера на компьютер пользователя в веб-клиенте 1С?

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

При разработке конфигураций на платформе 1С:Предприятие часто возникает задача сформировать файл (например, dbf, xlsx или xml) на стороне сервера и передать его для сохранения на локальный компьютер пользователя. В клиент-серверном варианте при работе через веб-клиент многие разработчики сталкиваются с тем, что классические методы сохранения файлов не срабатывают или работают некорректно. Давайте разберем, почему это происходит и как правильно реализовать данный механизм. Для решения этой задачи в интерактивном режиме можно использовать двухпанельный файловый менеджер для обмена файлами между клиентом и сервером.

Понимание архитектуры веб-клиента

Прежде всего, важно осознать ключевое различие: код, выполняемый на сервере, работает в изолированной среде серверной операционной системы. Сервер 1С не имеет прямого доступа к файловой системе компьютера пользователя (клиента). Попытка выполнить запись файла по пути C:\Users\... в серверном коде приведет лишь к тому, что файл появится в папке на сервере, а не на локальной машине пользователя. Более того, веб-браузеры, через которые работают пользователи, накладывают строгие ограничения безопасности (песочницу), запрещающие сайтам произвольно записывать файлы на диск пользователя без явного подтверждения.

Этап 1: Подготовка данных на сервере

Чтобы передать данные, мы должны сначала сформировать их в оперативной памяти сервера или во временном файле, а затем поместить во ВременноеХранилище. Временное хранилище — это специальный механизм платформы, предназначенный для обмена данными между сервером и клиентом.

Рассмотрим пример формирования файла:


// Код выполняется на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("dbf");
Файл = Новый ЗаписьDBF();
Файл.СоздатьФайл(ИмяВременногоФайла);
// ... заполнение данными ...
Файл.Закрыть();

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

Этап 2: Передача файла на сторону клиента

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

Рекомендуемым методом является ПолучитьФайлССервераАсинх. Этот метод берет на себя всю логику по передаче данных через HTTP и вызову стандартного браузерного диалога «Сохранить как», который позволяет пользователю выбрать место сохранения файла на своем компьютере.

Пример вызова в клиентском коде:


&НаКлиенте
Процедура ВыгрузитьФайл(Команда)
    // АдресХранилища был передан с сервера
    ИмяФайлаНаКлиенте = "Отчет.dbf";
    
    // Вызываем асинхронный метод получения файла
    ПолучитьФайлССервераАсинх(АдресХранилища, ИмяФайлаНаКлиенте);
КонецПроцедуры

Использование расширения для работы с файлами

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

Для таких операций используется метод НачатьЗапись у объекта ДвоичныеДанные. Важно помнить, что в веб-клиенте работа с файлами практически всегда должна быть асинхронной:


// Пример асинхронной записи
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗаписиФайла", ЭтотОбъект);
Данные = ПолучитьИзВременногоХранилища(АдресХранилища);
Данные.НачатьЗапись(ОписаниеОповещения, "C:\Downloads\Отчет.dbf");

Основные выводы

  1. Никогда не пытайтесь записывать файлы напрямую на диск через серверный код при работе с веб-клиентом.
  2. Используйте ВременноеХранилище как промежуточное звено для передачи данных.
  3. Отдавайте предпочтение асинхронным методам, таким как ПолучитьФайлССервераАсинх — это стандарт современной разработки, который обеспечивает стабильную работу интерфейса без зависаний.
  4. Помните, что браузер всегда будет запрашивать у пользователя разрешение на сохранение файла — это базовая функция безопасности, которую невозможно отключить стандартными средствами платформы.

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

← На главную