6. Опять подсказка Т9 сама вызывается при редактировании макета типа "Текстовый документ"

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

Комментарии

tormozit
#1, ред. 21 ноября 2023 17:29

Ожидалось что она не будет сама вызываться, в том числе при вводе точки, исключая случай когда текст начинается с ВЫБРАТЬ (является текстом запроса по содержанию).
Аналогичная проблема давно была исправлена в 5-й версии.


bolsun
#2, 21 ноября 2023 23:17

В 5.19 точно такое же поведение, быстро и в то же время надежно определить что это макет пока я не придумал как.
Напоминаю, что было решено реализовать проверку на Bsl начиная с 30000 символов.


tormozit
#3, 22 ноября 2023 00:36

Еще раз проверил в 5.19. Там нет этой проблемы. Это видно сразу же, т.к. список Т9 не появляется сам, но появляется если нажать CTRL+Space. Ровно так я и просил тебя сделать. Т.е. в 5.19 этот сценарий работает максимально удобно.
В 6 версии список Т9 сам открывается постоянно. Это раздражает и мешает печатать текст на естественном языке.


bolsun
#4, 22 ноября 2023 00:38

(3) tormozit, у меня в 5.19 появляется автоматически.


bolsun
#5, 22 ноября 2023 00:39

Еще раз, я не определяю, что это макет. и в 5.19 не определял, только анализировал, что это код 1с, начиная от 30000 символов.


bolsun
#6, 22 ноября 2023 00:40

Возможно какие-то другие факторы сказываются. Нужен лог и экспорт параметров.


tormozit
#7, 22 ноября 2023 00:47

В 5.19 сумел воспроизвести аналогичную проблему.
Сегодня мне потребовалось создать текстовый макет и написать в нем около 40 слов. Я не вытерпел работы Т9 и пришлось писать в отдельном текстовом редакторе.

Вроде бы ты делал анализ типа текста по содержимому, чтобы понять относится ли он к одному из программных языков 1С. И делал ты этот анализ для первых 20000 символов. В моем тексте было явно меньше символов.
Вот пример текста

вамаап ыва ыв ыва ыва
вап
вапвар ываыва авпвап
вапвпва
вавп вапва пвапва вапварап


bolsun
#8, 22 ноября 2023 00:49

(7) tormozit, такого анализа не было. Был анализ на ключевые слова, для текстов более 30000 символов.
но можно попробовать придумать, какой-то еще способ определения bsl для коротких текстов.


bolsun
#9, 22 ноября 2023 00:50

т.к. мы обсуждали с тобой и решили, что на меньшем объеме по ключевым словам не гарантировано определение.


tormozit
#10, ред. 22 ноября 2023 00:58

Да. Проблема не простая. Нужно что то еще придумать. Пока тогда сделаю этот анализ на своей стороне.


bolsun
#11, 22 ноября 2023 00:57

Могу добавить определение, по имени элемента дерева конфигурации, после перехода в дерево. Но понадобится дополнительный переход к родителю.
Я так делаю в некоторых случайх для внешних обработок.


bolsun
#12, 22 ноября 2023 00:59

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


tormozit
#13, ред. 22 ноября 2023 01:18

Поле текста на встроенном языке кажется проще всего определяется через поиск кнопки "Процедуры и функции". Конечно она может быть скрыта, но это 0.1% вероятности - можно отбросить такие случаи.
Т.е. если кнопка есть, то это документ текста на встроенном языке.

Если же это НЕ текст на встроенном языке, дальше нужно проверить язык запросов.
С текстом запроса проверка простая:

	Если Ложь
		Или ЗаголовокОкна = "Запрос" 
		Или ЗаголовокОкна = "Произвольное выражение" 
		Или ЗаголовокОкна = "Динамический список" 
		Или ЗаголовокОкна = "Ограничение доступа"
		Или ПолеТекстаПрограммы.ЛиТекстЯзыкаЗапросовЛкс(Лев(ТекстМодуля, 1000)) 

Выявленный тип языка документа желательно добавить как свойство объекта Конфигуратор.ТекущийДокумент.

В остальных случаях подсказку не вызывать автоматически. Явный вызов через CTRL/ALT+Space должен работать.


bolsun
#14, 22 ноября 2023 01:18

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


bolsun
#15, 22 ноября 2023 01:19

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


bolsun
#16, 22 ноября 2023 01:20

Т.к. штатная там не вызовется, а сразу вызовется T9, то можно будет в ее окне запретить срабатывать в данном документе


tormozit
#17, 22 ноября 2023 01:23

(15) bolsun, да, кнопка игнора меня бы спасла. Но найдет ли ее обычный пользователь - сомневаюсь.


tormozit
#18, ред. 22 ноября 2023 01:26

(14) bolsun, да, у этой кнопки много уровней родителей. Видимо самым дешевым и к тому же самым универсальным все же будет способ через проверку пунктов меню режима текста


bolsun
#19, 22 ноября 2023 01:26

Самый быстрый и надежный это через родителя, в дереве конфигурации. Для системных модулей будет просто полная задержка 200мс.


bolsun
#20, 22 ноября 2023 01:27

Вызывать меню очень ненадежно и не быстро, в плане работы. В плане определения - да.


tormozit
#21, ред. 22 ноября 2023 01:29

(19) bolsun, не достаточно универсально. Много раз уже приводил этот аргумент - у меня включен фильтр в дереве часто и текущий объект там может отсутствовать.


bolsun
#22, 22 ноября 2023 01:29

да, точно. Дурацкая система, не переходит к элементу при фильтре.


bolsun
#23, ред. 22 ноября 2023 01:38

Пока сделаем игнор по кнопке. Думаю проблема не на столько критичная, раз о ней никто не сообщал кроме тебя много лет. Кому нужно нажмет кнопку, а так мы усложним и сломаем механизм для 99% (образный процент) обычных случаев.


bolsun
#24, 22 ноября 2023 01:40

Но если есть идеи по эвристике определения bsl - то тоже можно добавить.


tormozit
#25, ред. 22 ноября 2023 08:38

Считая по умолчанию, что текст на встроенном языке, можно отменить решение на основе проверки последних 3000 символов:

Истина
			И Найти(ТекстМодуля, "КонецФункции") = 0
			И Найти(ТекстМодуля, "КонецПроцедуры") = 0
			И Найти(ТекстМодуля, "EndFunction") = 0
			И Найти(ТекстМодуля, "EndProcedure") = 0
			И Найти(ТекстМодуля, "КонецЕсли") = 0
			И Найти(ТекстМодуля, "|") = 0
			И Найти(ТекстМодуля, "=") = 0
			И Найти(ТекстМодуля, ");") = 0
			И Найти(ТекстМодуля, "()") = 0
			И Найти(ТекстМодуля, "Перем ") = 0
			И Найти(ТекстМодуля, "&НаКлиенте") = 0
			И Найти(ТекстМодуля, "&НаСервере") = 0

Добавил это в скрипт. Обкатаю.


bolsun
#26, ред. 25 ноября 2023 19:07

(25) tormozit, попробуй эту версию. Улучшенный механизм проверки на макет. У меня определяет точно, с текстом модуля или без, окна развернутые или нет, отбор - не влияет. Пробовал на разных платформах.
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg


bolsun
#27, ред. 25 ноября 2023 18:57

Попутно определяется модуль формы или нет. Для тестирования выводится уведомление о типе документа.


bolsun
#28, 27 ноября 2023 17:54

bolsun изменил статус на Закрыто


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