gifts2017

Как предотвратить возникновение ошибки при одновременном обращении пользователя и обработки к Excel.

Опубликовал Александр Кораблев (akor77) в раздел Обмен - Загрузка и выгрузка в Excel

Если открыт (или открыть) файл Excel (к которому будет обращаться обработка), и активировать  какую-либо ячейку или любое диалоговое окно  и при этом обработка обратится к этому файлу, то возникнет ошибка. Так же, ошибка может возникнуть, если обработка запустила один экземпляр Excel, если пользователь, во время работы обработки откроет другой файл Excel или тот, к которому обращается обработка, то этот файл откроется в том же экземпляре приложения Excel и тогда опять возможна ошибка.  Как этого избежать?

Для этого достаточно для свойства «Interactive» установить значение Ложь. Это запретит пользователю что-либо делать в запущенном экземпляре приложения. Чтобы приложение во время работы не задавало каких-либо «глупых» вопросов, то для этого достаточно свойству «DisplayAlerts»  установить значение «Ложь».

                               Excel = Новый COMОбъект("Excel.Application");

                               Excel.Interactive = Ложь;

                               Excel.DisplayAlerts = Ложь;

После окончания, не забудьте установить значение «Истина»  обоим свойствам.

                               Excel.Interactive = Истина;

                               Excel.DisplayAlerts = Истина;

Иначе, если пользователь успеет открыть какой-либо файл именно в этом экземпляре Excel, то открытые файлы будут недоступны как для редактирования, так и для закрытия. Придётся «убивать» процесс через диспетчер задач.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Данияр Даулетбаев (krunm) 02.04.14 07:38
2. Константин Матвеев (koka) 02.04.14 09:34
Полезная информация.
А не знаете, есть ли для WORDa свойство, аналогичное Interactive ?
GATTUSO; yhor; +2 Ответить 1
3. Александр Кораблев (akor77) 02.04.14 17:02
(2) koka, с WORDом работать не приходилось.
4. Борис Белов (BorisBelov) 02.04.14 20:07
К сожалению не во всех конфигурациях 1С есть "Истина" и "Ложь"...
5. Александр Кораблев (akor77) 02.04.14 20:17
(4) BorisBelov, не совсем понятна проблема, приведите пример.
6. Сергей Смирнов (andogskiy) 03.04.14 09:39
(5) akor77, видимо речь идёт о "семёрке". Там же нет типа Булево.
7. Сергей Смирнов (andogskiy) 03.04.14 15:33
(4) BorisBelov, вместо "Истина" и "Ложь" можно использовать 1 и 0 соответственно.
8. Александр Кораблев (akor77) 03.04.14 17:32
(4) BorisBelov, В Excel можно присвоить булевой переменной числами. Если не ошибаюсь, то ноль - Ложь, а любое другое значение будет Истиной. Поэксперементируйте с "-1", "0", "1".
9. Bona Dies (chizik05) 04.04.14 13:19
к сожалению, совет не работает при использовании функции ПоместитьФайл().
До создания Com объекта дело не доходит, ругается при вызове указанной функции.
10. Сергей (SAS99) 13.04.14 17:10
"при одновременном обращении пользователя и обработки к Excel" - что имеется ввиду под "обращением"?. Если я правильно понял, речь в статье идет о чтении данных из файла Excel? А если обращение производится для записи данных в файл?
11. Александр Кораблев (akor77) 15.04.14 17:39
(10) SAS99, Как правило, при выгрузке данных в Excel создаётся новый экземпляр и книга Excel. Здесь проблем не возникнет. Но если попытаься открыть уже открытую книгу в другом экземпляре, то тут очевидна ошибка. Вот код проверки:
    // Проверка: Занят ли файл другим процессом?
    objFSO = Новый COMОбъект("Scripting.FileSystemObject");
    Попытка
        objFSO.MoveFile(ФайлEXCEL, ФайлEXCEL);
        objFile = objFSO.GetFile(ФайлEXCEL);
    Исключение
        objFile = Неопределено;
        objFSO = Неопределено;
        Сообщить("Ошибка открытия файла/Файл занят другой программой:
        |" + ФайлEXCEL);
        Возврат Неопределено;
    КонецПопытки;
    objFSO = Неопределено;
...Показать Скрыть

Код отсюда http://infostart.ru/public/225624/

12. Сергей Кирпо (Sardukar) 11.09.14 01:58
Я при тестировании одного механизма загрузки столкнулся с тем, что DisplayAlerts лучше в Ложь не переводить, а то получается ситуация, когда юзера не уведомляет, что файл возможно открыть только на чтение, файл открывается вроде как в режиме редактирования и при этом зависает, а 1С вываливает неизвестную ошибку. А если DisplayAlerts не трогать, то все в норм. Юзер открывает файл только на чтение и 1С это не мешает продолжать загрузку.