Как сделать вставку НСтр("ru=''") при выборе из списка Т9 метода НСтр?

tormozit Закрыто Средний

Если указываю в ТекстШаблона - НСтр("ru=''")
то вставляется лишняя пара скобок
НСтр("ru=''")()
Если такой возможности в API нет, то прошу добавить такой встроенный шаблон, т.к. этот метод очень часто именно так вставляют.

Комментарии

bolsun
#1, 08 июня 2024 16:31

У меня такой шаблон есть, в поставке почему-то отсутствует.
nstr.t9t
bolsun изменил статус на Открыто


amiralnar
#2, 11 июня 2024 07:51

(1) bolsun, А какие еще бывают прикольные кастомные шаблоны?


tormozit
#3, 27 июля 2024 09:02

(1) bolsun, так и не понял как решить проблему.


tormozit
#4, ред. 27 июля 2024 09:24

Все таки хочется решения проблемы в общем виде.
Например еще есть функция "Тип", для которой в 98% случаев параметр является текстовым литералом. Поэтому для нее логично применять шаблон Тип("<?>"). С ним возникает такая же беда - вставляются лишние скобки.

Прошу устранить вставку скобок, если для слова-метода задан шаблон.


bolsun
#5, ред. 27 июля 2024 13:41

(4) tormozit, т.к. нет полного примера твоего шаблона, то могу только предполагать, что ты используешь ЭтоМетод = Истина. Если, да, то установи в Ложь и скобки не будут вставляться.
bolsun изменил статус на Открыто


tormozit
#6, ред. 27 июля 2024 15:47

(5) bolsun, Пробовал. Такое решение не подходит по причине обмана пользователя - он будет видеть слева от слова картинку "свойство" вместо "функция". Легко можно представить, что рядом окажется одноименная локальная переменная и она перекроет функцию, т.е. в списке будет только одно слово "Тип" вместо нужных 2-х (свойства и метода).


bolsun
#7, 27 июля 2024 15:52

(6) tormozit, он будет видеть картинку шаблона, а не свойства


tormozit
#8, ред. 27 июля 2024 16:04

(7) bolsun, Вот как выглядит слово в списке при ЭтоМетод=Ложь у меня. К тому же пользователь включит фильтр "Только методы" и не увидит этот шаблон.


RDT.os


	Для Каждого СтрокаСлова Из ТаблицаСлов Цикл
		ЗаменятьРодителяПриВставке = Найти(СтрокаСлова.Слово, РазделительВариантаКонтекста);
		Если ЗаменятьРодителяПриВставке Тогда
			Представление = СтрокаСлова.Слово;
			Фрагменты = СтрРазделить(СтрокаСлова.Слово, РазделительВариантаКонтекста, Ложь); // Опасно отличается от СтрРазделитьЛкс!
			Фильтр = Фрагменты[0];
			ТекстШаблона = Фрагменты[1] + "." + Фрагменты[0];
		Иначе
			Представление = СтрокаСлова.Слово;
			Фильтр = Представление;
			ТекстШаблона = Неопределено; 
			// <!> - позиция каретки
			// <?> - позиция каретки и нажатие Ctrl+Space
			Если СтрокаСлова.Слово = "Новый" Тогда
				ТекстШаблона = СтрокаСлова.Слово + " <?>"; 
			ИначеЕсли СтрокаСлова.Слово = "Перейти" Тогда
				ТекстШаблона = СтрокаСлова.Слово + " ~<?>";
			ИначеЕсли СтрокаСлова.ЛиМетод Тогда
				// Лишняя пара скобок вставляется https://turboconf.ru/Tasks/9522
				Если СтрокаСлова.Слово = "Тип" Тогда
					ТекстШаблона = СтрокаСлова.Слово + "(""<?>"")";
					СтрокаСлова.ЛиМетод = Ложь;
				ИначеЕсли СтрокаСлова.Слово = "НСтр" Тогда
					ТекстШаблона = СтрокаСлова.Слово + "(""ru='<?>'"")"; 
					СтрокаСлова.ЛиМетод = Ложь;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		ЭлементСписка = Новый Соответствие();
		ЭлементСписка.Вставить("Представление", Представление);
		ЭлементСписка.Вставить("Фильтр", Фильтр);
		ЭлементСписка.Вставить("ЭтоМетод", СтрокаСлова.ЛиМетод);
		ЭлементСписка.Вставить("ВозвращаетЗначение", СтрокаСлова.ЛиРез);
		ЭлементСписка.Вставить("Тип", СтрокаСлова.Тип);
		ЭлементСписка.Вставить("ПредполагаемоеЗначение", Не СтрокаСлова.ЛиТочный);
		ЭлементСписка.Вставить("АвтоТочкаСЗапятойОтключена", Не СтрокаСлова.ЛиМетод Или ЗначениеЗаполнено(СтрокаСлова.Тип));
		ЭлементСписка.Вставить("АвтоперемещениеКурсораОтключено", Ложь);
		ЭлементСписка.Вставить("ИзКонтекста", Истина);
		ЭлементСписка.Вставить("ЕстьПараметры", СтрокаСлова.Слово <> "Количество");
		ЭлементСписка.Вставить("ЗаменятьРодителяПриВставке", ЗаменятьРодителяПриВставке);
		Если ПередатьШаблон Тогда
			ЭлементСписка.Вставить("ТекстШаблона", ТекстШаблона);
		КонецЕсли;
		Если ЕстьПриоритет Тогда
			ЭлементСписка.Вставить("Приоритет", СтрокаСлова.Приоритет);
		Иначе
			ЭлементСписка.Вставить("Приоритет", 0);
		КонецЕсли;
		Результат.Добавить(ЭлементСписка);
	КонецЦикла;


tormozit
#9, 04 августа 2024 12:11

Еще заметил что каретка неверно позиционируется с таким шаблоном
("ru='<?>'")

oBolZMkEgR.mp4


bolsun
#10, 31 августа 2024 21:21

Исправлено в 6.2.9009.40424

  • Исправлено лишнее добавление скобок после вставки шаблонов с установленным флагом ЭтоМетод.
  • Исправлено некорректное позиционирование каретки после вставки шаблонов с установленным флагом ЭтоМетод.

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


tormozit
#11, 31 августа 2024 22:03

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


tormozit
#12, ред. 13 декабря 2024 22:34

6.3.9113.27629
Опять сломался - вставляется НСтр(). Проверял с отключенными скриптами.


tormozit
#13, 13 декабря 2024 22:34

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


bolsun
#14, 18 декабря 2024 17:59

Не воспроизводится, пришли шаблон, который используется и настройки TurboConf.


tormozit
#15, 18 декабря 2024 18:55

Не стал разбираться. Заменил обработку вставки этого слова на свою через обработчик ПриВыбореЗначенияТ9
tormozit изменил статус на Закрыто


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