Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 апр 2024, 02:19

Заставить PDFCreator объединить задания методом cCombineAll

Автор mixqn, 30 июл 2013, 10:07

0 Пользователей и 1 гость просматривают эту тему.

mixqn

В продолжение темы.
Решил вынести вопрос в отдельную тему. Бьюсь с этим делом уже второй день.

Итак, необходимо свернуть несколько заданий PDFCreator в одно. При чем так, чтобы пользователь не догадывался о существовании PDFCreator.

Есть метод cCombineAll, который теоретически должен это делать.
НО: если сразу до начала печати установить UseAutosave = 1, то происходит автосохранение каждого отдельного задания в файл и к моменту выполнения команды cCombineAll заданий уже нет.
Если же изначально установить UseAutosave = 0 и уже после выполнения cCombineAll изменить на 1, то вылезают стандартные окошки выбора действия, при чем, если там ничего не нажать, то и cCombineAll не отрабатывает.

Все что удается найти в интернете написано не в 1С и везде вроде как нормально отрабатывает вариант сначала UseAutosave = 1 потом cCombineAll.

Может кто сталкивался?
Что еще попробовать?



mixqn

Добил!... :zebzdr:
Плохо когда нет нормальной документации с описанием значения методов и параметров (см рази два)
В общем надо было сначала установить cPrinterStop в 1, а потом уже в 0 (хотя "ручками" делается совсем наоборот).

в итоге код выглядит так:
ПринтерПоУмолчаниюРМВ = "PDFCreator";

// установим принтер по умолчанию
ТекущийПринтер = ПолучитьПринтерПоУмолчаниюРМВ();
УстановитьПринтерПоУмолчаниюРМВ(ПринтерПоУмолчаниюРМВ);

ПринтерПДФ = Новый COMОбъект("PDFCreator.clsPDFCreator");
ПринтерПДФ.cStart("/NoProcessingAtStartup");
ПринтерПДФ.cClearcache();
ПринтерПДФ.cPrinterStop = 1;

НаборОпций = ПринтерПДФ.cOptions();
НаборОпций.NoConfirmMessageSwitchingDefaultprinter = 1;
НаборОпций.UseAutosave = 1;
НаборОпций.UseAutosaveDirectory = 1;
НаборОпций.AutosaveFormat = 0; // PDF 
НаборОпций.AutosaveDirectory = КаталогВременныхФайлов();
НаборОпций.AutosaveFilename = Строка(Реализация.Ссылка.УникальныйИдентификатор()) + ".PDF";
НаборОпций.AutosaveStartStandardProgram = 0;

ПринтерПДФ.cOptions = НаборОпций;
ПринтерПДФ.cDefaultprinter = ПринтерПоУмолчаниюРМВ;

// бла-бла-бла (последовательная печать документов)

УстановитьПринтерПоУмолчаниюРМВ(ТекущийПринтер);
ПринтерПДФ.cDefaultprinter = ТекущийПринтер;

ПринтерПДФ.cCombineAll();
ПринтерПДФ.cPrinterStop = 0;

Счетчик = 0;
Пока ПринтерПДФ.cCountOfPrintjobs > 1 Цикл
Счетчик = Счетчик + 1;
ПринтерПДФ.cCombineAll();
Старт = ТекущаяДата();
Пока ТекущаяДата() <> Старт + 1 Цикл
КонецЦикла;
КонецЦикла;

Старт = ТекущаяДата();
Таймаут = 5;

Пока НЕ ЗначениеЗаполнено(ПринтерПДФ.cOutputFileName) ИЛИ (ТекущаяДата() - Старт < Таймаут) Цикл
КонецЦикла;

ПринтерПДФ.cClearcache();
ПринтерПДФ.cClose();
ПринтерПДФ = Неопределено;


пришлось добавить временные задержки, чтобы все нормально отрабатывало.

теперь вроде как все готово для тестовой эксплуатации. вопрос только в том, пойдет ли этот вариант с учетом временных задержек

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск