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

1. SergVB 21 20.11.20 09:51 Сейчас в теме +1 $m
Здравствуйте. Формирую файл Word (ActiveDocument) на сервере, сохраняю в нужную папку, затем открываю на клиенте. Но база файловая и при попытке использовать
Word.Application.Quit();
закрываются все документы Word на клиенте. Попробовал через
Документ.Close();
и вроде как всё хорошо, но так работает только в режиме отладки. Если режим отключить, то 1С вываливается в ошибку и закрывается (Может причина в том, что использую ДлительныеОперации?). Подскажите, пожалуйста, как решить такую проблему?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ixijixi 1761 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")
Спасибо. Попробую.
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день