|
v7: ОстановитьВыполнение() по нажатию ESC - как поймать прерывание? | ☑ | ||
---|---|---|---|---|
0
FoundMarket
21.06.12
✎
15:13
|
Собственно выполняется обработка, из себя вызывает еще одну обработку иа та еще и т.д , жмешь ESC и иногда удается ее прибить, но не всегда. Надо поймать прерывание.
|
|||
1
FoundMarket
21.06.12
✎
15:15
|
Подскажите чем можно изящнее его отловить
|
|||
2
Рэйв
21.06.12
✎
15:19
|
В процессе запроса к базе - никак. А в остальное время по Ctrl+Break обработка прерывается.
|
|||
3
Рэйв
21.06.12
✎
15:19
|
если это действительно 7.7 конечно
|
|||
4
Рэйв
21.06.12
✎
15:20
|
и по ескэепй тоже кажется
|
|||
5
Fragster
гуру
21.06.12
✎
15:20
|
обновление отображения в В8, в 7.7 - формула у надписи
|
|||
6
Fragster
гуру
21.06.12
✎
15:20
|
в начале обработки выставляешь флаг в глобальную переменную модуля, в обновлении - смотришь его
|
|||
7
Эльниньо
21.06.12
✎
15:21
|
В васике было:
if inkey$=chr(27) goto 1000 в 7.7 не знаю. |
|||
8
FoundMarket
21.06.12
✎
16:01
|
Ctrl+Break не катит в терминальном режиме
да если и прокатит тупо Break , то "каскад" не даст прерваться - у меня пишет : Прервать выполнение обработки - говорю ДА и она продолжается... |
|||
9
FoundMarket
21.06.12
✎
16:02
|
(5) "обновление отображения в В8, в 7.7 - формула у надписи"
ничего не понял |
|||
10
1dvd
21.06.12
✎
16:03
|
(8) тебе нужно при вызове другой обработки проверять удачное завершение. И если она не удачная, то прерывать текущую
|
|||
11
FoundMarket
21.06.12
✎
16:05
|
(10) Это понятно - что определяет УДАЧНОЕ ЗАВЕРШЕНИЕ - вернее мне надо поймать, правильно сказал Эльниньо, нужно знать переменную в которую пишется прерывание по Break
|
|||
12
FoundMarket
21.06.12
✎
16:07
|
как то же система выводит сообщение - ПрерватьВыполнениеОбработки
|
|||
13
FoundMarket
21.06.12
✎
16:07
|
||||
14
FoundMarket
21.06.12
✎
16:09
|
т.е. нет ни какого события :))
перем Ок; // флаг успешного завершения процедура долгая(перем) Ок=0; // по умолчанию предполагаем, что произошло прерывание /// длительная обработка Ок=1; // процедура завершена корректно конецПроцедуры // долгая процедура Сформировать() пока .... долгая(...); если Ок=0 тогда прервать; конецЕсли; // если долгая() не завершилась успешна, то выходим из цикла конецЦикла; // пока .... конецПроцедуры // Сформировать() |
|||
15
Ёпрст
21.06.12
✎
16:16
|
||||
16
FoundMarket
21.06.12
✎
16:51
|
(15) Так прокатывает только на линейных алгоритмах обработок - если из обработки каскадно вызывается другая , то не работает
|
|||
17
FoundMarket
21.06.12
✎
16:52
|
Правильнее в (14)
|
|||
18
Ёпрст
21.06.12
✎
16:53
|
(17) правильнее, это перехват Esc своей кнопкой с хоткеем или формексом.
|
|||
19
FoundMarket
21.06.12
✎
16:54
|
(18) не найду нигде примера как из обработки вынуть переданный в нее параметр - можешь в меня кинуть примером?
|
|||
20
FoundMarket
21.06.12
✎
16:55
|
Собственно:
Параметр = СоздатьОбъект("СписокЗначений"); Параметр.Установить("КонтекстФормы", Контекст); Параметр.Установить("Контрагент",Т.Док.Контрагент.КонтрагентОбщ); ОткрытьФормуМодально("Обработка.ДебиторскаяЗадолженность_Обр", Параметр,КаталогИБ()+"Extforms\ДебиторскаяЗадолженность_Обр.ert"); |
|||
21
FoundMarket
21.06.12
✎
16:55
|
а вот как обратно забрать?
|
|||
22
Ёпрст
21.06.12
✎
16:55
|
+18 и в том же формексе есть ОстановитьВыполнение()
|
|||
23
FoundMarket
21.06.12
✎
16:56
|
т.е. счас на форму повешу флажок и буду им рулить из Обработка.ДебиторскаяЗадолженность_Обр
|
|||
24
FoundMarket
21.06.12
✎
16:56
|
у меня алиаса формекскового нету - и времени осталось полчаса до конца раб дня
|
|||
25
Ёпрст
21.06.12
✎
16:57
|
(21) дык при модальном закрытии у тебя всё будет в Параметр...
что в процедура ПриЗакрытии() или еще где положишь в Форма.Параметр в Обработка.ДебиторскаяЗадолженность_Обр, то и прилетит тебе в Параметр |
|||
26
FoundMarket
21.06.12
✎
16:57
|
формекс кстати загружен при начале работы системы и
|
|||
27
Ёпрст
21.06.12
✎
16:58
|
+25
ОткрытьФормуМодально("Обработка.ДебиторскаяЗадолженность_Обр", Параметр,КаталогИБ()+"Extforms\ДебиторскаяЗадолженность_Обр.ert"); //в обработке Процедура ПриЗакрытии() Форма.Параметр ="Вася"; КонецПроцедуры Сообщить(Параметр); |
|||
28
FoundMarket
21.06.12
✎
16:58
|
Процедура ПриОткрытии()
КонтекстФормы = Форма.Параметр.Получить("КонтекстФормы"); КонтрагентВыб = Форма.Параметр.Получить("Контрагент"); |
|||
29
FoundMarket
21.06.12
✎
16:58
|
понятно - спасибо
|
|||
30
FoundMarket
21.06.12
✎
16:59
|
давно пользовался - счас бы и не нашел где и когда :))
|
|||
31
FoundMarket
21.06.12
✎
17:18
|
При закрытии вроде бы как бэ интерактивная :)
|
|||
32
FoundMarket
21.06.12
✎
17:19
|
а у меня она туда даже не попадает в эту процедуру...
|
|||
33
Ёпрст
21.06.12
✎
17:21
|
ну, присваивай где-нибудь еще, в коде выполнения твоей обработки
|
|||
34
FoundMarket
21.06.12
✎
17:23
|
Так ? Форма.Параметр.КонтекстФормы.Прерывание = 1;
|
|||
35
FoundMarket
21.06.12
✎
17:30
|
туплю там же список значений ...
|
|||
36
Ёпрст
21.06.12
✎
17:33
|
(34) в Форма.Параметр можешь записать что хочешь.. при передаче - у тебя там СЗ, можешь использовать его, а можешь и просто, в другой тип переопределить:
Форма.Параметр="Вася"; //например |
|||
37
FoundMarket
21.06.12
✎
18:19
|
не попадаю в нужное значение - так как эта обработка используется в куче отчетов ДебиторскаяЗадолженность_Обр.ert , то не могу вернуть на вызывающую форму значение флажка - буду курить формекс завтра...
|
|||
38
FoundMarket
21.06.12
✎
18:20
|
Форма.Параметр.Установить("КонтВызывающейФормы.ФлагПрерывания",1); не катит - пишет ошибка выражения
|
|||
39
FoundMarket
21.06.12
✎
18:21
|
да и не получаеся из вызываемой обработки управлять флажками на вызывающей... пример нужен
|
|||
40
FoundMarket
21.06.12
✎
18:22
|
тут очень простенький примерчик Книга знаний: Параметр и контекст формы
|
|||
41
Ёпрст
21.06.12
✎
18:25
|
(39)
при модально открытой форме это врят ли получится вообще :)) |
|||
42
Ёпрст
21.06.12
✎
18:25
|
т.е эффект будет виден только при закрытии модальной формы
|
|||
43
FoundMarket
21.06.12
✎
18:26
|
у меня под форма то не открывается вообще - просто я ее использую как процедуру общего модуля
|
|||
44
FoundMarket
21.06.12
✎
18:27
|
т.е. идет какая то морготня так как много раз в цикле вызываю ее с разными параметрами, но и только - обработка в данном отчете просто тупо что то вычисляет и пишет в документы результаты.
|
|||
45
Ёпрст
21.06.12
✎
18:28
|
(43) ну и толку то ? ты ж её модально "открываешь" - пока вся в ПриОткрытии модальной формы не выполнится (даже со статусом возврата в 0) - управление не перейдет в вызывающую форму.
|
|||
46
FoundMarket
21.06.12
✎
18:28
|
просто работает она долго - минут пять и если юзверь ошибси то хана - не избавится от нее и на пять минут будет смотреть мое кыно
|
|||
47
FoundMarket
21.06.12
✎
18:32
|
понятно - зря поспешил все снести - надо было все ж таки параметр записать действительно вот такой Форма.Параметр ="Прерывание Таки было!!!"; а в начале такой поставить Форма.Параметр ="Прерывания Таки не було!!!"; а потом уже в вызывающей проверить параметр ПримерКонт = Парам; Если примерКонт="Прерывание Таки было!!!" Тогда Прервать; КонецЕсли;
|
|||
48
FoundMarket
21.06.12
✎
18:35
|
т.е. раз она в параметрах типы преобразует, правда не совсем понятно что с таблицей значений станет - Сообщить(Парам) показывает Таблица значений - значит ищи свищи куды она этот "Прерывание Таки было!!!" поместит И как его ваще туда помещать если в параметрах на первом месте сам контекст вызывающей формы ?
|
|||
49
FoundMarket
21.06.12
✎
18:36
|
Че то она туда вообще ничего не помещает - ругается на все Форма.Параметр.Установить("трулялял",1); не катит - пишет ошибка выражения
|
|||
50
FoundMarket
21.06.12
✎
18:36
|
и так вот Форма.Параметр.Установить("",1); не катит - пишет ошибка выражения
|
|||
51
FoundMarket
21.06.12
✎
18:37
|
ладно , работали год без прерываний и еще столько же проработают - влом копать...
|
|||
52
FoundMarket
22.06.12
✎
11:56
|
Кароче седня таки добил с утра с помощью Formexa
////************************************************************** //// Formex.dll ////" КодКлавиши - код нажатой кнопки клавиатуры. ////" Alt - флаг нажатия кнопки <Alt>. ////" Shift - флаг нажатия кнопки <Shift>. ////" Ctrl - флаг нажатия кнопки <Ctrl>. ////" Символ - символ нажатой кнопки в формате ASCII. ////" ФСО - флаг стандартной обработки. Изначально равен 1. Если в теле процедуры сбросить значение в 0, то стандартная обработка события не вызывается. ////Описание: Предопределенная процедура вызывается при нажатии кнопки клавиатуры. // Процедура ПриНажатииКнопкиКлавиатуры(код, _а, _ш, _к,_симв,_фсо) Если код=27 Тогда Предупреждение("Нажата кнопка клавиатуры (ESC=27) Пробуйте пожалуйста еще несколько раз нажать "+код); ПрерватьВыполнениеОбработки=1; КонецЕсли; КонецПроцедуры ////*************************************************************** |
|||
53
FoundMarket
22.06.12
✎
11:59
|
воткнул ее в вызываемую модально обработку, а при выходе из обработки по "вываливанию" из циклов модуля
Если ПрерватьВыполнениеОбработки=1 Тогда Прервать; КонецЕсли; пишу так: Если ПрерватьВыполнениеОбработки=1 Тогда Форма.Параметр="Прервано"; КонецЕсли; ну а на вызове просто тупо проверяю параметр //*** расчитать фактическую отсрочку по оплате документа //*** тут надо будет выполнить собственно расчет отсрочки фактической и записать ее в сам документ //*** для этого я передам в обработку параметры расчетные и в ней все заполню //Сообщить("Расчет ведется по контрагенту:"+ЗапТЗ.КонтрагентОбщ); Параметр = СоздатьОбъект("СписокЗначений"); Параметр.Установить("КонтекстФормы", Контекст); Параметр.Установить("Контрагент",Т.Док.Контрагент.КонтрагентОбщ); ОткрытьФормуМодально("Обработка.ДебиторскаяЗадолженность_Обр", Параметр,КаталогИБ()+"Extforms\ДебиторскаяЗадолженность_Обр.ert"); Если Параметр = "Прервано" Тогда Прервать; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |