Преобразование doc/docx в PDF для 1С: Документооборот 8 КОРП, ПРОФ, ДГУ через обработчик бизнес-событий

05.10.21

Функциональные - Документооборот и делопроизводство (СЭД)

Обработчик после регистрации нужного вида документа выполняет конвертацию файлов, прикрепленных к внутреннему документу формата doc/docx, в формат PDF и добавляет эти файлы к документу. Не требует изменений в конфигурации.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
скрипт для удаления зависших сеансов winword
.7z 52,92Kb
25
25 Скачать (1 SM) Купить за 1 850 руб.

Обработчик после регистрации нужного вида документа выполняет конвертацию файлов, прикрепленных к внутреннему документу формата doc/docx, в формат PDF и добавляет эти файлы к документу.

Обработчик вешается на подписку при выполнении задачи. Обязательно наличие установленного офиса на сервере 1С, т.к. конвертация осуществляется средствами Winword.

Для корректной работы необходимо выполнить настройки на сервере 1С //infostart.ru/1c/articles/325873/

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать. Источник https://support.microsoft.com/kb/257757

Для избежания зависания процесса winword  написал скрипт, который убивает зависшие сеансы на сервере
Код скрипта приложен в архиве. Файл скрипта необходимо поместить на сервере 1С в папку C:\Windows\Tasks и добавить его запуск в планировщик заданий Windows

Совместимо с 1С:Документооборот 2.1 (версии КОРП, ПРОФ, ДГУ), платформа 1С:Предприятие 8.3. 

Тестировал на версии Документооборот 8 КОРП, редакция 2.1 (2.1.28.14).

 

Код обработчика:

 // Поиск объекта
Задача = Событие.Источник;

СоздаватьPDF   = Ложь;

Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") 
    И Задача.ТочкаМаршрута = БизнесПроцессы.Утверждение.ТочкиМаршрута.Утвердить
    И Задача.БизнесПроцесс.РезультатУтверждения = Перечисления.РезультатыУтверждения.Утверждено Тогда
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Предметы.РольПредмета,
        |    Предметы.Предмет КАК Предмет
        |ИЗ
        |    Задача.ЗадачаИсполнителя.Предметы КАК Предметы
        |ГДЕ
        |    Предметы.Ссылка = &ЗадачаСсылка";
    
    Запрос.УстановитьПараметр("ЗадачаСсылка", Задача);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            
            Объект = Выборка.Предмет.ПолучитьОбъект();
            Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
                НаименованиеВидаДокумента = СокрЛП(Объект.ВидДокумента.Наименование);
				СоздаватьPDF=(ВидДокумента= /// Нужный ВидДокумента);
                /// СоздаватьPDF=(НаименованиеВидаДокумента = "Договор услуг"); 
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
КонецЕсли;
 
////////////////////////////////////
// СОЗДАНИЕ PDF ВЕРСИЙ DOC ФАЙЛОВ //
////////////////////////////////////
   
Если СоздаватьPDF Тогда
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Файлы.Ссылка КАК Файл
        |ИЗ
        |    Справочник.Файлы КАК Файлы
        |ГДЕ
        |    Файлы.ВладелецФайла = &ВладелецФайла
        |    И НЕ Файлы.ПометкаУдаления";

    Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
   
    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
               
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
        
            ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляСохранения(Выборка.Файл);
            Если НЕ (ДанныеФайла.Расширение = "doc" ИЛИ ДанныеФайла.Расширение = "docx" ИЛИ ДанныеФайла.Расширение = "odt" ) Тогда
                Продолжить;
            КонецЕсли;
            
            FileDOC = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение);
            FilePDF = ПолучитьИмяВременногоФайла("pdf");
            
             Если Данныефайла.ТипХраненияФайла=Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда 
            	ДвоичныеДанныеDOC = РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ДанныеФайла.ТекущаяВерсия).Получить();
			Иначе
				ДвоичныеДанныеDOC = РаботаСФайламиВызовСервера.ПолучитьДвоичныеДанныеФайла(Выборка.Файл);
			КонецЕсли;

            ДвоичныеДанныеDOC.Записать(FileDOC);
            
            MSWordApp = Новый COMОбъект("Word.Application");
            MSWordApp.Visible = False;                     
            MSWordApp.Documents.Open(FileDOC);
            
            WordDocument = MSWordApp.Application.Documents(1);
            WordDocument.Activate();
            WordDocument.SaveAs(FilePDF, 17);
            
            MSWordApp.Application.Quit();
            
            СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Новый Файл(FilePDF));
            СведенияОФайле.ИмяБезРасширения              = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(
                                                               Объект.Получатели[0].Получатель.НаименованиеКороткое,"");
            СведенияОФайле.Автор                         = ДанныеФайла.АвторТекущейВерсии;
            СведенияОФайле.НоваяВерсияАвтор              = ДанныеФайла.АвторТекущейВерсии;
            СведенияОФайле.АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(FilePDF));
            
            НовыйФайлPDF = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ДанныеФайла.Владелец, СведенияОФайле);
            
        КонецЦикла;
        
    КонецЕсли;
    
КонецЕсли;

 

Документооборот PDF doc docx конвертация pdf преобразование

См. также

Бухгалтер Пользователь Руководитель проекта Платформа 1С v8.3 Управленческий учет Платные (руб)

Организуйте правильный оборот документов на вашем предприятии в 1С. Ведение учета и хранения документов. Управление потоками документации между подразделениями. Работа с договорами в компании. Автоматизация процессов подготовки, согласования и подписания документов. Сократите время и объем ошибок с 1С:ДО!

55300 руб.

19.02.2016    110203    137    5    

107

Бизнес-аналитик Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Прикладное решение «1С:Комплексная автоматизация 2» позволяет построить современную систему учета с высокой степенью детализации затрат, определить показатели управления и ответственности пользователей в рамках единого информационного пространства.

94700 руб.

19.02.2016    83793    114    0    

113

ЭДО и ОФД Учет документов Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам.

14880 руб.

17.12.2018    47029    73    63    

80

Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    33411    40    49    

73

Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для печати договоров с приложением из шаблонов. Быстрая подготовка заполненных договоров без ручного заполнения. Возможность использования дополнительных реквизитов контрагентов и номенклатуры Быстрое сохранение файлов договоров и отправка по электронной почте. Решение в Реестре отечественного ПО.

15000 руб.

20.04.2016    64141    189    107    

103

Роли и права Системный администратор Платформа 1С v8.3 1С:Документооборот Управленческий учет Платные (руб)

Внешняя обработка позволит быстро добавить участников в любое количество документов, заменить целиком набор участников или удалить лишь некоторых из них для одного объекта или группы документов.

3500 руб.

23.10.2015    64511    116    25    

129

Пакетная печать Оптовая торговля Печатные формы Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обработка содержит новую форму Транспортной накладной с 01.01.2021 г. (в ред. Постановления Правительства РФ от 30.11.2021 № 2116) В отличие от внешних печатных форм, подключаемых к документу реализации, позволяет вести отдельный журнал документов. Дополнительным преимуществом является возможность формирования документов за поставщика.

2280 руб.

15.04.2014    54041    54    51    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1332 05.10.21 22:06 Сейчас в теме
Рассматривали использование отдельного HTTP сервиса для преобразования?
Первое что нагуглил https://gotenberg.dev/, через модуль LibreOffice решает данную задачу.
2. Aletar 14.11.22 11:24 Сейчас в теме
(1) Да, метод хороший. Тоже его использовал.

На инфостарте уже предлагали похожий вариант: https://infostart.ru/1c/articles/1592714/

Upd: хотя на момент комментарий ещё не предлагали )
Оставьте свое сообщение