ИнициализироватьАсинх возвращает обещание с объектом Файл. Сам учебный файл создан ранее потоком: инициализация карточки не записывает ABC123 повторно.
Где и как запускать
Полный модуль пустой управляемой формы учебной EPF; клиент Windows с разрешённым доступом к своим временным файлам.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Файл создаётся на компьютере клиента Windows во временном каталоге. Веб-клиент и сервер для данного модуля не используйте.
Требуется разрешённый в учебной базе доступ к локальной файловой системе. Не отключайте профиль безопасности рабочей базы ради запуска.
Создаётся только собственный временный файл с режимом СоздатьНовый. После ожидания операций ресурсы закрываются, точное собственное имя удаляется.
Файл содержит только собственную ASCII-строку ABC123 (6 байтов без BOM). Поток записи закрывается перед чтением/изменением атрибутов.
Все файлы примера создаются заново. Скрытость/readonly при очистке снимаются только у собственного файла после закрытия, затем точное имя удаляется.
Не заменяйте временное имя путём конфигурации, базы, документа или загруженного вами архива. Атрибуты и время меняются только у учебного файла.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
ИмяФайла = ПолучитьИмяВременногоФайла("bin");
УчебныйФайл = Новый Файл(ИмяФайла);
Если УчебныйФайл.Существует() Тогда
ВызватьИсключение "Временное имя уже занято: чужой файл не открываем";
КонецЕсли;
Поток = Неопределено;
Вид = Неопределено;
Копия = Неопределено;
СозданСвойФайл = Ложь;
Попытка
Поток = Новый ФайловыйПоток(ИмяФайла, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
СозданСвойФайл = Истина;
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
Поток.Записать(Буфер, 0, Буфер.Размер);
Поток.Закрыть();
Поток = Неопределено;
Карточка = Ждать УчебныйФайл.ИнициализироватьАсинх(ИмяФайла);
Если ТипЗнч(Карточка) <> Тип("Файл") Тогда
ВызватьИсключение "Ожидалась инициализированная карточка Файл";
КонецЕсли;
Сообщить(Карточка.ПолноеИмя = ИмяФайла);
Существует = Ждать Карточка.СуществуетАсинх();
Размер = Ждать Карточка.РазмерАсинх();
Сообщить(Существует);
Сообщить(Размер = 6);
Исключение
Если Вид <> Неопределено Тогда
Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
Копия.Закрыть();
КонецЕсли;
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
УчебныйФайл.УстановитьТолькоЧтение(Ложь);
УчебныйФайл.УстановитьНевидимость(Ложь);
КонецЕсли;
Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если Вид <> Неопределено Тогда
Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
Копия.Закрыть();
КонецЕсли;
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
УчебныйФайл.УстановитьТолькоЧтение(Ложь);
УчебныйФайл.УстановитьНевидимость(Ложь);
КонецЕсли;
Если СозданСвойФайл Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
Сообщить(Не УчебныйФайл.Существует());
КонецПроцедурыРазбор по шагам
Перед вызовом уже существует собственный шестибайтный файл с закрытым потоком записи.
Ждать извлекает результат типа Файл из обещания; тип проверяем до ПолноеИмя.
Повторная инициализация тем же своим именем показывает результат API, не перенос содержимого и не создание второго файла.
Проверки существования и размера также ожидаются. Без Ждать это были бы обещания, не конечные значения.
Как проверить результат
Три сравнения Истина: правильное имя, существование и размер 6.
Возвращённая Карточка не является файловым потоком; метод не создал новые данные.
Последнее сравнение Истина: собственный временный файл удалён после снятия readonly/скрытости.
Ожидаемый результат
Получен типизированный результат асинхронной инициализации карточки собственного файла.
На что обратить внимание
Не называйте ИнициализироватьАсинх записью файла: это инициализация объекта Файл.
Мобильные content:-пути и веб-клиент имеют отдельную подготовку; данный пример только Windows.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.