Узнать, что файл открыт в другой программе
Обычные формы УТ 10.3. Некая печатная форма документа записывается в ПДФ. Вот таким путем:
Все отлично работает, но. Если этот файл существует и открыт (Акробатом как обычно), то 1с пишет ошибку "Невозможно получить доступ к файлу, файл уже открыт" и закрывается (1с) полностью, предлагает варианты "Закрыть" и "Перезапустить". Оставить ее работающей дальше не получается.
Пользователи делают обычно так: записывают ПДФ, открывают, видят, что накосячили, исправляют в 1с и записывают ПДФ. И 1с ломается со всей их текущей деятельностью. Не все этому рады.
Теперь внимание, вопрос. Как узнать, что этот файл открыт другой программой?
Пакет = Новый ПакетОтображаемыхДокументов;
блаблабла
Пакет.ЗаписатьФайлДляПечати(имяФайла);
Все отлично работает, но. Если этот файл существует и открыт (Акробатом как обычно), то 1с пишет ошибку "Невозможно получить доступ к файлу, файл уже открыт" и закрывается (1с) полностью, предлагает варианты "Закрыть" и "Перезапустить". Оставить ее работающей дальше не получается.
Пользователи делают обычно так: записывают ПДФ, открывают, видят, что накосячили, исправляют в 1с и записывают ПДФ. И 1с ломается со всей их текущей деятельностью. Не все этому рады.
Теперь внимание, вопрос. Как узнать, что этот файл открыт другой программой?
По теме из базы знаний
- Описание формата файлов конфигурации (CF, EPF, ERF)
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
- Свое облако для обмена файлами - история поиска решения
- Открытый пакет интеграций для OneScript
- Библиотека для работы с Bitrix24: живая лента, задачи, файлы и личные сообщения
Найденные решения
Ну вообще конечно как выше сказали - Попытка-Исключение должно обрабатывать подобные ситуации.
Если вылетает - попробуй например проконтролировать через файловый поток (с уровнем доступа на запись) в попытке.
Ну что-то вроде
Если вылетает - попробуй например проконтролировать через файловый поток (с уровнем доступа на запись) в попытке.
Ну что-то вроде
Успешно = Истина;
Поток = Неопределено;
Попытка
поток = Новый ФайловыйПоток(имяФайла, РежимОткрытияФайла.Открыть, ДоступКФайлу.ЧтениеИЗапись);
Если НЕ (Поток.ДоступнаЗапись И Поток.ДоступноЧтение) Тогда
Успешно = ложь;
КонецЕсли;
поток.Закрыть();
Исключение
...файл занят..
Успешно = ложь;
КонецПопытки
Поток = Неопределено;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Попробуйте файл проверить на существование (объект 1с "Файл"), потом проверить его переименование (метод 1с "ПереместитьФайл()").
Если ещё валится, то на крайняк каким-либо внешним скриптом/программой проверять вышеуказанные действия.
В винде это vbs/cmd/bat с соответствующими командами. в линуксе не знаю
Если ещё валится, то на крайняк каким-либо внешним скриптом/программой проверять вышеуказанные действия.
В винде это vbs/cmd/bat с соответствующими командами. в линуксе не знаю
Ну вообще конечно как выше сказали - Попытка-Исключение должно обрабатывать подобные ситуации.
Если вылетает - попробуй например проконтролировать через файловый поток (с уровнем доступа на запись) в попытке.
Ну что-то вроде
Если вылетает - попробуй например проконтролировать через файловый поток (с уровнем доступа на запись) в попытке.
Ну что-то вроде
Успешно = Истина;
Поток = Неопределено;
Попытка
поток = Новый ФайловыйПоток(имяФайла, РежимОткрытияФайла.Открыть, ДоступКФайлу.ЧтениеИЗапись);
Если НЕ (Поток.ДоступнаЗапись И Поток.ДоступноЧтение) Тогда
Успешно = ложь;
КонецЕсли;
поток.Закрыть();
Исключение
...файл занят..
Успешно = ложь;
КонецПопытки
Поток = Неопределено;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот