ПакетОтображаемыхДокументов.НачатьЗапись

Методы · BeginWriting

Вызывает начало записи пакета отображаемых документов в файл.

Синтаксис

НачатьЗапись(<ОписаниеОповещения>, <ИмяФайла>, <ТипФайла>)
Полное описание, параметры и ограничения

ПакетОтображаемыхДокументов.НачатьЗапись (RepresentableDocumentBatch.BeginWriting)

ПакетОтображаемыхДокументов (RepresentableDocumentBatch)

НачатьЗапись (BeginWriting)

Доступен, начиная с версии 8.3.12.

Синтаксис:
НачатьЗапись(<ОписаниеОповещения>, <ИмяФайла>, <ТипФайла>)
Параметры:

<ОписаниеОповещения> (необязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения записи файла со следующими параметрами:
<Результат> - результат операции:
Истина, если запись была инициирована с помощью расширений для браузера и пользователь согласился на его получение, то есть запись файла была завершена;

Ложь, если запись была инициирована с помощью расширений для браузера, но пользователь не согласился на его получение, то есть запись файла не была завершена;

Неопределено, если запись была инициирована скачиванием файла средствами браузера и неизвестно, был ли файл записан или нет;

<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Если параметр не указан или имеет тип Неопределено, то по завершении никакая процедура вызвана не будет.

<ИмяФайла> (обязательный)
Тип: Строка.
Содержит полное имя файла, в который нужно записать пакет отображаемых документов.

<ТипФайла> (обязательный)
Тип: ТипФайлаПакетаОтображаемыхДокументов.
Содержит формат файла, в котором будет сохранен пакет отображаемых документов.
Описание:

Вызывает начало записи пакета отображаемых документов в файл.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

См. также:
ПакетОтображаемыхДокументов, метод Записать
ПакетОтображаемыхДокументов, метод ЗаписатьАсинх

Использование в версии:

Доступен, начиная с версии 8.3.12.

Описание изменено в версии 8.3.18.

Методическая информация

Практические примеры

Обработать завершение двух видов записи пакета

Сначала PDF, затем отдельным запуском внутренний файл печати. Обратный вызов различает Истина, Ложь и Неопределено.

Где и как запускать

Полный модуль собственной управляемой формы; толстый клиент Windows. Временные документы принадлежат только этой форме.

Подготовка

  1. Собственная отдельная конфигурация УчебнаяКонфигурацияСинтаксиса, платформа 8.5.1.1343. Создайте внешнюю обработку с пустой управляемой формой, командой Выполнить и её кнопкой.

  2. Откройте обработку в толстом клиенте Windows. Вставьте полный модуль одного урока. При наличии Асинх используйте асинхронную процедуру из примера, не убирайте Ждать.

  3. Серверная функция создаёт только две собственные формы: Книга / 3 и Ручка / 1. Временное хранилище привязано к УникальныйИдентификатор этой формы, адреса сохраняются в собственном массиве.

  4. Пока выполняется запись, форму не закрывайте. После завершения очищаются только адреса, созданные этим модулем. Файл оставляется для ручной проверки и удаления пользователем.

  5. Запись выбирает новое временное имя на машине клиента. Существующий файл не перезаписывается. Для файла печати используется расширение print: это внутренний файл печати, не PDF и не текстовый отчёт.

  6. Урок печати требует строковые реквизиты УчебныйПринтер и Подтверждение. Введите точное имя собственного тестового устройства и фразу ПЕЧАТАЮ ТОЛЬКО УЧЕБНЫЕ ДАННЫЕ.

  7. При создании руководства печать, сохранение и запуск 1С не выполнялись. Для PDF вручную проверьте обе учебные формы; ненулевой размер файла сам по себе не доказывает содержимое.

Перем УчебныйПакет;
Перем УчебныеАдреса;
Перем Занято;

&НаКлиенте
Процедура Выполнить(Команда)
    Если Занято = Истина Тогда
        ВызватьИсключение "Дождитесь завершения собственной предыдущей операции";
    КонецЕсли;
    Если УчебныеАдреса <> Неопределено Тогда
        ВызватьИсключение "Предыдущие учебные данные ещё не освобождены; закройте только учебную форму и откройте заново";
    КонецЕсли;
    Созданные = СоздатьСобственныйПакет();
    УчебныйПакет = Созданные.Пакет;
    УчебныеАдреса = Созданные.Адреса;
    Занято = Истина;
    ФайлДляПечати = Ложь;
    Попытка
        Если ФайлДляПечати Тогда
            Имя = НовоеСобственноеИмя("print");
        Иначе
            Имя = НовоеСобственноеИмя("pdf");
        КонецЕсли;
        Состояние = Новый Структура("Маркер,Путь", "guide-owned-package", Имя);
        Оповещение = Новый ОписаниеОповещения("УчебныйПакетЗаписан", ЭтотОбъект, Состояние,
            "УчебныйПакетОшибка", ЭтотОбъект);
        Если ФайлДляПечати Тогда
            УчебныйПакет.НачатьЗаписьФайлаДляПечати(Оповещение, Имя);
        Иначе
            УчебныйПакет.НачатьЗапись(Оповещение, Имя, ТипФайлаПакетаОтображаемыхДокументов.PDF);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка начала записи: " + ОписаниеОшибки());
        Сообщить("При неопределённом состоянии начала не удаляем адреса автоматически; закрытие учебной формы освободит её хранилище.");
        ВызватьИсключение;
    КонецПопытки;
    Сообщить("Операция началась. Результат смотрите в обратном вызове, форму пока не закрывайте.");
КонецПроцедуры

&НаКлиенте
Процедура УчебныйПакетЗаписан(Результат, Состояние) Экспорт
    Если Состояние.Маркер <> "guide-owned-package" Тогда
        ВызватьИсключение "Неизвестный учебный обратный вызов";
    КонецЕсли;
    Если Результат = Истина Тогда
        Сообщить("Запись подтверждена обратным вызовом.");
    ИначеЕсли Результат = Ложь Тогда
        Сообщить("Обратный вызов сообщил, что запись не завершена.");
    ИначеЕсли Результат = Неопределено Тогда
        Сообщить("Результат неизвестен; скачивание браузером ещё не доказывает получения файла.");
    Иначе
        ВызватьИсключение "Неожиданный результат записи";
    КонецЕсли;
    Занято = Ложь;
    ПроверитьСобственныйФайл(Состояние.Путь);
    ОсвободитьСобственныйПакет();
КонецПроцедуры

&НаКлиенте
Процедура УчебныйПакетОшибка(ИнформацияОбОшибке, Состояние, СтандартнаяОбработка) Экспорт
    СтандартнаяОбработка = Истина;
    Занято = Ложь;
    Сообщить("Ошибка учебного пакета: " + ИнформацияОбОшибке.Описание);
    Сообщить("Только собственный путь для проверки: " + Состояние.Путь);
    ОсвободитьСобственныйПакет();
КонецПроцедуры

&НаСервере
Функция СоздатьСобственныйПакет()
    Адреса = Новый Массив;
    Пакет = Новый ПакетОтображаемыхДокументов;
    Пакет.Заголовок = "guide-owned: Книга и Ручка";
    Пакет.Вывод = ИспользованиеВывода.Разрешить;
    Пакет.КоличествоЭкземпляров = 1;
    Для Номер = 1 По 2 Цикл
        Документ = Новый ТабличныйДокумент;
        Если Номер = 1 Тогда
            Название = "Книга";
            Количество = "3";
        Иначе
            Название = "Ручка";
            Количество = "1";
        КонецЕсли;
        Документ.Область(1, 1).Текст = "Только собственный учебный товар";
        Документ.Область(2, 1).Текст = Название;
        Документ.Область(2, 2).Текст = Количество;
        Документ.Область(, 1, , 1).ШиринаКолонки = 30;
        Документ.КоличествоЭкземпляров = 7;
        Адрес = ПоместитьВоВременноеХранилище(Документ, ЭтаФорма.УникальныйИдентификатор);
        Адреса.Добавить(Адрес);
        Элемент = Пакет.Состав.Добавить(Адрес);
        Элемент.Наименование = Название;
    КонецЦикла;
    Возврат Новый Структура("Пакет,Адреса", Пакет, Адреса);
КонецФункции

&НаСервере
Процедура УдалитьСобственныеАдреса(Адреса)
    Для Каждого Адрес Из Адреса Цикл
        УдалитьИзВременногоХранилища(Адрес);
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ОсвободитьСобственныйПакет()
    Если УчебныеАдреса <> Неопределено Тогда
        УдалитьСобственныеАдреса(УчебныеАдреса);
        УчебныеАдреса = Неопределено;
    КонецЕсли;
    УчебныйПакет = Неопределено;
КонецПроцедуры

&НаКлиенте
Функция НовоеСобственноеИмя(Расширение)
    Имя = ПолучитьИмяВременногоФайла(Расширение);
    Проверка = Новый Файл(Имя);
    Если Проверка.Существует() Тогда
        ВызватьИсключение "Новый путь уже занят; файл не перезаписываем";
    КонецЕсли;
    Возврат Имя;
КонецФункции

&НаКлиенте
Процедура ПроверитьСобственныйФайл(Имя)
    Файл = Новый Файл(Имя);
    Если Файл.Существует() Тогда
        Сообщить(Файл.Размер() > 0);
        Сообщить("Файл появился; вручную проверьте содержимое: " + Имя);
    Иначе
        Сообщить("По собственному локальному пути файла нет, успешную запись не утверждаем: " + Имя);
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Для первого запуска ФайлДляПечати = Ложь. Для второго в отдельной копии урока поменять на Истина: выбирается другое новое имя и другой метод.

  2. Создать оповещение с маркером/путём и двумя экспортными обработчиками. Сохранить пакет в переменной формы до обратного вызова.

  3. Вызвать НачатьЗапись или НачатьЗаписьФайлаДляПечати. Возврат из начала операции не подтверждает файл.

  4. В обработчике разобрать три статуса и проверить только собственный путь. Затем освободить собственные адреса. Ошибка начала с неопределённым состоянием не вызывает автоматической преждевременной очистки.

Как проверить результат

  1. После запуска ожидается сообщение о начале, не об успехе.

  2. Сохранение и ненулевой размер проверяются в обратном вызове. PDF и внутренний print-файл — разные форматы; print нельзя проверять PDF-просмотрщиком.

Ожидаемый результат

Полный пример начала, завершения и ошибки с двумя реальными API записи.

На что обратить внимание

  1. Неопределено — неизвестный результат, а не успешность и не отмена.

  2. Для браузера локальный путь не доказывает место скачанного файла; урок запускается в толстом клиенте.

  3. После ошибки начала закройте только учебную форму для освобождения её хранилища; не чистите весь временный каталог.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.