Как правильно реализовать выбор каталога в веб-клиенте 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Промышленность, строительство и АПК
← На главную

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

Причина возникновения проблемы

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

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

Для выполнения операций с локальными файлами (включая выбор каталога) в веб-клиенте обязательно должно быть установлено расширение браузера «1С:Предприятие». Без него доступ к файловым операциям будет ограничен. Мы должны программно инициировать его подключение. Рассмотрим, как это сделать правильно через НачатьПодключениеРасширенияРаботыСФайлами().


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

Шаг 2: Использование методов БСП для выбора каталога

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

Рассмотрим, как использовать функционал ФайловаяСистемаКлиент. Это значительно упрощает код и делает его поддерживаемым.


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

&НаКлиенте
Процедура ПослеВыбораКаталога(ВыбранныйКаталог, ДопПараметры) Экспорт
    Если ВыбранныйКаталог <> Неопределено Тогда
        Сообщить("Выбран каталог: " + ВыбранныйКаталог);
    КонецЕсли;
КонецПроцедуры

Почему использование БСП — лучший выбор?

  1. Безопасность: методы БСП автоматически обрабатывают исключения и проверяют статус расширения.
  2. Асинхронность: вам не нужно беспокоиться о синхронных вызовах — все методы БСП построены на ОписаниеОповещения.
  3. Совместимость: этот код будет корректно работать как в веб-клиенте, так и в тонком клиенте 1С.

Важные рекомендации при работе в веб-клиенте

При отладке веб-клиента мы часто забываем об инструментах разработчика самого браузера — пригодится инструментарий для разработки и отладки управляемых форм. Если диалоговое окно не открывается, нажмите F12 и перейдите на вкладку Console. Там часто отображаются блокирующие ошибки безопасности или информация о том, что расширение 1С не имеет прав доступа к файловой системе.

Также убедитесь, что в настройках расширения 1С в браузере активированы следующие опции:

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

← На главную