Писал программу по автоматизации процессов в 1С и столкнулся с проблемой определения времени задержки между операциями.
Причина в том, что при вводе лицевого счета, карточка абонента грузится довольно долго. После изменения, даже самого незначительного, запись карточки абонента происходит еще раза в 3-4 дольше, чем открытие. При этом, если одновременно запись производят несколько человек, в разные карточки, то 1С может зависнуть еще на больший срок.
Думал сначала решить эту проблему путем расчета среднего времени задержки через TimerInit() и TimerDiff(), но в последствии получилось найти более элегантное решение.
Во время тестов программы, само ЧУДО заставило меня обратить внимание на то, на что мы уже давно с вами перестали замечать.
А именно на поведение курсора мыши. И действительно, пока 1С находится в стадии зависания, курсор изменяет свой внешний вид, со стрелочки на другой. Вот основываясь на этом изменении и родилась идея определять время задержки между операциями по внешнему виду курсора.
Практика показала, что этот метод очень надежный. Работает, даже если время задержек между операциями динамически случайным образом изменяется. Также при необходимости надежность алгоритма можно повысить еще больше, достаточно повысить количество наращиваний для переменной $k и увеличив время задержки с 50 на произвольное. В общем алгоритм довольно гибкий. К сожалению подходит только в тех случаях, когда курсор меняет свой внешний вид.
В общем, что я хочу сказать, будьте внимательнее к мелочам, не бойтесь смотреть свежим взглядом на давно опостылевшие вещи, и глядишь не только заметите, как можно оптимизировать алгоритм, но и то, как симпатичная коллега строит вам глазки(ну или кто-то вашей второй половинке). В любом случае замечать даже мельчайшие детали всегда полезно, и стоит стараться делать выводы на основе этих наблюдений.
Поздравляю всех с Весной! Надеюсь эта тема будет кому-то полезна.
Причина в том, что при вводе лицевого счета, карточка абонента грузится довольно долго. После изменения, даже самого незначительного, запись карточки абонента происходит еще раза в 3-4 дольше, чем открытие. При этом, если одновременно запись производят несколько человек, в разные карточки, то 1С может зависнуть еще на больший срок.
Думал сначала решить эту проблему путем расчета среднего времени задержки через TimerInit() и TimerDiff(), но в последствии получилось найти более элегантное решение.
Во время тестов программы, само ЧУДО заставило меня обратить внимание на то, на что мы уже давно с вами перестали замечать.
А именно на поведение курсора мыши. И действительно, пока 1С находится в стадии зависания, курсор изменяет свой внешний вид, со стрелочки на другой. Вот основываясь на этом изменении и родилась идея определять время задержки между операциями по внешнему виду курсора.
Код:
;~ Определяем задержку по указателю мыши
$k = 1
While 1
Sleep(50)
$mgk = MouseGetCursor()
If $mgk = 2 Then
$k += 1
Else
$k = 1
EndIf
If $k >= 5 Then ExitLoop
WEnd
Практика показала, что этот метод очень надежный. Работает, даже если время задержек между операциями динамически случайным образом изменяется. Также при необходимости надежность алгоритма можно повысить еще больше, достаточно повысить количество наращиваний для переменной $k и увеличив время задержки с 50 на произвольное. В общем алгоритм довольно гибкий. К сожалению подходит только в тех случаях, когда курсор меняет свой внешний вид.
В общем, что я хочу сказать, будьте внимательнее к мелочам, не бойтесь смотреть свежим взглядом на давно опостылевшие вещи, и глядишь не только заметите, как можно оптимизировать алгоритм, но и то, как симпатичная коллега строит вам глазки(ну или кто-то вашей второй половинке). В любом случае замечать даже мельчайшие детали всегда полезно, и стоит стараться делать выводы на основе этих наблюдений.
Поздравляю всех с Весной! Надеюсь эта тема будет кому-то полезна.