gifts2017

Универсальная обработка поиска и отбора по нескольким подстрокам

Опубликовал Вячеслав (slavapil) в раздел Администрирование - Поиск данных

Универсальная обработка поиска и отбора по нескольким подстрокам
в реквизитах справочника (в качестве разделителя пробел),
удобно добавлять в базы,
можно делать подборы во "Множественных фильтрах" по кнопочке 5точек и т.д.!

// Версия: 2.0
// Авторы: Пилия В.Р. - PVR и Кузнецов Ю.А. - unnamed
// Особая благодарность разработчикам ВК 1С++, 1sqlite и FormEx™

Универсальная обработка поиска и отбора по нескольким подстрокам
в реквизитах справочника (в качестве разделителя пробел),
удобно добавлять в базы,
можно делать подборы во "Множественных фильтрах" по кнопочке 5точек и т.д.!

При наличии ВК 1С++ и FormEx™ или 1sqlite,
прямые запросы SQL,
для DBF в не монопольном VFPOLEDB,
в монопольном 1sqlite(и не монопольном, при отсутсвии 1С++ или VFPOLEDB) ,
ТабличноеПоле и прочие полезности :)

В остальных случаях запрос 1С и ТаблицаЗначений!

Для запросов к DBF через VFP OLEDB, установить драйвер VFP Ссылки:
драйвер FoxPro для OLE DB: http://download.microsoft.com/download/b/f/b/bfbfa4b8-7f91-4649-8dab-9a647636036 5/vfpoledb.exe
пропатченный файл от Uzhast: http://uzhast.fatal.ru/vfpoledb/

Ссылки на ВК 1С++, FormEx™ и 1sqlite:
http://www.1cpp.ru/index.php/Image:Icpp-latest.rar (это ссылка на страницу!)
http://www.dorex.ru/?projects&formex&download
http://code.google.com/p/sqlite1c/downloads/list

В качестве реквизитов поиска выступают реквизиты справочника с типами:
Справочник, Перечисления, Строка не 0 длины - поиск по нескольким подстрокам (разделитель пробел),
Число, Дата - поиск по множеству значений (разделитель пробел) чисел и дат,
с условиями <,>,<=,>=,<> и соединением по:
по умолчанию AND,
"AND" или "И" = &,AND,and
"OR" или "ИЛИ"= @,OR,or
(для обозначения Пустых дат, добавлен метасимвол " или аналог "").

Не поддерживается поиск/отбор по:
Строкам не ограниченной длины, периодическим реквизитам.

Примечание!
Кнопка (копируемая на форму) "Отбор по подстрокам", делает отбор по реквизиту текущей колонки,
если нет возможности сделать по нему, то отбор по "Наименованию"


Изменения в Версии 1.2:
[+] Поиск/отбор подстрок и "СписокПолей" по: Перечислениям и
реквизиту "ОсновноеСвойство" (например в Номенклатуре и Контрагентах ТиС) типовых конфигураций.
[+] Выбор множества значений отмеченных галочками, кнопкой "Выбрать ВСЕ".

Изменения в Версии 1.3:
[!] Исправлена ошибка, возникающая при выполнении кода запрос1С.
[*] Переименованы кнопки "Выбрать" в "Показать", "Выбрать ВСЕ" в "Выбрать".
[+] Добавлена возможность развернуть окно обработки на весь экран при наличии ВК FormEx™ 2.0.5.86

Изменения в Версии 1.4:
[+] Поиск по множеству значений (разделитель пробел) чисел и дат,
с условиями <,>,<=,>=,<> и соединением по:
по умолчанию AND,
"AND"= &,AND,and
"OR"= @,OR,or
(для обозначения Пустых дат, добавлен метасимвол " или аналог "").
[+] При наличии ВК 1С++ данные отображаются в ТП.
[+] Только в ТП: добавлено контекстное меню автоширина и ширина по умолчанию при вызове на скроллере ТП (горизонтальном или вертикальном).
Автоширина равнозначна двойному щелчку мыши на разделителе колонок в заголовке ТП при нажатом shift.
[+] Сортировка колонок
(ТП: на заголовке ЛКМ=сортировка,ПКМ=опция в списке меню и кнопка "Меню",
ТЗ: только кнопка "Меню").
[+] Добавление/Удаление отображаемых полей
(ТП: на заголовке ПКМ=опция в списке меню и кнопка "Меню",
ТЗ: только кнопка "Меню").

Изменения в Версии 1.5:
[!] Испралены баги.

Изменения в Версии 1.6:
[-] при вызове из журнала и поиске в колонке, в которой не находилось значение и попытке дальнейшего поиска по наименованию выходила ошибка.
[*] совместимость с новой версией Formexa, в которой работает процедура ПриИзмененииРазмеровОкна с сделанными насильно модальными окнами.

Изменения в Версии 1.7:
[*] Оптимизирован поиск по Перечислениям.
[+] Показ Количества найденых элементов.
[+] Поддержка 1sqlite (в монопольном режиме DBF 1С, запрос через 1sqlite).

Изменения в Версии 1.8:
[-] При поиске в Числовых полях с параметром типТекст (Например:"тов") была ошибка, теперь выводится сообщение и преобразование в Число 0 !
[-] Поиск по рекв. "ОсновноеСвойство", был баг с построением запроса.

Изменения в Версии 1.9:
[+] Сохранение показываемых полей (надоело каждый раз добавлять ;) ).
[+] Периодические реквизиты.
[-] табллица для SQL исправлена на _1sconst.
[-] при подборах в сохраненные поля попадало поле "пометка".
[-] поправлен поиск переодических реквизитов для SQL ч/з 1c++, выдавал ошибку по функции substr
[-] восстановлена работа поиска по активной колонке при вызове из формы справочника
[+] добавлена возможность работы без вызова программным путем, при простом открытии внешней формы.
Практического смысла пока не имеет, кроме как "посмотреть список элементов на экране",
но удобно, если нужен поиск по справочнику, в форме которого нет кнопок поиска и т.п.
[!] Теперь в монопольном режиме, тоже используется FOXOLEDB, если он есть
для возможности работать в монопольном режиме скачиваем http://infostart.ru/profile/2905/projects/2418/
Сам VFPOLEDBSetup.msi http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en
[+] Поиск и показ колонок по строкам неогр. длины, только для SQL и SQLite!
[+] Возможность выбора даты для периодических реквизитов, через "Меню", по умолчанию РабочяДата().

Изменения в Версии 2.0:
[-] восстановлена работа кнопок Показать и Открыть.

Установка возможна двумя способами (можно совместно):

Скопировать "Poisk.ert" в Каталог ExtForms базы данных.

Способ 1:

Работает стандартная кнопка "Поиск" в тип. конфигурациях
и кнопочки от unnamed.

В глобальном модуле заменяем Процедуру глПоискПоПодстроке
//******************************************************************************
// глПоискПоПодстроке(Конт, СписокПолей = "",ДопПараметр="_Поиск_")
//
// Параметры:
// Конт - контекст формы списка справочника,
// СписокПолей - необязательный параметр, строка,
// содержащая список идентификаторов строковых реквизитов ограниченной длины,
// по которым может осуществляться поис, разделенных запятыми.
// ДопПараметры - кнопка
// Возвращаемое значение:
// Нет
//
// Описание:
// Вызывает обработку поиска элемента справочника по подстроке,
// если нашли, то или позиционирует форму списка на найденном элементе,
// или если форма в режиме выбора, то производит выбор.
//
Процедура глПоискПоПодстроке(Конт, СписокПолей = "",ДопПараметр="_Поиск_") Экспорт
СписокПараметров = СоздатьОбъект("СписокЗначений");
СписокПараметров.ДобавитьЗначение(Конт.Вид(), "Вид");
СписокПараметров.ДобавитьЗначение(СписокПолей,"СписокПолей");
СписокПараметров.ДобавитьЗначение(Конт,"Конт");
СписокПараметров.ДобавитьЗначение(ДопПараметр,"ДопПараметр");
ОткрытьФормуМодально("Отчет",СписокПараметров,КаталогИБ()+"\ExtForms\Poisk.ert");
КонецПроцедуры // глПоискПоПодстроке()

Способ 2:

В глобальном модуле должна присутствовать переменная:
Перем глОбъект Экспорт; // Объект, передаваемый в качестве параметра при программном вызове формы

Скопировать кнопочки "Поиск" и "Отбор по подстрокам" в формы справочников (ДляВыбора, ФормаСписка, ДляПодбора)
и снять галочки, "сделать недоступным" и "невидимым".

ВСЁ Пользуемся ;)

Скачать файлы

Наименование Файл Версия Размер
Poisk_1_4.7z 142
.1212792021 21,48Kb
25.09.09
142
.1212792021 21,48Kb Скачать
Poisk_1_3.7z 57
.1212474572 16,66Kb
25.09.09
57
.1212474572 16,66Kb Скачать
Poisk_1_9.7z 147
.1220273002 25,37Kb
25.09.09
147
.1220273002 25,37Kb Скачать
Poisk_2_0.7z 87
.1242112898 25,81Kb
25.09.09
87
.1242112898 25,81Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий (Bezborodoff) 20.06.08 18:50
Помоему 1.4 не совсем работает...
2. Вячеслав (slavapil) 21.06.08 11:19
Bezborodoff, указывайте что именно не работает!
Сделаем ...
3. Сергей (Shagan) 25.11.08 08:49
не открывается окно Элементы, в чем косяк?
5. Dmitry (Dmitry100) 09.02.09 16:30
Мне кажется - это гениальная вещь!
6. Вячеслав (slavapil) 09.02.09 17:06
7. Вад (Viska) 01.03.09 13:58
8. Дмитрий (Близнец) 24.04.09 13:16
Молодцы! Спасибо! Как раз начал искать решение как ускорить поиск в справочниках и тут нашел вашу разработку. Очень помогла. Немного потестировал:
справочник 2000 записей, по сети около 12 пользователей, база DBF, поиск по наименованию -
запрос 1С (стандартный поиск) - 16-16,5 сек.
перебором справочника 1С - 7,7 - 8,3 сек.
эта обработка - 0,2 сек. (правда версия FormEx™ старая и результаты не отобразились, но не думаю что будет намного больше).

P.S. Просьба авторам - т.к. разработка не улучшалась уже пол года (видать достигла предела по необходимому функционалу), включить последние изменения после версии 1,9 по чати максимизации окна (на www.1cpp.ru с номером 36). Там убраны глюки.
9. Вячеслав (slavapil) 24.04.09 14:48
Спасибо )))
Кому нужны новые версии просим исскать здесь:
http://www.1cpp.ru/forum/YaBB.pl?num=1211491690
10. A (jetcom) 03.05.09 06:03
Иногда не позиционирует при выборе найденного элемента на нем, а показывает пустую группу элементов, а при повторном поиске уже все нормально.
11. A (jetcom) 03.05.09 06:11
Причем, показывает пустую группу на один уровень выше, которая на самом деле не пустая, после этого нужно явно ее выбрать и при повторном поиске нормально позиционирует на выбранном элементе. Может из-за большой вложенности? Правда, в моем случае элемент находится всего лишь в третьей по глубине подгруппе элементов номенклатуры.
12. Вячеслав (slavapil) 03.05.09 11:12
(11)
Странно, у меня такого небыло.
Можете выслать тестовую конфу?
13. A (jetcom) 03.05.09 15:50
Конфу не могу, - вышлю скрины и попробую еще потестить в отладчике...
Но выскакивает такое через раз практически.
14. Dmitry (Dmitry100) 11.05.09 21:03
Есть такая неприятность у меня. Результатом поиска является список позиций номенклатуры. Если я там курсором либо мышкой выберу чего-нибудь и тыкну кнопку "Открыть элемент", то оно всегда открывает верхний в списке, а не текущий.
15. Вячеслав (slavapil) 12.05.09 08:33
(14) да действительно.
Исправлю
16. Вячеслав (slavapil) 12.05.09 11:23
Работа кнопок востановлена в версии 2.0
17. Dmitry (Dmitry100) 12.05.09 20:44
Большое человеческое спасибо!
18. for_temp (for_temp) 28.05.09 19:01
Большое ЧЕЛОВЕЧИСКОЕ СПАСИБО!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа