При первом вводе текста в окне модуля внешней обработки фокус часто перемещается в окно конфигурации

tormozit Закрыто

Хотел ввести слово "Если" в только что открытом модуле управляемой формы во внешней обработке

&НаСервере
Процедура Команда1НаСервере()
	Е
КонецПроцедуры

При этом фокус ввода переместился в панель конфигурации и там открылся список подсказки. А должен был активировать окно внешней обработки, скопировать там форму и вернуться в окно модуля и там показать список подсказки.

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

Предположительно происходит это в давно не менявшемся методе скрипта

Процедура ОбновитьСтруктуруФормы(Знач ПолеТекстаПрограммы) Экспорт
	ТекстСтруктурыФормы = "";
	ТурбоКонф.КонтролКлавиша(Клавиши.T);
	ТурбоКонф.КонтролКлавиша(Клавиши.C);
	МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
	Пока ТекущаяУниверсальнаяДатаВМиллисекундах() - МоментНачала < 200 Цикл
		ТурбоКонф.Ждать(50);
		Попытка
			ОписаниеФормы = ТурбоКонф.ПолучитьБуферОбмена("1C:MD8 Data");
		Исключение
			ОписаниеФормы = "";
		КонецПопытки;
		Если ПолеТекстаПрограммы.ПроверитьОписаниеФормыИзБуфераОбмена(ОписаниеФормы) Тогда
			ТекстСтруктурыФормы = ТурбоКонф.ПолучитьБуферОбмена("1C:MD8 External Data");
			Прервать;
		КонецЕсли;
	КонецЦикла;
	ТурбоКонф.КонтролКлавиша(Клавиши.OemMinus);
	Сообщить("СтруктураФормы=" + Лев(ТекстСтруктурыФормы, 1000));
	Попытка
		ПолеТекстаПрограммы.УстановитьСлужебныеДанныеФормы(ТекстСтруктурыФормы);
		Результат = Истина;
	Исключение
		Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
	КонецПопытки;
	Если Не ЗначениеЗаполнено(ТекстСтруктурыФормы) Тогда
		ТурбоКонф.ПоказатьВсплывающееУведомление(НазваниеСкрипта(), "Сделайте форму видимой в дереве конфигурации, чтобы анализ модуля мог получить ее новую структуру", 4000);
	КонецЕсли;
КонецПроцедуры

Комментарии

tormozit
#1, ред. 08 марта 2024 10:51

Проверил на версии 6.0
Там этот сценарий корректно отрабатывает.

Для информации. Чтобы каждый раз срабатывал вызов ОбновитьСтруктуруФормы() нужно каждый раз переименовывать форму.

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


bolsun
#2, 08 марта 2024 13:26

Воспроизвел с включенным флагом "Закрывать окно DDE Server", без него такого не происходит. Значит закрытие окна как-то влияет.


tormozit
#3, 08 марта 2024 13:30

Окно "DDE Server" не может открываться в этом сценарии. Значит проблема в коде, который его ищет.


bolsun
#4, 08 марта 2024 13:36

(3) tormozit, похоже совпадение, т.к. без флага тоже воспроизвелось.


bolsun
#5, ред. 08 марта 2024 13:51

Значит дело в самом скрипте и опции "Всегда показывать подсказку T9 вместо штатной".
Т.к. в данном сценарии с переименованием формы и на версии 6.0 подсказка работает некорректно (не показывается).
Только для этого нужно вызывать подсказку после точки.

&НаКлиенте
Функция ПолучитьСтруктуру()
	
	  Возврат Новый Структура;
	
КонецФункции


&НаКлиенте
Процедура Команда1(Команда)
	
	А = ПолучитьСтруктуру();
	А.
	
КонецПроцедуры

Просто раньше в этом случае чаще вызывалась штатная, поэтому проблема была незаметна.


tormozit
#6, 08 марта 2024 13:56

Еще раз прикладываю лог с версии 6.0 где скрипт работает корректно с вызовом после точки

&НаСервере
Процедура Команда1НаСервере()
	яя().HTTPСервисы;
КонецПроцедуры

Функция яя()
	Возврат Метаданные
КонецФункции

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


bolsun
#7, ред. 09 марта 2024 09:00

(6) tormozit, у меня не работает данный пример и на 6.0. Поэтому я говорю, что проблема не в 6.1.

Вообще я не предполагал, что в обработчике ПриПолученииДанныхТ9 будет какое-то интерактивное взаимодействие с нажатиями клавиш.

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


bolsun
#8, ред. 09 марта 2024 09:09

Точнее, модификаторы не отжимаются именно когда флаг "Всегда показывать подсказку T9" включен, т.к. там сразу идет вызов подсказки, без симуляции Ctrl+Space и т.д.
В примере с Если в 6.0 происходит вызов штатной подсказки, поэтому фокус не уходит в дерево конфигурации. Но если набирать после точки, когда штатной нет, то у меня также начинаются подобные проблемы из-за шифта.

Можно попробовать добавить отжатие и обратное дожатие Shift при флаге "Всегда показывать подсказку T9", но нужно смотреть, будут ли залипания.


tormozit
#9, ред. 09 марта 2024 09:18

Если причина проблемы только в CTRL+C, то можно сделать быстрое копирование через нажатие кнопки в панели инструментов при ее наличии. Для этого можно добавить в API функцию КопироватьВБуфер, которая закэширует нужную кнопку панели инструментов и поэтому будет быстро жать ее.


bolsun
#10, 09 марта 2024 09:19

(9) tormozit, не только в этом, ты там нажимаешь Ctrl+T, Ctrl+OemMinus они тоже не будут работать правильно. Поэтому скорее всего проблему решит, только отжатие шифт.


bolsun
#11, 09 марта 2024 09:21

Кстати из-за зажатого шифта не только в дерево уходит, но и шаблоны еще открываются из-за Ctrl+Shift+T


bolsun
#12, 09 марта 2024 17:21

В версии 6.1.8834.34570 добавил отжатие шифт
https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#13, 09 марта 2024 17:33

Проверил. Работает.
tormozit изменил статус на Закрыто


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