Имя: Пароль:
1C
1С v8
Напечатать несколько PDF файлов из 1С
0 Evil-Wisp
 
24.09.10
06:47
В базе в регистре хранятся имена PDF файлов, соответствующих номенклатуре. Пользоателю из реализации нужно выводить на предосмотр и печать все pdf файлы, соответствующие номенклатуре из табличной части.
Вопрос: Как сделать предосмотр всех файлов сразу(как бы соединить документы), либо напечатать сразу все документы?
Пока сделал просмотр через оъект ActiveX - Adobe PDF reader отдельного файла, но не получается отправить на печать сразу все документы.
Заранее спасибо!
1 Андрюха
 
24.09.10
06:49
Word 2007/2010 понимает pdf, может через него как-нибудь
2 Evil-Wisp
 
24.09.10
06:56
Чем может помочь word? мне нужно отправить на печать несколько pdf документов, или соединить их в один и распечатать
3 Мимохожий Однако
 
24.09.10
07:41
Осталось в объекте Адоба найти метод для печати
4 Evil-Wisp
 
24.09.10
07:51
Там есть метод печати Printall(), но если попытаться в цикле сделать перебор документов и их печать, выдается ошибка о занятости принтера и печатается только первый док.
5 smaharbA
 
24.09.10
08:01
у ридера вполне вменяемая командная строка
6 Evil-Wisp
 
24.09.10
08:03
(5)Как ее использовать через 1С?
7 Fragster
 
гуру
24.09.10
08:07
(6) командасистемы?
8 Fragster
 
гуру
24.09.10
08:07
wscript.shell?
9 ShoGUN
 
24.09.10
08:07
(6) ЗапуститьПриложение/КомандаСистемы
10 Evil-Wisp
 
24.09.10
08:13
(7,9)Спасибо!
11 idw
 
24.09.10
08:14
(0)

Процедура СохранениеВПДФ(СсылкаНаОбъект, ТабДокумент) Экспорт
   ИмяКаталогаПДФ = Константы.ИмяКаталогаПДФ.Получить();
   Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") тогда
        ИмяФайла = "СЧ_"+Формат(СсылкаНаОбъект.Дата,"ДФ=yyyy-MM-dd")+"_"+СокрЛП(СсылкаНаОбъект.ИДКлиента)+".pdf";
   ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.РеализацияТоваровУслуг") тогда
        ИмяФайла = "РЕ_"+Формат(СсылкаНаОбъект.Дата,"ДФ=yyyy-MM-dd")+"_"+СокрЛП(СсылкаНаОбъект.ИДКлиента)+".pdf";
   ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.СчетФактураВыданный") тогда
        ИмяФайла = "СФ_"+Формат(СсылкаНаОбъект.Дата,"ДФ=yyyy-MM-dd")+"_"+СокрЛП(СсылкаНаОбъект.ИДКлиента)+".pdf";
   Иначе ИмяФайла ="";    
       
   КонецЕсли;
   
   //ОбъектПринтер = Новый COMObject("PDFCreator.clsPDFCreator");
   //ОбъектПринтер.cStart("/NoProcessingAtStartup");
   //PDFПринтеры = ОбъектПринтер.cGetPDFCreatorPrinters();
   //НаборОпций=ОбъектПринтер.cReadOptions();
   //НаборОпций.UseAutosave=1; // автосохранение
   //НаборОпций.UseAutosaveDirectory = 1; // сохранять в
   //НаборОпций.AutosaveDirectory = ИмяКаталогаПДФ;  // путь автосохранеия
   //НаборОпций.AutosaveFilename = "СЧ_"+Формат(СсылкаНаОбъект.Дата,"ДФ=yyyy-MM-dd")+"_"+СокрЛП(СсылкаНаОбъект.Номер)+"_"+СокрЛП(СсылкаНаОбъект.ИДКлиента)+".pdf"; // имя файла
   ////НаборОпций.AutosaveFilename = "111.pdf";
   //НаборОпций.AutosaveFormat = 0;    // формат - PDF
   //
   //ОбъектПринтер.cOptions=НаборОпций;
   //
   //ОбъектПринтер.cClearcache();
   //ОбъектПринтер.cPrinterStop = Ложь;
   //ОбъектПринтер.cStart();
   //
   //ТабДокумент.ИмяПринтера = PDFПринтеры.Item(1);
   //ТабДокумент.Напечатать(ИСТИНА);
   
   ////*****************************************************
   PDFCreator = Новый ComОбъект("PDFCreator.clsPDFCreator");
   PDFCreator.cStart ("/NoProcessingAtStartup");
   
   PDFCreatorOptions = PDFCreator.cOptions();
   // Устанавливаем обязательные параметры
   
   # Если Не Клиент тогда
       
       PDFCreatorOptions.ShowAnimation = False;
       PDFCreatorOptions.NoConfirmMessageSwitchingDefaultprinter =True;
       
   # КонецЕсли
   
   PDFCreatorOptions.NoConfirmMessageSwitchingDefaultprinter =True;
   PDFCreatorOptions.UseAutosave= 1;  
   PDFCreatorOptions.UseAutosaveDirectory = 1;
   PDFCreatorOptions.AutosaveFormat = 0 ;  // 0 = PDF
   
   
   DefaultPrinter = PDFCreator.cDefaultprinter;
   
   PDFCreator.cClearcache();
   PDFCreator.cPrinterStop = false;
   PDFCreator.cDefaultprinter = "PDFCreator";
   // Устанавливили обязательные параметры
   
   // Устанавливили параметры для документа, переданные в функцию    
   
   PDFCreatorOptions.AutosaveDirectory = ИмяКаталогаПДФ;
   PDFCreatorOptions.AutosaveFilename = ИмяФайла;
   
   PDFCreator.cOptions = PDFCreatorOptions;
   
   Готово = Ложь;
   Старт = ТекущаяДата();
   ТабДокумент.Напечатать(Истина);
   PDFCreator.cDefaultprinter = DefaultPrinter;
   
   Пока ТекущаяДата() - Старт < 30 Цикл
       
       ОбработкаПрерыванияПользователя();
       
       //ПриостановкаВыполнения(150);
       ном = 0;
       Пока Ном < 10 Цикл
           ном = ном + 1;
       КонецЦикла;
       
       ИмяИтоговыйФайл = PDFCreator.cOutputFileName;
       Если ЗначениеЗаполнено(ИмяИтоговыйФайл) и ТекущаяДата()-Старт > 1 тогда
           Готово = Истина;
           Прервать;
       КонецЕсли
   КонецЦикла;
   # Если клиент тогда
       
       Если не Готово Тогда
           Предупреждение("Внимание! Документ не создан !");
       КонецЕсли;
   # КонецЕсли
   
   
   PDFCreator.cClearcache();
   PDFCreator.cClose();
   PDFCreator = Неопределено;
   
КонецПроцедуры
12 idw
 
24.09.10
08:15
Используй программку PDFCreator, она позволяет сохранять документы в pdf, объединять их.
13 Fragster
 
гуру
24.09.10
08:17
(11) интересненько
14 idw
 
24.09.10
08:20
(11) этот кусок у меня сохраняет в пдф печатные формы документов из обработки групповая печать в определенный каталог.
15 Evil-Wisp
 
24.09.10
09:51
Подскажите как в коммандной строке напечатать несколько документов:)
КомандаСистемы("""D:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe"" /t 1.pdf");
КомандаСистемы("""D:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe"" /t 2.pdf");
если по очереди печатать, то долго получается.
16 Evil-Wisp
 
24.09.10
10:54
Или все таки придется объединять все в один документ?
17 smaharbA
 
24.09.10
11:15
печатай "враз" через
ЗапуститьПриложение()
18 Evil-Wisp
 
24.09.10
11:32
(17) Спасибо, все быстро теперь:)
А можно программно закрыть акробат после завершения печати?
19 smaharbA
 
24.09.10
11:34
можно
20 Evil-Wisp
 
24.09.10
11:53
Как я понимаю нужно указать параметр для акробата, чтобы он сам закрылся? Если не секрет, то какой?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший