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