|
Заполнить Word-документ на сервере и сохранить там же как pdf | ☑ | ||
---|---|---|---|---|
0
topa310
09.10.24
✎
11:36
|
Доброго времени суток, форумчане!
Вот уже три тысячи лет бьюсь над тем, чтобы заставить 1С автоматически выполнять действия, описанные в названии темы. К сожалению, все мои изыскания ни к чему не привели. Однажды этот форум уже помог мне с совершенно нерешаемой задачей, потому суровая действительность привела меня снова к Вам. Суть того, что происходит: По информации, содержащейся в документе в 1С, нужно заполнить шаблон ворда, сохранить его в пдф и отправить по почте. Что я только не делал, ничего не помогает. Решение-заглушка было найдено: &НаКлиенте все работает, заполняется, сохраняет и отправляет без нареканий. Но тот же самый код не работает на сервере (не открывает ворд, хотя соответствующий ком-объект создает), и, что более странно для меня, даже через планировщик заданий Windows, который я заставляю открывать обработку с кодом &НаКлиенте, тоже стопорится на моменте активизации Ворда. Прилагаю рабочий код, который решает проблему, если вручную запускать его через обработку: &НаКлиенте Процедура ТестПрием(Команда) Получить_РезультатыОпроса(); //Получаем информацию из документов в 1С ЗаполнитьТЗНаОтправкуСертификатов(); //Заполняем ТЗ на форме, если делать &НаСервере, просто заполняем ТЗ Для Каждого СтрТаб Из ТЗНаОтправкуСертификатов Цикл ПослатьСерт = ЛОЖЬ; ДокументОпроса=Найти_документ_опрос_по_GUID_ДляСертификатов(СтрТаб.GUID); Если Число(СтрТаб.Комментарий)>14 Тогда Попытка Идентификатор = ПолучитьДанныеМакета(); //Получаем макет, двоичные данные МакетСертификата = ПолучитьИзВременногоХранилища(Идентификатор); ИмяФайла = "shablonmaketTEST.doc"; ПолноеИмяФайла = "C:\AIS_RNG_PROG\Ethics_Surveys\"+ИмяФайла; МакетСертификата.Записать(ПолноеИмяФайла); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; //Выше мы получили макет и сохранили его на диск сервера (если выполняем обработку, подключившись удаленно к серверной машине) Попытка Word = Новый COMОбъект("Word.Application"); Word.Visible = Ложь; Word.Documents.Open(ПолноеИмяФайла); Документ = Word.ActiveDocument; Исключение Сообщить("Ошибка при попытке создать объект Ворд!"+ОписаниеОшибки()) КонецПопытки; ФИО = СокрЛП(СтрТаб.ФИО); ГодФормирования = ""+Год(ТекущаяДата())+" г."; ГодФормирования = СтрЗаменить(ГодФормирования,Символы.НПП,""); Документ.Select(); Word.Selection.Find.Execute("{ФИО}"); Word.Selection.Text = СокрЛП(ФИО); Документ.Select(); Word.Selection.Find.Execute("{ГФ}"); Word.Selection.Text = ГодФормирования; Документ.SaveAs("C:\AIS_RNG_PROG\Ethics_Surveys\Sertificates\Sertificate"+"_"+СокрЛП(ФИО)+"_"+СтрТаб.GUID+".pdf",17); Документ.Close(0); Word.Quit(0); Если СокрЛП(ФИО) <> "" Тогда Сообщить("Отправлен сертификат. Сотрудник: "+СтрТаб.Сотрудник); ОтметитьФормированиеСертификата(ДокументОпроса); ПослатьСерт = ИСТИНА; Иначе Продолжить КонецЕсли; КонецЕсли; Если ПослатьСерт Тогда ПослатьСертификат(СтрТаб.Почта,"C:\AIS_RNG_PROG\Ethics_Surveys\Sertificates\Sertificate"+"_"+СокрЛП(ФИО)+"_"+СтрТаб.GUID+".pdf"); Иначе ПроцедурыПриНеудачномТесте(ДокументОпроса, СтрТаб.Почта, СтрТаб.Сотрудник); КонецЕсли; КонецЦикла; //Завершаем работу системы //ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры Этот код прекрасно работает, если его запускаю я сам, находясь на серверной машине. Запуск требуется приблизительно раз в неделю и это не очень утомительно, но сам факт... Хотелось бы автоматизировать. Макеты пробовал разные: двоичные данные и activedocument, но сути проблемы это не поменяло, при выполнении &НаСервере он отказывается открывать Word-документ (а точнее валится на строке Документ = Word.ActiveDocument; , так как, по мнению программы, строчкой выше не удалось открыть ни один Word-документ. Как я уже писал в другой своей теме -- не стесняйтесь предложить свое решение или уточнение, даже если я его уже описал или пробовал делать. Найти решение нужно только для формирования заполненного по шаблону ворда и сохранения его в пдф файл на сервере, так как в ходе моих изысканий я сделал регламент, который, при наличии уже сформированных пдф-документов, спокойно отправляет их по почте куда нужно. |
|||
1
osa1C
09.10.24
✎
11:56
|
(0) Что за хотелка делать это все на сервере? Создай технического клиента и от его имени делай что тебе надо регламентным заданием. И будет тебе счастье. Если надо обязательно копии файлов сохранять на сервере, открой доступ к расшаренной папке на сервере и сохраняй туда.
|
|||
2
topa310
09.10.24
✎
12:21
|
(1)
Да это не хотелка, это просто я не знаю, как реализовать по другому. Технический клиент -- это что? Пользователь, под которым это будет выполняться? |
|||
3
osa1C
09.10.24
✎
12:48
|
(2) Просто пользователь в базе, под которым никто физически не работает, да и не знает про него. Под этим пользователем делаешь запуск программы в регламентном задании выполняешь свой код, который у тебя и так работает. Регламентное задание настраиваешь запускаться раз в неделю, судя по твоему тексту, тебе этого достаточно.
|
|||
4
osa1C
09.10.24
✎
12:49
|
||||
5
topa310
09.10.24
✎
13:09
|
У меня код &НаКлиенте и 1С ругается, говорит, что нельзя настроить расписание
|
|||
6
topa310
09.10.24
✎
13:09
|
(4) Сейчас глянем
|
|||
7
osa1C
09.10.24
✎
13:14
|
(5) Обязательное требование заключается в том, что код должен размещаться в т.н. общем модуле. При этом вызываемая процедура должна иметь атрибут экспорт.
|
|||
8
osa1C
09.10.24
✎
13:15
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |