Асинхронная функция. Записывает пакет отображаемых документов в файл.
Синтаксис
ЗаписатьАсинх(<ИмяФайла>, <ТипФайла>)Полное описание, параметры и ограничения
ПакетОтображаемыхДокументов.ЗаписатьАсинх (RepresentableDocumentBatch.WriteAsync)
ПакетОтображаемыхДокументов (RepresentableDocumentBatch)
ЗаписатьАсинх (WriteAsync)
Доступен, начиная с версии 8.3.18.
Синтаксис:
ЗаписатьАсинх(<ИмяФайла>, <ТипФайла>)
Параметры:
<ИмяФайла> (обязательный)
Тип: Строка.
Содержит полное имя файла, в который нужно записать пакет отображаемых документов.
<ТипФайла> (обязательный)
Тип: ТипФайлаПакетаОтображаемыхДокументов.
Содержит формат файла, в котором будет сохранен пакет отображаемых документов.
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания:
Истина - если запись была инициирована с помощью расширения браузера и пользователь согласился на его получение, то есть запись файла была завершена;
Ложь - если запись была инициирована с помощью расширения браузера, но пользователь не согласился на его получение, то есть запись файла не была завершена;
Неопределено - если запись была инициирована скачиванием файла средствами браузера и неизвестно, был ли файл записан или нет.
Описание:
Асинхронная функция. Записывает пакет отображаемых документов в файл.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
См. также:
ПакетОтображаемыхДокументов, метод НачатьЗапись
ПакетОтображаемыхДокументов, метод Записать
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Дождаться записи PDF перед очисткой временных данных
Ждать отделяет запуск асинхронной записи от её завершения. До завершения кнопка не запускает вторую операцию.
Где и как запускать
Полный модуль собственной управляемой формы; толстый клиент Windows. Временные документы принадлежат только этой форме.
Подготовка
Собственная отдельная конфигурация УчебнаяКонфигурацияСинтаксиса, платформа 8.5.1.1343. Создайте внешнюю обработку с пустой управляемой формой, командой Выполнить и её кнопкой.
Откройте обработку в толстом клиенте Windows. Вставьте полный модуль одного урока. При наличии Асинх используйте асинхронную процедуру из примера, не убирайте Ждать.
Серверная функция создаёт только две собственные формы: Книга / 3 и Ручка / 1. Временное хранилище привязано к УникальныйИдентификатор этой формы, адреса сохраняются в собственном массиве.
Пока выполняется запись, форму не закрывайте. После завершения очищаются только адреса, созданные этим модулем. Файл оставляется для ручной проверки и удаления пользователем.
Запись выбирает новое временное имя на машине клиента. Существующий файл не перезаписывается. Для файла печати используется расширение print: это внутренний файл печати, не PDF и не текстовый отчёт.
Урок печати требует строковые реквизиты УчебныйПринтер и Подтверждение. Введите точное имя собственного тестового устройства и фразу ПЕЧАТАЮ ТОЛЬКО УЧЕБНЫЕ ДАННЫЕ.
При создании руководства печать, сохранение и запуск 1С не выполнялись. Для PDF вручную проверьте обе учебные формы; ненулевой размер файла сам по себе не доказывает содержимое.
Перем УчебныйПакет;
Перем УчебныеАдреса;
Перем Занято;
&НаКлиенте
Асинх Процедура Выполнить(Команда)
Если Занято = Истина Тогда
ВызватьИсключение "Дождитесь завершения собственной предыдущей операции";
КонецЕсли;
Если УчебныеАдреса <> Неопределено Тогда
ВызватьИсключение "Предыдущие учебные данные ещё не освобождены; закройте только учебную форму и откройте заново";
КонецЕсли;
Созданные = СоздатьСобственныйПакет();
УчебныйПакет = Созданные.Пакет;
УчебныеАдреса = Созданные.Адреса;
Занято = Истина;
Попытка
Имя = НовоеСобственноеИмя("pdf");
Сообщить(УчебныйПакет.Состав.Количество() = 2);
Ждать УчебныйПакет.ЗаписатьАсинх(Имя, ТипФайлаПакетаОтображаемыхДокументов.PDF);
ПроверитьСобственныйФайл(Имя);
Исключение
ОшибкаОперации = ОписаниеОшибки();
Занято = Ложь;
ОсвободитьСобственныйПакет();
ВызватьИсключение ОшибкаОперации;
КонецПопытки;
Занято = Ложь;
ОсвободитьСобственныйПакет();
КонецПроцедуры
&НаСервере
Функция СоздатьСобственныйПакет()
Адреса = Новый Массив;
Пакет = Новый ПакетОтображаемыхДокументов;
Пакет.Заголовок = "guide-owned: Книга и Ручка";
Пакет.Вывод = ИспользованиеВывода.Разрешить;
Пакет.КоличествоЭкземпляров = 1;
Для Номер = 1 По 2 Цикл
Документ = Новый ТабличныйДокумент;
Если Номер = 1 Тогда
Название = "Книга";
Количество = "3";
Иначе
Название = "Ручка";
Количество = "1";
КонецЕсли;
Документ.Область(1, 1).Текст = "Только собственный учебный товар";
Документ.Область(2, 1).Текст = Название;
Документ.Область(2, 2).Текст = Количество;
Документ.Область(, 1, , 1).ШиринаКолонки = 30;
Документ.КоличествоЭкземпляров = 7;
Адрес = ПоместитьВоВременноеХранилище(Документ, ЭтаФорма.УникальныйИдентификатор);
Адреса.Добавить(Адрес);
Элемент = Пакет.Состав.Добавить(Адрес);
Элемент.Наименование = Название;
КонецЦикла;
Возврат Новый Структура("Пакет,Адреса", Пакет, Адреса);
КонецФункции
&НаСервере
Процедура УдалитьСобственныеАдреса(Адреса)
Для Каждого Адрес Из Адреса Цикл
УдалитьИзВременногоХранилища(Адрес);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОсвободитьСобственныйПакет()
Если УчебныеАдреса <> Неопределено Тогда
УдалитьСобственныеАдреса(УчебныеАдреса);
УчебныеАдреса = Неопределено;
КонецЕсли;
УчебныйПакет = Неопределено;
КонецПроцедуры
&НаКлиенте
Функция НовоеСобственноеИмя(Расширение)
Имя = ПолучитьИмяВременногоФайла(Расширение);
Проверка = Новый Файл(Имя);
Если Проверка.Существует() Тогда
ВызватьИсключение "Новый путь уже занят; файл не перезаписываем";
КонецЕсли;
Возврат Имя;
КонецФункции
&НаКлиенте
Процедура ПроверитьСобственныйФайл(Имя)
Файл = Новый Файл(Имя);
Если Файл.Существует() Тогда
Сообщить(Файл.Размер() > 0);
Сообщить("Файл появился; вручную проверьте содержимое: " + Имя);
Иначе
Сообщить("По собственному локальному пути файла нет, успешную запись не утверждаем: " + Имя);
КонецЕсли;
КонецПроцедурыРазбор по шагам
Подготовить собственный пакет и установить флаг Занято.
Получить новый путь и вызвать ЗаписатьАсинх с Ждать внутри Асинх Процедура.
Только после ожидания проверять файл. Не трактовать само Обещание как успешное сохранение.
При успехе или исключении снять флаг и освободить собственные временные адреса. Сам файл остаётся для ручной проверки.
Как проверить результат
Состав содержит два элемента; при появлении файла его размер больше нуля.
Пока Ждать не закончился, повторное нажатие получает просьбу дождаться операции. PDF вручную проверяется по двум товарам.
Ожидаемый результат
Практический асинхронный экспорт с управляемым временем жизни пакета.
На что обратить внимание
Удаление адресов сразу после вызова без Ждать может лишить операцию исходных документов.
Не закрывайте форму во время ожидания: её закрытие удаляет привязанное временное хранилище.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.