В клиентских формах нередко требуется показать пользователю диалог выбора файла и затем прочитать выбранный файл. Для сохранения асинхронности при разработке интерфейса удобно применять асинхронные методы вместе с оператором Ждать и контейнером «Обещание».
Ниже приведён пример для демонстрации: пользователь выбирает файл, затем содержимое текста файла читается и помещается в реквизит формы "СодержимоеВФайле".
&НаКлиенте
Асинх Процедура ВыбратьФайлИПоказатьСодержимое(Команда)
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр = "Текстовый документ (*.txt)|*.txt";
Обещание = ДиалогВыбора.ВыбратьАсинх();
ВыбранныеВДиалогеФайлы = Ждать Обещание;
Если ВыбранныеВДиалогеФайлы = Неопределено Тогда
Возврат;
Конецесли;
ПутьКВыбранномуФайлу = ВыбранныеВДиалогеФайлы[0];
ТекстовыйДок = Новый ТекстовыйДокумент;
Обещание = ТекстовыйДок.ПрочитатьАсинх(ПутьКВыбранномуФайлу, КодировкаТекста.UTF8);
РезультатЧтения = Ждать Обещание;
СодержимоеВФайле = ТекстовыйДок.ПолучитьТекст();
КонецПроцедуры
Для показа формы выбора файла используется метод "ВыбратьАсинх()", который после выбора возвращает контейнер типа "Обещание". С помощью Ждать система ждет получение обещания и, если оно заполнено, получает путь к файлу. Затем, используя этот путь и метод "ПрочитатьАсинх()", ждем снова контейнер типа "Обещание" и из него получаем результат чтения, который используем по своему усмотрению, в данном случае помещаем текст из него в реквизит формы.
Функция "ВыбратьФайлИПоказатьСодержимое" привязана к команде формы.
Код остаётся линейным (сверху вниз), но выполнение приостанавливается на Ждать до завершения операции, не блокируя пользовательский интерфейс.
Применение модификатора Асинх у функции и методов объектов с "Асинх" снижает объём кода по сравнению с реализацией через отдельные процедуры-обработчики завершения и упрощает сопровождение.
Пример реализован в приложенной обработке.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.15.117
Вступайте в нашу телеграмм-группу Инфостарт
