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


Универсальная обработка поиска и отбора по нескольким подстрокам
в реквизитах справочника (в качестве разделителя пробел),
удобно добавлять в базы,
можно делать подборы во "Множественных фильтрах" по кнопочке 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://avprog.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:

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

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

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

Файлы обработки:

-