Расширенный поиск в динамическом списке

1. pyrkin_vanya 488 26.02.17 22:35 Сейчас в теме
Всем привет. Ребят. Прошу помощи. Платформа 8.3.9.2170
Есть УТ 11.3. В ней есть справочник номенклатура. Скопировал форму списка. Изменил так как надо заказчику. Он просил сделать ему расширенный поиск.
Т.е. устанавливаешь курсор например в поле код динамического списка. И открывается это окно (см. скрин). Набираешь нужный код. Нажимаешь Ентер. Далее вновь вводишь необходимое значение. Так вот проблема заключается в том, что позиционирование сбивается. Т.е. визуально активный элемент остается код, но поиск не отрабатывает. Приходится мышкой щелкнуть на форму и поиск срабатывает вновь. В SQL версии поиск происходит исключительно 2 раза. В файловой по-разному. Может и 5, может и 10, может и 20 раз отработать прежде чем активный элемент уйдет.

P.S. Не спрашивайте: "А почему нельзя щелкнуть мышкой" и прочее. Заказчик хочет именно так.
В форме поведение клавиши ентер - Переход по элементам
Каждый элемент на форме ПропускатьПриВводе - стоит да. Кроме необходимого динамического списка разумеется.

Тестировалось на разных компах. На разных платформах. Даже на 8.3.10.1981. Поведение аналогичное.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
24. pyrkin_vanya 488 01.03.17 18:44 Сейчас в теме
Ребят, всем спасибо за участие. Пришлось немного извратиться. В процедуре ПриАктивацииСтроки нужного табличного поля сделал принудительную активацию окна.

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

В управляемом приложении нормально отрабатывает этот код.

ОткрытыеОкна = ПолучитьОкна();
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Подбор товаров: Номенклатура" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;


А вот в интерфейсе ТАКСИ этот код уже не отрабатывает как надо. Пришлось сначала активировать начальное окно, а потом уже мое. И все нормально заработало.

ОткрытыеОкна = ПолучитьОкна();
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Начальная страница" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Подбор товаров: Номенклатура" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;
Показать


Однако, поведение платформы непонятно в корне.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 26.02.17 23:23 Сейчас в теме
(1) по всей видимости происходит серверный вызов, вот фокус и теряется. Тут или отключать динамическое считывание данных (если значений не очень много), либо делать свою форму поиска, с перепозиционированием активного поля ввода.
3. pyrkin_vanya 488 27.02.17 07:21 Сейчас в теме
(2) Значений много. Поэтому и включил. Попробую отключить, отпишусь.
4. pyrkin_vanya 488 27.02.17 07:44 Сейчас в теме
Видимо, я сам уже запутался с этими тестами. Динамическое считывание было отключено. Попробовал "поиграться" с ним. Результат аналогичный.
5. spacecraft 27.02.17 08:51 Сейчас в теме
(4) тогда смотрите обработчики, которые вызываются при этом. Где-то происходит серверный вызов.
А форму поиска свое сделали?
6. pyrkin_vanya 488 27.02.17 11:29 Сейчас в теме
Да никакие обработчики не вызываются. Это же стандартный поиск. Я даже не знаю как отследить это. Если обработчик, то он бы вызывался всегда. А не через раз.
7. spacecraft 27.02.17 11:48 Сейчас в теме
(6) обработчики не поиска, а динамического списка. Нужно смотреть обработчики вынесенного на форму динамического списка.
Как вариант: АктивизацияСтроки(Ячейки,Поля). При перестроении списка они вызываются.
8. pyrkin_vanya 488 27.02.17 12:19 Сейчас в теме
При активизации строки срабатывает. Но я закомментировал типовой код. Поведение такое же.
9. pyrkin_vanya 488 27.02.17 12:23 Сейчас в теме
Проверил только что. Больше не вызываются никакие события при этом. Точка останова не сработала нигде.
10. pyrkin_vanya 488 27.02.17 12:26 Сейчас в теме
Сейчас попробую поставить точку останову в каждой процедуре.
11. pyrkin_vanya 488 27.02.17 12:32 Сейчас в теме
Поставил точку останова на каждой процедуре и функции. Бесполезно.
12. pyrkin_vanya 488 27.02.17 12:48 Сейчас в теме
Даже если в процедуре при активации строки прописать
	ЭтаФорма.Активизировать();
	ЭтаФорма.ТекущийЭлемент = Элементы.СписокРасширенныйПоискНоменклатура;

Все равно ничего не выходит.
13. spacecraft 27.02.17 12:52 Сейчас в теме
(12) релиз платформы поменять пробовали?
14. pyrkin_vanya 488 27.02.17 12:54 Сейчас в теме
Пробовал. Не помогло. Сейчас попробую поставить 8.3.8.2137. Не ниже этой рекомендовано 1С для работы с этой версией УТ.
15. pyrkin_vanya 488 27.02.17 13:03 Сейчас в теме
Поставил. Результат тот же.
16. spacecraft 27.02.17 13:18 Сейчас в теме
(15) делайте свой механизм поиска. А чем "типовой" в УТ не устраивает?
18. kudlach 12 27.02.17 13:25 Сейчас в теме
(16) В УТ типовой поиск слегка в "обвесах" - к нему привыкать нужно, чего не любят пользователи )))
17. kudlach 12 27.02.17 13:23 Сейчас в теме
Константин, если я ничего не путаю - на картинке форма от типового функционала поиска.
Если уж форму поменяли - посмотрите вариант как организован поиск в бухгалтерии проф. обычной. при наборе текста в поле Поиска текст бьется автоматом без вызова доп.окон и поиск идет по колонке на которой курсор.
Если нужен одновременный перекрестный поиск по нескольким параметрам, тогда в форме списка делайте несколько полей
19. pyrkin_vanya 488 27.02.17 13:35 Сейчас в теме
Отвечаю сразу на все вопросы. Клиент хочет именно так.
(17) Этот поиск ищет сразу и по всем колонкам. Так не устраивает. Хочет именно такой функционал. Этот поиск работает. Проблему я озвучил ранее.
20. kudlach 12 27.02.17 14:03 Сейчас в теме
(19) Еще раз перечитай (17) Посмотри как сделано в Бухии.
Там не открывается доп. окно. И там поиск начинает отрабатывать сразу.
Никто не мешает тебе ограничиваться одной колонкой или не ограничиваться одной.

В твоем варианте - в форму набора строки поиска передаешь параметры, в которых будет ИмяКолонкиПоиска, и при открытии из параметра берешь имя колонки.
описываешь Оповещение и вызываешь его при закрытии формы, по текущей активной колонке определяешь по каким реквизитам проводить поиск и фильтрацию.
21. pyrkin_vanya 488 27.02.17 14:10 Сейчас в теме
Еще раз повторяю. Такой поиск не устраивает клиента. В типовом варианте УТ такой же поиск. Клиент просил его убрать и сделать такой.
22. kudlach 12 27.02.17 14:22 Сейчас в теме
Нет, ты реально не хочешь читать что тебе написали.
Потерял интерес.
Тут все от тебя зависит и тебе нужно выполнить фильтрацию в списке.
Так делай.
23. pyrkin_vanya 488 27.02.17 14:35 Сейчас в теме
Прошу меня простить, Евгений, но во-первых, я к Вам на "ты" не обращался. Что за панибратство?! Во-вторых, в типовой БП версии 3.0.43.116, например, в справочнике Номенклатура поиск такой же как и у меня сейчас. При наборе появляется окно поиска. Не совсем понимаю, что Вы мне пытаетесь сказать. Если Вас не затруднит, объясните это пожалуйста нормальным языком.
24. pyrkin_vanya 488 01.03.17 18:44 Сейчас в теме
Ребят, всем спасибо за участие. Пришлось немного извратиться. В процедуре ПриАктивацииСтроки нужного табличного поля сделал принудительную активацию окна.

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

В управляемом приложении нормально отрабатывает этот код.

ОткрытыеОкна = ПолучитьОкна();
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Подбор товаров: Номенклатура" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;


А вот в интерфейсе ТАКСИ этот код уже не отрабатывает как надо. Пришлось сначала активировать начальное окно, а потом уже мое. И все нормально заработало.

ОткрытыеОкна = ПолучитьОкна();
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Начальная страница" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;
    Для Каждого ТекОкно Из ОткрытыеОкна Цикл
        Если ТекОкно.Заголовок = "Подбор товаров: Номенклатура" Тогда
            ТекОкно.Активизировать();
        КонецЕсли;
    КонецЦикла;
Показать


Однако, поведение платформы непонятно в корне.
25. kuzev 47 01.03.17 19:12 Сейчас в теме
(24) "Прервать" добавьте в циклах.
26. pyrkin_vanya 488 01.03.17 20:00 Сейчас в теме
(25) Да, тоже подумал об этом. Спасибо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот