ПакетОтображаемыхДокументов.По умолчанию

Конструкторы

Синтаксис и применение ПакетОтображаемыхДокументов.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.

Синтаксис

Новый ПакетОтображаемыхДокументов
Полное описание, параметры и ограничения

ПакетОтображаемыхДокументов.По умолчанию

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

По умолчанию

Синтаксис:
Новый ПакетОтображаемыхДокументов
Методическая информация

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

Дождаться записи PDF перед очисткой временных данных

Ждать отделяет запуск асинхронной записи от её завершения. До завершения кнопка не запускает вторую операцию.

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

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

Подготовка

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

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

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

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

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

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

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

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

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

&НаСервере
Функция СоздатьСобственныйПакет()
    Адреса = Новый Массив;
    Пакет = Новый ПакетОтображаемыхДокументов;
    Пакет.Заголовок = "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 вручную проверяется по двум товарам.

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

Практический асинхронный экспорт с управляемым временем жизни пакета.

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

  1. Удаление адресов сразу после вызова без Ждать может лишить операцию исходных документов.

  2. Не закрывайте форму во время ожидания: её закрытие удаляет привязанное временное хранилище.

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

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

Сначала 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С» и не аффилирован с ней.