Не вызывать шаблоны внутри строк

Евгений М. Закрыто

Есть шаблон "для"
В модуле объекта пишем

текстСообщения = "Тут не должны вызываться шаблоны: для

После "для" вываливается окно шаблона. Мне кажется, что шаблоны внутри строк не должны отрабатывать совсем.

Версия 6.3.9148.39706 от 17 января 2025 г.
Настройки ТК

Комментарии

Евгений М.
#1, 20 января 2025 14:43

И вообще не предлагать подсказку внутри строк.


tormozit
#2, 20 января 2025 14:51

(1) Евгений М., в случае родного анализатора кода Турбоконфа можете запрещать, но для ИР адаптера нужно обязательно оставить текущее поведение механизма, т.к. оно уже достаточно отточено.


Евгений М.
#3, 27 января 2025 15:34

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


tormozit
#4, 29 января 2025 08:25

(3) Евгений М., разве я предложил тебе что то делать? Нет. Тебе показалось. Я лишь отметил, чего не следует менять в API.


bolsun
#5, 29 января 2025 11:48

В этой ситуации подсказка вызываться не должна. Нужен лог.


Евгений М.
#6, 29 января 2025 14:20

(5) bolsun, лог уровня "отладка":
[20251929 14-19-Ссылка скрыта


bolsun
#7, ред. 29 января 2025 15:43

Проблема косвенно связана с ИР адаптером и внесенным изменением, которое разрешает срабатывание подсказки внутри строк.
В результате, если у пользователя ИР адаптер отключен для базы, то ТК все равно продолжает вызывать подсказку в строках.


tormozit
#8, ред. 29 января 2025 15:46

(7) bolsun, попробуй опереться на возвращаемый флаг СтандартнаяОбработка из обработчика ПередПолучениемДанныхТ9


bolsun
#9, 29 января 2025 15:45

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


bolsun
#10, ред. 29 января 2025 15:46

(8) tormozit, если ИР адаптера вообще нет, то тоже срабатывает из-за этой правки.
Проблемы тут 3 на самом деле.

ИР нет
ИР отключен
Пользователю не нужны подсказки в строках совсем.


bolsun
#11, 29 января 2025 15:48

Как минимум единая настройка должна быть, по умолчанию отключена, т.к. штатный ТК не показывает подсказку в строках (только в некоторых, типа РольДоступна и т.д.)


tormozit
#12, 29 января 2025 15:48

(10) bolsun, ну ты же блокируешь свою подсказку если СтандартнаяОбработка=Ложь. Вот я и предлагаю делать правки поведения только для СтандартнаяОбработка=Истина, а мой сценарий СтандартнаяОбработка=Ложь не трогать. Можно так сделать?


Евгений М.
#13, ред. 29 января 2025 16:00

(7) bolsun,

В результате, если у пользователя ИР адаптер отключен для базы, то ТК все равно продолжает вызывать подсказку в строках.

Она мне и с Адаптером не нужна внутри обычной (однострочной) строки


bolsun
#14, ред. 29 января 2025 16:05

(12) tormozit, это разные события, разнесенные во времени.
Здесь идет речь об общей проверке автовызова при наборе текста, вызывать подсказку или нет. Если условия подходящие подсказка вызывается (штатная или T9) и там уже срабатывают обработчики.

При отключенном ИР мне придется еще раз проверять в строке произошел вызов или нет.

Поэтому как минимум должен быть общий флаг, разрешающий такой вызов.


tormozit
#15, 29 января 2025 16:06

(14) bolsun, тогда прошу предусмотреть программное включение этого флага.


bolsun
#16, 29 января 2025 17:18

(15) tormozit, имя глобальной настройки T9AllowAutoInvokeInsideStrings


bolsun
#17, 29 января 2025 18:36

(12) tormozit,

bolsun, ну ты же блокируешь свою подсказку если СтандартнаяОбработка=Ложь. Вот я и предлагаю делать правки поведения только для СтандартнаяОбработка=Истина, а мой сценарий СтандартнаяОбработка=Ложь не трогать. Можно так сделать?

Используй Отказ = Истина, а не СтандартнаяОбработка - тогда подсказка не будет показана.


tormozit
#18, ред. 29 января 2025 21:28

(16) bolsun, не работает. Делаю так

	ТурбоКонф.СохранитьЗначениеСеанса(Строка(Конфигуратор.ГлавноеОкно)+"_"+"T9AlwaysShowOnCtrlSpace", НовоеЗначение);
	ТурбоКонф.СохранитьЗначениеСеанса(Строка(Конфигуратор.ГлавноеОкно)+"_"+"T9AllowAutoInvokeInsideStrings", НовоеЗначение);

Но автовызов в строковых литералах теперь не работает.


bolsun
#19, 29 января 2025 21:44

(18) tormozit, неправильно.
T9AllowAutoInvokeInsideStrings - это глобальный флаг, его нужно включить чтобы вообще срабатывал автовызов в строках.
используй УстановитьЗначениеНастройкиПрограммы()

В остальных случаях используй Отказ


tormozit
#20, 29 января 2025 21:48

(19) bolsun, но УстановитьЗначениеНастройкиПрограммы будет действовать на все окна конфигураторов. Пользователи твоей подсказки опять начнут жаловаться. Нужно сделать опять же привязку к окну конфигуратора.


bolsun
#21, ред. 29 января 2025 21:52

(20) tormozit, установи глобальный флаг Истина, а затем используй Отказ при проверке в текущем конфигураторе. Если ИР отключен в данном окне и вызов внутри строки (не запрос) - установи Ложь.


tormozit
#22, 29 января 2025 21:53

(21) bolsun, у меня нет анализа контекста при отключенном приложении ИР. Поэтому боюсь я могу испортить работу твоей подсказки в этой ситуации.


bolsun
#23, ред. 29 января 2025 21:59

(22) tormozit, в любом случае наличие опции для отключения подсказки лучше чем отсутствие. Ты всегда можешь включить ее программно (разово).
Но как я писал ранее, нужно решить, стоит ли делать ДОПОЛНИТЕЛЬНЫЙ флаг в разрезе конфигураторов.


tormozit
#24, 29 января 2025 22:07

(23) bolsun, допустим разовое включение я сделал. И тут же пользователь переключился в другое окно конфигуратора, где приложение ИР отключено. Я не смогу отловить это переключение. И вариант вмешиваться в работу твоей подсказки мне тоже не нравится. Прошу снова сделать параметр сеанса, который позволит программно включать прежний режим работы подсказки в строковых литералах из скрипта с привязкой к окну независимо от значения флажка в окне настроек


bolsun
#25, ред. 29 января 2025 22:09

(24) tormozit, флаг отключения подсказки в строках будет приоритетным. Если пользователю не нужна подсказка внутри обычных строк он сможет ее отключить.
Параметр сеанса добавлю.


bolsun
#26, ред. 29 января 2025 22:42

Добавлена настройка сеанса T9AllowAutoInvokeInsideCommonStrings - устанавливает режим автовызова подсказки внутри обычных строк (не текстах запросов)

ТурбоКонф.СохранитьЗначениеСеанса(Строка(Конфигуратор.ГлавноеОкно)+""+"T9AllowAutoInvokeInsideCommonStrings", НовоеЗначение);

Глобальный флаг T9AllowAutoInvokeInsideCommonStrings должен быть установлен в Истина. Не рекомендуется менять его постоянно, а предложить включить его разово.

6.3.9161.946

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


bolsun
#27, 29 января 2025 22:42

Обрати внимание флаг T9AllowAutoInvokeInsideStrings был переименован в T9AllowAutoInvokeInsideCommonStrings


bolsun
#28, 29 января 2025 22:46

По идее переименовать можно в T9GlobalAllowAutoInvokeInsideCommonStrings, но возможно и так нормально.


tormozit
#29, 29 января 2025 22:56

При старте Турбоконф выдал такую ошибку. Но она не помешала ему правильно работать.

Не удалось вызвать GetUIAutomationCachedInfo. System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
в TurboConf.Core.TurboAPI.TurboApi.SetLastDocument(Int32 pid, UIAutomationInfo doc)
в TurboConf.Core.TurboAPI.TurboApi.GetUIAutomationCachedInfo(IntPtr fg, IUIAutomationElement elem, UIAutoFlags flags)


tormozit
#30, ред. 29 января 2025 23:10

(26) bolsun, проверил. Работает, т.е. в окне с ИР автоматически открывает, а в окне без ИР автоматически не ткрывает.


bolsun
#31, 30 января 2025 00:44

(30) tormozit, флаг в разрезе конфигуратора будет доступен в ТК 6.3, в 6.2 будет только глобальная настройка. Остальное поведение там останется как прежде.


Евгений М.
#32, 30 января 2025 08:32

В строках подсказка больше не появляется, спасибо.
При этом подсказки Адаптера работают. Например, в "ОбщегоНазначения.ЗначениеРеквизитаОбъекта" (1).
Но шаблоны продолжают срабатывать. В данном примере после "для" нажимаем пробел и вываливается окно шаблона.
Или надо вообще отключать автовставку шаблонов в конфигураторе?


tormozit
#33, ред. 30 января 2025 08:34

(32) Евгений М., это ж штатная функция конфигуратора. Ты сам ее включаешь/выключаешь. У меня штатные шаблоны тоже работают.


Евгений М.
#34, 30 января 2025 08:35

(33) tormozit, а ты со включенной автоподстановкой шаблонов в конфигураторе работаешь? Или отключил и оставил только их принудительный вызов по ctrl+q?


Евгений М.
#35, 30 января 2025 22:43

Евгений М. изменил статус на Закрыто


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