действия ПОСЛЕ прерывания работы через ОбработкаПрерыванияПользователя #534081


#0 by napagokc
Тут такая штука... Моя обработка требует монопольного режима и т.к. обработка долгая, я использую эту ОбработкуПрерыванияПользователя. Но дело в том, что монопольного режима я добиваюсь программно, если изначально режим был не монопольный. И вот я бы хотел возвращать исходный режим, если пользователь прервал работу программы. То есть, если изначально режим был не монопольный, то, при прерывании работы обработки пользователем, нужно восстановить немонопольный режим. Можно ли это сделать? И если можно, то как?
#1 by Kom-off
Лично я - не знаю как такое можно организовать. Однако, можно переписать обработку чтобы работала "Не более часов ... минут ...". Это может спасти?
#2 by napagokc
Не, наверное, в данном случае это будет не очень хорошо...
#3 by Stepa86
Перед циклом подруби обработчиком ожидания нужный метод на через 0.1 секунды, а после цикла отключай. Если будет выход из цикла, то отработает метод по обработчику ожидания. Проверено.
#4 by ds_cent
самое тупое - повесить снятие монопольного режима на событие закрытия формы
#5 by napagokc
Не, ну это вообще нафиг не нужно. Можно и 1С закрыть тогда уж ))
#6 by Дарт Вейдер
попробуй так: в обработке 2 формы, стартует 1-я, устанавливает монопольный режим, далее из первой монопольно вызавается основная форма с "долгой" процедурой обработки далее по закрытии возврат в 1-ю установка немонопольного режима
#7 by napagokc
а при помощи транзакций что-нить подобное намутить не получится? Обработка прерывания куда выкинет?
#8 by Stepa86
чем не устраивает?
#9 by kosts
Может событие "обновление отображения" срабатывает после прерывания...
#10 by napagokc
Натянут за уши. Но я его не отвергаю пока. Просто пытаюсь найти что-нибудь поизящнее
#11 by Kom-off
, Ничего там не будет возвращаться и срабатывать. ОбработкаПрерыванияПользователя - Предназначен для прерывания работы встроенного языка при нажатии пользователем клавиши Ctrl+Break. При неустраивающем - будет работать.
#12 by Axel2009
никуда не выкинет. прервется. транзакции откатятся.
#13 by Stepa86
кто натянет? поизящнее это только отказаться от постобработки
#14 by napagokc
как вам такой вариант: Как думаете - это сильно все затормозит? И вообще, правильно ли я рассуждаю?
#15 by Kom-off
См.
#16 by Jstunner
Пожалуй, самый-самый бухой и обкуренный дизайнер платформы разработал механизм ОбработкаПрерыванияПользователя для восьмерки. Рискну утверждать, что это даже хуже Неопределено..
#17 by napagokc
так ведь так и получается: Сначала делаю режим не монопольным, а потом ОбработкаПрерыванияПользователя отлавливает было ли нажато Ctrl+Break. Если были - монопольный режим не поставится, т.к. работа кода прервется. Не?
#18 by Kom-off
Ну, для особых случаев! Создать батник с запуском двух обработок из командной строки. Первая будет рабочей, вторая завершающей. Ну, это не притянуто за уши, однозначно. :-)
#19 by Kom-off
Неопределено - это хорошо. Кто хорошо изучал философию, того Неопределено не пугает.
#20 by Aprobator
как только такое в голову вообще приходит?
#21 by napagokc
так по поводу кто-нить что-нить скажет?
#22 by Дарт Вейдер
я может не догоняю чего-то.. если прерывание в цикле, то почему нельзя сделать так: ?
#23 by napagokc
а что такое? Думаешь изменение режима - крайне долгая операция? Я не уверен... Мне кажется - это просто переключение константы, грубо говоря... установка другого флага, не более
#24 by Kom-off
, ...прерывания работы встроенного языка... Ну, нечему там отрабатывать после нажатия будет!
#25 by napagokc
А ОбработкаПрерыванияПользователя выйдет на строку после цикла или вообще прервет выполнение кода? Есть мнение, что вообще прервет выполнение и тогда предложенный вариант не подходит
#26 by Aprobator
дык будет прерывание работы внутреннего языка 1С, а не цикла. Вот если запускать одну обработку из другой, то надо смотреть.
#27 by napagokc
ну смотри сам:
#28 by Aprobator
ага - забываешь только про проверку возможности установления монопольного режима.
#29 by Дарт Вейдер
точняк.. фигню написал
#30 by napagokc
случайно отправил сообщение... на строчке, где нажали Ctrl+Break выполнение кода не прервется. Оно прервется, когда войдет в ОбработкаПрерыванияПользователя и отловит там нажатие. Разве не так?
#31 by napagokc
Поставить условие проверки монопольности - это плюс еще одно условие
#32 by Axel2009
так. Ctrl+Break сработает только в этом месте, где стоит обработкапрерывания.
#33 by Aprobator
так. Но тогда дешевле монопольный режим вообще не включать.
#34 by Aprobator
дерзай.
#36 by napagokc
#37 by napagokc
Не включать нельзя. Я удаляю объекты из базы.
#38 by kosts
Я с этими экспериментами повесил 1С ...
#39 by Aprobator
и какая связь с монопольным режимом?
#40 by napagokc
физически удаляю объекты
#41 by napagokc
не, я может не вкурсе, я относительный новичок в 1С... Но разве можно физически удалять объекты, когда в базе кто-то еще работает? Это разве не чревато какими-то последствиями? Что если кто-то работает сейчас с тем объектом, который я удаляю? О_о
#42 by Aprobator
через УдалитьОбъекты что ли?
#43 by Aprobator
#44 by napagokc
мне не нужно, чтобы мне нельзя было удалять объект. Мне НУЖНО УДАЛИТЬ объект. Есть разница.
#45 by fisher
А мне очень понравилось. Просто, изящно и универсально - выходит из монопольного режима при завершении обработки (любым способом).
#46 by Aprobator
+ контроль ссылочной целостности тоже никто не отменял. Хотя здесь явно неверный методологический подход к решению проблемы.
#47 by napagokc
написал простенькую обработку, чтобы проверить мою теорию:        Исключение        Текст = "С информационной базой работают другие пользователи. Все работает прекрасно. Результат работы (запустил дважды, чтобы убедиться): НАЧАЛО РАБОТЫ Монопольный режим = ложь Монопольный режим = истина Выполнение прервано пользователем! Монопольный режим = истина Выполнение прервано пользователем!
#48 by acsent
А сделать отдельную кнопку на отключение?
#49 by Aprobator
брезгует. ты время померь теоретик.
#50 by Stepa86
толку то на файловой мерять? думаю циклическая установка/снятие монопольного режима встанет колом тока в клиент-сервере
#51 by Aprobator
увеличение времени выполнения произойдет в любом случае. Не вижу смысла отлова события прерывания как такого. Тупо повесить снятие монопольного режима на событие закрытия формы обработки (1 минута кода) и все. Остальное - баловство.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям