gifts2017

Печать в PDF в фоновом режиме через регламентные задания 1с 8.2 с помощью Yoksel.dll на х64 сервере

Опубликовал AER Рючин (AER) в раздел Программирование - Практика программирования

Была поставлена задача автоматической рассылки документов на почтовые ящики ответственных лиц.
Был опробован виртуальный принтер PDFСreator - результат отрицательный.
Фоновый режим рассылки документов сервером осуществлен с помощью внешней компоненты Yoksel.dll, которая была зарегистрирована на х32 1с-сервере с помощью команды regsvr32 Yoksel.dll
Ниже приведенные процедуры созданы в общем модуле.
Ссылки на документы, печатные формы которых необходимо разослать ответственным лицам накапливаютя в регистре сведений рдУведомлениеГотовности.
В процедурах показана сама идея автоматического формирования PDF-документов на сервере 1с. Если 1с-сервер х64, то в кластер вносится х32 1с сервер и создается рабочий процесс, в который автоматически перекочевывает фоновое задание и Йоксель запускается и работает физически на х32 сервере.
Процедура УведомлениеГотовности() Экспорт
    
    Запрос = Новый Запрос;
                   
    Запрос.Текст =  "ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |    рдУведомлениеГотовности.ОтчетПроизводства КАК ОтчетПроизводства,
                    |    ЗаказНаПроизводствоПродукция.Заказ.Ссылка КАК ЗаказПокупателя
                    |ИЗ
                    |    РегистрСведений.рдУведомлениеГотовности КАК рдУведомлениеГотовности
                    |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыпускПродукции КАК ВыпускПродукции
                    |            ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
                    |            ПО ВыпускПродукции.Заказ.Ссылка = ЗаказНаПроизводствоПродукция.Ссылка
                    |        ПО рдУведомлениеГотовности.ОтчетПроизводства = ВыпускПродукции.Регистратор
                    |ГДЕ
                    |    рдУведомлениеГотовности.Отправлено = ЛОЖЬ
                    |    И рдУведомлениеГотовности.Обработано = ЛОЖЬ";
        
    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Сортировать("ЗаказПокупателя Возр,ОтчетПроизводства Убыв");
    Заказ="";
    Для каждого Строчка из ТЗ Цикл
        Если Заказ <> Строчка.ЗаказПокупателя Тогда
            Заказ = Строчка.ЗаказПокупателя;
            Если НЕ ПустаяСтрока(Строчка.ОтчетПроизводства) Тогда 
                //ТЗ1 = Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
                рдОбработкаПроведенияОтчетПроизводстваЗаСменуРассылкаУведомленийГотовности(Строчка.ОтчетПроизводства);
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;

КонецПроцедуры    

  
Процедура рдОбработкаПроведенияОтчетПроизводстваЗаСменуРассылкаУведомленийГотовности(Источник) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка",Источник);
    Запрос.УстановитьПараметр("Услуга","Услуга");
    Запрос.УстановитьПараметр("ПустойОтчет",Документы.ОтчетПроизводстваЗаСмену.ПустаяСсылка());
    
    Запрос.Текст =  "ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |    ЗаказНаПроизводствоПродукция.Заказ.Ссылка КАК ЗаказПокупателя
                    |ПОМЕСТИТЬ ТЕМП
                    |ИЗ
                    |    РегистрНакопления.ВыпускПродукции КАК ВыпускПродукции
                    |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
                    |        ПО ВыпускПродукции.Заказ.Ссылка = ЗаказНаПроизводствоПродукция.Ссылка
                    |ГДЕ
                    |    ВыпускПродукции.Регистратор.Ссылка = &Ссылка
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |    ЗаказыПокупателей.Номенклатура КАК Номенклатура,
                    |    ЗаказыПокупателей.ХарактеристикаНоменклатуры КАК Характеристика,
                    |    ЗаказыПокупателей.Количество КАК КолЗаказ,
                    |    0 КАК КолВыпуск,
                    |    &ПустойОтчет КАК Выпуск,
                    |    ТЕМП.ЗаказПокупателя КАК Заказ
                    |ПОМЕСТИТЬ ТЗЗаказ
                    |ИЗ
                    |    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЕМП КАК ТЕМП
                    |        ПО ЗаказыПокупателей.Регистратор = ТЕМП.ЗаказПокупателя
                    |ГДЕ
                    |    ЗаказыПокупателей.Номенклатура.ВидНоменклатуры.Наименование <> &Услуга
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |    ВыпускПродукции.Продукция,
                    |    ВыпускПродукции.ХарактеристикаПродукции,
                    |    0 КАК КолЗаказ,
                    |    ВыпускПродукции.Количество КАК КолВыпуск,
                    |    ВыпускПродукции.Регистратор КАК Выпуск,
                    |    ЗаказНаПроизводствоПродукция.Заказ.Ссылка КАК Заказ
                    |ПОМЕСТИТЬ ТЗВыпуск
                    |ИЗ
                    |    РегистрНакопления.ВыпускПродукции КАК ВыпускПродукции
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
                    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЕМП КАК ТЕМП
                    |            ПО ЗаказНаПроизводствоПродукция.Заказ.Ссылка = ТЕМП.ЗаказПокупателя.Ссылка
                    |        ПО ВыпускПродукции.Заказ.Ссылка = ЗаказНаПроизводствоПродукция.Ссылка
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ТЗЗаказ.Номенклатура КАК Номенклатура,
                    |    ТЗЗаказ.Характеристика КАК Характеристика,
                    |    ТЗЗаказ.КолЗаказ КАК КолЗаказ,
                    |    ТЗВыпуск.КолВыпуск КАК КолВыпуск,
                    |    ТЗВыпуск.Выпуск КАК Выпуск,
                    |    ТЗЗаказ.Заказ КАК Заказ
                    |ИЗ
                    |    ТЗЗаказ КАК ТЗЗаказ
                    |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗВыпуск КАК ТЗВыпуск
                    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену КАК ОтчетПроизводстваЗаСмену
                    |            ПО ТЗВыпуск.Выпуск = ОтчетПроизводстваЗаСмену.Ссылка
                    |        ПО ТЗЗаказ.Номенклатура = ТЗВыпуск.Продукция
                    |            И ТЗЗаказ.Характеристика = ТЗВыпуск.ХарактеристикаПродукции";

           
    
    //ТЗ = Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
//Возврат;
    Выборка = Запрос.Выполнить().Выбрать();

    Отсылать = Ложь;
    Пока Выборка.Следующий() Цикл
        Если (Выборка.КолВыпуск = Выборка.КолЗаказ) И (Выборка.КолЗаказ<>0) Тогда
            Отсылать = Истина;
        иначе    
            Отсылать = Ложь;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Результат = Ложь;
    Если Отсылать Тогда
        //Результат = Истина;
        Результат = ОтправитьУведомление(Выборка.Заказ,Источник);
    КонецЕсли;
    
    СтрокаРегистра = РегистрыСведений.рдУведомлениеГотовности.СоздатьМенеджерЗаписи();
    СтрокаРегистра.ОтчетПроизводства = Источник;
    СтрокаРегистра.Отправлено = Результат;
    СтрокаРегистра.Обработано = Истина;

    Попытка
        СтрокаРегистра.Записать();
    Исключение    
    КонецПопытки;    

КонецПроцедуры

Функция ОтправитьУведомление(Документ,ОтчетПр)
    
    ДокОбъект = Документ.ПолучитьОбъект();
    
    //Удалим pdf и flg оставшийся с прошлого раза
    ИмяФайла = "1c_notify.pdf";
    ПолноеИмяФайла = КаталогВременныхФайлов() + ИмяФайла;
    УдалитьФайлы(ПолноеИмяФайла);
    
    ИмяФлага = "1c_notify.flg";
    ПолноеИмяФлага = КаталогВременныхФайлов() + ИмяФлага;
    УдалитьФайлы(ПолноеИмяФлага);
        
    ПрофильЭлектроннойПочты = ПолучитьПрофильЭлектроннойПочты();
    Если ПрофильЭлектроннойПочты = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;    
    
    АдресНазначения = ксОбщийМодуль.ПолучитьПочтуПоСотруднику(ДокОбъект.ксОсновнойИнженерКонсультант);
    Если ПустаяСтрока(АдресНазначения) Тогда 
        ЗаписьЖурналаРегистрации("Не указан email у " + ДокОбъект.ксОсновнойИнженерКонсультант + ". Отправка сообщений указанному получателю не возможна!", УровеньЖурналаРегистрации.Ошибка, , ,"Уведомление");
        Возврат Ложь;
    КонецЕсли;
        
    //Создадим новое письмо на указаный адрес
    Письмо = Новый ИнтернетПочтовоеСообщение;
    Письмо.Отправитель = "1c@ridan.ru";
    Письмо.ИмяОтправителя = "ЗАО Ридан (отдел отгрузки)";
    Письмо.Получатели.Добавить(АдресНазначения);
    Письмо.Получатели.Добавить("ryuchin_a@ridan.ru");
        
    Письмо.Тема = "Уведомление о готовности";
    Письмо.Тексты.Добавить(Строка(ОтчетПр) + "
        |Уведомление об готовности выпуска для " + ДокОбъект.Контрагент + " по счету " + СокрЛП(ДокОбъект.Ссылка.Номер) + " от " + Формат(ДокОбъект.Ссылка.Дата, "ДФ=dd.MM.yy") + " находится во вложении");
    ПолноеИмяФайла = ФайлВложенияЙоксель(ДокОбъект,ОтчетПр);
    Письмо.Вложения.Добавить(ПолноеИмяФайла, "Уведомление о готовности");
    ИПочта = Новый ИнтернетПочта;
    
    Попытка
        ИПочта.Подключиться(ПрофильЭлектроннойПочты);
        ИПочта.Послать(Письмо);
        ИПочта.Отключиться();
        ЗаписьЖурналаРегистрации("Уведомление об готовности выпуска для " + ДокОбъект.Контрагент + " по счету " + СокрЛП(ДокОбъект.Ссылка.Номер) + " от " + Формат(ДокОбъект.Ссылка.Дата, "ДФ=dd.MM.yy") + " отправлено " + ДокОбъект.ксОсновнойИнженерКонсультант, УровеньЖурналаРегистрации.Информация, , ,"Уведомление");
        
        //ЗаписьЖурналаРегистрации("Удалить "+ПолноеИмяФайла, УровеньЖурналаРегистрации.Информация, , ,"Уведомление");
        //УдалитьФайлы(ПолноеИмяФайла);        
        Возврат Истина;
    Исключение
        ЗаписьЖурналаРегистрации("Необходимо проверить настройки электронной почты! Отправка невозможна! (" + ОписаниеОшибки() + ")", УровеньЖурналаРегистрации.Ошибка, , ,"Уведомление");
        Возврат Ложь;
    КонецПопытки;
    
КонецФункции

Функция ПолучитьПрофильЭлектроннойПочты()
    
    ПрофильПочты = Новый ИнтернетПочтовыйПрофиль;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("УчетнаяЗапись", Константы.ксУчетнаяЗаписьЭлектроннойПочты.Получить());
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    УчетныеЗаписиЭлектроннойПочты.SMTPСервер,
    |    УчетныеЗаписиЭлектроннойПочты.ПортSMTP,
    |    УчетныеЗаписиЭлектроннойПочты.ЛогинSMTP,
    |    УчетныеЗаписиЭлектроннойПочты.ПарольSMTP,
    |    УчетныеЗаписиЭлектроннойПочты.ТребуетсяSMTPАутентификация,
    |    УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты,
    |    УчетныеЗаписиЭлектроннойПочты.Логин,
    |    УчетныеЗаписиЭлектроннойПочты.Пароль,
    |    УчетныеЗаписиЭлектроннойПочты.ВремяОжиданияСервера
    |ИЗ
    |    Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
    |ГДЕ
    |    УчетныеЗаписиЭлектроннойПочты.Ссылка = &УчетнаяЗапись";
    Результат = Запрос.Выполнить();
    
    ЭлектроннаяПочта = Результат.Выбрать();
    Если ЭлектроннаяПочта.Следующий() Тогда
        
        Если ЭлектроннаяПочта.ТребуетсяSMTPАутентификация Тогда
            
            ПрофильПочты.АутентификацияSMTP = СпособSMTPАутентификации.Login;
            ПрофильПочты.ПользовательSMTP = ЭлектроннаяПочта.ЛогинSMTP;
            ПрофильПочты.ПарольSMTP = ЭлектроннаяПочта.ПарольSMTP;
            
        Иначе
            
            ПрофильПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
            
        КонецЕсли;
        
        ПрофильПочты.АдресСервераSMTP = ЭлектроннаяПочта.SMTPСервер;
        ПрофильПочты.ПортSMTP = ЭлектроннаяПочта.ПортSMTP;
        ПрофильПочты.ВремяОжидания = ЭлектроннаяПочта.ВремяОжиданияСервера;
        
        Возврат ПрофильПочты;
        
    Иначе
        
        ЗаписьЖурналаРегистрации("Не удалось получить учетную запись электронной почты - Отправка сообщений не возможна!", УровеньЖурналаРегистрации.Ошибка, , ,"Уведомление");
                 
        Возврат Неопределено;
        
    КонецЕсли;
    
КонецФункции

Функция ПечатьУведомления(СсылкаНаОбъект,ОтчетПр)
    
    НомерПечать = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УВЕДОМЛЕНИЕ_ОБ_ОТГРУЗКЕ";
    
    Макет = ПолучитьОбщийМакет("УведомлениеГотовности");
    Обл   = Макет.ПолучитьОбласть("Шапка");
    
    Обл.Параметры.Заголовок = "Уведомление о готовности к отгрузке " + НомерПечать + " от " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    Обл.Параметры.Плательщик = "Плательщик: " + СсылкаНаОбъект.Контрагент.Наименование;
    Обл.Параметры.Уведомление = "Информируем Вас, что оборудование по Счету №" + НомерПечать + " от " + Формат(СсылкаНаОбъект.Дата, "ДФ=dd.MM.yyyy") + Символы.ПС + "готово к отгрузке по следующим позициям:";
    ТабДокумент.Вывести(Обл);
    
    НомерСтроки = 1;
    Обл = Макет.ПолучитьОбласть("Строка");
    Для Каждого ТекСтрока ИЗ СсылкаНаОбъект.Товары Цикл
        
        Обл.Параметры.НомерСтроки = НомерСтроки;
        Обл.Параметры.Товар = ТекСтрока.Номенклатура.НаименованиеПолное + ", расчет " + ТекСтрока.ксРасчет;
        Обл.Параметры.Единица = ТекСтрока.ЕдиницаИзмерения;
        Обл.Параметры.Количество = ТекСтрока.Количество;
        Обл.Параметры.ДатаОтгрузки =  Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
        //Обл.Параметры.ДатаОтгрузки =  Формат(ОтчетПр.Дата, "ДФ=dd.MM.yyyy");
        ТабДокумент.Вывести(Обл);
        НомерСтроки = НомерСтроки + 1;
        
    КонецЦикла;
    
    Обл = Макет.ПолучитьОбласть("Подвал");
    Обл.Параметры.УсловияПоставки = СсылкаНаОбъект.ДополнениеКАдресуДоставки;
    ТабДокумент.Вывести(Обл);
    
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.ИмяПринтера = "1c_notifyer";

    Возврат ТабДокумент;
    
КонецФункции

Функция ФайлВложенияЙоксель(пСтр,ОтчетПр)
    
    ИмяФайла = "1c_notify.pdf";
    ПолноеИмяФайла = КаталогВременныхФайлов() + ИмяФайла;
    ИмяФлага = "1c_notify.flg";
    ПолноеИмяФлага = КаталогВременныхФайлов() + ИмяФлага;

    //СтруктураПараметров = новый структура("ИмяФайла",ПолноеИмяФайла);
    
    ТабДокумент = ПечатьУведомления(пСтр.Ссылка,ОтчетПр);
    ПолноеИмяФайла = Йоксель_СохранитьОтчётВПДФ(ТабДокумент,ПолноеИмяФайла);
    
    УдалитьФайлы(ПолноеИмяФлага);
    
    Возврат ПолноеИмяФайла;
    
КонецФункции
// Функция формирует файлы для отправки по электронной почте с помощью внешней компоненты Yoksel.dll
//
Функция Йоксель_СохранитьОтчётВПДФ(ТабДок, ИмяФайла)//Путь)
    Попытка
        //ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "Yoksel.dll");
        Йоксель      = ПолучитьCOMОбъект("","Йоксель");
        КонвертерPDF = Йоксель.СоздатьГрафическийКонвертерPDF();
    Исключение
        ЗаписьЖурналаРегистрации(ОписаниеОшибки(), УровеньЖурналаРегистрации.Ошибка, , ,"Уведомление");
        //Предупреждение("Не удалось загрузить внешнюю компоненту Yoksel! Сообщите администратору системы!", 20);
        Возврат Неопределено;
    КонецПопытки;
    ТабДок.Записать(КаталогВременныхФайлов()+ "1c_notify.xls", ТипФайлаТабличногоДокумента.XLS97);
    
    // Конвертируем временный файл в формат pdf
    Попытка
        Таб = Йоксель.СоздатьТабличныйДокумент();
        Таб.Открыть(КаталогВременныхФайлов()+ "1c_notify.xls", "2");
        КонвертерPDF.Документ = Таб;
        КонвертерPDF.КоличествоБитНаПиксел = 24; //1, 4, 8, 24
        //КонвертерPDF.ПолеСлева = 1134; // в твипах (1 твип = 1/567 см)
        КонвертерPDF.ЗаписатьВФайл(ИмяФайла);
    Исключение
        УдалитьФайлы(КаталогВременныхФайлов()+ "1c_notify.xls");
        ЗаписьЖурналаРегистрации(ОписаниеОшибки(), УровеньЖурналаРегистрации.Ошибка, , ,"Уведомление");
        //Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
        Возврат Неопределено;
    КонецПопытки;

См. также

Подписаться Добавить вознаграждение

Комментарии

0. AER Рючин (AER) 12.09.11 14:11
Была поставлена задача автоматической рассылки документов на почтовые ящики ответственных лиц.
Был опробован виртуальный принтер PDFСreator - результат отрицательный.
Фоновый режим рассылки документов сервером осуществлен с помощью внешней компоненты Yoksel.dll, которая была зарегистрирована на х32 1с-сервере с помощью команды regsvr32 Yoksel.dll
Ниже приведенные процедуры созданы в общем модуле.
Ссылки на документы, печатные формы которых необходимо разослать ответственным лицам накапливаютя в регистре сведений рдУведомлениеГотовности.
В процедурах показана сама идея автоматического формирования PDF-документов на сервере 1с. Если 1с-сервер х64, то в кластер вносится х32 1с сервер и создается рабочий процесс, в который автоматически перекочевывает фоновое задание и Йоксель запускается и работает физически на х32 сервере.


Перейти к публикации

1. Сергей Сытько (8SiriuS8) 12.09.11 14:11
(0)
Был опробован виртуальный принтер PDFСreator - результат отрицательный.

А чё так :D . У меня все получилось в PDFСreator и почту отправлять при помощи скрипта и всякие дополнительные обработки pdf файлов производить если потребуется
2. Ийон Тихий (cool.vlad4) 12.09.11 14:13
А в чем ноухау Yoksel.dll и 1с 8.2? Аналогично Yoksel.dll и 1с 8.1 и Yoksel.dll и 1с 7.7 , примеры которые на ИС есть. ДА и наверняка к вам захочет придратся ;) alexk-is по поводу разукрашки...
3. Владимир Луньков (bomba) 12.09.11 14:38
(1) Ты на сервере попробуй для начала.
(0) Автор, что скажешь про прозрачные картинки экспортируемые в PDF?
4. Ийон Тихий (cool.vlad4) 12.09.11 14:41
(3) Могу сказать про свой опыт - картинки непрозрачные, да к тому же еще с рамкой. На форуме сайта yoksel это обсуждалось.(недавно).
5. Владимир Луньков (bomba) 12.09.11 14:55
6. AER Рючин (AER) 12.09.11 16:13
8SiriuS8 пишет:
А чё так smile:D . У меня все получилось в PDFСreator и почту отправлять при помощи скрипта и всякие дополнительные обработки pdf файлов производить если потребуется

PDFCreator у меня не работает на сервере. Т.е. формирование доков самим сервером в фоновом задании.
От лица пользователя интерактивно и у меня работает.
7. AER Рючин (AER) 12.09.11 16:14
cool.vlad4 пишет:

А в чем ноухау Yoksel.dll и 1с 8.2? Аналогично Yoksel.dll и 1с 8.1 и Yoksel.dll и 1с 7.7 , примеры которые на ИС есть. ДА и наверняка к вам захочет придратся ;) alexk-is по поводу разукрашки...


Не нашел как 1с-код раукрасить.
8. AER Рючин (AER) 12.09.11 16:16
bomba пишет:
Автор, что скажешь про прозрачные картинки экспортируемые в PDF?

Увы, прозрачности нет. Искал старые версии Йокселя, не нашел.
9. Ийон Тихий (cool.vlad4) 12.09.11 16:52
(7) ссылку, чег-то влом искать, - посмотри сам в профайле у alexk-is. ;)
(8) Бесполезно, как объяснял разработчик yoksel (на этом сайте под ником УжасБухгалтера), - 1С(8-ка) конвертирует картинки при вставке в макет в формат (кажется в bmp), прозрачность которого в yoksel не поддерживается. Выход делать отдельно форму - затем вставлять картинку либо excel, либо в yoksel. Одним словом гемор. Я плюнул на все это, и делаю обычно заранее склейку картинки и фона, затем результат в макет.
10. Константин Соболевский (Константин С.) 13.09.11 11:40
Можно вопрос несколько не по теме.
как yoksel зарегить на машине с 64x, а то моя нехочет это делать. Может она старая?
11. Александр Иванов (dkprim) 17.09.11 08:12
печать в формат PDF в фоновом режиме - для меня насущный вопрос. спасибо за предоставленное решение задачи :) ознакомлюсь обязательно.
12. AER Рючин (AER) 20.09.11 08:36
(10) Константин С., В каталоге sysWOW64 regsvr32 yoksel.dll
13. AER Рючин (AER) 20.09.11 08:43
Ну не нравится мне чё то yoksel.dll (непрозрачность, рамка). Буду курить БСП 8.2 и ImageMagick. Как разберусь, решение выложу. Всем спасибо на оценки.
14. qwerty qwerty (vamleshka) 31.10.11 16:27
Извинените пож. а как можно сделать печать документов на принтер фоновым заданием?
15. AER Рючин (AER) 01.11.11 08:51
Разве только на ум приходит вот что
Поставить движок 8.2.14.528
Там команда ВыполнитьПриложение теперь работает на сервере. А админы пускай подумают над командами операционки для вывода на принтер, т.е. скрипт напишут.
16. Padonak-XXI (DMSDeveloper) 20.12.11 12:12
А в чем проблема пользоваться тем же PDFCreator или BullZip на сервере??? Они же работают как COMобъекты, коотрые доступны на стороне сервера.

COMОбъект (COMObject)
Конструкторы:
По имени приложения

Описание:
Создает COM-объект (например, Word, Excel и т.д.). Методы и свойства СОМ-объектов в дальнейшем становятся доступными через данный объект.

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.


Устанавливаем на сервер и работаем в фоновом задании на сервере. Через Com-интерфейс передаем все нужные параметры в принтер и печатаем.

Не хочу хвастаться своим вариантом, поэтому ссылки не привожу - смотрите в профиле, там есть обработка по работе с PDFCreator через COM-интерфейс.
17. AER Рючин (AER) 20.12.11 14:35
(16) Padonak-XXI, Может теперь и доступны. Когда я делал 14-й релиз еще не вышел.
18. Padonak-XXI (DMSDeveloper) 20.12.11 16:05
AER пишет:

(16) Padonak-XXI, Может теперь и доступны. Когда я делал 14-й релиз еще не вышел.


14 релиз чего? Если 8.2.14 то он никак не связан с доступностью COM-объектов на стороне сервера
Эта возможность была добавлена еще в 8.1.10
19. AER Рючин (AER) 18.01.12 06:44
Вышла наконец то 15-я платформа. Реализована конвертация из Табличного документа в PDF. Так что наверно эта тема уже не актуальна. Всем спасибо за оценки.
20. Андрей (Genneral) 21.04.12 23:41
Вышла наконец то 15-я платформа. Реализована конвертация из Табличного документа в PDF. Так что наверно эта тема уже не актуальна. Всем спасибо за оценки.

Многие ещё на 8.1 сидят, так что актуально.

Может я чего не понял, но как этот кусочек вашего кода выполняется на сервере:
ТабДок.Записать(КаталогВременныхФайлов()+ "1c_notify.xls", ТипФайлаТабличногоДокумента.XLS97);

Даже на 15 платформе в синтаксис-помошнике написано:
ТабличныйДокумент (SpreadsheetDocument)
Записать (Write)

Примечание:
При работе на сервере, веб клиенте или через внешнее соединение нет возможности сохранять в формате XLS95.
При работе на веб-клиенте вызов метода выполняет обращение к серверу.

По поводу работы с 64-битным сервером, на форуме Йокселя есть такой вариант, сам пока не пробовал, щас только эту тему изучаю
адрес темы http://yoksel.net.ru/forum/topic.php?id=153

Спасибо за наводку. В результате для того что бы заработало нужно проделать
следующее:
1. создаем раздел с именем "{84A3E023-8F84-4a8a-8CD9-22425B5DA137}" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\{84A3E023-8F84-4a8a-8CD9-22425B5DA137} и добавляем строковое свойство "AppID" со значением "{84A3E023-8F84-4a8a-8CD9-22425B5DA137}".


А за наводку про Yoksel Спасибо,плюсанул.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа