Помогите придумать как прервать выполнение функции по времени
Есть кнопка "Найти товар по коду" в РМК.
Если товар весовой, то выполняется функция
Ситуации:
1. Все норм, вес получает мгновенно, отрабатывает как надо.
2. Иногда прилетает ошибка "ПортаВводаВывода", думаю проблема в com адаптере, скоро поменяю. С этим тоже проблем нет, ошибка также прилетает мгновенно и не влияет на работу РМК. Кассир просто сам вбивает вес.
3. Самый плохой вариант. Возникает периодически, не могу выловить в чем проблема и как исправить. Думаю все та же проблема с адаптером. В общем по выполнении функции зависает окно РМК. Бесконечно крутится колесо мышки. 1С как бы ждет результат, а результат все нет. Помогает перезапустить 1С через Диспетчер задач.
Идея - данную функцию ограничить по времени выполнения, например 3 сек. Если никакого результата нет, то прервать выполнение функции и продолжить работать дальше, как в случае со второй ситуацией.
Вопрос - как ограничить время выполнения функции и прервать ее в случае отсутствия результата ???
Если товар весовой, то выполняется функция
ПолучитьВесСЭлектронныхВесов();
Ситуации:
1. Все норм, вес получает мгновенно, отрабатывает как надо.
2. Иногда прилетает ошибка "ПортаВводаВывода", думаю проблема в com адаптере, скоро поменяю. С этим тоже проблем нет, ошибка также прилетает мгновенно и не влияет на работу РМК. Кассир просто сам вбивает вес.
3. Самый плохой вариант. Возникает периодически, не могу выловить в чем проблема и как исправить. Думаю все та же проблема с адаптером. В общем по выполнении функции
ПолучитьВесСЭлектронныхВесов();
Идея - данную функцию
ПолучитьВесСЭлектронныхВесов();
Вопрос - как ограничить время выполнения функции и прервать ее в случае отсутствия результата ???
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Можно как вариант так, если приемлемо:
Для прерывания выполнения программного кода, необходимо прописать вызов процедуры глобального контекста ОбработкаПрерыванияПользователя(). Эта процедура делает проверку нажатия сочетания клавиш Ctrl+Break. При нажатии пользователем этого сочетания клавиш, прерывается выполнение программного кода. Данная процедура не выводит окон для подтверждения прерывания. Процедура ОбработкаПрерыванияПользователя() может вызываться только в обработчиках, которые срабатывают при действиях пользователей. Таким образом, процедуру можно вызывать при нажатии на кнопку, но нельзя вызывать в таких событиях как ПриОткрытии() и т.д.
Для прерывания выполнения программного кода, необходимо прописать вызов процедуры глобального контекста ОбработкаПрерыванияПользователя(). Эта процедура делает проверку нажатия сочетания клавиш Ctrl+Break. При нажатии пользователем этого сочетания клавиш, прерывается выполнение программного кода. Данная процедура не выводит окон для подтверждения прерывания. Процедура ОбработкаПрерыванияПользователя() может вызываться только в обработчиках, которые срабатывают при действиях пользователей. Таким образом, процедуру можно вызывать при нажатии на кнопку, но нельзя вызывать в таких событиях как ПриОткрытии() и т.д.
(2)
Т.е. вы предлагаете дать возможность прервать мою функцию функцией ОбработкаПрерыванияПользователя(). при этом кассиру придется нажимать соответствующие кнопки на клавиатуре??
А можно это как-то автоматизировать? Мне нужна полная автоматизация, иначе не интересно =)
ОбработкаОжидания() - для моих целей не подойдет???
ОбработкаПрерыванияПользователя
Т.е. вы предлагаете дать возможность прервать мою функцию функцией ОбработкаПрерыванияПользователя(). при этом кассиру придется нажимать соответствующие кнопки на клавиатуре??
А можно это как-то автоматизировать? Мне нужна полная автоматизация, иначе не интересно =)
ОбработкаОжидания() - для моих целей не подойдет???
Выполнение процедуры нужно запихнуть в фоновое задание, если через 3 секунды не будет результата, тогда отменить и написать код, что делать дальше.
(5)Что дальше уже все написано. Стопорит на том что результата бесконечно нет. Напишите пожалуйста как реализолвать вашу идею?
Мой код такой:
Нужно как-то модифицировать ПолучитьВесСЭлектронныхВесов();
Мой код такой:
ПараметрыТовара = ПолучитьТоварПоКоду(Результат);
Если НЕ ПараметрыТовара = Неопределено тогда
ПараметрыОбработки = ПараметрыОбработкиВыбораТовара();
ОбработатьВыборТовара(ПараметрыТовара[0], ПараметрыОбработки);
Если ПараметрыТовара[1] тогда
ПолучитьВесСЭлектронныхВесов();
Если ТекущийТоварЦена = 0 тогда
ТекущийЭлемент = Элементы.ТекущийТоварЦена;
Иначе Если ТекущийТоварКоличество = 0 тогда
ТекущийЭлемент = Элементы.ТекущийТоварКоличество;
КонецЕсли;
КонецЕсли;
КонецЕсли;
иначе
ПоказатьОповещениеПользователя("ТОВАР НЕ НАЙДЕН!",,,,,);
ПредлагаемПоискПоКоду();
КонецЕсли;
ПоказатьНужно как-то модифицировать ПолучитьВесСЭлектронныхВесов();
Перед получением веса заряжаете фоновое задание, потом в цикле пинг и опрос фонового, если за указанный интервал от фонового нет ответа, то возвращаем ноль дальше в код.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот