6. Часто каретка прыгает в непонятное место модуля при начале редактирования нового окна модуля

tormozit Баг платформы Высокий

Пример.
Открыл окно модуля и начинаю в нем писать текст "т.к." в текстовом литерале. После первого нажатия "." каретка прыгает на несколько строк вверх и остальные символы вводятся там, где я их даже не вижу сначала. Потом конечно замечаю и приходится откатывать ввод через CTRL+Z.
При этом код из моего скрипта не вызывается, т.е. проблема похоже чисто в Турбоконфе.

Ссылка скрыта

Комментарии

bolsun
#1, 07 декабря 2023 21:39

Проблема возникает при идентификации документа.
Для начала хочу понять, в логе непонятное событие есть, после нажатия Ctrl+T фокус попадает сначала на какой-то элемент "ОбработкаСобытий", а потом почти сразу на нужный элемент РаботаСРаспоряжениями

[07.12.23 17:29:27:512] -------------------------------------------UIAutomation Focus Changed = ОбработкаСобытий
[07.12.23 17:29:27:519] -------------------------------------------UIAutomation Focus Changed = РаботаСРаспоряжениями

Что это за элемент, почему на него ушел фокус?


bolsun
#2, 07 декабря 2023 21:47

Плохо конечно, что такой обрезанный скриншот, сложно оценить общую картину по окнам конфигуратора.


bolsun
#3, 07 декабря 2023 21:48

В логе как будто фигурирует 2 окна, которые получают фокус по очереди.


bolsun
#4, 07 декабря 2023 21:52

@tormozit, но для начала меня интересует ОбработкаСобытий - что это?


tormozit
#5, ред. 07 декабря 2023 23:00

Было открыто 2 общих модуля.


bolsun
#6, 07 декабря 2023 23:08

(5) tormozit, окна свободные были, судя по тому, что у них разные указатели?


bolsun
#7, ред. 07 декабря 2023 23:14

Как бы это не было связано с тикетом про свободное окно.
А комбинация Alt+Shift+R (восстановить положение окна) - мне напоминает Shift+R = русская К, которая была ведена.
Может совпадение конечно.


bolsun
#8, 07 декабря 2023 23:22

Еще и контрол там почему то залип, похоже все это связано со свободным окном. Вопрос окна были свободные или обычные на момент ввода "т.к."?


tormozit
#9, ред. 07 декабря 2023 23:38

Окна были обычными в момент возникновения проблемы. Свободными делает другая проблема https://turboconf.ru/Tasks/8912 Я их потом каждый раз делаю обычными.


tormozit
#10, 07 декабря 2023 23:37

Проблема случилась сразу при нажатии клавиши ".", а не R/К. Так что про ALT+Shift+R - скорее всего совпадение.


bolsun
#11, 07 декабря 2023 23:43

(9) tormozit, но они стали свободными после этого? Я про это и написал, что возможно проблема связана. Т.к. я вижу в логе, что у окон разные указатели, что является признаком, что они свободные.


bolsun
#12, 10 декабря 2023 15:03

Проблема скорее всего была вызвана https://turboconf.ru/Tasks/8912 и не должна больше происходить, если использовать рекомендации в https://turboconf.ru/Tasks/8912
bolsun изменил статус на Закрыто


tormozit
#13, ред. 10 декабря 2023 18:46

Связь с проблемой https://turboconf.ru/Tasks/8912 думаю можно вычеркнуть. Опять случались эта неприятная беда.
Начал вводить слово "Ложь" в окне модуля. В момент после нажатия клавиши "о" каретка улетела на тысячу строк вверх и там напечатались остальные буквы "ожь".
Уже несколько раз такое случалось после той доработки скрипта и в данном случае сценарий вообще не содержал открытия COM окон как впрочем и исходный сценарий этой заявки.

Ссылка скрыта
tormozit изменил статус на Открыто


bolsun
#14, 10 декабря 2023 19:04

Почему это происходит у меня нет идей, я пробовал повторить по всякому и ни разу такой проблемы не встречал. Лог тоже не дает ответов. Значит нужно найти способ воспроизведения.
bolsun изменил статус на На выяснении


bolsun
#15, 10 декабря 2023 19:05

Единственное что ясно из лога - проблема происходит в момент идентификации документа.


tormozit
#16, 10 декабря 2023 19:06

Может это происходит это из-за залипания модификаторов и наложения на это отправки сочетаний для идентификации документа.


bolsun
#17, 10 декабря 2023 19:12

(16) tormozit, нет, модификаторы не залипают, иначе бы они остались зажатыми после прыжка, но текст вводится правильный.
У меня только одна сейчас мысль появилась, что подсказка штатная появляется в момент идентификации, что конечно нарушает весь ее процесс.
Отсюда и непонятный фокус на каком-то элементе в процессе.


bolsun
#18, ред. 10 декабря 2023 19:18

Но в логе правда видно, что подсказка вызывается после уже идентификации и курсор уже не в той позиции.


bolsun
#19, 10 декабря 2023 19:21

Кстати, была ли правка перед этим в том месте куда попал неправильно курсор?
Я только так смог смоделировать нажатиями Ctrl+T и Ctrl+OemMinus попадание в другую позицию.


tormozit
#20, 10 декабря 2023 19:46

Правки кода в месте, куда прилетела каретка, не было.


bolsun
#21, 10 декабря 2023 20:37

(20) tormozit, добавил доп. логирование, нужен будет новый лог
https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#22, ред. 13 декабря 2023 00:14

Закрыл все окна модулей. Открыл модуля обработки. Установил каретку справа от точки в одном из выражений и нажал CTRL+Space однократно.
Каретка улетела на несколько тысяч строк вверх.
Ссылка скрыта


bolsun
#23, 13 декабря 2023 13:50

Еще бы скриншоты, приходится много гадать. Вижу подсказка вроде открылась после улетания.
Когда улетит в следующий раз просьба приложить скрин, сразу после улетания (желательно всего окна конфигуратора), а также скрин из какого места улетело.


tormozit
#24, ред. 13 декабря 2023 13:53

Можно попробовать проанализировать такие скриншоты из сообщения #13. Каретка прыгает обычно на начало какого то метода, но вроде бы не всегда.


bolsun
#25, ред. 13 декабря 2023 13:53

(24) tormozit, анализировал, но там другой лог без доп. информации. Сложно сопоставить.


bolsun
#26, 13 декабря 2023 13:54

Плюс случаи разные, во втором Ctrl+Space нажимался, а в первом автовызов.


bolsun
#27, 13 декабря 2023 13:57

У меня пока только одно предположение, что фокус не успевает вернуться из дерева конфигурации после идентификации. Попробую поставить там ожидание возврата в документ.


bolsun
#28, 13 декабря 2023 14:28

@tormozit https://disk.yandex.ru/d/XKCz9ijzgtoO1w
В этой версии добавил ожидание фокуса в исходный документ после идентификации + еще доп. логирование.
Если проблема возникнет нужен новый лог + скрины.
Не возникнет - значит в этом дело было.


bolsun
#29, 13 декабря 2023 16:25

@tormozit, исправил ошибку в ожидании смены фокуса, на этой версии попробуй, будет ли каретка прыгать. Если возникнет, нужен лог.
https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#30, 13 декабря 2023 17:41

Появилась проблема с открытием штатной подсказки

2cW3oY4yIs.mp4


bolsun
#31, 13 декабря 2023 17:54

(30) tormozit, не воспроизводится, нужен лог.


tormozit
#32, 13 декабря 2023 17:59

Так случается только если список Т9 пуст

Ссылка скрыта


tormozit
#33, 13 декабря 2023 18:00

Вставка из списка Т9 по ощущениям стала дольше выполняться и стала заметна крутилка при каждой вставке.


bolsun
#34, 13 декабря 2023 18:02

(32) tormozit, это норма?
[13.12.23 17:58:43:166] Warning: Выражение = Объект.ВключенныеВидыПроверок1.Загр. Найдено типов 0. Слов передано 0, выведено 0. Основной тип = ?,


bolsun
#35, 13 декабря 2023 18:45

(33) tormozit, тогда пока верну предыдущую реализацию вставки, она все таки проверена временем.


tormozit
#36, 13 декабря 2023 18:55

Может вставку синхронным способом делать только при первом вызове в окне модуля, т.е. когда точно будет переключение фокуса?


bolsun
#37, 13 декабря 2023 20:12

(36) tormozit, вставка не связана с фокусом, фокус уходит при открытии подсказки. Это просто была экспериментальная правка. Я не просто так изначально сделал отдельный асинхронный метод для Т9, это было сделано для отзывчивости при наборе.


bolsun
#38, 13 декабря 2023 20:19

Вернул асинхронную вставку

Ссылка скрыта


bolsun
#39, 13 декабря 2023 20:21

(34) @tormozit, проблема с отменой актуальна? жду ответ по этому вопросу


tormozit
#40, ред. 13 декабря 2023 20:49

Проблема #30 воспроизводится и в версии 6.0.8747.36656
Но немного подумав, мне теперь кажется что она была и раньше. Просто ситуация очень редкая. Она требует следующих условий

  1. В штатном списке уже введенному началу слова соответствует только один вариант
  2. Список Т9 пуст

Логично что штатный механизм в этом случае не показывает свой список, а сразу дополняет слово до конца единственного подходящего варианта. Далее ты отменяешь эту вставку, но список Т9 пуст. Поэтому в итоге пользователь получает ничего и он не доволен.


bolsun
#41, 13 декабря 2023 21:22

(40) tormozit, вот почему он пуст?
если не использовать ИР, то будет показана подсказка с одним этим значением, предлагаю создать отдельный тикет для обсуждения


tormozit
#42, 13 декабря 2023 21:29

(41) bolsun, пуст потому что я не могу рассчитать тип в этом случае. А элементы штатного списка мне недоступны


bolsun
#43, 13 декабря 2023 21:30

(42) tormozit, нужен отдельный тикет для обсуждения и реализации. Этот тикет о проблеме с кареткой.


tormozit
#44, 13 декабря 2023 21:36

(43) bolsun, создал заявку по открытию списка https://turboconf.ru/Tasks/8931


bolsun
#45, 14 декабря 2023 17:34

Скорее всего проблема была связана с отсутствием ожидания возврата в документ после идентификации. Пока закрываю, если появится снова нужен будет лог на текущей версии.
bolsun изменил статус на Закрыто


tormozit
#46, 14 декабря 2023 18:33

При выполнении команды "ИР Перейти к определению" сегодня опять случилось изменение режима отображения окон в конфигураторе. Эта команда не открывала окон и потому не могла отправлять нажатия клавиш.


bolsun
#47, 14 декабря 2023 18:34

(46) tormozit, лог?


bolsun
#48, 14 декабря 2023 18:35

bolsun изменил статус на На выяснении


tormozit
#49, 14 декабря 2023 18:37

Кажется это случилось примерно в 18:00
Ссылка скрыта
tormozit изменил статус на Закрыто


bolsun
#50, 14 декабря 2023 18:39

(49) tormozit, так не реально найти, нужен лог сразу же после возникновения проблемы.
bolsun изменил статус на На выяснении


tormozit
#51, ред. 16 декабря 2023 19:15

Опять прыгнула каретка.
Открыл новое окно существующего модуля. Установил каретку справа от точки и нажал CTRL+Space. Штатная подсказка не сработала. Вызвалось событие Т9. Каретка улетела в почти в самое начало модуля в середину имени объявления переменной, которой я давно уже не интересовался.

Ссылка скрыта


tormozit
#52, ред. 17 декабря 2023 23:26

Опять прыгнула каретка

Ссылка скрыта

Каретка прилетела сюда и выделила параметр в заголовке метода, который я до этого искал поиском, т.е. похоже что кто то отправил нажатие CTRL+"-" в окно модуля.

Затем продолжилась печать символов, которые я нажимал на клавиатуре.


bolsun
#53, 17 декабря 2023 23:41

Да, проблема возникает именно после Ctrl+-, я про это писал. Поэтому и спрашивал, были ли правки в том месте.
Видимо не только правки, а просто факт нахождения в этом месте.
Почему Ctrl+- срабатывает в документе, а не в дереве как должно быть, нужно разбираться.


tormozit
#54, ред. 18 декабря 2023 13:27

Опять прыгнула каретка. Но в этот раз в окне, которое уже давно открыто было и в нем уже много раз вызывалась подсказка, т.е. в кэше Турбоконфа имя конфигурации для этого окна должно было быть известно. Зачем он отправлял нажатие CTRL+"-" - непонятно.

Ссылка скрыта


bolsun
#55, ред. 18 декабря 2023 15:35

(54) tormozit, т.к. лог обрезан я не могу определить вызывалась ли раньше идентификация этого документа, и если не вызывалась то почему.

В очередной раз в процессе Ctrl+T Ctrl+-
фокус забирает какой-то элемент, которого быть в этом месте не должно. В данном случае ирПлатформа. Откуда он берется я не понимаю. Мы просто переходим по Ctrl+T в дерево из модуля ирКлсПолеТекстаПрограммы, откуда тут берется ирПлатформа - не ясно.

[18.12.23 12:40:36:123] OnFocusChange() title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - Комплексная автоматизация, редакция 1.1 , fg=468744
[18.12.23 12:40:36:124] -------------------------------------------UIAutomation Focus Changed = ирПлатформа
[18.12.23 12:40:36:128] -------------------------------------------UIAutomation Focus Changed = ирПлатформа
[18.12.23 12:40:36:129] -------------------------------------------UIAutomation Focus Changed = ирКлсПолеТекстаПрограммы


bolsun
#56, 18 декабря 2023 15:37

Единственное объяснение, что до этого был выделен другой элемент в списке, и элемент по Ctrl+T активируется не сразу.


bolsun
#57, 18 декабря 2023 15:43

Да, похоже так и есть. Но пока не ясно влияет ли это на перемещение каретки.


tormozit
#58, 18 декабря 2023 15:50

в #52 достаточно подробно описал наблюдение. Удалось там что то новое увидеть? Может еще расширить логирование?


tormozit
#59, ред. 18 декабря 2023 15:58

Есть версии на счет того, зачем Турбоконф у старого окна, для которого он точно уже узнавал имя конфигурации, пытается узнавать имя конфигурации заново?


tormozit
#60, ред. 18 декабря 2023 16:07

(55) bolsun, вот большой лог. Нашел в нем еще какую то внутреннюю ошибку, уведомления о которой я не видел:
[18.12.23 12:25:25:700] Error: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в UIAutomationClient.IUIAutomationTreeWalker.GetParentElement(IUIAutomationElement element)
в TurboConf.Service.MainForm.AdjustContextMenu()
Ссылка скрыта


bolsun
#61, ред. 18 декабря 2023 16:20

(60) tormozit, документ редактировался, но без идентификации, так подсказка не вызывалась (во всяком случае я не вижу этого в логе).
С этим вроде все в порядке.


bolsun
#62, ред. 18 декабря 2023 16:28

У меня есть предположение только такое, после Ctrl+T хотя фокус и ушел в дерево, следующая комбинация Ctrl+- выполняется слишком быстро и конфигуратор считает, что еще активен модуль и выполняет команду возврат для него, а не для дерева.

В логе вообще в этом месте все просто

каретка в правильном месте

Ctrl+T
дождались смены элемента (попали в дерево)
Ctrl+OemMinus
дождались смены элемента на документ
и уже каретка не в том месте

Добавлю там небольшую задержку.


bolsun
#63, 18 декабря 2023 16:38

@tormozit Добавил по 100 мс, после Ctrl+T. По результатам теста уменьшим/увеличим.

https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#64, 18 декабря 2023 16:41

На всякий случай вот код, которым я пользовался на своей стороне до передачи этой роли Турбоконфу.

ТурбоКонф.АктивироватьОкно(Конфигуратор.ГлавноеОкно);
ТурбоКонф.КонтролКлавиша(Клавиши.T);
КлючКэшаИмениКонфигурации = КлючКэшаИмениКонфигурацииДляПоля(2);
ИмяКонфигурации = ВосстановитьЗначениеСеансаКонфигуратора(КлючКэшаИмениКонфигурации);
Если ПустаяСтрока(ИмяКонфигурации) Тогда
	СохранитьЗначениеСеансаКонфигуратора(КлючКэшаИмениКонфигурации, ИмяКонфигурации);
	ТурбоКонф.Клавиша(Клавиши.Home);
	ТурбоКонф.Ждать(100);
	ИмяКонфигурации = ПолучитьВыделенныйТекст(Ложь);
	Если ИмяКонфигурации = "Мои шаблоны" Тогда
		// Залипла клавиша SHIFT при нажтии CTRL+T
		Возврат Неопределено;
	Иначе
		СохранитьЗначениеСеансаКонфигуратора(КлючКэшаИмениКонфигурации, ИмяКонфигурации);
	КонецЕсли;
	ТурбоКонф.КонтролКлавиша(Клавиши.OemMinus);
	ТурбоКонф.КонтролКлавиша(Клавиши.T);
КонецЕсли;
Сообщить("ИмяКонфигурации = " + ИмяКонфигурации);
ТурбоКонф.КонтролКлавиша(Клавиши.OemMinus);

Вроде бы с ним не было такой проблемы. Но были залипания клавиш-модификаторов.


tormozit
#65, 18 декабря 2023 17:06

(63) bolsun, не помогло. Опять каретка улетела
отсюда

сюда

Ссылка скрыта


bolsun
#66, 18 декабря 2023 17:24

Не помнишь, почему мы вообще используем Ctrl+- для возврата, а не Esc?


tormozit
#67, ред. 18 декабря 2023 18:10

В окнах внешнего объекта (например внешней обработки) не работает клавиша Esc


bolsun
#68, ред. 18 декабря 2023 18:21

Тогда больше идей у меня нет. просто после нажатия Ctrl+OemMinus в дереве конфигурации фокус попадает в документ, а затем через несколько миллисикунд прыгает курсор.

Причем у меня ни разу такого не было.


bolsun
#69, 18 декабря 2023 18:33

Вот еще одна отладочная версия, в ней для ускорения воспроизведения идентификация не кэшируется и выполняется каждый раз.

Так же нужно протестировать отдельно функцию ТурбоКонф.ИдентифицироватьТекущийДокумент();

Изменить cкрипт ShowOutputForm.os

//ТурбоКонф.ShowOutputForm();
ТурбоКонф.ИдентифицироватьТекущийДокумент();

и попробовать вызывать его в разных ситуациях, может проблема воспроизведется.

https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#70, ред. 18 декабря 2023 20:51

Пока не удалось воспроизвести специально.
Напомни в каком случае автоматически вызывается подсказка Т9, если ввожу слово без точки (в наблюдении #65 я вводил слово "Конец" и событие сработало после первого символа).


bolsun
#71, 18 декабря 2023 20:46

(70) tormozit, не совсем понятен вопрос. После первого введенного символа и вызывается, если место подходящее.


tormozit
#72, 18 декабря 2023 20:47

(71) bolsun, Вроде вызывается штатная подсказка автоматом. Слово "Конец" вводилось не после точки.


bolsun
#73, 18 декабря 2023 20:48

(72) tormozit, нужен пример.


bolsun
#74, ред. 19 декабря 2023 13:39

Вроде на обычной версии у тебя часто возникала проблема, на отладочной версии не возникает больше?


tormozit
#75, 19 декабря 2023 15:10

(69) bolsun, эту версию я погонял часок с передышками. Проблема не повторилась. Но важно учесть, что и раньше я не мог ее специально воспроизвести. Эта версия работает очень медленно. Поэтому я затем вернулся на обычную.


tormozit
#76, ред. 19 декабря 2023 17:26

Опять случилось. В этот раз я нажал клавишу "." и точка появилась в другом месте.

Ссылка скрыта


bolsun
#77, ред. 19 декабря 2023 17:47

(76) tormozit, нужен лог из текущей версии 6.0.8753.29371 или выше, там есть дополнительное логирование позиции.


tormozit
#78, 19 декабря 2023 17:50

(77) bolsun, жду починки блокирующей ошибки https://turboconf.ru/Tasks/8954


tormozit
#79, 23 декабря 2023 08:44

Опять прыгнула каретка при нажатии клавиши "."

Ссылка скрыта


bolsun
#80, 24 декабря 2023 11:47

bolsun изменил статус на Баг платформы


tormozit
#81, ред. 29 декабря 2023 13:29

После внедрения мер противодействия больше прыжков на возникало.


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера