Асинхронная функция. Вызывает диалог выбора файлов. Для работы метода на веб-клиенте, необходимо предварительно подключить расширение работы с файлами.
Синтаксис
ВыбратьАсинх()Полное описание, параметры и ограничения
ДиалогВыбораФайла.ВыбратьАсинх (FileDialog.ChooseAsync)
ДиалогВыбораФайла (FileDialog)
ВыбратьАсинх (ChooseAsync)
Доступен, начиная с версии 8.3.18.
Синтаксис:
ВыбратьАсинх()
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - массив выбранных имен файлов или Неопределено, если выбор не осуществлен.
Описание:
Асинхронная функция. Вызывает диалог выбора файлов.
Для работы метода на веб-клиенте, необходимо предварительно подключить расширение работы с файлами.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
См. также:
ДиалогВыбораФайла, метод Выбрать
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Асинхронно выбрать два учебных текста и проверить весь набор
Ждать получает реальный результат Обещания: массив имён или Неопределено при отмене. Нельзя считать само Обещание массивом или использовать одиночное ПолноеИмяФайла вместо результата.
Где и как запускать
Полный модуль своей управляемой формы внешней обработки. Настольный тонкий клиент Windows 8.5.1.1343; файловая система именно клиента. Запуск и отображение в 1С не проверены.
Подготовка
Работайте в отдельной учебной базе 8.5.1.1343. Создайте внешнюю обработку УчебныйВыборФайла85 с новой управляемой формой; рабочие документы, настройки и формы не нужны.
Сами создайте на компьютере клиента собственный каталог C:\1CLab\FileDialog85. Не используйте существующий чужой каталог, сетевой диск, символическую ссылку или папку с рабочими файлами.
В этом каталоге самостоятельно создайте book.txt с единственной строкой Книга: 3 и pen.txt со строкой Ручка: 1. Сохраните как UTF-8. Это собственные маленькие учебные тексты, не выгрузка клиентских данных.
Для каждого урока используйте отдельную копию формы. Вставьте полный код на уровне модуля. Создайте указанную команду, назначьте её Действие точно указанной процедуре и перетащите команду на форму как кнопку.
Примеры не выполнялись. При будущем ручном запуске первый и второй уроки могут только прочитать два подготовленных текста; третий только проверяет каталог, четвёртый только выбирает имя. Код не записывает и не удаляет файлы, не вызывает сервер, сеть или печать.
Windows-клиент указан намеренно: правила масок, доступность методов и поведение свойств различаются на веб-клиенте, Linux, macOS и мобильных платформах. Этот модуль не переносится туда без проверки.
Команда формы: ВыбратьДваУчебныхТекста → ВыбратьДваУчебныхТекста. Другие обработчики вручную не создавайте.
&НаКлиенте
Асинх Процедура ВыбратьДваУчебныхТекста(Команда)
Каталог = Новый Файл("C:\1CLab\FileDialog85");
Если Не Каталог.Существует() Тогда
Сообщить("Сначала создайте свой учебный каталог и два текста по инструкции");
Возврат;
КонецЕсли;
Если Не Каталог.ЭтоКаталог() Тогда
Сообщить("Учебный путь должен быть собственным каталогом");
Возврат;
КонецЕсли;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите собственные book.txt и pen.txt";
Диалог.Каталог = "C:\1CLab\FileDialog85";
Диалог.МножественныйВыбор = Истина;
Диалог.Фильтр = "Учебные тексты (*.txt)|*.txt";
Диалог.ПроверятьСуществованиеФайла = Истина;
Имена = Ждать Диалог.ВыбратьАсинх();
Если Имена = Неопределено Тогда
Сообщить("Множественный выбор отменён; чтение не выполнялось");
Возврат;
КонецЕсли;
Если Имена.Количество() < 1 Или Имена.Количество() > 2 Тогда
Сообщить("Выберите один или два собственных учебных текста");
Возврат;
КонецЕсли;
Для Каждого ИмяФайла Из Имена Цикл
Если ИмяФайла <> "C:\1CLab\FileDialog85\book.txt"
И ИмяФайла <> "C:\1CLab\FileDialog85\pen.txt" Тогда
Сообщить("Есть чужое имя: весь выбранный набор отклонён до чтения");
Возврат;
КонецЕсли;
КонецЦикла;
Сообщить("Собственных выбранных файлов: " + Строка(Имена.Количество()));
Для Каждого ИмяФайла Из Имена Цикл
ПрочитатьСвойТекст(ИмяФайла);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьСвойТекст(ИмяФайла)
Если ИмяФайла = "C:\1CLab\FileDialog85\book.txt" Тогда
ОжидаемыйТекст = "Книга: 3";
ИначеЕсли ИмяФайла = "C:\1CLab\FileDialog85\pen.txt" Тогда
ОжидаемыйТекст = "Ручка: 1";
Иначе
Сообщить("Этот урок не читает файлы вне двух собственных учебных текстов");
Возврат;
КонецЕсли;
ФайлНаДиске = Новый Файл(ИмяФайла);
Если Не ФайлНаДиске.Существует() Тогда
Сообщить("Выбранный учебный файл уже отсутствует; восстановите свой образец");
Возврат;
КонецЕсли;
Если ФайлНаДиске.ЭтоКаталог() Тогда
Сообщить("Ожидался свой текстовый файл, а не каталог");
Возврат;
КонецЕсли;
Текст = Новый ТекстовыйДокумент;
Попытка
Текст.Прочитать(ИмяФайла, "UTF-8");
Исключение
Сообщить("Не удалось прочитать собственный образец; проверьте его наличие и права клиента");
Возврат;
КонецПопытки;
СтрокаОбразца = СтрЗаменить(СтрЗаменить(Текст.ПолучитьТекст(), Символы.ВК, ""), Символы.ПС, "");
Сообщить(СтрокаОбразца);
Сообщить(СтрокаОбразца = ОжидаемыйТекст);
КонецПроцедуры
Разбор по шагам
Асинх стоит в объявлении процедуры. Ждать применяется непосредственно к ВыбратьАсинх, а не к случайному массиву.
Отмена проверяется до Количество и перебора. Урок допускает один или два собственных файла, а не требует выдуманного фиксированного результата.
Первый цикл проверяет все имена и не читает содержимое. Если хотя бы одно имя вне двух точных образцов, весь набор отклоняется.
Второй цикл читает допущенные тексты. Порядок выбора не гарантируется, поэтому строки Книга и Ручка могут выводиться в любом порядке.
Ошибка чтения отдельного собственного файла не маскируется: помощник сообщает её. Этот урок не является атомарным импортом или записью набора в базу.
Как проверить результат
Выберите два образца: количество 2 и для каждого своя строка с Истина. Порядок строк произвольный.
Выберите только книгу: количество 1, Книга: 3, Истина. Отмена: только сообщение отмены.
Добавьте в выбор свой третий файл с другим именем: набор отклонён до любых вызовов ПрочитатьСвойТекст.
Ожидаемый результат
Проверяется весь выбранный набор до чтения; результат обещания не спутан с состоянием одиночного диалога.
На что обратить внимание
МножественныйВыбор не используется для Сохранение или ВыборКаталога.
Проверка имён и маска не заменяют проверки содержимого в настоящем импорте.
Настольные пути клиента не являются путями сервера; этот код не загружает файлы на сервер.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Выбрать имя отчёта и отделить диалог от записи файла
Режим Сохранение и Расширение помогают выбрать имя назначения. В уроке намеренно нет Записать: существовавший файл не перезаписывается, а отсутствие нового проверяется отдельно.
Где и как запускать
Полный модуль своей управляемой формы внешней обработки. Настольный тонкий клиент Windows 8.5.1.1343; файловая система именно клиента. Запуск и отображение в 1С не проверены.
Подготовка
Работайте в отдельной учебной базе 8.5.1.1343. Создайте внешнюю обработку УчебныйВыборФайла85 с новой управляемой формой; рабочие документы, настройки и формы не нужны.
Сами создайте на компьютере клиента собственный каталог C:\1CLab\FileDialog85. Не используйте существующий чужой каталог, сетевой диск, символическую ссылку или папку с рабочими файлами.
В этом каталоге самостоятельно создайте book.txt с единственной строкой Книга: 3 и pen.txt со строкой Ручка: 1. Сохраните как UTF-8. Это собственные маленькие учебные тексты, не выгрузка клиентских данных.
Для каждого урока используйте отдельную копию формы. Вставьте полный код на уровне модуля. Создайте указанную команду, назначьте её Действие точно указанной процедуре и перетащите команду на форму как кнопку.
Примеры не выполнялись. При будущем ручном запуске первый и второй уроки могут только прочитать два подготовленных текста; третий только проверяет каталог, четвёртый только выбирает имя. Код не записывает и не удаляет файлы, не вызывает сервер, сеть или печать.
Windows-клиент указан намеренно: правила масок, доступность методов и поведение свойств различаются на веб-клиенте, Linux, macOS и мобильных платформах. Этот модуль не переносится туда без проверки.
Команда формы: ВыбратьИмяУчебногоОтчета → ВыбратьИмяУчебногоОтчета. Другие обработчики вручную не создавайте.
&НаКлиенте
Асинх Процедура ВыбратьИмяУчебногоОтчета(Команда)
Каталог = Новый Файл("C:\1CLab\FileDialog85");
Если Не Каталог.Существует() Тогда
Сообщить("Сначала создайте свой учебный каталог и два текста по инструкции");
Возврат;
КонецЕсли;
Если Не Каталог.ЭтоКаталог() Тогда
Сообщить("Учебный путь должен быть собственным каталогом");
Возврат;
КонецЕсли;
ИмяОтчета = "C:\1CLab\FileDialog85\report-preview.txt";
ФайлОтчета = Новый Файл(ИмяОтчета);
Если ФайлОтчета.Существует() Тогда
Сообщить("Этот путь уже существует; урок не предлагает перезапись и не удаляет его");
Возврат;
КонецЕсли;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Только выбрать имя: учебный код ничего не записывает";
Диалог.Каталог = "C:\1CLab\FileDialog85";
Диалог.ПолноеИмяФайла = ИмяОтчета;
Диалог.Фильтр = "Текстовый отчёт (*.txt)|*.txt";
Диалог.Расширение = "txt";
Диалог.ПроверятьСуществованиеФайла = Ложь;
Имена = Ждать Диалог.ВыбратьАсинх();
Если Имена = Неопределено Тогда
Сообщить("Выбор имени отменён; записи не было");
Возврат;
КонецЕсли;
Если Имена.Количество() <> 1 Тогда
Сообщить("Ожидалось одно имя назначения");
Возврат;
КонецЕсли;
Если Диалог.ПолноеИмяФайла <> ИмяОтчета Или Имена[0] <> ИмяОтчета Тогда
Сообщить("Выбрано другое имя; этот урок его не использует");
Возврат;
КонецЕсли;
Сообщить(Диалог.Режим = РежимДиалогаВыбораФайла.Сохранение);
Сообщить(Диалог.Расширение = "txt");
Сообщить("Имя назначения согласовано; записи файла в коде нет");
Сообщить(Не ФайлОтчета.Существует());
КонецПроцедуры
Разбор по шагам
Сначала проверяем точное собственное имя report-preview.txt. Если оно уже существует, диалог вообще не показываем и не предлагаем удалить файл.
Режим Сохранение задаётся конструктором, readonly-свойство не присваивается. Расширение txt — расширение по умолчанию, не команда записи и не смена типа содержимого.
Ждать возвращает результат выбора. Отмена проверяется до обращения к массиву; количество — до Имена[0].
Сопоставляем и одиночное ПолноеИмяФайла, и имя результата с точным собственным назначением. Для другого имени дальнейшего использования нет.
Проверка Существует после выбора показывает фактическое состояние. Если файл появился из-за внешнего действия, последняя проверка Ложь: урок не объявляет это своей записью и не удаляет его.
Как проверить результат
При исходно отсутствующем имени и выборе report-preview.txt: Истина режима, Истина расширения, сообщение согласования и Истина отсутствия файла.
Отмена: сообщение отмены. Если путь уже существует: сообщение до показа диалога, существующий файл остаётся.
Проверьте свой каталог вручную: у кода нет вызова записи. Не принимайте успешный выбор имени за созданный отчёт.
Ожидаемый результат
Новичок видит границу между выбором назначения и отдельной операцией записи, которую этот урок не выполняет.
На что обратить внимание
Согласование имени не гарантирует право записи, свободное место или отсутствие файла в момент будущей записи.
Для настоящего отчёта нужна отдельная реализация безопасной записи; добавлять её в этот урок не требуется.
МножественныйВыбор в режиме сохранения не применяется. Урок не притворяется сохранением нескольких файлов.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.