При переходе с тонкого клиента на веб-клиент разработчики часто сталкиваются с ситуацией, когда привычный код работы с файлами и внешними приложениями перестает работать. Попытки вызова методов вроде ПолучитьИмяВременногоФайла(), Записать() или создание объекта COMОбъект("Word.Application") приводят к ошибкам исполнения.
Рассмотрим, почему возникают эти ограничения и как правильно реализовать работу с документами MS Word и другими файлами в веб-клиенте 1С.
Проанализируем ключевые особенности работы 1С через интернет-браузер:
%APPDATA% или Temp).COMОбъект("Word.Application")) является специфичной для ОС Windows и работает только в тонком или толстом клиенте. Браузеры не умеют работать с COM-объектами и не могут отслеживать события внешних программ, такие как DocumentBeforeClose или Quit.ОписаниеОповещения.Так как веб-клиент не может напрямую отследить момент закрытия MS Word на компьютере пользователя, в 1С (например, в БСП — Библиотеке Стандартных Подсистем) применяется двухэтапная схема работы с документами.
Разберем данный процесс по шагам:
НачатьПолучениеФайла(). После скачивания файл запускается во внешнем приложении.НачатьПомещениеФайлаНаСервер(). Измененный файл загружается на сервер и сохраняется в информационную базу.Для реализации скачивания и автозапуска локальных приложений в веб-клиенте необходимо установить и подключить расширение работы с файлами. Разберем пример кода для клиентской формы:
&НаКлиенте
Процедура НачатьРедактированиеФайла(Команда)
ОповещениеПодключения = Новый ОписаниеОповещения("ПослеПодключенияРасширения", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключения);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПодключенияРасширения(Подключено, ДополнительныеПараметры) Экспорт
Если Не Подключено Тогда
ОповещениеУстановки = Новый ОписаниеОповещения("ПослеУстановкиРасширения", ЭтотОбъект);
НачатьУстановкуРасширенияРаботыСФайлами(ОповещениеУстановки);
Возврат;
КонецЕсли;
// Получение файла из временного хранилища и открытие
СкачатьИОткрытьФайл();
КонецПроцедуры
После подключения расширения файл можно передать на клиент и запустить через стандартные асинхронные процедуры платформы:
&НаКлиенте
Процедура СкачатьИОткрытьФайл()
// АдресФайлаВоВременномХранилище получаем с сервера
ПараметрыПолучения = Новый ПараметрыПолученияФайлаССервера(АдресФайлаВоВременномХранилище);
ОповещениеЗавершения = Новый ОписаниеОповещения("ПослеПолученияФайла", ЭтотОбъект);
НачатьПолучениеФайлаНаКлиенте(ОповещениеЗавершения, ПараметрыПолучения);
КонецПроцедуры
Если сценарий с ручной загрузкой файла обратно в базу не подходит, проанализируем альтернативные архитектурные решения:
ПолеHTMLДокумента). При сохранении сторонний редактор отправляет обновленный документ обратно в 1С через HTTP-сервис.http://server/webdav/doc.docx и при сохранении автоматически отправляет файл на сервер..docx нет, целесообразно использовать объект ФорматированныйДокумент или ТабличныйДокумент. Они редактируются непосредственно на форме веб-клиента средствами платформы без вызова внешних программ.