COMОбъект("Excel.Application")

1. nnsidorov22 22.02.18 14:22 Сейчас в теме
Добрый день.
Фоновой процедурой формируются Excel файлы. Периодически задание падает и в журнале регистрации следующая ошибка:

Ошибка при вызове конструктора (COMОбъект)
по причине:

по причине:
-2147467262(0x80004002): Интерфейс не поддерживается

Ошибка падает на следующей строке:
ExcelApp 				= Новый COMОбъект("Excel.Application");


Причем падает не при первом её вызове, а где то на 15 раз.
Причину выяснить так и не удалось.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
14. NickNem 3 27.02.18 12:49 Сейчас в теме +1 $m
Так я и пытаюсь объяснить - схема "один файл - один ексель" неправильная
Правильная - "один ексель - все файлы"
Попробуйте, может полегчает
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user700035_6550355 35 22.02.18 14:38 Сейчас в теме
Отк
(1)
-2147467262(0x80004002): Интерфейс не поддерживается


Создаете ексельку, а дальше что с ним делаете?
4. nnsidorov22 22.02.18 15:31 Сейчас в теме
(2)
Для каждого СтрокаТаблицы Из РезультатТаблицей Цикл
	
	
	Если СтрокаТаблицы.Проект = NULL
		ИЛИ СтрокаТаблицы.ЦФО = NULL
		Тогда
		Продолжить
	КонецЕсли;
	
	//Попробуем найти шаблон и скопируем его в указанный каталог 
	
	ИмяФайлШаблона = "E:\Exchange_1C_ZUP\zachislenia.xls";
	ИмяФайлШаблонаФайл = Новый Файл(ИмяФайлШаблона);
	Если ИмяФайлШаблонаФайл.Существует() Тогда
		
		ПутьКФайлу_с_ЦФО = ПолучитьПолноеИмяФайла(СтруктураПараметров, СтрокаТаблицы.Проект, СтрокаТаблицы.ЦФО, Истина);
		
		КопироватьФайл(ИмяФайлШаблона, ПутьКФайлу_с_ЦФО + ".xls");
		
		ExcelApp 				= Новый COMОбъект("Excel.Application");
		МассивЕкселей.Добавить(ExcelApp);
		
		Книга = ExcelApp.WorkBooks.Open(ПутьКФайлу_с_ЦФО + ".xls");  //Открытие существующей книги (файла) Excel. 
		
		Лист = Книга.WorkSheets("ЗАЧИСЛЕНИЯ");  //Установка листа в качестве рабочего
		Книга.ActiveSheet.Unprotect(СтруктураПараметров.ПарольЗащитыЛиста);
		
		//Очистим строки с сотрудниками (если есть). По идее в шаблоне не должно быть лишнего, это перестраховка.
		ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
		Для к=0 По ВсегоСтрок-7 Цикл //Шапка состоит из 6 строк
			
			ТекСтр = ВсегоСтрок-к;
			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "Удаление строки: " + ТекСтр;
			Сообщение.Сообщить();
			
			СтрокаОтчета = Лист.Range(Строка(ТекСтр)+":"+Строка(ТекСтр));
			СтрокаОтчета.EntireRow.Delete();          
			
		КонецЦикла;
		
		
		СтрокаТаблицы.ФайлВыгрузки_XLS = Книга;
		
		ДБФ 					= Новый XBase;
		
		ФайлВыгрузки = Новый Файл(ПутьКФайлу_с_ЦФО);
		Если ФайлВыгрузки.Существует() Тогда
			ДБФ.ОткрытьФайл(ПутьКФайлу_с_ЦФО + ".dbf");
			ДБФ.ОчиститьФайл();
		Иначе                              
			ДобавитьПоля(ДБФ);
			Если СтрокаТаблицы.Проект = СтруктураПараметров.ПроектЗП Тогда
				ДБФ.Поля.Добавить("MAIN", 	"N", 1,  0);
			ИначеЕсли СтрокаТаблицы.Проект = СтруктураПараметров.ПроектПрочие Тогда
				ДБФ.Поля.Добавить("BIK", 	"S", 9,  0);	
			ИначеЕсли СтрокаТаблицы.Проект = СтруктураПараметров.ПроектКасса Тогда
				ДБФ.Поля.Добавить("KASSA", 	"N", 1,  0); 
			КонецЕсли;
			ДБФ.СоздатьФайл(ПутьКФайлу_с_ЦФО + ".dbf");
		КонецЕсли;      
		ДБФ.Кодировка = КодировкаXBase.OEM;  
		
		СтрокаТаблицы.ФайлВыгрузки_DBF = ДБФ;
		
		
	КонецЕсли;
	
	
КонецЦикла; //выборка строк из таблицы ЦФО
Показать
5. nnsidorov22 22.02.18 15:33 Сейчас в теме
(2) Далее заполняю фалы данными из 1С и сохраняю. Но до заполнения дело как я понял не доходит.
У меня с сервера приходят сообщения когда выполняется заполнение файлов.
3. NickNem 3 22.02.18 14:45 Сейчас в теме
Когда-то давно сталкивался с чем-то похожим, деталей не помню, но по-моему, оказалось что мешал пользователь, параллельно работающий (интерактивно) в excel
6. nnsidorov22 22.02.18 15:35 Сейчас в теме
(3)Это мало вероятно. Сервер не терминальный и все процессы Excel запущены от сервера 1С.
7. gradi 5 22.02.18 16:04 Сейчас в теме
не увидел где вы делаете экселю Quit.
8. nnsidorov22 22.02.18 16:15 Сейчас в теме
(7)Это происходит в самом конце, после заполнения файлов данными. Я не стал выкладывать всю процедуру, она очень объемная.
Но с большой вероятностью до заполнения и закрытия фалов дело не доходит, так как не приходит сообщение с сервера что идет заполнение файлов.
А оно выдается сразу же после их создания.
Кусок кода, где происходит закрытие файлов:

Для к=0 По МассивЕкселей.Количество()-1 Цикл
			
			ExcelApp = МассивЕкселей.Получить(к);
			ExcelApp.Quit();
			ExcelApp="";
			
		КонецЦикла;
9. Азверин 3 22.02.18 16:28 Сейчас в теме
Вчера наконец-то словил описание своей ошибки при загрузке данных из Excel в Заказ покупателя. Она тоже появляется периодически.
Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получение объекта COM: -2147467259 (0x800040025): Неопознанная ошибка.
Подскажите и мне, что это и как побороть.
10. NickNem 3 23.02.18 04:07 Сейчас в теме
А зачем, собственно, "массивЕкселей"?
Все в одном экземпляре что мешает делать?
Возможно, просто памяти не хватает... ошибка же возникает как раз при открытии ексел?
11. nnsidorov22 26.02.18 09:02 Сейчас в теме
(10)Нужен именно массив Экселей. Это некие сведения разделенные по ЦФО и проектам.
Ошибка падает на строке:

ExcelApp                 = Новый COMОбъект("Excel.Application");
12. NickNem 3 26.02.18 13:32 Сейчас в теме
зачем нужен массив?
Нужен...
это вообще-то не ответ на вопрос...

во всяком случае, у меня ощущение, что проблема именно в кол-ве экселей...
еще раз спрошу - что мешает обойтись одним экземпляром екселя?
13. nnsidorov22 27.02.18 09:06 Сейчас в теме
(12)Я же вам описал, что сведения деляться по ЦФО и проектам. Т.е. один файл это один ЦФО. А их может доходить до 20.
Одни и те же сведения могут один раз не выгрузиться, потом без ошибок выгружаются.
14. NickNem 3 27.02.18 12:49 Сейчас в теме +1 $m
Так я и пытаюсь объяснить - схема "один файл - один ексель" неправильная
Правильная - "один ексель - все файлы"
Попробуйте, может полегчает
15. nnsidorov22 05.03.18 16:57 Сейчас в теме
(14)Спасибо вам большое. Это решило мою проблему.
16. NickNem 3 05.03.18 21:55 Сейчас в теме
да не за что, рад был помочь, тем более земляку :-)
Оставьте свое сообщение

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