Почему не работает фильтр в диалоге выбора файла в веб-клиенте 1С и как это исправить?

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

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

Техническая причина проблемы

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

Разное поведение в Chrome, Firefox или Edge объясняется тем, что каждый из них по-своему реализует системные диалоги выбора файлов. В современных версиях платформы 1С это ограничение считается архитектурной особенностью взаимодействия веб-технологий и ОС.

Решение проблемы: программная валидация

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

Рассмотрим, как правильно реализовать проверку:

  1. В процедуре, которая вызывается после выбора файла (в описании оповещения), получите имя файла.
  2. Проанализируйте расширение строки пути к файлу.
  3. Если расширение не входит в список разрешенных, оповестите пользователя и прервите процесс загрузки.

Пример логики проверки:


// В обработчике завершения загрузки файла
Процедура ПослеВыбораФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
    Если Результат Тогда
        РазрешенныеРасширения = Новый Массив;
        РазрешенныеРасширения.Добавить("txt");
        РазрешенныеРасширения.Добавить("mxl");
        
        РасширениеФайла = СтрПолучитьСтроку(СтрРазделить(ВыбранноеИмяФайла, "."), СтрЧислоСтрок(СтрРазделить(ВыбранноеИмяФайла, ".")));
        
        Если НЕ РазрешенныеРасширения.Найти(НРег(РасширениеФайла)) <> Неопределено Тогда
            Предупреждение("Файл выбранного формата не поддерживается!");
            Возврат;
        КонецЕсли;
        
        // Продолжаем работу с файлом
    КонецЕсли;
КонецПроцедуры

Использование современных механизмов платформы

Метод НачатьПомещениеФайла в текущих версиях платформы 1С (начиная с 8.3.15+) объявлен как устаревший. Для разработки новых функциональных возможностей рекомендуется переходить на более современные методы, предоставляемые платформой для работы с файлами в управляемом приложении.

Рассмотрим работу с НачатьПомещениеФайлаНаСервер. Данный метод более адаптирован под современные стандарты веб-разработки 1С. Хотя он также не решает проблему «жесткого» фильтра в браузере на 100%, использование актуальных методов позволяет платформе более корректно обрабатывать контекст вызова и взаимодействие с сервером.

Рекомендуем придерживаться следующего алгоритма при проектировании диалога выбора файлов:

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

← На главную