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

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

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

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

Решение

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

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

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора ( Элемент , ДанныеВыбора , СтандартнаяОбработка )

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

// Создаем диалог выбора файла и указываем для чего он будет использоваться
Диалог = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Открытие );
// Задаем фильтр доступных расширений файлов для выбора
Диалог . Фильтр = НСтр ( «ru=’Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx’» );
// Задаем текст заголовка окна выбора
Диалог . Заголовок = НСтр ( «ru=’Выберите файл Excel’» );
// Создаем объект ОписаниеОповещения, который будет передан в метод Показать
ОповещениеЗавершения = Новый ОписаниеОповещения ( «ВыборФайлаЗавершение» , ЭтотОбъект );
// Открываем окно выбора файла
Диалог . Показать ( ОповещениеЗавершения );

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

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

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

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

&НаКлиенте
Процедура ВыборФайлаЗавершение ( ВыбранныеФайлы , ДополнительныеПараметры ) Экспорт

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

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

Внимание!

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора ( Элемент , ДанныеВыбора , СтандартнаяОбработка )

НастройкиДиалога = Новый Структура ;
НастройкиДиалога . Вставить ( «Заголовок» , НСтр ( «ru=’Выберите файл Excel’» ));
НастройкиДиалога . Вставить ( «Фильтр» , НСтр ( «ru=’Книга Excel (*.xlsb)|*.xlsb|Книга Excel 2007 (*.xlsx)|*.xlsx|Книга Excel 97 (*.xls)|*.xls’» ));

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

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

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

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

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

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

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

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

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

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

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

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

  • Документ Excel (*.xls, *.xlsx) — произвольная строка для пользователя
  • |*.xls;*.xlsx|

— собственно фильтр, «*» означает любое имя файла, через точку указывается возможное расширение, через «;» можно указать несколько расширений.

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

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

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

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

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: