Заблокировать кнопку на время выполнения команды

1. user1297103 17.11.22 00:28 Сейчас в теме
Всем привет. Подскажите пожалуйста. Есть форма УФ. На ней команда, которая выполняет определенный алгоритм. Если нажать на эту кнопку 10 раз быстро, то алгоритм выполнится 10 раз - как можно на время выполнения алгоритма заблокировать кнопку? Пробовал Доступность переключать у кнопки, ТолькоПросмотр у группы - не помогает. Есть еще варианты?)

П.С. раз уж создал тему то задам сразу и второй вопрос - как отключить выделение строки в ТЗ на форме при открытии? При активизации строки я отключил, но при старте формы не получается.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 119 17.11.22 08:28 Сейчас в теме
(1) Если команда выполняется не в фоне, то и так на время выполнения команды кнопка (и вообще весь интерфейс) блокируется.
3. user1297103 17.11.22 16:22 Сейчас в теме
(2)Команда выполняется не в фоне, но интерфейс не блокируется. Если быстро нажать 10 раз то команда выполнится 10 раз подряд)
4. glek 119 17.11.22 16:29 Сейчас в теме
(3) А если в выполнении команды поставить произвольную паузу секунд в 10. Что происходит?
И да, есть разное проведение системы в отладке и без (в отладке 1С где-то запоминает последовательность кликов - по крайней мере об этом писалось на этом ресурсе)
5. user1831019 17.11.22 16:34 Сейчас в теме
Не поможет. Как верно сказали в (4) - стек кликов запоминается (уж в web-клинете точно). Программно это не решить, имхо.

Есть вариант просто ограничить выполнение команды "один раз за время жизни формы".
Или - при первом выполнении записывать информацию о её выполнении куда-нибудь в реквизит формы, а при втором - спрашивать пользюка про уверенность в своих действиях...

То есть выполнение команды запускать только при положительном ответе пользюка (если команда уже выполнялась, булев реквизит формы - Истина).
Ответ не требуется, если команда еще не выполнялась (булев реквизит формы - Ложь).
6. user1297103 17.11.22 17:01 Сейчас в теме
(5) Спасибо за предложенные варианты - будем пробовать)
7. user1297103 17.11.22 17:02 Сейчас в теме
(5) а про выделение строки в ТЗ (второй вопрос) что нибудь подскажите?)
8. user1826630 17.11.22 17:05 Сейчас в теме
(7) Никак.
Но, можно пойти по предыдущему принципу - сохранять где-то признак "Это первое открытие формы" из обработчика "ПриСозданииНаСервере()", и в зависимости от его значения - принимать решение о выполнении обработчика "ПриАктивизацииСтроки()".

"Чтобы продать что-то ненужное, надо сначала купить что-то ненужное!" (С)
9. user1297103 17.11.22 17:06 Сейчас в теме
Нашлось решение - если кому понадобится в будущем.
Весь алгоритм из команды выносим в отдельную процедуру, а в саму команды подключаем обработчик ожидания. Т е так:

&НаКлиенте
Процедура ОК(Команда)
	ЭтаФорма.ПодключитьОбработчикОжидания("ОбработкаНажатияКнопки", 0.2, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаНажатияКнопки()
       ТУТ АЛГОРИТМ!
КонецПроцедуры
Показать
10. user1297103 17.11.22 17:07 Сейчас в теме
(9) Теперь пойду курить про обработчик ожидания - что это и как используется. Вряд ли я его использую по назначению)
11. user1831019 17.11.22 17:10 Сейчас в теме
12. user1297103 17.11.22 17:11 Сейчас в теме
(11) Я был уверен, что с этой штукой не все так просто) Можно поподробнее, если вас не затруднит?
13. user1831019 17.11.22 17:13 Сейчас в теме
(12) Ты все так же сможешь продолжать нажимать мышку, и обработчик ожидания воспримет это как сигнал к выполнению действия...
Ты же нигде его не запрещаешь. Ты просто увеличиваешь немного интервал принятия команды.
Но она будет выполняться в любом случае.
14. user1297103 17.11.22 17:15 Сейчас в теме
(13) но если нажать быстро 5 раз на кнокпу больше ничего не происходит. То ест можно было видимо и просто паузу поставить и тоже сработало бы теоретически
15. user1831019 17.11.22 17:15 Сейчас в теме
(14) А если нажимать помедленнее?
У каждого пользюка своя скорость работы с мышом...
16. user1297103 17.11.22 17:22 Сейчас в теме
(15) то опять срабатывает после выполнения алгоритма)
17. user1831019 17.11.22 17:25 Сейчас в теме
18. user1297103 17.11.22 17:29 Сейчас в теме
Вообще странно. Закрадывается подозрение, что то ли я ид*от то ли разрабы не добавили простых веще типа отключения выделения строки у ТЗ и блокировки кнопки на время выполнения команды...
19. user1831019 17.11.22 17:34 Сейчас в теме
(18) Мотивируй? Каким образом выполнение одной команды связано с интерактивными действиями пользюка по активизации строки?
20. user1297103 17.11.22 17:48 Сейчас в теме
(19) в этой теме я задал сразу 2 вопроса.
1. как заблокировать кнопку пока она делает свой алгоритм.
2. как при открытии формы убрать выделение первой строки у ТЗ
Пока полностью функциональных не сложных и "правильных" решений не найдено
21. kuzev 47 17.11.22 17:54 Сейчас в теме
(20) Элементы.ТаблицаФормы.ВыделенныеСтроки.Очистить();
22. user1297103 17.11.22 17:57 Сейчас в теме
(21)Да этот метод срабатывает если строки перещелкивать - это я сделал. НО при открытии формы даже если прописать эту строку в процедуру "ПриОткрытии" - не помогает.
24. kuzev 47 17.11.22 17:59 Сейчас в теме
(22) Сделайте через обработчик ожидания. А вообще Вам придется после каждого "чиха" на форме этот код запускать через обработчик ожидания. Оно Вам надо? Небось и серверные вызовы есть...
25. user1831019 17.11.22 18:07 Сейчас в теме
(24) То есть, остальные комментарии не читал?
27. kuzev 47 17.11.22 18:16 Сейчас в теме
(25) Про какой Ваш комментарий речь?
Мой комментарий (22) касается вопроса 2.
23. kuzev 47 17.11.22 17:57 Сейчас в теме
(18) покажите код под кнопкой
29. user1297103 17.11.22 19:15 Сейчас в теме
(23) Какой именно код? Код решения вопроса про блокировку кнопки или код, который снимает выделение строки в ТЗ?
Если первое то проблема частично решилась обработкой ожидания, если второе, то на активизацию строки я повесил
Элемент.ВыделенныеСтроки.Очистить();
И теперь если перещелкивать мышкой то строки не выделяются, но вот если открыть форму то пока строку не выбрал первая всеравно выделяется, даже если при открытии формы прописать очищение выделенных строк у ТЗ
26. smirnova_a 17.11.22 18:13 Сейчас в теме
странно, что у вас не отрабатывает, у меня аналогичный алгоритм в БУХ 3 работает: ЭтаФорма.Элементы.КнВыполнить.Доступность = Ложь;
28. user1297103 17.11.22 19:12 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот