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 34 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 Сейчас в теме
да не за что, рад был помочь, тем более земляку :-)
Оставьте свое сообщение

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