1с диалог выбора файла фильтр несколько расширений

Обновлено: 08.07.2024

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.13.1513.

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

Метод НачатьПомещениеФайлов() больше не требует расширения работы с файлами

Раньше для загрузки нескольких файлов вы могли выбрать один из двух способов: либо загружать каждый файл по отдельности, с помощью метода НачатьПомещениеФайла(), либо загрузить все файлы вместе методом НачатьПомещениеФайлов(). Но последний метод работал только в том случае, если заранее было установлено расширение работы с файлами, что не очень удобно.

Теперь мы «научили» метод НачатьПомещениеФайлов() работать и без расширения. При этом он использует новый «собственный» диалог выбора файлов, который позволяет выбирать сразу несколько файлов. Если расширение работы с файлами установлено, тогда используется диалог выбора файлов операционной системы.

Новый диалог выбора файлов

Мы значительно изменили диалог выбора файлов в веб-клиенте.

001.jpg

Теперь он позволяет выбирать несколько файлов перетаскиванием.

002.jpg

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

003.jpg

Настройка диалога выбора файла

Теперь в методы НачатьПомещениеФайла() и НачатьПомещениеФайлов() вы можете передавать заранее настроенный диалог выбора файлов. Например, вы можете установить ему собственный заголовок, который более точно описывает то, какие файлы может выбирать пользователь.

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Собственный заголовок диалога загрузки файла"; ОбработкаОкончанияЗагрузки = Новый ОписаниеОповещения("Обработчик_Завершения_Загрузки", ЭтотОбъект, Диалог); НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , Диалог, Истина, УникальныйИдентификатор);

Контроль характеристик загружаемых файлов

Теперь, прежде чем загружать файлы на сервер, вы можете проверить их характеристики, например, размер. Если размер превышает допустимые значения, вы можете отменить загрузку.

&НаКлиенте Процедура ВалидацияПередОтправкойФайла(Команда) ОбработкаОкончанияЗагрузки = Новый ОписаниеОповещения("Обработчик_Завершения_Загрузки", ЭтотОбъект); ОбработкаНачалаЗагрузки = Новый ОписаниеОповещения("Обработчик_Начала_Загрузки", ЭтотОбъект); НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , , Истина, УникальныйИдентификатор, ОбработкаНачалаЗагрузки); КонецПроцедуры &НаКлиенте Процедура Обработчик_Начала_Загрузки(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт ОтказОтПомещенияФайла = Ложь; Если ПомещаемыйФайл.Размер() > 5 * 1024 * 1024 Тогда ПоказатьПредупреждение( , "Размер файла " + "(" + ПомещаемыйФайл.Размер() + ") " + ПомещаемыйФайл.Имя + " (" + ПомещаемыйФайл.ИдентификаторФайла + ") превышает 5MB. Загрузка остановлена."); ОтказОтПомещенияФайла = Истина; КонецЕсли; КонецПроцедуры

Перетаскивание файлов на картинку и на таблицу

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

Для вызова стандартного диалога выбора файла или папки Windows в 1С существует специальный объект ДиалогВыбораФайла. У него существует три режима работы:

  • выбор каталога;
  • открытие файла;
  • сохранение файла.

Рассмотрим эти режимы.

Во всех режимах для того, чтобы определить, выбрал ли пользователь файл или каталог (не нажал ли он кнопку Отмена) используется функция Выбрать(). Если была нажата кнопка Отмена, эта функция возвращает Ложь. Эта же функция вызывает появление окна выбора у пользователя.

Диалог выбора каталога в 1С

Следует помнить, что путь к каталогу записывается без последнего слэша. Например, так: c:Папка1Папка2

Диалог открытия файла в 1С

В режиме открытия появляются дополнительные параметры работы диалога:

    Фильтр состоит из двух частей, разделенных символом «|»: строки представления, которая отображается в окне выбора файла, и строки маски. В маске могу использоваться стандартные символы: ? — любой символ, * — любые символы. Можно последовательно перечислить несколько фильтров, разделенных символом «|». Например:

Итак, код вызова диалога открытия одного файла будет выглядеть так:

Код вызова диалога открытия нескольких файлов будет выглядеть так:

Диалог сохранения файла в 1С

Диалог сохранения отличается от диалога открытия тем, что если выбранный файл существует, при сохранении будет задан вопрос, хочет ли пользователь его перезаписать. Также при сохранении не работает возможность множественного выбора файлов. В остальном все работает точно так же:

Рассмотрим как асинхронно (а в управляемых формах необходимо только так) программно обработать выбор пользователем пути к файлу.

Постановка задачи

Предположим, что на форме создан реквизит ПутьКФайлу. Этот реквизит имеет тип Строка и выведен на форму. Пользователь должен указывать в этом поле путь к файлу Excel.

Решение

Для удобства свойство КнопкаВыбора элемента формы установим в значение Да и будем обрабатывать событие НачалоВыбора этого элемента.

В процедуре начала выбора элемента ПутьКФайлу необходимо написать код:

// Отказываемся от стандартной обработки процедуры
СтандартнаяОбработка = Ложь;

Диалог . Показать ( ОповещениеЗавершения );

содержит описание процедуры, которая будет вызвана после закрытия диалога выбора. В этой процедуре должно быть два параметра:

  • ВыбранныеФайлы — массив выбранных имен файлов. Если пользователь отказался от выбора файла, то в параметре будет содержаться Неопределено;
  • ДополнительныеПараметры — произвольное значение, которое указано при создании объекта ОписаниеОповещения в третьем параметре (в нашем примере не задано).

Пример процедуры, которая будет вызвана после закрытия окна выбора файла:

Если ВыбранныеФайлы <> Неопределено Тогда

ПутьКФайлу = ВыбранныеФайлы [ 0 ];

Внимание!

Процедура, указанная в объекте ОписаниеОповещения должна иметь ключевое слово Экспорт.

Приведенный пример можно немного усовершенствовать: передать в третий параметр конструктора ОписаниеОповещения переменную Диалог.

ОповещениеЗавершения = Новый ОписаниеОповещения ( «ВыборФайлаЗавершение» , ЭтотОбъект , Диалог );

Тогда в процедуре ВыборФайлаЗавершение будет доступно немного больше информации: из параметра ДополнительныеПараметры можно будет узнать каталог, в котором хранится выбранный файл, и фильтр, которому соответствует файл.

В конструкторе объекта ДиалогВыбораФайла в параметре указывается для чего будет открыт диалог. Возможные значения системного перечисления РежимДиалогаВыбораФайла:

Приведу еще несколько свойств объекта ДиалогВыбораФайла:

  • Каталог — текущий каталог;
  • ПолноеИмяФайла — начальное полное имя файла. После выбора файла содержит полное имя выбранного файла (кроме множественного выбора и выбора каталога);
  • МножественныйВыбор — флаг возможности выбора нескольких файлов;
  • ПредварительныйПросмотр — флаг необходимости показа окна предварительного просмотра файлов;
  • ПроверятьСуществованиеФайла — флаг необходимости проверки существования выбираемого файла.

Решение средствами БСП

В конфигурациях со втроенной Библиотекой стандартных подсистем можно использовать процедуру

ОбработчикВыбораФайла ( Объект , Знач ИмяСвойства , СтандартнаяОбработка = Ложь, Знач ПараметрыДиалога = Неопределено, ОповещениеЗавершения = Неопределено ) Экспорт

общего модуля ОбменДаннымиКлиент. При помощи этого метода приведенную выше задачу можно решить так:

ОбменДаннымиКлиент . ОбработчикВыбораФайла ( ЭтотОбъект , «ПутьКФайлу» , СтандартнаяОбработка , НастройкиДиалога );

Остались вопросы?
Спросите в комментариях к статье.

Достаточно часто нам требуется получить от пользователя какую-либо информацию — имя файла или каталога, цвет или шрифт. Для всего этого в 1С существуют диалоги. Код, который требуется для вызова диалога, довольно стандартный и мало чем отличается из раза в раз. Собственно именно о том, как вызвать различные диалоги в 1С 8.2 и 8.3 и пойдет речь.

Отмечу, что приведенные ниже примеры подходят для любых конфигураций 1С 8.2, а также для конфигураций 1С 8.3 у которых свойство конфигурации «Режим использования модальности» установлено как «Использовать» либо «Использовать с предупреждениями». Если же Вы имеете дело с конфигурацией 1С 8.3 не использующей модальность, то рекомендую прочесть статью о модальности в 1С.

Выбор каталога в 1С

Выбор файла в 1С

Обращаю Ваше внимание, что несколько масок расширений в одном фильтре должны разделяться знаком — точка с запятой (в синтаксис-помощнике об этом по-моему не написано).

Для вызова стандартного диалога выбора файла или папки Windows в 1С существует специальный объект ДиалогВыбораФайла. У него существует три режима работы:

  • выбор каталога;
  • открытие файла;
  • сохранение файла.

Рассмотрим эти режимы.

Во всех режимах для того, чтобы определить, выбрал ли пользователь файл или каталог (не нажал ли он кнопку Отмена) используется функция Выбрать(). Если была нажата кнопка Отмена, эта функция возвращает Ложь. Эта же функция вызывает появление окна выбора у пользователя.

Диалог выбора каталога в 1С

Следует помнить, что путь к каталогу записывается без последнего слэша. Например, так: c:Папка1Папка2

Диалог открытия файла в 1С

В режиме открытия появляются дополнительные параметры работы диалога:

    Фильтр состоит из двух частей, разделенных символом «|»: строки представления, которая отображается в окне выбора файла, и строки маски. В маске могу использоваться стандартные символы: ? — любой символ, * — любые символы. Можно последовательно перечислить несколько фильтров, разделенных символом «|». Например:

Итак, код вызова диалога открытия одного файла будет выглядеть так:

Код вызова диалога открытия нескольких файлов будет выглядеть так:

Диалог сохранения файла в 1С

Диалог сохранения отличается от диалога открытия тем, что если выбранный файл существует, при сохранении будет задан вопрос, хочет ли пользователь его перезаписать. Также при сохранении не работает возможность множественного выбора файлов. В остальном все работает точно так же:

Достаточно часто нам требуется получить от пользователя какую-либо информацию — имя файла или каталога, цвет или шрифт. Для всего этого в 1С существуют диалоги. Код, который требуется для вызова диалога, довольно стандартный и мало чем отличается из раза в раз. Собственно именно о том, как вызвать различные диалоги в 1С 8.2 и 8.3 и пойдет речь.

Отмечу, что приведенные ниже примеры подходят для любых конфигураций 1С 8.2, а также для конфигураций 1С 8.3 у которых свойство конфигурации «Режим использования модальности» установлено как «Использовать» либо «Использовать с предупреждениями». Если же Вы имеете дело с конфигурацией 1С 8.3 не использующей модальность, то рекомендую прочесть статью о модальности в 1С.

Выбор каталога в 1С

Выбор файла в 1С

Обращаю Ваше внимание, что несколько масок расширений в одном фильтре должны разделяться знаком — точка с запятой (в синтаксис-помощнике об этом по-моему не написано).

Фирма 1С решила отказаться от модальных форм в интерфейсах web и Такси, это значит, что попытка просто сохранить файл через диалог потребует больше усилий чем раньше. В примере ниже надо НА КЛИЕНТЕ просто создать текстовый файл и сохранить его куда укажет пользователь:

// создаем на клиенте текстовый файл
ИмяВременногоФайла = ПолучитьИмяВременногоФайла ( «txt» ) ;
// создаем документ который надо записать
ТД = новый ТекстовыйДокумент ;
ТД . ДобавитьСтроку ( «Некоторый текст» );
ТД . Записать ( ИмяВременногоФайла );
// помещаем файл в хранилище
Адрес = ПоместитьВоВременноеХранилище (новый ДвоичныеДанные ( ИмяВременногоФайла ));
// описание события после выбора файла пользователем
ОписаниеОповещения = Новый ОписаниеОповещения ( «ОбработкаСохраненияФайлов» , ЭтаФорма );
// место хранения файла в 1С
Файл = Новый ОписаниеПередаваемогоФайла (, Адрес );
// создаем перечень файлов
ПолучаемыеФайлы = Новый Массив ;
ПолучаемыеФайлы . Добавить ( Файл );
// создаем диалог сохранения файла
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Сохранение );
ДиалогОткрытияФайла . МножественныйВыбор = Ложь;
// выводим диалог на экран, после выбора файла
// вызовется процедура ОбработкаСохраненияФайлов
НачатьПолучениеФайлов ( ОписаниеОповещения , ПолучаемыеФайлы , ДиалогОткрытияФайла , Истина);

Объект ДиалогВыбораФайла 1C выводит пользователю стандартный диалог Windows для выбора каталога или файла (на открытие/запись). При этом можно указать фильтр расширений, которые можно использовать пользователю.

Например, выбор каталога:
//Открываем стандартный диалог Windows выбора каталога/файла в режиме выбора каталога - ДиалогВыбораФайла 1С
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);

//Если пользователь не нажал кнопку ОТМЕНА в диалоге
Если Диалог.Выбрать() Тогда
ИмяКаталога = Диалог.Каталог;
КонецЕсли;

При выборе каталога в ДиалогВыбораФайла 1С имя каталога возвращается без слэш «\», кроме начала диска, например:
С:\
C:\ИмяКаталога

Например, выбор имени файла на сохранение txt файла в ДиалогВыбораФайла 1С (отличается от режима «выбор файла на открытие» тем, что если выбран существующий файл – будет задан вопрос – действительно ли желаете перезаписать файл?):
//Открываем стандартный диалог Windows выбора каталога/файла в режиме выбора файла на сохранение - ДиалогВыбораФайла 1С
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
//каталог по-умолчанию, можно не указывать
Диалог.Каталог = "C:\";
//фильтр для одного вида файлов, для нескольких – см. следующий пример
Диалог.Фильтр = "Текстовый файл (*.txt)|*.txt|";

//Если пользователь не нажал кнопку ОТМЕНА в диалоге
Если Диалог.Выбрать() Тогда
//Полное имя файла – с учетом «пути к нему» (имени каталога к нему)
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;

При выборе имени файла полное имя файла содержит «путь к нему», например:
C:\ИмяКаталога\ИмяФайла.txt

Например, выбор имени файла на открытие файла Excel:

При выборе имени файла полное имя файла содержит «путь к нему». Если пользователь ввел имя файла без расширения, то будет подставлено расширение, указанное первым в списке из нескольких видов в фильтре, например:
C:\ИмяКаталога\ИмяФайла.xls

Фильтр (например, «Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|») состоит:

Читайте также: