Имя: Пароль:
1C
1С v8
Ошибка при закрытии объекта Excel
,
0 moonlight
 
22.02.17
20:27
Добрый день!

Есть процедура, которая закрывается перед закрытием формы

Процедура ЗакрытьФайл()
    Если Excel<>Неопределено тогда
        Excel.ActiveWorkbook.Close(False);
        
        Excel.Quit();    
    КонецЕсли;    
КонецПроцедуры

форма закрывается без ошибок, Excel удаляется из процессов.

При выборе в форме другого файла я хочу также закрыть текущую книгу и вызываю эту же процедуру: ЗакрытьФайл()

Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";

    Если ДиалогВыбора.Выбрать() Тогда
        ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
        ЗакрытьФайл();
        ОткрытьФайл();
        ЛистыПриИзменении(ЭлементыФормы.Листы);
    Иначе
        Возврат;
    КонецЕсли;
КонецПроцедуры

Процедура ОткрытьФайл()
    
    
    //подключаемся к Excel
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ПутьКФайлу);
        Состояние("Обработка файла Microsoft Excel...");
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;

    ЭлементыФормы.Листы.СписокВыбора.Очистить();
    Для нл=1 по Excel.Sheets().Count цикл
        Если Excel.Sheets(нл).Visible тогда
            ЭлементыФормы.Листы.СписокВыбора.Добавить(нл,Excel.Sheets(нл).Name);
        КонецЕсли;    
    КонецЦикла;                      
    ЭлементыФормы.Листы.Значение=1;
        
КонецПроцедуры

и получаю ошибку
http://clip2net.com/s/3HNBn16

Самое интересное, что если иду мониторю отладчиком то проходит код процедуры ЗакрытьФайл() без ошибок.

В чем ошибка?
1 Мимохожий Однако
 
22.02.17
20:31
Если встать на строку с ошибкой, что вычисляется?  Может быть, там уже другой значение, которое ты не ожидаешь
2 Fram
 
22.02.17
20:31
(0) а при выборе первого файла после открытия формы ты что пытаешься закрыть?
3 moonlight
 
22.02.17
20:39
(2)

Нет! я моделирую ситуацию если пользователь не тот файл выбрал и выбирает другой, поэтому я хочу закрыть открытый файл
4 moonlight
 
22.02.17
20:40
(1) ка и надо ComObject со свойством ActiveWorkbook
5 Fram
 
22.02.17
20:45
(3) если ты на вопрос Что отвечаешь Нет, то диалога у нас не получится
6 moonlight
 
22.02.17
20:46
(5) пытаюсь закрыть открытый файл )
7 Fram
 
22.02.17
20:47
по другом спрошу.. когда ты только открыл свою форму и первый раз выбрал файл, у Excel.ActiveWorkbook какое значение будет?
8 Fram
 
22.02.17
20:51
(6) откуда открытый файл если ты только что открыл форму? у тебя в ПриОткрытии какой то файл открывается?
9 moonlight
 
22.02.17
20:52
10 moonlight
 
22.02.17
20:52
(8) когда я выбираю файл то при событии выбора в поле вызывается процедура ОткрытьФайл()
11 Fram
 
22.02.17
20:54
(10) а это что?
Если ДиалогВыбора.Выбрать() Тогда
        ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
------> ЗакрытьФайл();
        ОткрытьФайл();
12 moonlight
 
22.02.17
20:56
(11)

при первом открытии в переменной Excel ничего нет поэтому при первом вызове ЗакрытьФайл() там условие на НЕОПРЕДЕЛЕНО
13 moonlight
 
22.02.17
20:58
14 Fram
 
22.02.17
21:01
(13) ты лучше отладчик там останови и посмотри Excel.ActiveWorkbook
15 moonlight
 
22.02.17
21:06
(14) Неопределено
16 Fram
 
22.02.17
21:09
(15) еще вопросы есть?
17 moonlight
 
22.02.17
21:13
(16)конечно! Почему если я закрываю форму а не выбираю другой файл эта процедура не выдает ошибок и привыборе в поле пути другого файла Excel.ActiveWorkbook=Неопределено?
18 moonlight
 
22.02.17
21:16
Если процедуру ЗакрытьФайл() ставлю перед выбором файла
ЗакрытьФайл();

    Если ДиалогВыбора.Выбрать() Тогда
        Попытка
.....

тогда все работает.

В процедуре Открыть файл где ссылка на поле ПутьКФайлу используется в методе Open()

Процедура ОткрытьФайл()
    
    
    //подключаемся к Excel
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ПутьКФайлу);
        Состояние("Обработка файла Microsoft Excel...");

/////

Думаю в этом проблема
19 Fram
 
22.02.17
21:23
(18) не вижу разницы с (0)
и не понял вторую часть твоего поста про ОткрытьФайл. это к чему?
20 Fram
 
22.02.17
21:26
исходя из того что выложил сюда ошибка твоя по логике вылезает когда предыдущий файл по какой то причине не смог открыться. то есть объект Excel создался а Open не сработал. тогда ActiveWorkbook будет неопределен
21 moonlight
 
22.02.17
21:27
(19) вот так ошибка
http://clip2net.com/s/3HNIqC5

а вот так нет ошибки
http://clip2net.com/s/3HNIwJB
22 Fram
 
22.02.17
21:34
(21) бред!
к тому же 2ой вариант точно должен  выдать ActiveWorkbook = неопределено, если 2 раза подряд пользователь нажмет отмену в диалоге выбора файла
23 Fram
 
22.02.17
21:44
кароч не парь моск ни нам ни себе. добавь еще одну проверку и вопрос закрыт
Если Excel<>Неопределено И Excel.ActiveWorkbook<>Неопределено Тогда
...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.