8.х PDFCreator через COM

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Melanto, 19 авг 2008.

  1. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Всем доброго дня!

    Собственно, суть проблемы в заголовке: не могу разобраться
    с синтаксисом обращения к PDFCreator-у.

    Соединение создается так
    Код:
        MyPDF =Новый COMОбъект("PDFCreator.clsPDFCreator");
    
    
    Кое-что работает. Например:
    Код:
    MyPDF.cDefaultprinter="PDFCreator";    
    
    
    А вот то, что в VB выглядит так:
    PDFCreator.cOption("UseAutoSave"=1
    в 1с не хочет работать ни в каком виде. Ни так
    Код:
    MyPDF.cOptions(1,"UseAutoSave");
    
    
    ни так
    Код:
    MyPDF.cOptions("UseAutoSave")=1;
    
    
    ни еще как... :unsure:

    Может кто-то сталкивался?
  2. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    ЛЮДИ!!!
    Сужаю проблему до одного оператора! Как передать в PDF хоть какую-нить Опцию?

    Код:
    MyPDF =Новый COMОбъект("PDFCreator.clsPDFCreator");
    MyPDF.cDefaultprinter="PDFCreator";	
    MyPDF.cStart();
    ссс=MyPDF.cCountOfPrintJobs();
    Сообщить(ссс);
    видимость=MyPDF.cVisible;
    Сообщить(видимость);
    опция=MyPDF.cOption("UseAutosave");
    Сообщить("опция - "+опция);
    MyPDF.cOptions("UseAutosave",1);
    
    
    Вот то, которое последнее достало! :unsure: :smile: :aua:

    Ошибка при вызове метода контекста (cOptions): Неверное число параметров
    MyPDF.cOptions("UseAutosave",1);
    по причине:
    Неверное число параметров

    Испробовано все. Сил больше нет. Из VB аналогичная весчь работает так:
    MyPDF.cOptions("UseAutosave")=1
    ... и ведь работает, сволочь!
  3. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Эту штуку не практиковал, а если попробовать
    Код:
    MyPDF.cOptions("UseAutosave=1"); 
    
    ?
  4. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Спасибо, что ответили.
    Увы. Не подошло...
  5. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    ммм, а можно тогда еще вот так попробовать:

    Код:
    опция=MyPDF.cOption("UseAutosave");
    опция = 1;
    
    
    ?

    Не, туплю, тога опция действительно станет = 1 :)

    Или вот так
    Код:
    опция = опция + 1;
    
    
    ?
    Хотя опять таки - компилятор попробует сконвертировать "опция" в число, и сложить его с 1. Тоже не катит....

    :-(
  6. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    млин, я даже вот что пробовала:
    Код:
    Op=Новый COMОбъект("PDFCreator.clsPDFCreatorOptions");
    Op.UseAutosave=1;
    MyPDF.cOption(Op);
    
    
    
    Вообщем, если что-то получится - напишу, скрывать не стану.
  7. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Сильно опасаюсь, что язык 1Ски под такое не заточен. А если попробовать задать опции при создании объекта, такое для PDFCreator возможно?
  8. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Э, щас попробую.
  9. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Ура!
    Все-таки, одна голова хорошо, а две - лучше!

    Lazy, вы подтолкнули меня к верной мысли. Итак, кому интересно: работает это так

    Код:
    НаборОпций=MyPDF.cReadOptions();
    Сообщить("автосейв"+НаборОпций.UseAutosave);
    Сообщить("шрифт "+НаборОпций.DirectoryGhostscriptFonts);
    Сообщить(" IP "+НаборОпций.ClientComputerResolveIPAddress);
    НаборОпций.UseAutosave=1;
    НаборОпций.LastSaveDirectory="стандарт";
    MyPDF.cOptions=НаборОпций;
    
    
    Уф, хорошо...
    Позже, когда закончу выложу формирование е-mail с вложенным PDF печатной формы.
  10. Minimax
    Offline

    Minimax

    Регистрация:
    31 мар 2009
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Ну как, получилось сделать отправку почты из 1С с вложением файла печаной формы в PDF?
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Я обычно печатал на принтер PDF и полученный файл отправлял... С соединением не запаривался
  12. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Вообщем-то да. Единственно, пришлось-таки открывать PDF-Creator, и пользователь жмет отправку сам.
    Но если у вас стоит вопрос делать - не делать - делайте, кучу бумаги сэкономили и времени.

    Основные изменения - сам макет и Процедура Печать документа
    У меня это выглядит так:

    Код:
    ...
    ИначеЕсли ИмяМакета = "СчетТАСэлектронный" Тогда
    ТабДокумент = ПечатьСчетаТАСЭлектронного(ИмяМакета);
    Попытка 
    Locator=Новый COMОбъект("WbemScripting.SWbemLocator");
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    ServiceSet=Locator.ConnectServer(".");
    ObjectSet=ServiceSet.ExecQuery(
    "Select * from Win32_Printer Where Name Like 'PDFCreator'");
    Для Каждого Item из ObjectSet Цикл
    Если Item.Name="PDFCreator" Тогда
    //add 29-09-2008 by EM            
    MyPDF =Новый COMОбъект("PDFCreator.clsPDFCreator");
    MyPDF.cClearCache();
    MyPDF.cClose();     //End of adding
    ТабДокумент.ИмяПринтера="PDFCreator";
    ТабДокумент.Напечатать();
    КонецЕсли;
    КонецЦикла;
    КонецЕсли; //#
    
    

    Тут, кнешна, куча таракашек... но последние полгода меня не теребили по этому вопросу. А так как хотелось изначально, чтобы вообще напрямую на мыло - не вышло, да и к лучшему. Все ж таки оператор должен увидеть, чего он отправляет.


    Народ, я еще дико извиняюсь... Не помню. зачем все это нагорожено... Кажись, не у всех PDF стоял...

Поделиться этой страницей