Имя: Пароль:
1C
1С v8
Ошибка программного закрытия Excel файла
,
0 akcent25
 
08.10.12
16:42
Доброго дня всем! При попытке закрытия файла Excel, данное приложение вылетает с ошибкой. использую следующий code:                     Функция ОткрытьФайл(ИмяФайла)
   
   Результат = Неопределено;
   #Если Клиент Тогда
       Состояние("Идет установка связи, ждите.....");
   #КонецЕсли
   
   Попытка
       Результат = Новый Структура();
       
       BaseOLE = Новый COMОбъект("Excel.Application");
       Результат.Вставить("EXCEL", BaseOLE);
       
       ExcelФайл = BaseOLE.WorkBooks.Open(ИмяФайла);
       Результат.Вставить("ExcelФайл", ExcelФайл);

       
       Результат.Вставить("Лист", ExcelФайл.Sheets(1));

   Исключение
       Результат = Неопределено;
       #Если Клиент Тогда
           Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
       #КонецЕсли
   КонецПопытки;
   
   Возврат Результат;
КонецФункции                                                               Затем выполняется следующая процедура: Процедура                                                       Попытка
       ОбъектExcel = Результат;        
       ОбъектExcel.Excel.DisplayAlerts = 0;
       ОбъектExcel.ExcelФайл.Close();
       ОбъектExcel.Excel.DisplayAlerts = 1;
       ОбъектExcel.Excel.Quit();
       ОбъектExcel.Excel = Неопределено;
       
       
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
КонецПроцедуры

В Исключение не заходит, ошибка закрытия файла Excel вылетает на строке ОбъектExcel.Excel.Quit(); В чем может быть дело?
1 Botanik
 
08.10.12
16:51
Для каждого Файлик Из МассивФайлов Цикл
       
       Если ВыборПапки Тогда
           ВременныйПуть            = Файлик.ПолноеИмя;
           ЭлементыФормы.Надпись5.Заголовок = Файлик.Имя;
           ЭлементыФормы.Надпись4.Заголовок = "Сейчас обрабатывается файл:";
       Иначе
           ВременныйПуть = Файлик;
           ЭлементыФормы.Надпись4.Заголовок = "";
       КонецЕсли;
       
       Попытка
           Excel = Новый COMОбъект("Excel.Application");
           Excel.WorkBooks.Open(ВременныйПуть);
           Состояние("Обработка файла Microsoft Excel...");
           ExcelЛист = Excel.Sheets(1);
       Исключение
           Сообщить("Ошибка, не установлен Microsoft Excel");
           Возврат;
       КонецПопытки;
       
       ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
       RowCount = ActiveCell.Row;
       ColumnCount = ActiveCell.Column;
       
       прерывалка = 0;
       
       ЭлементыФормы.прерывалка.МаксимальноеЗначение = RowCount;
       
       Для НомерСтроки = пСтрока По RowCount Цикл
           
           Контрагент            = ExcelЛист.Cells(НомерСтроки, 2).Value;
           Договор                = ExcelЛист.Cells(НомерСтроки, 3).Value;
           Валюта                = ExcelЛист.Cells(НомерСтроки, 4).Value;
           Организация            = ExcelЛист.Cells(НомерСтроки, 5).Value;
           НомерПриложения        = ExcelЛист.Cells(НомерСтроки, 6).Value;
           АдресДоставки        = ExcelЛист.Cells(НомерСтроки, 7).Value;
           КомментарийСтатуса    = ExcelЛист.Cells(НомерСтроки, 8).Value;
           Ориентир            = ExcelЛист.Cells(НомерСтроки, 9).Value;
           Вывеска                = ExcelЛист.Cells(НомерСтроки, 10).Value;
           Дни                    = ExcelЛист.Cells(НомерСтроки, 11).Value;
           Интервал            = ExcelЛист.Cells(НомерСтроки, 12).Value;
           ПорядокДоставки        = ExcelЛист.Cells(НомерСтроки, 13).Value;
           КодСчета1С            = ExcelЛист.Cells(НомерСтроки, 14).Value;
           СпецификацияС        = ExcelЛист.Cells(НомерСтроки, 15).Value;
           СпецификацияПО        = ExcelЛист.Cells(НомерСтроки, 16).Value;
           ВыставлениеСчетовС    = ExcelЛист.Cells(НомерСтроки, 17).Value;
           ПериодСчета            = ExcelЛист.Cells(НомерСтроки, 18).Value;
           Ковер                = ExcelЛист.Cells(НомерСтроки, 19).Value;
           КоличествоКовров    = ExcelЛист.Cells(НомерСтроки, 20).Value;
           СуммаЗа28ДнейИзФайла= ExcelЛист.Cells(НомерСтроки, 21).Value;
           ВидОграничения      = ExcelЛист.Cells(НомерСтроки, 23).Value;
           ЧислоОграничения    = ExcelЛист.Cells(НомерСтроки, 24).Value;        
           ВидОплаты            = ExcelЛист.Cells(НомерСтроки, 25).Value;
           ПричинаСоздания        = ExcelЛист.Cells(НомерСтроки, 26).Value;
           Прайс                = ExcelЛист.Cells(НомерСтроки, 27).Value;
           ПериодРасчета        = ExcelЛист.Cells(НомерСтроки, 28).Value;
           Кассир                = ExcelЛист.Cells(НомерСтроки, 29).Value;
           Маршрут                = ExcelЛист.Cells(НомерСтроки, 30).Value;
           ДоставкаСчетаК        = ExcelЛист.Cells(НомерСтроки, 31).Value;
           ДоставкаСчетаМ        = ExcelЛист.Cells(НомерСтроки, 32).Value;
           Менеджер            = ExcelЛист.Cells(НомерСтроки, 33).Value;
           КодКарточкиКлиента    = ExcelЛист.Cells(НомерСтроки, 34).Value;
           //
           
           // пустая строка - конец файла близок
           Если НЕ ЗначениеЗаполнено(Контрагент) Тогда Продолжить; КонецЕсли;        
           
           НовСтрока = ТабДанных.Добавить();
           НовСтрока.Контрагент            = СтрЗаменить(СокрЛП(Контрагент), Символ(160), "");
           НовСтрока.Договор                = СтрЗаменить(СокрЛП(Договор), Символ(160), "");
           НовСтрока.Валюта                = СтрЗаменить(СокрЛП(Валюта), Символ(160), "");
           НовСтрока.Организация            = СтрЗаменить(СокрЛП(Организация), Символ(160), "");
           НовСтрока.НомерПриложения      = СтрЗаменить(СокрЛП(НомерПриложения), Символ(160), "");
           НовСтрока.АдресДоставки        = СтрЗаменить(СокрЛП(АдресДоставки), Символ(160), "");
           НовСтрока.КомментарийСтатуса    = СтрЗаменить(СокрЛП(КомментарийСтатуса), Символ(160), "");
           НовСтрока.Ориентир                = СтрЗаменить(СокрЛП(Ориентир), Символ(160), "");
           НовСтрока.Вывеска                = СтрЗаменить(СокрЛП(Вывеска), Символ(160), "");
           НовСтрока.Дни                    = СтрЗаменить(СокрЛП(Дни), Символ(160), "");
           НовСтрока.Интервал                = СтрЗаменить(СокрЛП(Интервал), Символ(160), "");
           НовСтрока.ПорядокДоставки       = СтрЗаменить(СокрЛП(ПорядокДоставки), Символ(160), "");
           
           Попытка
               НовСтрока.КодСчета1С            = Число(СтрЗаменить(СокрЛП(КодСчета1С), Символ(160), ""));
           Исключение
               НовСтрокаКодСчета1С                = 0;
           КонецПопытки;
           
           Попытка
               НовСтрока.СпецификацияС        = Дата(СтрЗаменить(СокрЛП(СпецификацияС), Символ(160), ""));
           Исключение
               НовСтрока.СпецификацияС        = СтрЗаменить(СокрЛП(СпецификацияС), Символ(160), "");
           КонецПопытки;
           Попытка
               НовСтрока.СпецификацияПО        = Дата(СтрЗаменить(СокрЛП(СпецификацияПО), Символ(160), ""));
           Исключение
               НовСтрока.СпецификацияПО        = СтрЗаменить(СокрЛП(СпецификацияПО), Символ(160), "");
           КонецПопытки;    
           Попытка
               НовСтрока.ВыставлениеСчетовС    = Дата(СтрЗаменить(СокрЛП(ВыставлениеСчетовС), Символ(160), ""));
           Исключение
               НовСтрока.ВыставлениеСчетовС    = СтрЗаменить(СокрЛП(ВыставлениеСчетовС), Символ(160), "");
           КонецПопытки;
           НовСтрока.КодКарточкиКлиента    = СтрЗаменить(СокрЛП(КодКарточкиКлиента), Символ(160), "");
           НовСтрока.Ковер                    = СтрЗаменить(СокрЛП(Ковер), Символ(160), "");
           НовСтрока.ПериодСчета            = СтрЗаменить(СокрЛП(ПериодСчета), Символ(160), "");
           НовСтрока.КоличествоКовров        = СтрЗаменить(СокрЛП(КоличествоКовров), Символ(160), "");
           НовСтрока.ПериодРасчета        = СтрЗаменить(СокрЛП(ПериодРасчета), Символ(160), "");
           НовСтрока.ВидОплаты            = СтрЗаменить(СокрЛП(ВидОплаты), Символ(160), "");
           НовСтрока.ПричинаСоздания        = СтрЗаменить(СокрЛП(ПричинаСоздания), Символ(160), "");
           НовСтрока.Прайс                    = СтрЗаменить(СокрЛП(Прайс), Символ(160), "");
           НовСтрока.СуммаЗа28ДнейИзФайла  = СтрЗаменить(СокрЛП(СуммаЗа28ДнейИзФайла), Символ(160), "");
           НовСтрока.Кассир                  = СтрЗаменить(СокрЛП(Кассир), Символ(160), "");
           НовСтрока.Маршрут                = СтрЗаменить(СокрЛП(Маршрут), Символ(160), "");
           НовСтрока.ДоставкаСчетаК          = СтрЗаменить(СокрЛП(ДоставкаСчетаК), Символ(160), "");
           НовСтрока.ДоставкаСчетаМ          = СтрЗаменить(СокрЛП(ДоставкаСчетаМ), Символ(160), "");
           НовСтрока.Менеджер                = СтрЗаменить(СокрЛП(Менеджер), Символ(160), "");
           НовСтрока.ВидОграничения        = СтрЗаменить(СокрЛП(ВидОграничения), Символ(160), "");
           НовСтрока.ЧислоОграничения        = СтрЗаменить(СокрЛП(ЧислоОграничения), Символ(160), "");
           
           прерывалка = прерывалка + 1;
           
           //Если прерывалка > 100 Тогда Прервать; КонецЕсли;
           
       КонецЦикла;
       
       Excel.Application.Quit();
       Excel = Неопределено;
2 Botanik
 
08.10.12
16:52
Там дофига, но код рабочий, делай по аналогии.
3 akcent25
 
08.10.12
16:53
(1) Спасибо, сейчас попробую.
4 akcent25
 
08.10.12
17:04
(1) не помогло....код который в (0) тоже рабочий, судя по http://infostart.ru/public/57401/ и на мисте есть пример такого кода, но хз почему в моем случае не работает.
5 akcent25
 
08.10.12
17:20
Help! Неужели никаких мыслей на этот счет?
6 zladenuw
 
08.10.12
17:29
BaseOLE.Excel.Quit();
7 DJ Anthon
 
08.10.12
17:30
тоже такое было. там какой-то еще был параметр, кроме DisplayAlerts. поколупай примеры в инете, где-то должен был всплыть. у меня это еще до 1С было, очень давно
8 akcent25
 
08.10.12
17:32
Здесь у меня тож самое:
Результат = Новый Структура();
BaseOLE = Новый COMОбъект("Excel.Application");
Результат.Вставить("EXCEL", BaseOLE);
..................
Результат.Excel.Quit();

Не работает, вылетает ошибка Excel и файл не закрывается.
9 akcent25
 
08.10.12
17:34
(7) у остальных Результат.Excel.Quit() прокатывает, от версии Excel что ли зависит, у меня 2010.
10 zladenuw
 
08.10.12
17:36
в попытку и смотри описание ошибки
11 akcent25
 
08.10.12
17:45
(10)У меня это в попытке выполняется, в исключение не заходит отладчик, вылетает  сразу после Excel.Quit()
12 zladenuw
 
08.10.12
17:46
(10) внимательно читай! добавить в исключение СОобщить(ОписаниеОшибки())
13 DJ Anthon
 
08.10.12
17:55
(12) олешке обычно пофигу на эти исключения
14 akcent25
 
08.10.12
18:10
(13) реально по фиг, он свою ошибку выдает Microsoft Excel приложение будет закрыто. Жутко извиняемся)).
15 zladenuw
 
08.10.12
18:17
16 DJ Anthon
 
08.10.12
18:32
(14) обновы все накатил?
17 akcent25
 
08.10.12
18:40
(15) Я чуть не подпрыгнул от радости что оно закрылось без ошибок....но спустя 2 сек вылезла таже ошибка! Жуть какая то.
(16) ты про  обновы 1с? платформа 8.2.15.294.
18 akcent25
 
08.10.12
18:48
Сам файл то нормально закрывается, как положено, вот думаю может у винды настроить  запрет на вывод сообщений об ошибках, тоже вариант))
19 Aprobator
 
08.10.12
18:50
BaseOLE.Quit()
20 akcent25
 
08.10.12
18:52
(19)Пробовал уже)) не катит.
21 DJ Anthon
 
08.10.12
18:53
(17) офиса, ессно. ну и винды
22 DJ Anthon
 
08.10.12
18:53
попробуй другую платформу, не 1С. си, например. ;))) другую тачку пробовал?
23 akcent25
 
08.10.12
18:59
(22)ага, сейчас на си попробую)).
(21) я что то не в курсе какие у заказчика обновы установлены. Если ничего не поможет, начну разные варианты пробовать.
24 vmv
 
08.10.12
19:28
Excel.Application надо сначала крыть - ехсель-книги там или шо за чушь через ехзит(), я на попытки ставлю когда глючит
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан