Ошибка Word при формировании

1. SergVB 21 20.11.20 09:51 Сейчас в теме +1 $m
Здравствуйте. Формирую файл Word (ActiveDocument) на сервере, сохраняю в нужную папку, затем открываю на клиенте. Но база файловая и при попытке использовать
Word.Application.Quit();
закрываются все документы Word на клиенте. Попробовал через
Документ.Close();
и вроде как всё хорошо, но так работает только в режиме отладки. Если режим отключить, то 1С вываливается в ошибку и закрывается (Может причина в том, что использую ДлительныеОперации?). Подскажите, пожалуйста, как решить такую проблему?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ixijixi 1794 20.11.20 10:26 Сейчас в теме
Попробуй
Word = Неопределено;
Если все документы на сервере сохранены и экземпляр Word больше не нужен, то должно сработать
3. soft_wind 20.11.20 11:14 Сейчас в теме
вот пример нормально закрывает, правда активный документ, но можно допилить выбор
Прикрепленные файлы:
Тест_ОткрытьЗакрытьВорд.epf
4. SergVB 21 20.11.20 11:47 Сейчас в теме
(2) Не работает.

(3) Та же самая проблема, в режиме отладки работает, без - 1с закрывается с ошибкой.
5. ZloyProger 8 20.11.20 12:07 Сейчас в теме
(4) А с какой ошибкой закрывается-то? И кстати без разницы файловая/клиент-серверная (в последнем случае только в случае УФ заморочки с клиент-серверной архитектурой и передачей файла) одинаково код отрабатывать должен. И что есть режим отладки, не совсем понял? Запуск из под конфигуратора что ли?).
ЗЫ. И противоречишь сам себе - файл формируешь на сервере, а база файловая) Или формируешь в одной базе, а открываешь в другой? В общем код как формируешь/открываешь тоже неплохо бы увидеть.
7. SergVB 21 20.11.20 12:15 Сейчас в теме
(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
Прикрепленные файлы:
6. UberElder 20.11.20 12:10 Сейчас в теме
Скриншот ошибки в студию пожалуйста!
8. ZloyProger 8 20.11.20 12:21 Сейчас в теме
(7) Разрядность какая у 1с/word? Попробуй офис переустановить, мб криво встал (очень похоже что dll-ка глючит). Кстати документ сохраняешь и потом открываешь не модифицируется ли он? И при закрытии пытается изменения сохранить, но вылетает. К
9. SergVB 21 20.11.20 12:24 Сейчас в теме
(8) Проверено на двух системах (Win 7 х32 и Win 10 x64). Одинаково.
не модифицируется ли он?
нет
И при закрытии пытается изменения сохранить, но вылетает
нет
1С х32
10. SergVB 21 20.11.20 12:27 Сейчас в теме
(9) В общем модуле:
Макет= Документы.Блабла.ПолучитьМакет("МакетВорда");

	Попытка
		MSWord = Макет.Получить();

		Word = MSWord.Application;
		Word.Displayalerts = 0;
		//MSWord.Application.Visible = 0;
		Документ = Word.Documents(1);
		//Документ.Activate();
		

		ДлительныеОперации.СообщитьПрогресс(, "Блабла");
		
		
		Путь = Объект.КаталогПротокола;
		ПутьКФайлу = СохранениеФайла.СохранениеФайлаНаСервере(Параметры);

		Возврат ПутьКФайлу;
		
	Исключение
		
		// Запись события в журнал 
		
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"),
		УровеньЖурналаРегистрации.Ошибка,,,
		ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ВызватьИсключение;
		Word.Application.Quit();	
	КонецПопытки;
Показать
12. SergVB 21 20.11.20 12:32 Сейчас в теме
(10) Все это вызывается из модуля формы:
&НаКлиенте
Процедура Сформировать()
Попытка
			ДлительнаяОперация = СформироватьНаСервере();
			
			ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
			Оповещение = Новый ОписаниеОповещения("ЗавершениеФормированияДокумента", ЭтотОбъект);
			ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
			ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
			ПараметрыОжидания.ВыводитьСообщения = Истина;
			ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Формируется файл .
			|Тип: Стандартный'");
			
			ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания);
			
		Исключение
			СобытиеИсключение ();
		КонецПопытки;
КонецПроцедуры

&НаСервере
Функция СформироватьНаСервере()
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
	Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "ФормированиеФайлаВорд.СформироватьНаСервере", Объект.Ссылка ); 
	//Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, "ФормированиеФайлаВорд.СформироватьНаСервере",Объект.Ссылка );
КонецФункции

&НаКлиенте
Процедура ЗавершениеФормированияДокумента (Результат, ДополнительныеПараметры) Экспорт
	
	
	Если Результат = Неопределено Тогда // Пользователь отменил задание.
		Возврат;
	КонецЕсли;
	
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.ПодробноеПредставлениеОшибки;
	КонецЕсли;
	
	Файл = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
	
	ЗапуститьПриложение("""" + Файл + """");

	УдалитьИзВременногоХранилища(Результат.АдресРезультата);

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

Показать
11. vv2 20.11.20 12:31 Сейчас в теме
А если так ?
Документ.Close(-1,1);
13. SergVB 21 20.11.20 12:35 Сейчас в теме
(11) Та же ошибка. Программа закрывается.
14. EVKash 14 20.11.20 12:44 Сейчас в теме
(13) платформа какая? увидел...
на другой пробовали?
15. SergVB 21 20.11.20 12:48 Сейчас в теме
(14) Пробовал 8.3.16 (несколько релизов), 8.3.15 x64. Результат одинаковый.
16. ZloyProger 8 20.11.20 12:53 Сейчас в теме
(15) Я правильно понял - если запускаешь из-под конфигуратора в режиме отладки - работает, если просто клиента запускаешь - вылетает?
17. SergVB 21 20.11.20 12:54 Сейчас в теме
18. SergVB 21 20.11.20 12:56 Сейчас в теме
(16) В режиме отладки не вызывается обработчик ожидания, может в этом дело?
19. ZloyProger 8 20.11.20 12:58 Сейчас в теме
(17) Попробуй убери длительные операции, переделай на обработку ожидания и проверь, если взлетит, значит в эту сторону копай.
20. SergVB 21 20.11.20 13:15 Сейчас в теме
(19) Сделал
&НаКлиенте
Процедура Сформировать()
Файл =  СформироватьНаСервере();
ЗапуститьПриложение("""" + Файл + """");
КонецПроцедуры

&НаСервере
Функция СформироватьНаСервере()
	Файл = ФормированиеФайлаВорд.СформироватьНаСервере (Объект.Ссылка);
	Возврат Файл;
КонецФункции
Показать
Так работает. Но в этом случае пользователь ничего не сможет сделать - ни взаимодействовать с интерфейсом, ни отменить выполнение.
21. SergVB 21 24.11.20 07:06 Сейчас в теме
Ни у кого больше нет никаких мыслей?
22. v3rter 04.12.20 00:51 Сейчас в теме
"Код исключения: 0xc0000005" - это "в доступе отказано".

Файл = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ЗапуститьПриложение("""" + Файл + """");


А что в переменной "файл"? Где он создастся? Точно в папке %temp%? Если пути к файлу нет, то система может попытаться создать его в папке по умолчанию, например в system32/ Может попробовать сначала явно создавать файл на диске по заранее известному и существующему пути, а затем только его запускать?
23. SergVB 21 04.12.20 09:31 Сейчас в теме
(22) В переменной "файл" указан конкретный путь к файлу.
Код исключения: 0xc0000005" - это "в доступе отказано"
Откуда такая информация? И почему все работает если включить РежимОтладки?
24. v3rter 04.12.20 17:33 Сейчас в теме
(23) c0000005 - например https://support.microsoft.com/ru-ru/help/3080800/access-violation-c0000005-error-if-the-ncdautosetup-service-crashes-in

Я бы попробовал через ПолучитьИмяВременногоФайла("docx")

	ДвоичныеДанные = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
	Файл = ПолучитьИмяВременногоФайла("docx"); 
	ДвоичныеДанные.Записать(Файл);
	ЗапуститьПриложение("""" + Файл + """");
	УдалитьИзВременногоХранилища(Результат.АдресРезультата);
25. SergVB 21 04.12.20 17:37 Сейчас в теме
(24)
c0000005 - например
судя по описанию в ссылке, данная ошибка никаким образом не относится к моей проблеме.
Я бы попробовал через ПолучитьИмяВременногоФайла("docx")
Спасибо. Попробую.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот