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

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

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

Эволюция механизмов работы с файлами

Проанализируем ситуацию: почему раньше требовалось расширение? Браузеры работают в режиме «песочницы» для обеспечения безопасности, ограничивая прямой доступ к дисковой подсистеме. Раньше 1С использовала синхронные методы, которые конфликтовали с этой моделью. С выходом обновленных версий платформы произошла унификация: теперь методы работы в тонком и веб-клиенте практически идентичны. Главный секрет заключается в использовании асинхронных вызовов, которые позволяют платформе взаимодействовать со стандартными API браузера (HTML5 File API) напрямую (также доступно управление WebSocket-соединениями).

Вариант 1: Использование метода НачатьПомещениеФайла

Рассмотрим пример кода, который часто встречается в старых проектах и на форумах. Этот метод был промежуточным этапом в развитии платформы. Он позволяет вызвать стандартный диалог выбора файла и поместить его во временное хранилище (например, чтобы перевернуть картинку в правильную ориентацию после загрузки).

Разберем по шагам реализацию через НачатьПомещениеФайла:


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

&НаКлиенте
Процедура Обработчик_Завершения_Загрузки(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    Если Результат Тогда
        // Файл успешно помещен во временное хранилище
        // Здесь можно вызвать серверную процедуру для обработки данных по адресу
        Сообщить("Файл успешно загружен: " + ВыбранноеИмяФайла);
        Сообщить("Адрес во временном хранилище: " + Адрес);
    Иначе
        Сообщить("Загрузка файла была отменена пользователем.");
    КонецЕсли;
КонецПроцедуры

Важно отметить, что метод НачатьПомещениеФайла помечен как устаревший (deprecated) начиная с версии 8.3.15. Несмотря на то, что он продолжает работать в веб-клиенте без расширений, для новых разработок (таких как импорт данных из Excel) рекомендуется использовать более современные инструменты.

Вариант 2: Рекомендованный метод НачатьПомещениеФайловНаСервер

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

Проанализируем пример реализации:


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

&НаКлиенте
Процедура ПослеЗагрузкиФайлов(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено Тогда
        // Результат содержит массив объектов ОписаниеПомещенногоФайла
        Для Каждого Файл Из Результат Цикл
            Сообщить("Файл: " + Файл.Имя + " доступен по адресу: " + Файл.Адрес);
            // Далее передаем адрес на сервер для обработки
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Преимущества этого метода (через который также возможен экспорт печатных форм в растровое и векторное изображения):

  1. Полная независимость от расширений браузера.
  2. Поддержка работы на мобильных устройствах (iOS/Android), где при вызове диалога пользователю будет предложено выбрать файл из галереи или сделать снимок камерой.
  3. Единый программный интерфейс для всех типов клиентов (Тонкий, Веб, Мобильный).

Механизм Drag-and-Drop: загрузка без кнопок

Современный веб-клиент 1С поддерживает также перетаскивание файлов прямо в форму. Это особенно удобно для пользователей. Посмотрим, как это настроить. Для реализации перетаскивания нам необходимо настроить обработчики событий формы ПроверкаПеретаскивания и ОкончаниеПеретаскивания.

В событии ПроверкаПеретаскивания мы должны указать платформе, что форма готова принять файл:


&НаКлиенте
Процедура ПриПроверкеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
КонецПроцедуры

А в событии ОкончаниеПеретаскивания мы получаем данные файла. Важно понимать, что в веб-клиенте без расширения параметры перетаскивания будут содержать объекты типа ОписаниеПередаваемогоФайла, которые нужно отправить на сервер асинхронно.

Особенности и ограничения работы в веб-клиенте

Несмотря на мощные возможности новых методов, разберем важные нюансы, которые необходимо учитывать разработчику:

Таким образом, мы видим, что современная платформа 1С предоставляет исчерпывающий набор инструментов для работы с файлами в браузере. Использование метода НачатьПомещениеФайловНаСервер совместно с объектом ОписаниеОповещения является «золотым стандартом» разработки, обеспечивающим стабильную работу приложения без установки сторонних компонентов.

← На главную