|   |   | 
| 
 | re Обработка прерывания пользователя | ☑ | ||
|---|---|---|---|---|
| 0
    
        zakidonoff 17.04.12✎ 21:33 | 
        BeaViS
  Напоролся тут на тему: v8: Обработка прерывания пользователя 11.01.08 - 14:30 Хочется организовать такую обработку прерывания пользователем выполнения кода, чтобы прервано было не все выполние кода, а только текущий цикл. Сам не придумал, м.б. кто изобретал подобное? Делать один фиг неча - поделюсь своей извращенной фантазией =) В глобальном модуле: Перем мВЦикле; Экспорт Процедура ПриВыводеСтроки(ТекущиеДанные, ОформлениеСтроки) Если ТекущиеДанные.СтроковаяКолонка <> Справочники.НекийОбъект.ПустаяСсылка() Тогда ТекущиеДанные.СтроковаяКолонка = Справочники.НекийОбъект.ПустаяСсылка(); КонецЕсли; Если мВЦикле Тогда ВыполнитьЧтоТамНадоПриПрерывании(); Иначе ВыполнитьЦикл(); КонецЕсли; КонецПроцедуры Процедура ВыполнитьЦикл() мВЦикле = Истина; Пока Цикл ОбработкаПрерыванияПользователя(); КонецЦикла; мВЦикле = Ложь; КонецПроцедуры ПроцедураИнициаторАлгоритма() СтрокаВызывающаяБесконечноеЦиклическоеСрабатываниеСобытияПриВыводеСтроки = СкрытоеТабличноеПоле.Добавить(); СтрокаВызывающаяБесконечноеЦиклическоеСрабатываниеСобытияПриВыводеСтроки.СтроковаяКолонка = Справочники.НекийОбъект.ПустаяСсылка(); КонецПроцедуры мВЦикле = Ложь; | |||
| 1
    
        DrShad 17.04.12✎ 21:50 | 
        и это хрень работает?     | |||
| 2
    
        zakidonoff 17.04.12✎ 21:51 | 
        ХЗ.
  Не проверял. По идее - должна. Всяко лучше, чем флаги в реестр операционки вешать =) | |||
| 3
    
        Maxus43 17.04.12✎ 21:54 | 
        нихрена не понял, обработка прерывания не отменяет действий сделанных до её срабатывания     | |||
| 4
    
        DrShad 17.04.12✎ 21:55 | 
        так ты проверь сначала, особенно в серверном варианте     | |||
| 5
    
        Maxus43 17.04.12✎ 21:56 | 
        з.ы. заверни ОбработкаПрерыванияПользователя в попытку, отработает?     | |||
| 6
    
        zakidonoff 17.04.12✎ 21:59 | 
        Это будет работать. Проверять ломает.
  По-крайней мере, сама идея точно рабочая. Разве что кое-какие места видоизменить, дописать придется зы: например, добавить куда-нить очистку скрытого табличного поля, дабы без надобности программу не вешало =) | |||
| 7
    
        mikecool 17.04.12✎ 22:01 | 
        (6) бгг, я изобрел вечный двигатель, идея рабочая, а проверить - ломает     | |||
| 8
    
        zakidonoff 17.04.12✎ 22:02 | 
        На тонком клиенте - тоже, коль скоро там также идет проверка вывода строки каждый раз, как происходит изменение данных в ней.
  На сервере - точно именно так и есть. Весь казус в том, что глюк зацикливания процедуры привыводестроки оставляет промежутки для действий пользователя, а уход в бесконечный цикл в теле процедуры - нет =) | |||
| 9
    
        zakidonoff 17.04.12✎ 22:03 | 
        v8: re Обработка прерывания пользователя
  Для моих 32х см это не вечный двигатель, а способ расслабиться гг )) | |||
| 10
    
        zakidonoff 17.04.12✎ 22:04 | 
        пля. Как вы ссылки на сообщения делаете? (9)     | |||
| 11
    
        zakidonoff 17.04.12✎ 22:05 | 
        (10) Ясно =)     | |||
| 12
    
        zak555 17.04.12✎ 22:06 | 
        > Хочется организовать такую обработку прерывания пользователем выполнения кода, чтобы прервано было не все выполние кода, а только текущий цикл. 
  пример такого цикла озвучь | |||
| 13
    
        zakidonoff 17.04.12✎ 22:12 | 
        (12) Де юре будет прерван весь код.
  Но внешне будет выглядеть так, будто быд прерван лишь цикл. Со стороны пользователя условие соблюдено. Со стороны программиста... Программисту по определению должно быть ровно как сделано то, что работает. Главное - работает. | |||
| 14
    
        DrShad 17.04.12✎ 22:12 | 
        (11) да где же у тебя выход из процедуры?     | |||
| 15
    
        zakidonoff 17.04.12✎ 22:14 | 
        (14) Какой код тебе нужен? И из какой процедуры? Я привел набросок принципиальной схемы - не более того.     | |||
| 16
    
        DrShad 17.04.12✎ 22:20 | 
        (15) так он нерабочий нифига     | |||
| 17
    
        zakidonoff 17.04.12✎ 22:21 | 
        (14) Догнал о чём речь... Писал выше (6)
  Выход делаем так: Процедура ВыполнитьЦикл() мВЦикле = Истина; Пока Цикл ОбработкаПрерыванияПользователя(); КонецЦикла; мВЦикле = Ложь; СкрытоеТабличноеПоле.Очистить(); КонецПроцедуры | |||
| 18
    
        zakidonoff 17.04.12✎ 22:22 | 
        (16) Спорим?
  =) | |||
| 19
    
        DrShad 17.04.12✎ 22:24 | 
        спорим, только конец процедуры или возврат вернут управление назад     | |||
| 20
    
        zakidonoff 17.04.12✎ 23:00 | 
        (19) На что спорим? )
  Понимаю, что уже не интересно - я только что проверил и реализовал свой алгоритм... Но а вдруг не поверишь? =) | |||
| 21
    
        DrShad 17.04.12✎ 23:08 | 
        а что у тебя есть?     | |||
| 22
    
        zakidonoff 17.04.12✎ 23:14 | 
        (21) Давай так:
  Я сейчас скидываю сюда обработку, которая при нажатии на кнопку запускает бесконечный цикл. Если нажать ctrl + брык - выдается стандартное сообщение о прерывании, после которого появляется предупреждение о том, что усё прекрасно работает. Смысл ясен - в процедуру с этим предупреждением можно запихать всё что угодно. Условие соблюдено - процесс продолжится. Если она действительно работает именно так, то ты скидываешь мне на сотовый условную сумму (пусть 100р). Если нет - то ты мне. Больше смысла нет - это всё так - на честность ) Идет? | |||
| 23
    
        zakidonoff 17.04.12✎ 23:16 | 
        (22) *Если нет - то Я тебе     | |||
| 24
    
        DrShad 17.04.12✎ 23:42 | 
        давай     | |||
| 25
    
        zakidonoff 17.04.12✎ 23:48 | 
        (24) лови
  http://disk.tom.ru/3zc3vpr | |||
| 26
    
        DrShad 17.04.12✎ 23:52 | 
        белый экран смерти 1С     | |||
| 27
    
        DrShad 17.04.12✎ 23:55 | 
        с тебя сотка     | |||
| 28
    
        DrShad 18.04.12✎ 00:02 | 
        можешь пожертвовать по кнопке справа внизу     | |||
| 29
    
        zakidonoff 18.04.12✎ 00:04 | 
        (26) На чём запускал?     | |||
| 30
    
        zakidonoff 18.04.12✎ 00:05 | 
        На старой платформе потребуется небольшая перестановка мест слагаемых.
  Типа такого: http://disk.tom.ru/1juwzab | |||
| 31
    
        DrShad 18.04.12✎ 00:06 | 
        платформа свежая     | |||
| 32
    
        zakidonoff 18.04.12✎ 00:07 | 
        (30) пардоньте - ссылка битая )
  http://disk.tom.ru/qqgt6d4 | |||
| 33
    
        zakidonoff 18.04.12✎ 00:10 | 
        (31) Первую тестил на 8.2 (8.2.13.205)
  Вторую - на этой и предыдущих. Крайняя работает на всех 8.х | |||
| 34
    
        zak555 18.04.12✎ 00:12 | 
        метки это жесть     | |||
| 35
    
        DrShad 18.04.12✎ 00:13 | 
        (33) работает, говори номер телефона     | |||
| 36
    
        zakidonoff 18.04.12✎ 00:14 | 
        (34) Метки там - не главное. Их легко можно обойти. Вставил уж для полной имитации того, что тело процедуры продолжается после прерывания цикла     | |||
| 37
    
        zak555 18.04.12✎ 00:15 | 
        подтверждаю - ничего не работает 15.301     | |||
| 38
    
        zakidonoff 18.04.12✎ 00:15 | 
        (35)
  +7-960-971-37-64. И на что ты надеялся? =) | |||
| 39
    
        zakidonoff 18.04.12✎ 00:16 | 
        (37) Смотри эту:
  http://disk.tom.ru/qqgt6d4 | |||
| 40
    
        DrShad 18.04.12✎ 00:16 | 
        оно не продолжается а запускается заново     | |||
| 41
    
        DrShad 18.04.12✎ 00:18 | 
        лови свою сотку     | |||
| 42
    
        zak555 18.04.12✎ 00:20 | 
        хотя в редиме отладки не запустилось     | |||
| 43
    
        zakidonoff 18.04.12✎ 00:20 | 
        (40) По факту - да. Визуально - нет.
  Но я это оговаривал. Поставленная задача выполнена. Надо же - не обманул ) Мерси. | |||
| 44
    
        DrShad 18.04.12✎ 00:21 | 
        (43) сотка не деньги     | |||
| 45
    
        zak555 18.04.12✎ 00:23 | 
        только каково применение ?     | |||
| 46
    
        Никола_ Питерский 18.04.12✎ 00:26 | 
        (45) Как минимум выйграть сотку ! )))     | |||
| 47
    
        zakidonoff 18.04.12✎ 00:26 | 
        (44) Приятна не сотка, а честность ;)
  (45) Я ХЗ. Автору надо было зачем-то... Но лично я уже знаю, куда такую приблуду можно вставить. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |