Диалог выбора файла в 1С 8.3

Курс

Диалог выбора файла

При разработке различных обработок для обмена данными часто приходится на форме размещать строковый реквизит для указания пути к файлу. Чтобы не заполнять путь к файлу вручную можно воспользоваться следующим методом:

У элемента формы установить свойство Кнопка выбора = Да:

В результате у элемента формы появится кнопка с тремя точками для выбора значения:

Чтобы переопределить действие при нажатии на данную кнопку нужно добавить у элемента формы обработчик события НачалоВыбора:

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

Объект ДиалогВыбораФайла поддерживает 3 режима:

  • Выбор файла для открытия
  • Выбор файла для сохранения
  • Выбор каталога

Режим передается параметром в конструктор:

Для открытия диалогового окна с выбором файла или каталога нужно вызвать метод Показать, в который параметром нужно передать описание оповещения с именем процедуры, которая будет вызвана после выбора файла/каталога (или при отказе от выбора):

Так выглядит диалог выбора файла для открытия:

Диалоги выбора файла для сохранения и выбора каталога выглядят почти также.

Процедура, которая была указана в описании оповещения должна иметь 2 параметра: массив выбранных файлов и произвольный дополнительный параметр. Массив будет содержать в себе строки с полным путем к выбранным файлам или каталогам. Если в диалоге выбора отказаться от выбора, то первый параметр будет равен Неопределено.

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

В массиве ВыбранныеФайлы будет только одно значение, его мы и помещаем в реквизит формы:

Объект ДиалогВыбораФайла доступен только на клиенте.

ПолноеИмяФайла и Каталог

У объекта ДиалогВыбораФайла есть свойство ПолноеИмяФайла, в котором можно указать имя файла, которое будет использоваться по умолчанию при открытии диалога:

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

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

В режиме выбора каталога свойство Каталог также определяет выбранный по умолчанию каталог.

Фильтр

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

Например фильтр для выбора только текстовых файлов:

Фильтр для Excel файлов:

В результате при выборе файла будет применен фильтр. Сам фильтр можно увидеть в правом нижнем углу:

Через точку с запятой можно указать несколько расширений:

При необходимости можно указать несколько фильтров. Между собой фильтры разделяются вертикальной чертой |:

В окне выбора файла можно выбрать нужный фильтр:

По умолчанию применяется первый фильтр, но с помощью свойства ИндексФильтра это можно изменить. Тут нужно указать индекс фильтра, который будет применен при открытии окна с выбором файла. Индексация начинается с нуля:

Для нашего примера 0 — это текстовые файлы, 1 — файлы Excel.

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

Множественный выбор

По умолчанию можно выбрать только один файл. Однако если для свойства МножественныйВыбор указать значение Истина, то можно выбрать сразу несколько файлов (удерживая нажатым shift или ctrl):

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

Множественный выбор работает только в режиме выбора файла для открытия.

Прочие свойства

С помощью свойства Заголовок можно изменить заголовок диалогового окна:

При выборе файла можно вручную ввести произвольное имя файла и выбрать его:

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

Чтобы при выборе файла выполнялась проверка существования выбранного файла используется свойство ПроверятьСуществованиеФайла. Если оно равно Истина, то нельзя будет ввести имя файла, которого не существует:

В режиме выбора каталога свойство ПроверятьСуществованиеФайла игнорируется.

Если выбирать файл не для открытия, а для сохранения, то в этом случае его может не существовать. Он будет создан в момент записи в него, например при записи сообщения обмена в XML формате. Но в этом случае при выборе файла нужно вводить его имя вместе с расширением, иначе файл так и будет записан на диск без расширения:

В этом случае можно использовать свойство Расширение, в котором нужно указать расширение, автоматически добавляемое к имени файлу:

Если выбрать файл с расширением, то свойство Расширение будет проигнорировано.

Примеры

Пример выбора файла для открытия:

Пример выбора файла для сохранения:

Пример выбора каталога:

Диалог выбора файла при использовании модальности

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

При выборе каталога путь к выбранному каталогу будет в свойстве Каталог:

При множественном выборе массив путей выбранных файлов будет находиться в свойстве ВыбранныеФайлы:

Использование модальности можно разрешить в свойствах конфигурации:

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

Асинхронный выбор

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

Также нужно не забыть добавить Асинх у процедуры, где используется обещание.

Преимущество данного способа в том, что весь код расположен в рамках одной процедуры.


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

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

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok