При разработке расширений для веб-клиента 1С:Предприятие многие программисты сталкиваются с тем, что привычные методы работы с файловой системой перестают функционировать. Если в тонком клиенте код работает корректно, то в веб-браузере диалоговые окна просто не открываются или система выдает ошибку о недопустимости синхронных вызовов. Давайте разберемся, почему это происходит и как правильно организовать выбор каталога.
Основная причина кроется в архитектурных ограничениях веб-клиента. Браузеры, в которых запускается 1С, работают в режиме «песочницы» (sandbox). Это означает, что веб-клиент не имеет прямого доступа к файловой системе операционной системы пользователя из соображений безопасности. Любая попытка вызвать синхронный метод, например, ДиалогВыбораФайла.Выбрать(), блокирует поток выполнения интерфейса, что в веб-среде строго запрещено. Система ожидает исключительно асинхронного взаимодействия — для этого подойдёт инструмент для пошаговой отладки асинхронного кода.
Для выполнения операций с локальными файлами (включая выбор каталога) в веб-клиенте обязательно должно быть установлено расширение браузера «1С:Предприятие». Без него доступ к файловым операциям будет ограничен. Мы должны программно инициировать его подключение. Рассмотрим, как это сделать правильно через НачатьПодключениеРасширенияРаботыСФайлами().
&НаКлиенте
Процедура кнВыбратьКаталог(Команда)
Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(Оповещение);
КонецПроцедуры
Вместо написания собственного «велосипеда» с множеством вложенных процедур-оповещений, самым правильным подходом в современной разработке является использование Библиотеки стандартных подсистем (БСП). Разработчики 1С уже позаботились об инкапсуляции всех сложностей проверки расширения и асинхронного взаимодействия.
Рассмотрим, как использовать функционал ФайловаяСистемаКлиент. Это значительно упрощает код и делает его поддерживаемым.
&НаКлиенте
Процедура ВыбратьКаталогБСП(Команда)
// Используем метод из БСП
Оповещение = Новый ОписаниеОповещения("ПослеВыбораКаталога", ЭтотОбъект);
ФайловаяСистемаКлиент.ВыбратьКаталог(Оповещение, "Выберите каталог для сохранения файлов");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораКаталога(ВыбранныйКаталог, ДопПараметры) Экспорт
Если ВыбранныйКаталог <> Неопределено Тогда
Сообщить("Выбран каталог: " + ВыбранныйКаталог);
КонецЕсли;
КонецПроцедуры
ОписаниеОповещения.При отладке веб-клиента мы часто забываем об инструментах разработчика самого браузера — пригодится инструментарий для разработки и отладки управляемых форм. Если диалоговое окно не открывается, нажмите F12 и перейдите на вкладку Console. Там часто отображаются блокирующие ошибки безопасности или информация о том, что расширение 1С не имеет прав доступа к файловой системе.
Также убедитесь, что в настройках расширения 1С в браузере активированы следующие опции:
В заключение, проанализировав ситуацию, мы рекомендуем полностью отказаться от использования классических методов ДиалогВыбораФайла при написании кода для веб-клиента. Переход на методы ФайловаяСистемаКлиент позволит вам избежать ошибок блокировки потоков и обеспечит стабильную работу вашего функционала в любой современной ОС.