Как организовать создание и редактирование файлов в веб-клиенте 1С?

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

При переходе с тонкого клиента на веб-клиент разработчики часто сталкиваются с ситуацией, когда привычный код работы с файлами и внешними приложениями перестает работать. Попытки вызова методов вроде ПолучитьИмяВременногоФайла(), Записать() или создание объекта COMОбъект("Word.Application") приводят к ошибкам исполнения.

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

Почему привычные методы не работают в веб-клиенте?

Проанализируем ключевые особенности работы 1С через интернет-браузер:

  1. Изоляция браузера (Sandbox): Веб-клиент выполняется в изолированной среде браузера. Из соображений безопасности браузер запрещает веб-страницам прямой доступ к дисковой системе клиентского компьютера (например, к папкам %APPDATA% или Temp).
  2. Отсутствие поддержки COM / OLE: Технология COM-автоматизации (вызов COMОбъект("Word.Application")) является специфичной для ОС Windows и работает только в тонком или толстом клиенте. Браузеры не умеют работать с COM-объектами и не могут отслеживать события внешних программ, такие как DocumentBeforeClose или Quit.
  3. Асинхронность работы: В веб-клиенте запрещены синхронные вызовы для работы с файлами и внешними приложениями. Все операции должны выполняться асинхронно с применением объектов ОписаниеОповещения.

Стандартный подход 1С: паттерн «Занять — Редактировать — Сохранить»

Так как веб-клиент не может напрямую отследить момент закрытия MS Word на компьютере пользователя, в 1С (например, в БСП — Библиотеке Стандартных Подсистем) применяется двухэтапная схема работы с документами.

Разберем данный процесс по шагам:

  1. Начало редактирования: Пользователь нажимает на форме кнопку «Редактировать» (или «Редактировать в Word»). На сервере файл блокируется за пользователем. Далее файл передается на клиент из временного хранилища и сохраняется на локальный диск с помощью функции НачатьПолучениеФайла(). После скачивания файл запускается во внешнем приложении.
  2. Внесение изменений: Пользователь работает с документом в MS Word и сохраняет изменения внутри самой программы Word.
  3. Завершение редактирования: Пользователь возвращается в 1С и нажимает кнопку «Закончить редактирование» (или «Сохранить и освободить»). 1С вызывает диалог выбора файла с помощью НачатьПомещениеФайлаНаСервер(). Измененный файл загружается на сервер и сохраняется в информационную базу.

Подключение расширения работы с файлами

Для реализации скачивания и автозапуска локальных приложений в веб-клиенте необходимо установить и подключить расширение работы с файлами. Разберем пример кода для клиентской формы:


&НаКлиенте
Процедура НачатьРедактированиеФайла(Команда)
    
    ОповещениеПодключения = Новый ОписаниеОповещения("ПослеПодключенияРасширения", ЭтотОбъект);
    НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключения);
    
КонецПроцедуры

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

После подключения расширения файл можно передать на клиент и запустить через стандартные асинхронные процедуры платформы:


&НаКлиенте
Процедура СкачатьИОткрытьФайл()
    
    // АдресФайлаВоВременномХранилище получаем с сервера
    ПараметрыПолучения = Новый ПараметрыПолученияФайлаССервера(АдресФайлаВоВременномХранилище);
    
    ОповещениеЗавершения = Новый ОписаниеОповещения("ПослеПолученияФайла", ЭтотОбъект);
    НачатьПолучениеФайлаНаКлиенте(ОповещениеЗавершения, ПараметрыПолучения);
    
КонецПроцедуры

Альтернативные способы организации работы

Если сценарий с ручной загрузкой файла обратно в базу не подходит, проанализируем альтернативные архитектурные решения:

  1. Интеграция с облачными веб-редакторами (OnlyOffice, МойОфис): Документ передается веб-сервису через REST API. Пользователь редактирует файл прямо в браузере (например, через элемент формы ПолеHTMLДокумента). При сохранении сторонний редактор отправляет обновленный документ обратно в 1С через HTTP-сервис.
  2. Использование протокола WebDAV: На стороне веб-сервера публикуется каталог с доступом по WebDAV. MS Word умеет открывать файлы напрямую по ссылке вида http://server/webdav/doc.docx и при сохранении автоматически отправляет файл на сервер.
  3. Внутренние объекты 1С: Если жесткой привязки к формату .docx нет, целесообразно использовать объект ФорматированныйДокумент или ТабличныйДокумент. Они редактируются непосредственно на форме веб-клиента средствами платформы без вызова внешних программ.
← На главную