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

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) Да, тоже подумал об этом. Спасибо.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)