FormEx. Быстрый поиск в поле ввода 2.1

Универсальный инструмент пользователя, требует FormEx  v2.0.5.0 — http://dorex.pro/?projects&formex&download
Реализация механизма быстрого поиска элемента по первым символам непосредственно в поле ввода.
Ограничения: Не работает для полей ввода многострочной части.

Внедрение: всунуть обработку «БыстрыйПоиск» в конфигурацию; при начале работы системы написать
ОткрытьФорму(«Обработка.БыстрыйПоиск») — при таком запуске обработка проинициализирует необходимый ей дополнительный глобальный модуль.

 

26.09.2007 2.0 Поддержка полей большинства агрегатных типов, кроме типов «Счет» и «Документ».
01.10.2007 2.1 Исправлен принцип старта поиска, вследствие чего исчезли падения системы.
Доработана поддержка групп справочника.
09.10.2007 2.1.1 Исправлена ошибка в определении типа НомерДок и ДатаДок

26 Comments

  1. chirinna

    У меня получилось запустить только с одноуровневым справочником 🙁 Но идея классная! +1

    Reply
  2. artbear

    Идея, конечно, не нова, но, в принципе, очень хорошо получилось, с некоторыми ограничениями 🙂

    Ограничения/недостатки:

    1) если в обрабатываемой форме или основном глобальнике есть обработчики событий ФормЕк, используемые в доп. глобальнике обработки, например, ПриНажатииКнопкиКлавиатуры, то механизм не будет работать 🙁

    2) При поиске не видно, какие еще элементы с подобными наименованиями есть в справочнике 🙁

    3) поиск по первым символам не всегда удобен. Намного удобнее, по опыту, поиск по подстрокам!

    Простой пример — если нужно найти товар «электровыключатель», а он может быть заведен как «выключатель электрический» или «»электровыключатель» или в начале могут быть пробелы (менеджеры могут вводить как угодно, мы это все знаем). Удобно искать по строке «выключатель» или «выключ».

    И существуют уже готовые реализации такой схемы.

    Например, в своей демо-конфигурации «Репозитарий полезных классов 1С++/ФормЕкс»

    http://www.1cpp.ru/forum/YaBB.pl?num=1169222935/156#156



    Народ, реализована еще одна уникальная возможность

    На базе набора классов «Поля выбора значения аля v8» от Алексея Диркса реализован универсальный механизм по созданию подобных полей выбора на любой форме без изменения кода самой формы.

    Т.е. при открытии формы спец.класс анализирует атрибуты типа 1CEDIT. Если у данного атрибута значение имеет тип Справочник, то для данного поля появляется возможность обалденно быстрого выбора значений без открытия формы самого справочника.

    Обратите внимание — поиск возможен по любым подстрокам, а не только по первым символам, как в примере или версии 1Cv8 🙂 !!

    Для ДБФ баз работает только в разделенном режиме, для скуля в любом.

    Использованы Перехватчик 1С++ 2.5 (нужно скачать новую сборку!!) и новый метод ФормЕкс ДобавитьАтрибут (также нужна последняя версия)

    Выкладываю скриншот

    Обратите внимание, что на самом деле модуль формы-примера пуст!!

    И механизм не зависит от кода модулей форм и наличия в них соответствующих обработчиков событий ФормЕкс.

    Вот скриншот http://www.1cpp.ru/forumfiles/Attachments/SelectInEditFieldAkaV8.jpg

    ЗЫ в этой конфигурации еще много отличных универсальных механизмов, добавленных мной. Для ввода всего множества этих универсальных механизмов нужно всего лишь прописать пару строк в глобальнике конфигурации и все 🙂

    Почитай указанную ветку.

    Reply
  3. CheBurator

    > Для ДБФ баз работает только в разделенном режиме, для скуля в любом.

    сам алгоритм проверяет в каком режиме база ДБФ и запускает «стандартный» вариант, если не удалось «продвинутый»…?

    Reply
  4. artbear

    Нет, там используется схема быстрого поиска наименований в справочнике с помощью прямых запросов 1С++, которая для ДБФ работает только в разделенном режиме — ограничение ДБФ варианта 1С 🙁

    Хотя в принципе можно сделать и для монопольного режима упрощенную схему, без быстрого поиска — типа поиск производим после набора несколько букв, например, после 3 символов уже можно выполнять поиск.

    Но эта вариант будет годиться или для небольших однопользовательских баз или для разработчиков 🙂

    Все равно большая/подавляющая часть пользователей работает в сетевой версии 🙂

    Reply
  5. chirinna

    Потестировал еще — ошибку по поводу иерархического справочника исправил. А в полях табличной части документов подбор и не должен работать? — было бы еще более интересно!

    Reply
  6. CheBurator

    (4) это понятно.

    ты не понял.

    установил эту допвозможность.

    пофиг где ее использую: должна сама разбираться — если это скуль и есть возможность задействовать «красоту» (т.е вдобавок к скулю есть Формекс и 1С++) — задействуем ее. Чего либо не хватает — работает по штатной схеме 1Сины.

    есть такое?

    Reply
  7. item

    (2) Artbear, будешь смеяться, но я до сих пор не юзаю 1с++.

    Да, идея моя не нова, идея моя стара :), и над первой версией ты так не издевался.

    Reply
  8. item

    (5) В полях табличной части существует одна трудность — определить, находится ли поле в режиме редактирования пользователем. Ищем…

    Reply
  9. artbear

    (0) «Издеваюсь», надеюсь, в ироничном смысле сказано 🙂

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

    Основная цель — информирование народа о различных вариантах 🙂

    А 1С++ просто нельзя не использовать, хотя бы с точки зрения повторного использования кода, т.е. классы и ООП.

    Про все остальные навороты просто не говорю, слишком долго перечислять 🙂

    Reply
  10. artbear

    (6) Ага, теперь понял.

    Если ДБФ и работа в монопольном режиме, механизм просто ничего не делает 🙂 и используется штатный механизм работы 1С, т.е. выбор через спец. кнопку и ручной поиск.

    Reply
  11. item

    (9) Прасчаю 🙂

    Насчет ограничений

    > 1) если в обрабатываемой форме или основном глобальнике есть обработчики событий ФормЕк …

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

    > 2) при поиске не видно, какие еще элементы с подобными наименованиями есть в справочнике…

    > 3) поиск по первым символам не всегда удобен. Намного удобнее, по опыту, поиск по подстрокам…

    Согласен, все это минус, но как плюс я считаю как раз стандартный доступ к базе плюс простота внедрения,

    которое может произвести и начинающий админ.

    Вообще, «НайтиПоНаименованию» имеет и еще один существенный недостаток:

    4) Косяки с группами в справочнике в случае, если справочник имеет свойство ГруппыВпереди = «1».

    Вопрос с группами во многом неоднозначен, и я склоняюсь к тому, что-бы вообще

    не использовать этот «быстрый поиск» к многоуровневым справочникам.

    Более того, для «полноценного» внедрения механизма в конфигурацию, когда можно указать в метаданных признак «быстрого поиска» для отдельно взятого поля, использовал бы стандартное свойство «БыстрыйВыбор», для которого значение 1 является идеальным условием для работы моего алгоритма.

    Но, к сожалению это вовсе сузит применение :(,

    к тому по не понятным причинам FormEx не поддерживает атрибут БыстрыйВыбор в объекте АтрибутФормы.

    Reply
  12. artbear

    (11) По поводу «БыстрыйВыбор» у тебя устаревшие сведения 🙂

    Все нормально работает.

    В показанном мной механизме как раз и используется сброс данного поля.

    ЗЫ какая версия ФормЕкс у тебя?

    Reply
  13. item

    (12) 2050#65

    Reply
  14. artbear

    (12)+ Версия у тебя 2.5

    Точнее, какой у тебя номер сборки?

    Reply
  15. item

    Сборка #65

    Reply
  16. artbear

    Используй 71.

    Скоро Алексей еще одну выложит, я там еще кое-что по мелочи правил.

    Reply
  17. item

    2.1 Исправлен принцип старта поиска, вследствие чего исчезли падения системы.

    Доработана поддержка групп справочника.

    Reply
  18. item

    Благодаря В.Кучмину обнаружена и исправлена ошибка в определении типа НомерДок и ДатаДок.

    Как оказалось, формекс для этих полей выдает ТипЗначенияСтр() = «»

    Reply
  19. artbear

    >> формекс для этих полей выдает ТипЗначенияСтр() = «»

    Это как, расшифруй, плиз?

    РасширениеФормы.ТипОбъекта/ПолныйТипОбъекта выдают «» ?

    или еще что?

    ЗЫ если в ФормЕкс ошибка, я или АльФ сможем ее поправить 🙂

    Reply
  20. item

    (19) Для полей ввода НомерДок и ДатаДок метод

    объекта АтрибутФормы.ТипЗначенияСтр() выдает пустую строку.

    Reply
  21. artbear

    (20) Я этот баг исправил + еще несколько

    Вышла новая версия ФормЕкс 2.0.5.77

    Подробнее http://www.1cpp.ru/forum/YaBB.pl?num=1191404333/2#2

    Reply
  22. Aleksey.Bochkov

    Вставил обработку в типовую ТиС..

    При подборе контрагента договор устанавливается срабатывает только после 2-х нажатий Enter после окончания поиска.

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

    Нельзя ли как-то это поправить?

    Reply
  23. Aleksey.Bochkov

    На первый взгляд помогло изменение

    Процедура ПослеЗакрытия()

    Если Форма.Параметр = 1 Тогда

    Сервис = СоздатьОбъект(«Сервис»);

    Сервис.ЭмулироватьКлавиатуру(«{F4}»);

    Иначе

    Сервис = СоздатьОбъект(«Сервис»);

    Сервис.ЭмулироватьКлавиатуру(«{Enter}»);

    КонецЕсли;

    КонецПроцедуры //ПослеЗакрытияФормы

    Reply
  24. Aleksey.Bochkov

    Похоже фигурные скобки сайт не переваривает…

    Процедура ПослеЗакрытия()

    Если Форма.Параметр = 1 Тогда

    Сервис = СоздатьОбъект(«Сервис»);

    Сервис.ЭмулироватьКлавиатуру(«(F4)»);

    Иначе

    Сервис = СоздатьОбъект(«Сервис»);

    Сервис.ЭмулироватьКлавиатуру(«(Enter)»);

    КонецЕсли;

    КонецПроцедуры //ПослеЗакрытияФормы

    Reply
  25. artbear

    И еще новости ФормЕкс

    http://www.1cpp.ru/forum/YaBB.pl?num=1191404333/3#3

    Reply
  26. item

    (24) Принял.

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *