ЗаписьPDF.НачатьЗаписьВложений

Методы · BeginWriteAttachments

Дописывает вложения в существующий PDF-документ. Если в документе уже существуют вложения с именами, указанными в коллекции вложений, то вложения в документе заменяются на вложения из коллекции. Если документ записывается в формате PDF или PDF/A-3 и указан параметр <Вложения>, то вложения добавляются в документ в формате PDF и PDF/A-3.

Синтаксис

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

ЗаписьPDF.НачатьЗаписьВложений (PDFWriter.BeginWriteAttachments)

ЗаписьPDF (PDFWriter)

НачатьЗаписьВложений (BeginWriteAttachments)

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

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

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

<Вложения> (обязательный)
Тип: КоллекцияВложенийPDF.
Объект, содержащий вложения PDF-документов.
Описание:

Дописывает вложения в существующий PDF-документ. Если в документе уже существуют вложения с именами, указанными в коллекции вложений, то вложения в документе заменяются на вложения из коллекции.
Если документ записывается в формате PDF или PDF/A-3 и указан параметр <Вложения>, то вложения добавляются в документ в формате PDF и PDF/A-3.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент.

См. также:
ЗаписьPDF, метод ЗаписатьВложения
ЗаписьPDF, метод ЗаписатьВложенияАсинх

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

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

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

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

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

Добавить JSON оповещениями и прочитать результат

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

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

Полный модуль управляемой формы отдельной учебной обработки; две последовательные клиентские PDF-цепочки Windows.

Подготовка

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

  2. Вставьте полный приведённый модуль формы. Функция ПодготовитьСвойPDF находится на сервере, обработчики оповещений — на клиенте и обязательно Экспорт.

  3. Запускайте в тонком или толстом клиенте Windows 8.5.1.1343. Веб-клиент и расширения браузера не входят в подготовку этого урока.

  4. PDF создаётся этим же модулем из одной учебной ячейки. Сервер возвращает только собственные ДвоичныеДанные; файлов, реальных сертификатов и персональных сведений нет.

Перем Выполняется;

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

&НаКлиенте
Функция ОповещениеДля(Обработчик, Состояние)
    Возврат Новый ОписаниеОповещения(Обработчик, ЭтотОбъект, Состояние, "ОшибкаОперации", ЭтотОбъект);
КонецФункции

&НаКлиенте
Процедура ОшибкаОперации(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
    ОсвободитьРесурсы(Состояние);
    Выполняется = Ложь;
    СтандартнаяОбработка = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ОсвободитьРесурсы(Состояние)
    Если Состояние.Чтение <> Неопределено Тогда
        Попытка
            Состояние.Чтение.Закрыть();
        Исключение
            Сообщить("Не удалось закрыть свой объект чтения PDF: " + ОписаниеОшибки());
        КонецПопытки;
        Состояние.Чтение = Неопределено;
    КонецЕсли;
    Если Состояние.Запись <> Неопределено Тогда
        Попытка
            Состояние.Запись.Закрыть();
        Исключение
            Сообщить("Не удалось закрыть свой объект записи PDF: " + ОписаниеОшибки());
        КонецПопытки;
        Состояние.Запись = Неопределено;
    КонецЕсли;
    Если Состояние.Поток <> Неопределено Тогда
        Попытка
            Состояние.Поток.Закрыть();
        Исключение
            Сообщить("Не удалось закрыть свой поток PDF: " + ОписаниеОшибки());
        КонецПопытки;
        Состояние.Поток = Неопределено;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОткрытияЗаписи(Состояние) Экспорт
    Попытка
        Вложения = Новый КоллекцияВложенийPDF;
        ТекстJSON = "{""товар"":""Книга"",""количество"":3}";
        БайтыJSON = ПолучитьДвоичныеДанныеИзСтроки(ТекстJSON, КодировкаТекста.UTF8, Ложь);
        Вложения.Добавить("товар.json", БайтыJSON, "application/json", ТипСвязиВложенияPDF.Данные);
        Состояние.Запись.НачатьЗаписьВложений(ОповещениеДля("ПослеЗаписиВложений", Состояние), Вложения);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписиВложений(Состояние) Экспорт
    Попытка
        Состояние.Запись.НачатьЗакрытие(ОповещениеДля("ПослеЗакрытияЗаписи", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияЗаписи(Состояние) Экспорт
    Попытка
        Состояние.Запись = Неопределено;
        Состояние.Поток.Перейти(0, ПозицияВПотоке.Начало);
        Состояние.Чтение = Новый ЧтениеPDF;
        Состояние.Чтение.НачатьОткрытие(ОповещениеДля("ПослеОткрытияЧтения", Состояние), Состояние.Поток);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОткрытияЧтения(Состояние) Экспорт
    Попытка
        Состояние.Чтение.НачатьПолучениеВложений(ОповещениеДля("ПослеПолученияВложений", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеПолученияВложений(Прочитанные, Состояние) Экспорт
    Попытка
        Сообщить(Прочитанные.Количество() = 1);
        ФайлJSON = Прочитанные.Найти("товар.json");
        Если ФайлJSON = Неопределено Тогда
            ВызватьИсключение "Нет собственного вложения после PDF-операции";
        КонецЕсли;
        Текст = ПолучитьСтрокуИзДвоичныхДанных(ФайлJSON.Содержимое, КодировкаТекста.UTF8);
        Сообщить(Текст = "{""товар"":""Книга"",""количество"":3}");
        Состояние.Чтение.НачатьЗакрытие(ОповещениеДля("ПослеЗакрытияЧтения", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияЧтения(Состояние) Экспорт
    Попытка
        Состояние.Чтение = Неопределено;
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        Сообщить("Собственная цепочка PDF завершена, ресурсы освобождены");
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьСвойPDF(СВложением)
    Вложения = Новый КоллекцияВложенийPDF;
    ТекстJSON = "{""товар"":""Книга"",""количество"":3}";
    БайтыJSON = ПолучитьДвоичныеДанныеИзСтроки(ТекстJSON, КодировкаТекста.UTF8, Ложь);
    Вложения.Добавить("товар.json", БайтыJSON, "application/json", ТипСвязиВложенияPDF.Данные);
    Если Не СВложением Тогда
        Вложения.Очистить();
    КонецЕсли;
    Документ = Новый ТабличныйДокумент;
    Документ.Область("A1").Текст = "Книга: 3 шт.";
    Поток = Новый ПотокВПамяти;
    Попытка
        Документ.Записать(Поток, ТипФайлаТабличногоДокумента.PDF, Вложения);
        Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
КонецФункции

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

  1. Сервер создаёт PDF без вложения; клиентский поток содержит именно эти байты.

  2. ПослеОткрытияЗаписи создаёт собственное JSON-вложение и запускает НачатьЗаписьВложений: описание оповещения передаётся первым.

  3. ПослеЗаписиВложений запускает закрытие. Только ПослеЗакрытияЗаписи обнуляет писателя, возвращает позицию потока в начало и запускает читателя.

  4. Читатель проверяет одно имя товар.json и исходный JSON, затем тоже закрывается через оповещение.

  5. Писатель и читатель не работают одновременно с одним потоком. Флаг повторного запуска удерживается на протяжении обеих цепочек.

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

  1. Два сравнения Истина и финальное сообщение об освобождении ресурсов.

  2. В отладчике на момент НачатьОткрытие читателя Состояние.Запись уже Неопределено.

  3. На диске не появляются ни PDF, ни JSON: состояние целиком в памяти.

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

Завершённая асинхронная запись проверена отдельной цепочкой чтения.

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

  1. Факт вызова НачатьЗаписьВложений не означает, что вложение уже записано: дождитесь обработчика завершения.

  2. Нельзя закрывать общий поток в обработчике закрытия писателя, если далее он нужен читателю.

  3. Этот пример не подписывает документ и не добавляет сведения из рабочей базы.

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

Записать свой PDF пятью callback-шагами и прочитать результат после закрытия

Открытие → вложение → штамп → удаление собственного вложения → закрытие. Все завершения писателя принимают только Состояние, не выдуманный Результат.

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

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

Подготовка

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

  2. Для синхронных уроков вставьте полный модуль в серверный общий модуль УчебныеФайлыPDF и вызовите ВыполнитьПример() своей серверной командой. Новый временный файл будет на серверной машине, не обязательно на вашем ПК.

  3. Для асинхронного и callback-урока вставьте полный код в модуль управляемой формы внешней обработки. Создайте команду Выполнить, обработчик Выполнить, кнопку. Используйте толстый клиент Windows; файл создаётся на клиентской машине.

  4. Код сначала получает новое временное имя, проверяет отсутствие файла и выводит точный путь. Только после этого записывает собственные PDF-байты. Рабочий или выбранный пользователем PDF нигде не запрашивается.

  5. ЗаписьPDF изменяет именно созданный этим запуском файл. Чтение результата начинается после закрытия записи. Файл оставляется пользователю для просмотра и ручного удаления; автоматического удаления нет.

  6. Удаление вложений допустимо начиная с PDF 1.5. Пример проверяет первые восемь символов собственного файла перед этой операцией. Для PDF/A-1 или PDF/A-2 произвольные CSV-вложения не подходят.

  7. До завершения асинхронной цепочки форму не закрывайте и второй запуск не выполняйте. При ошибке начала шага успех не объявляется. Ни создание пособия, ни его Python-тесты этот код в 1С не выполняют.

Перем Занято;
Перем СобственноеСостояние;
Перем СобственныйPDF;

&НаСервереБезКонтекста
Функция СоздатьСобственныеБайтыPDF()
    Таблица = Новый ТабличныйДокумент;
    Таблица.КодЯзыка = "ru";
    Таблица.Область(1, 1).Текст = "СОБСТВЕННЫЙ УЧЕБНЫЙ ОБРАЗЕЦ";
    Таблица.Область(2, 1).Текст = "Книга";
    Таблица.Область(2, 2).Текст = "3";
    Таблица.Область(2, 3).Текст = "250";
    Таблица.Область(2, 4).Текст = "750";
    Таблица.Область(1, 1, 2, 4).ЦветФона = Новый Цвет(255, 255, 210);
    Таблица.Область(, 1, , 1).ШиринаКолонки = 45;
    Поток = Новый ПотокВПамяти;
    Попытка
        Таблица.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
        Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Данные;
КонецФункции

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

&НаКлиенте
Функция ПрочитатьСвоиВложения(Имя)
    Чтение = Новый ЧтениеPDF(Имя);
    Попытка
        Вложения = Чтение.ПолучитьВложения();
        Чтение.Закрыть();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Вложения;
КонецФункции

&НаКлиенте
Процедура ПроверитьУчебнуюВерсию(Имя)
    Чтение = Новый ЧтениеДанных(Имя, КодировкаТекста.UTF8);
    Попытка
        Заголовок = Чтение.ПрочитатьСимволы(8);
        Чтение.Закрыть();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Если СтрДлина(Заголовок) <> 8 Или Лев(Заголовок, 5) <> "%PDF-" Или Сред(Заголовок, 7, 1) <> "." Тогда
        ВызватьИсключение "Учебный заголовок PDF не распознан";
    КонецЕсли;
    Старшая = Число(Сред(Заголовок, 6, 1));
    Младшая = Число(Сред(Заголовок, 8, 1));
    Если Старшая < 1 Или (Старшая = 1 И Младшая < 5) Тогда
        ВызватьИсключение "Удаление вложений требует PDF 1.5 или новее";
    КонецЕсли;
    Сообщить("Заголовок собственного файла: " + Заголовок);
КонецПроцедуры

&НаКлиенте
Функция СоздатьСвоёВложение(Текст)
    Вложения = Новый КоллекцияВложенийPDF;
    Данные = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Ложь);
    Вложения.Добавить("guide-owned-book.csv", Данные, "text/csv", ТипСвязиВложенияPDF.Данные);
    Возврат Вложения;
КонецФункции

&НаКлиенте
Процедура ПроверитьСвоюСтраницу(Данные)
    Поток = Данные.ОткрытьПотокДляЧтения();
    Попытка
        Документ = Новый ДокументPDF;
        Документ.Прочитать(Поток);
        Поток.Закрыть();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Если Документ.КоличествоСтраниц() = 0 Тогда
        ВызватьИсключение "Нет собственной страницы для штампа";
    КонецЕсли;
    Первая = Документ.Страницы.Получить(0);
    Если Первая.Ширина < 80 Или Первая.Высота < 65 Тогда
        ВызватьИсключение "Собственная страница меньше прямоугольника штампа";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция СоздатьСобственныйШтамп()
    ТаблицаШтампа = Новый ТабличныйДокумент;
    ТаблицаШтампа.КодЯзыка = "ru";
    ТаблицаШтампа.Область(1, 1).Текст = "ОБРАЗЕЦ — НЕ ДОКУМЕНТ";
    ТаблицаШтампа.Область(1, 1).ЦветФона = Новый Цвет(210, 240, 255);
    Описание = Новый ОписаниеОтображаемогоОбъектаPDF;
    Описание.Имя = "guide-owned-stamp";
    Описание.Объект = ТаблицаШтампа;
    Описание.НомерСтраницы = 1;
    Описание.Лево = 10;
    Описание.Верх = 45;
    Описание.Ширина = 60;
    Описание.Высота = 10;
    Возврат Описание;
КонецФункции

&НаКлиенте
Функция ОповещениеЗаписиPDF(Имя, Состояние)
    Возврат Новый ОписаниеОповещения(Имя, ЭтотОбъект, Состояние, "ОшибкаЗаписиPDF", ЭтотОбъект);
КонецФункции

&НаКлиенте
Процедура ПроверитьСостояниеЗаписи(Состояние)
    Если Состояние <> СобственноеСостояние Или Состояние.Маркер <> "guide-owned-writer" Тогда
        ВызватьИсключение "Неизвестное состояние PDF-писателя";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура НачатьСледующийШаг(Состояние, Шаг)
    ПроверитьСостояниеЗаписи(Состояние);
    Попытка
        Если Шаг = 1 Тогда
            Состояние.Запись.НачатьЗаписьВложений(ОповещениеЗаписиPDF("ПослеВложения", Состояние), Состояние.Вложения);
        ИначеЕсли Шаг = 2 Тогда
            Состояние.Запись.НачатьЗаписьОтображаемогоОбъекта(ОповещениеЗаписиPDF("ПослеШтампа", Состояние), Состояние.Описание);
        ИначеЕсли Шаг = 3 Тогда
            Состояние.Запись.НачатьЗаписьУдаленияВложений(ОповещениеЗаписиPDF("ПослеУдаления", Состояние), Состояние.Имена);
        ИначеЕсли Шаг = 4 Тогда
            Состояние.Запись.НачатьЗакрытие(ОповещениеЗаписиPDF("ПослеЗакрытияЗаписи", Состояние));
        Иначе
            ВызватьИсключение "Неизвестный номер учебного шага";
        КонецЕсли;
    Исключение
        Сообщить("Начало шага не подтверждено: " + ОписаниеОшибки());
        Сообщить("Повтор запрещён; закройте только собственную учебную форму. Свой путь: " + Состояние.Имя);
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Если Занято = Истина Тогда
        ВызватьИсключение "Собственная цепочка записи уже запущена";
    КонецЕсли;
    Данные = СоздатьСобственныеБайтыPDF();
    ПроверитьСвоюСтраницу(Данные);
    Имя = СоздатьСвойФайлPDF(Данные);
    ПроверитьУчебнуюВерсию(Имя);
    Имена = Новый Массив;
    Имена.Добавить("guide-owned-book.csv");
    Состояние = Новый Структура("Маркер,Имя,Запись,Вложения,Описание,Имена", "guide-owned-writer", Имя, Новый ЗаписьPDF,
        СоздатьСвоёВложение("Книга;3;250;750"), СоздатьСобственныйШтамп(), Имена);
    СобственноеСостояние = Состояние;
    Занято = Истина;
    Попытка
        Состояние.Запись.НачатьОткрытие(ОповещениеЗаписиPDF("ПослеОткрытияЗаписи", Состояние), Имя);
    Исключение
        Сообщить("Начало записи не подтверждено: " + ОписаниеОшибки());
        Сообщить("Повтор запрещён; закройте только собственную учебную форму. Свой путь: " + Имя);
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОткрытияЗаписи(Состояние) Экспорт
    НачатьСледующийШаг(Состояние, 1);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВложения(Состояние) Экспорт
    НачатьСледующийШаг(Состояние, 2);
КонецПроцедуры

&НаКлиенте
Процедура ПослеШтампа(Состояние) Экспорт
    НачатьСледующийШаг(Состояние, 3);
КонецПроцедуры

&НаКлиенте
Процедура ПослеУдаления(Состояние) Экспорт
    НачатьСледующийШаг(Состояние, 4);
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияЗаписи(Состояние) Экспорт
    ПроверитьСостояниеЗаписи(Состояние);
    Итог = ПрочитатьСвоиВложения(Состояние.Имя);
    Сообщить(Итог.Количество() = 0);
    СобственныйPDF = Новый ДокументPDF;
    СобственныйPDF.Прочитать(Состояние.Имя);
    СобственныйPDF.Показать("guide-owned: запись PDF завершена callback", "");
    СобственноеСостояние = Неопределено;
    Занято = Ложь;
КонецПроцедуры

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

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

  1. Создать только свой PDF-файл и подготовить собственное вложение, штамп и точное имя удаления.

  2. Сохранить состояние в переменной формы. После завершения каждого шага запускать следующий, не все Начать подряд.

  3. Все пять экспортных callback писателя имеют один аргумент Состояние. Три аргумента отдельно используются обработчиком ошибки.

  4. Читать итоговые вложения и открывать документ только в callback подтверждённого закрытия писателя.

  5. Если начало шага или закрытие не подтверждены, не снимать запрет повторного запуска и не считать файл готовым. Пользователь закрывает только учебную форму.

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

  1. После подтверждённого закрытия итоговая коллекция вложений пуста: проверка Истина.

  2. В своём окне видны книга и штамп; путь выведен до создания и принадлежит только этому запуску. Визуальный результат проверяется вручную в 1С.

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

Полная цепочка callback PDF-писателя с правильной границей жизненного цикла и владения файлом.

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

  1. У callback записи нет Булево результата: подтверждение приходит фактом завершения либо отдельным обработчиком ошибки.

  2. НачатьЗаписьУдаленияВложений принимает массив имён, не коллекцию объектов вложений.

  3. Файл остаётся для ручного просмотра и удаления. Не выполняйте очистку всего временного каталога или всех вложений чужого PDF.

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

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

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

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

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