|
v7: Корректное прерывание работы процедуры | ☑ | ||
---|---|---|---|---|
0
Cyr
23.05.24
✎
12:19
|
Есть процедура пакетной печати чеков из документа.
Нужно предусмотреть корректное прерывание этой процедуры. При этом в документе должно сохраниться количество уже напечатанных чеков. Как это реализовать? Кнопку "Стоп" я пробовал делать. Но она будет неактивна во время выполнения процедуры... А при нажатии Esc может ведь некорректно печать завершиться (не завершиться)? |
|||
1
Волшебник
23.05.24
✎
12:51
|
Каждые N чеков выдавайте окно вопроса "Продолжить?" с таймаутом 5 сек
|
|||
2
Cyr
23.05.24
✎
12:57
|
(1) не вариант
|
|||
3
Волшебник
23.05.24
✎
12:57
|
(2) Чё это?
|
|||
4
Cyr
23.05.24
✎
12:59
|
нужно в любой момент прервать. чаще всего в начале. если ошиблись с параметрами.
|
|||
5
Волшебник
23.05.24
✎
13:02
|
(4) Тогда выдавайте окно через каждый чек и таймаут 2 сек
|
|||
6
Волшебник
23.05.24
✎
13:03
|
Можно вначале делать таймауты подольше (по 7 сек), а потом постепенно их уменьшать, но минимум 2 сек
|
|||
7
Cyr
23.05.24
✎
13:03
|
(5) да меня кассиры проклянут.
|
|||
8
Волшебник
23.05.24
✎
13:04
|
(7) Нам-то что...
|
|||
9
Cyr
23.05.24
✎
13:04
|
(6) есть варианты без этого?
|
|||
10
skafandr
23.05.24
✎
13:06
|
(4)
Вариант 1: Сделать как советуют в (1) с N=1 :-) Вариант 2: Сделать как советуют в (1) для первого чека с вопросом "Проверьте правильность чека. Продолжить?" далее печать без остановок |
|||
11
Волшебник
23.05.24
✎
13:06
|
(9) Я в скафандре
|
|||
12
Cyr
23.05.24
✎
13:10
|
А что в 1С нет возможности во время исполнения процедуры опрашивать кнопку и по её нажатию менять значение переменной? А цикле печати в нужный момент по значению переменной прерывать цикл, записывать и закрывать документ.
|
|||
13
Волшебник
23.05.24
✎
13:15
|
(12) Во время исполнения кнопку нажать не получится, Вы же сами писали
Кнопку "Стоп" я пробовал делать. Но она будет неактивна во время выполнения процедуры... |
|||
14
Климов Сергей
23.05.24
✎
13:15
|
Запамятовал: ОбработкаПрерыванияПользователя() только в 8 появилась?
|
|||
15
Смотрящий
23.05.24
✎
13:16
|
(14) Нет, и в клюшках есть; по другому обзывается только
|
|||
16
Волшебник
23.05.24
✎
13:17
|
(14)(15) Она тут не поможет, потому что она не даёт времени среагировать
|
|||
17
Cyr
23.05.24
✎
13:16
|
(15) а как?
|
|||
18
Смотрящий
23.05.24
✎
13:18
|
(15) Поможет, только надо весь код в одну процедуру сложить - работает в текущей процедуре
(17) Не помню, а движка 7.7 нет под рукой |
|||
19
Ёпрст
23.05.24
✎
13:18
|
(0) только через вк. Можно фоном запустить в активиксе, например. Тм же, прерывание делать
|
|||
20
Cyr
23.05.24
✎
13:21
|
(13) Я имел ввиду физическую кнопку клавиатуры.
|
|||
21
Волшебник
23.05.24
✎
13:22
|
(19) Ну уж нет. Я за лишнее проклятие ТС и таймаут
|
|||
22
Cyr
23.05.24
✎
13:24
|
(16) Вы про какую процедуру говорили?
|
|||
23
Волшебник
23.05.24
✎
13:30
|
(22) про клавишу Esc.
Вообще Вам должно быть стыдно в 2024 году сидеть на клюшках и отказываться от изучения восьмёрки. |
|||
24
Cyr
23.05.24
✎
13:31
|
(23) А что нажатие клавиши Esc можно как-то обработать?
|
|||
25
Волшебник
23.05.24
✎
13:44
|
(24) Платформа 7.7 это делала за программиста, чтобы прерывать циклы
|
|||
26
Ёпрст
23.05.24
✎
13:46
|
(24) можно. Даже штатно, можно перехватывать и обрабатывать
|
|||
27
Волшебник
23.05.24
✎
13:47
|
Вот тут было решение через FormEx
ОстановитьВыполнение() по нажатию ESC - как поймать прерывание?#52 |
|||
28
Ёпрст
23.05.24
✎
13:46
|
+26 всего лишь повесив хотекей на невидимую кнопку
|
|||
29
Cyr
23.05.24
✎
14:03
|
(28) На какую кнопку? Если кнопка на форме документа, то во время выполнения процедуры, хоткей не срабатывает. Так же как и нажать её невозможно. А если процедура не запущена, то да работает, только толку то...
|
|||
30
Salimbek
23.05.24
✎
14:04
|
(0) В коде процедуры опрашиваешь файловую систему на наличие "стоп"-файла. Пока его нет - твоя процедура крутится. Как только появилась необходимость - запускаешь батник на рабочем столе, который копирует или создает файл с нужным именем в контролируемую папку. Процедура твоя увидит этот файл, удаляет его и останавливает выполнение. Работает универсально.
Второй вариант - это запись в какой-то служебный Справочник или в Регистр из другого сеанса 1С-ки, и мониторинг в твоей процедуре наличия этой записи. Но тут надо подключаться другим сеансом к текущей базе. В случае однопользовательской не сработает. |
|||
31
Волшебник
23.05.24
✎
14:05
|
Могу посоветовать оберег от проклятий
|
|||
32
Kigo_Kigo
23.05.24
✎
14:10
|
(30) п.2 Ну или через константу
|
|||
33
Ёпрст
23.05.24
✎
14:16
|
(29) на любую. Хот кей от Esc сработает на ней.
|
|||
34
Irbis
23.05.24
✎
14:29
|
(32) Константа так себе решение, заткнёт выполнение во всех сеансах, которые прочитать успеют. Видел решение с справочником как выше предлагали, так там и пользователь и имя обработки фигурировало.
P.S. Что-то много тем за пару дней по клюшкам стало. Кто-то откопал стюардессу? |
|||
35
Волшебник
23.05.24
✎
14:30
|
(34) А Вы разве не слышали? v8 уходит из России
|
|||
36
Ёпрст
23.05.24
✎
14:33
|
Вот еще баянчик от Рупора
http://avb1c.narod.ru/files/bgmode.zip |
|||
37
Cyr
23.05.24
✎
14:35
|
(33) на кнопках только F1-F12 можно выбирать...
Причём здесь Esc? |
|||
38
Злопчинский
23.05.24
✎
14:46
|
(4) не надо ошибаться с параметрами.
Перед началом формирования задайте вопрос - есть ошибочные пара етры да-нет). Если прибегут с вопросом типа мы жмём Да, а оно не печатает - херачите их лопатой по лицу |
|||
39
Ёпрст
23.05.24
✎
14:49
|
(37) да неужели ?! :))))
Если че, можно повесить любой |
|||
40
Ёпрст
23.05.24
✎
14:49
|
На вот, дарю..
https://cloud.mail.ru/public/hRXx/JYiDtnJvJ |
|||
41
Злопчинский
23.05.24
✎
14:57
|
(29) пилять!
Печать одного чека вынести в отдельную функцию/процедуру. В процедуру-обертку поставить перебор чеков. Обёртка запускает через форекс обработку ожидания на 30-50-100-300 мсек и завершает работу. Процедура печати по ОО печатает чек, отрубает ОО на процедуру печати и ставит ОО на процедуру обертку. Процедура обёртка толкает очередной чек. . Прерывание вешай хоть на энтер, хоть на Fn на кнопку или ыормексрвую обработау клавиш |
|||
42
Ёпрст
23.05.24
✎
14:59
|
(41) можно и без вк, вон, рупор еще в начале 2000 написал как..см выше
|
|||
43
Cyr
23.05.24
✎
15:04
|
(39) каким образом повесить?
|
|||
44
Irbis
23.05.24
✎
15:07
|
(35) Приходит 9ка?
Или движки компоновки v8 запретили? |
|||
45
Cyr
23.05.24
✎
15:12
|
(40) кнопочки там не работают в фоне.
|
|||
46
Злопчинский
23.05.24
✎
15:26
|
Так нихера и не понял в чем проблема...
|
|||
47
Cyr
23.05.24
✎
15:31
|
(46) проблема без внешних компонент поймать в работающей процедуре документа нажатие кнопки и в нужном месте цикл этой процедуры прервать.
|
|||
48
Ёпрст
23.05.24
✎
15:39
|
(47) см (36)
Сделать по аналогии |
|||
49
Злопчинский
23.05.24
✎
15:45
|
(47) как определяется "нужное место цикла'.?
|
|||
50
Cyr
23.05.24
✎
15:56
|
(49) После закрытия чека.
|
|||
51
Злопчинский
23.05.24
✎
16:02
|
Ну поставь от начала формирования чека до закрытия века блокировку еsc. Формирование века вынеси в отдельную процедуру, далее (41).
|
|||
52
Cyr
23.05.24
✎
16:11
|
(51) Как поставить блокировку Esc?
|
|||
53
Злопчинский
23.05.24
✎
17:14
|
Если поставить блокировку-разблоки эскепла, то и даже на отдельные модули разносить не надо будет...
|
|||
54
Злопчинский
23.05.24
✎
17:15
|
(52) или вк (есть такая) или форексом блокировать
Про отключение ескейпа тема популярная, всплывала |
|||
55
Злопчинский
23.05.24
✎
17:17
|
Но разнесение на модули с таймаутом срабатывания увеличивает шансы прервать обработку "побыстрее*
|
|||
56
Cyr
23.05.24
✎
19:40
|
(55) я не в курсе про таймаут.
|
|||
57
Cyr
23.05.24
✎
19:46
|
(54) что за форекс такой?
|
|||
58
Волшебник
23.05.24
✎
20:06
|
(57) (56) Мы разговариваем со стенкой...
|
|||
59
MWWRuza
гуру
23.05.24
✎
20:50
|
форекс = Formex Это просто кто-то описАлся :-)
|
|||
60
Jackman
23.05.24
✎
21:36
|
Напомнили мне один момент из 90х...
Пришел я как-то на собеседование в одну организацию, а тамошний программист, судя по всему, был личностью креативной. Смотрю, а у него в клавиатуру линейка воткнута, уже не помню, но скорее всего, зажата была кнопка "Enter". Он так реализовал процесс прерывания обработки по перепроведению документов в любой момент. Видно выскакивал вопрос после каждого дока, а зажатая кнопка давала утвердительный ответ. |
|||
61
int32i
23.05.24
✎
21:48
|
Напомнило мне один момент из 90-х.
На склад можно было зайти с черного хода. Все кто не попало по предприятию шлялись. На черный ход поставили замок с защелкой чтобы дверь автоматически запиралась. Но нюанс - на черный ход все покурить выбегали. И быстро додумались в створ двери досочку подкладывать - чтобы не защелкивалась.. Мораль - человек всегда найдет способ "подложить дощечку" как ты алгоритм не реализуй. |
|||
62
Cyr
23.05.24
✎
21:55
|
(36) так то интересно. Только пока не совсем понятен принцип работы.
Оно кстати не выводит табличку на справочниках с чётным количеством элементов. |
|||
63
Ёпрст
23.05.24
✎
22:38
|
(62) вот тут посмотри еще, без вк..типа асинхронность, падают шарики и движение картменом
https://infostart.ru/1c/reports/18820/ |
|||
64
Злопчинский
23.05.24
✎
23:15
|
(61) всё реализуется при наличии политической воли и желания. Принцип простой: правильная дорога должна быть одна. Всё остальные дороги должны приводить к невозможности продолжить путь. Вариант один - вернуться и начать путь по правильной дороге. Стоимость преднамеренного проникновения в лазейки или попытки вмешаться в правильный режим работы должны приводить к высокой "цене". Когда руководство вставит РЕАЛЬНЫХ пздюлей - желающих выйти покурить через чёрный ход резко поубавится.
. Как у всякого решения - у такого тоже есть свои минусы. Руководство само выбирает что ему важнее - предсказуемость результата и плановая работа без нервотрепки или ручное управление и затыкание всех дырок. . Что здесь для 1сника - выбирает сам одинэсник. Или он НКПР или он отчасти ЛПР. |
|||
65
DCKiller
23.05.24
✎
23:25
|
(0) Можно сделать вариант с кнопкой "Стоп"+использование ОбработкаОжидания.
Объявляешь в модуле формы какую-нибудь переменную, скажем "ПрерваноПользователем". По нажатию кнопки "Печать" устанавливаешь значение этой переменной в 0 и запускаешь обработку ожидания, которая запускает процедуру печати. Один вызов - один чек на печать. кнопка "Стоп" при этом будет у тебя доступна для нажатия. Как только пользователь жмакает на нее - делаешь "ПрерваноПользователем = 1", процедура, вызываемая обработкой ожидания считывает ее и прекращает печать. Ну вот как-то так. |
|||
66
Злопчинский
23.05.24
✎
23:27
|
(65) см (41)
смайл |
|||
67
DCKiller
23.05.24
✎
23:33
|
(66) Там ВК нужна, а здесь нет...
|
|||
68
Злопчинский
23.05.24
✎
23:41
|
(67) у тебя может получиться ситуация, когда чек напечатается наполовину и прилетит прерывание по ескейп, чек останется не закрытым...
? |
|||
69
Злопчинский
23.05.24
✎
23:44
|
У "меня" Вк нужна только для того, чтобы нельзя было прервать именно блок печати, если это некритично, то и вк не нужна. Стандартная оо - меньше 1 сек не сделать, если жто некритично - то и твой вариантпрактически равен моему, если из моего убрать ВК
|
|||
70
Cyr
24.05.24
✎
05:48
|
(65) ну я примерно так и хотел сделать. Только про команду ОбработкаОжидания не знал.
|
|||
71
Cyr
24.05.24
✎
05:55
|
(68) ну при печати чека сначала проверяется, есть ли незакрытый документ. Если есть, он отменяется. Хотя в таком случае можно вообще не заморачиваться и смириться с тем, что количество напечатанных чеков в документе будет неправильным.
|
|||
72
DJ Anthon
24.05.24
✎
06:01
|
можно проверять наличие стоп-файла. только создавать его сторонними средствами, типа батника на горячую клавишу.
|
|||
73
Cyr
24.05.24
✎
09:10
|
(63)Да я никак не могу понять как скрипт обхода справочника работает :(
Куда мне вставлять СкриптКонтрол.SendKeys(""), чтобы можно было нажать кнопку "Стоп"? |
|||
74
Ёпрст
24.05.24
✎
15:44
|
(73) это нужно только длятобновления формы
|
|||
75
Злопчинский
24.05.24
✎
16:07
|
(73) кнопка ескйеп не котируется? ;-)
|
|||
76
Cyr
24.05.24
✎
19:56
|
(75) да хотелось бы без внешних длл.
|
|||
77
Злопчинский
24.05.24
✎
21:02
|
(76) процедуру печати напиши полностью в одну строку. Тогда её прервать по ескейпу не получится и можно будет использовать ескейп для прерывания цикла перебора.
|
|||
78
Злопчинский
24.05.24
✎
21:03
|
(76) а каким образом кнопка стоп будет полезна? Как без вк заблокировать прерывание по ескейп?
|
|||
79
Cyr
25.05.24
✎
21:37
|
(77) процедура из множества команд состоит...
(78) я думал обойтись в этом случае без esc. |
|||
80
Злопчинский
25.05.24
✎
23:23
|
(79) и как ты планировал обойтись без ескейпа? Заменить ескейп кнопкой стоп? Ну так при этом ескейп вме равно будет работать.
Или я чего-то не понял. |
|||
81
Злопчинский
25.05.24
✎
23:25
|
(79) ты не поверишь, но по идее всю процедуру можно записать в одну строку.
И при правильной организации кода процедура печати века не такой уж и длиной будет. |
|||
82
Злопчинский
25.05.24
✎
23:26
|
Впрочем, тебе там на месте виднее. И если можно прервать печать века в любой момент и чек останется незакрытым - тогда вообще предмет для обсуждения вообще отсутствует.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |