Здравствуйте. Формирую файл Word (ActiveDocument) на сервере, сохраняю в нужную папку, затем открываю на клиенте. Но база файловая и при попытке использовать закрываются все документы Word на клиенте. Попробовал через и вроде как всё хорошо, но так работает только в режиме отладки. Если режим отключить, то 1С вываливается в ошибку и закрывается (Может причина в том, что использую ДлительныеОперации?). Подскажите, пожалуйста, как решить такую проблему?
Word.Application.Quit();
Документ.Close();
По теме из базы знаний
- Подключаемые печатные формы с .DOCX макетом без Word'а
- Оптимизация пакетной печати из 1С в MS Word
- Автоматическое формирование должностных инструкций
- Формирование документа MS Word с использованием БСП и программное добавление закладок
- Печать документов по шаблону MS Word с тегами для заполнения из 1С:ЗУП
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
вот пример нормально закрывает, правда активный документ, но можно допилить выбор
Прикрепленные файлы:
Тест_ОткрытьЗакрытьВорд.epf
(4) А с какой ошибкой закрывается-то? И кстати без разницы файловая/клиент-серверная (в последнем случае только в случае УФ заморочки с клиент-серверной архитектурой и передачей файла) одинаково код отрабатывать должен. И что есть режим отладки, не совсем понял? Запуск из под конфигуратора что ли?).
ЗЫ. И противоречишь сам себе - файл формируешь на сервере, а база файловая) Или формируешь в одной базе, а открываешь в другой? В общем код как формируешь/открываешь тоже неплохо бы увидеть.
ЗЫ. И противоречишь сам себе - файл формируешь на сервере, а база файловая) Или формируешь в одной базе, а открываешь в другой? В общем код как формируешь/открываешь тоже неплохо бы увидеть.
(5) (6) Прошу прощения, вот скрин. Сначала выходит серенькое окошко, но оно быстро закрывается. Текст ошибки из журнала событий Windows:
Имя сбойного приложения: 1CV8C.exe, версия: 8.3.16.1296, отметка времени: 0x5e709f64
Имя сбойного модуля: ole32.dll, версия: 6.1.7601.24537, отметка времени 0x5dce0da9
Код исключения: 0xc0000005
Смещение ошибки: 0x000841d6
Идентификатор сбойного процесса: 0x2c4
Время запуска сбойного приложения: 0x01d6bf1d31bc5348
Путь сбойного приложения: C:\Program Files\1cv8\8.3.16.1296\bin\1CV8C.exe
Путь сбойного модуля: C:\Windows\system32\ole32.dll
Код отчета: 809f4f16-2b10-11eb-924e-f46d04459f6e
Имя сбойного модуля: ole32.dll, версия: 6.1.7601.24537, отметка времени 0x5dce0da9
Код исключения: 0xc0000005
Смещение ошибки: 0x000841d6
Идентификатор сбойного процесса: 0x2c4
Время запуска сбойного приложения: 0x01d6bf1d31bc5348
Путь сбойного приложения: C:\Program Files\1cv8\8.3.16.1296\bin\1CV8C.exe
Путь сбойного модуля: C:\Windows\system32\ole32.dll
Код отчета: 809f4f16-2b10-11eb-924e-f46d04459f6e
Прикрепленные файлы:
(9) В общем модуле:
Макет= Документы.Блабла.ПолучитьМакет("МакетВорда");
Попытка
MSWord = Макет.Получить();
Word = MSWord.Application;
Word.Displayalerts = 0;
//MSWord.Application.Visible = 0;
Документ = Word.Documents(1);
//Документ.Activate();
ДлительныеОперации.СообщитьПрогресс(, "Блабла");
Путь = Объект.КаталогПротокола;
ПутьКФайлу = СохранениеФайла.СохранениеФайлаНаСервере(Параметры);
Возврат ПутьКФайлу;
Исключение
// Запись события в журнал
ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
Word.Application.Quit();
КонецПопытки;
Показать
(10) Все это вызывается из модуля формы:
&НаКлиенте
Процедура Сформировать()
Попытка
ДлительнаяОперация = СформироватьНаСервере();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
Оповещение = Новый ОписаниеОповещения("ЗавершениеФормированияДокумента", ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Формируется файл .
|Тип: Стандартный'");
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания);
Исключение
СобытиеИсключение ();
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция СформироватьНаСервере()
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "ФормированиеФайлаВорд.СформироватьНаСервере", Объект.Ссылка );
//Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, "ФормированиеФайлаВорд.СформироватьНаСервере",Объект.Ссылка );
КонецФункции
&НаКлиенте
Процедура ЗавершениеФормированияДокумента (Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда // Пользователь отменил задание.
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
ВызватьИсключение Результат.ПодробноеПредставлениеОшибки;
КонецЕсли;
Файл = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ЗапуститьПриложение("""" + Файл + """");
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
КонецПроцедуры
Показать
(19) Сделал
Так работает. Но в этом случае пользователь ничего не сможет сделать - ни взаимодействовать с интерфейсом, ни отменить выполнение.
&НаКлиенте
Процедура Сформировать()
Файл = СформироватьНаСервере();
ЗапуститьПриложение("""" + Файл + """");
КонецПроцедуры
&НаСервере
Функция СформироватьНаСервере()
Файл = ФормированиеФайлаВорд.СформироватьНаСервере (Объект.Ссылка);
Возврат Файл;
КонецФункции
Показать
"Код исключения: 0xc0000005" - это "в доступе отказано".
А что в переменной "файл"? Где он создастся? Точно в папке %temp%? Если пути к файлу нет, то система может попытаться создать его в папке по умолчанию, например в system32/ Может попробовать сначала явно создавать файл на диске по заранее известному и существующему пути, а затем только его запускать?
Файл = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ЗапуститьПриложение("""" + Файл + """");
ЗапуститьПриложение("""" + Файл + """");
А что в переменной "файл"? Где он создастся? Точно в папке %temp%? Если пути к файлу нет, то система может попытаться создать его в папке по умолчанию, например в system32/ Может попробовать сначала явно создавать файл на диске по заранее известному и существующему пути, а затем только его запускать?
(23) c0000005 - например https://support.microsoft.com/ru-ru/help/3080800/access-violation-c0000005-error-if-the-ncdautosetup-service-crashes-in
Я бы попробовал через ПолучитьИмяВременногоФайла("docx")
Я бы попробовал через ПолучитьИмяВременногоФайла("docx")
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Файл = ПолучитьИмяВременногоФайла("docx");
ДвоичныеДанные.Записать(Файл);
ЗапуститьПриложение("""" + Файл + """");
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот