При разработке под веб-клиент 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда настройка свойства Фильтр у объекта ДиалогВыбораФайла не дает ожидаемого результата. В настольном клиенте (толстом или тонком) пользователь видит ограниченный список расширений, тогда как в браузере «видны» все файлы, несмотря на программно заданный фильтр. Давайте разберемся, почему это происходит и как обеспечить корректную работу вашего приложения.
Важно понимать, что веб-клиент 1С работает внутри песочницы браузера. Когда мы вызываем метод НачатьПомещениеФайла или создаем ДиалогВыбораФайла, браузер транслирует запрос к операционной системе. В отличие от полноценного клиентского приложения, браузеры придерживаются строгих политик безопасности и не всегда корректно передают или интерпретируют атрибуты фильтрации файловой системы.
Разное поведение в Chrome, Firefox или Edge объясняется тем, что каждый из них по-своему реализует системные диалоги выбора файлов. В современных версиях платформы 1С это ограничение считается архитектурной особенностью взаимодействия веб-технологий и ОС.
Поскольку мы не можем гарантировать жесткую фильтрацию на уровне диалогового окна, наиболее надежным способом обеспечения чистоты данных является программная проверка расширения файла непосредственно в процедуре-обработчике. Это позволит вам контролировать тип загружаемых файлов независимо от того, какие возможности предоставляет браузер.
Рассмотрим, как правильно реализовать проверку:
Пример логики проверки:
// В обработчике завершения загрузки файла
Процедура ПослеВыбораФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
Если Результат Тогда
РазрешенныеРасширения = Новый Массив;
РазрешенныеРасширения.Добавить("txt");
РазрешенныеРасширения.Добавить("mxl");
РасширениеФайла = СтрПолучитьСтроку(СтрРазделить(ВыбранноеИмяФайла, "."), СтрЧислоСтрок(СтрРазделить(ВыбранноеИмяФайла, ".")));
Если НЕ РазрешенныеРасширения.Найти(НРег(РасширениеФайла)) <> Неопределено Тогда
Предупреждение("Файл выбранного формата не поддерживается!");
Возврат;
КонецЕсли;
// Продолжаем работу с файлом
КонецЕсли;
КонецПроцедуры
Метод НачатьПомещениеФайла в текущих версиях платформы 1С (начиная с 8.3.15+) объявлен как устаревший. Для разработки новых функциональных возможностей рекомендуется переходить на более современные методы, предоставляемые платформой для работы с файлами в управляемом приложении.
Рассмотрим работу с НачатьПомещениеФайлаНаСервер. Данный метод более адаптирован под современные стандарты веб-разработки 1С. Хотя он также не решает проблему «жесткого» фильтра в браузере на 100%, использование актуальных методов позволяет платформе более корректно обрабатывать контекст вызова и взаимодействие с сервером.
Рекомендуем придерживаться следующего алгоритма при проектировании диалога выбора файлов:
ОписаниеОповещения.Следуя этим рекомендациям, вы сможете сделать работу с файлами в веб-клиенте надежной и предсказуемой, несмотря на имеющиеся технические ограничения браузеров.