Переключение на Главную Страницу Страницы: [1] 2 3 ... 16 ОтправитьПечать
Очень популярная тема (более 25 ответов) Ун. обр. поиска и отбора по нескольким подстрокам (число прочтений - 103242 )
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Ун. обр. поиска и отбора по нескольким подстрокам
22. Мая 2008 :: 21:28
Печать  
// Версия: 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...
пропатченный файл от 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...
    [+] Поиск и показ колонок по строкам неогр. длины, только для SQL и SQLite!
    [+] Возможность выбора даты для периодических реквизитов, через "Меню", по умолчанию РабочяДата().

    Изменения в Версии 2.0:
    [-] восстановлена работа кнопок Показать и Открыть.
  • « Последняя редакция: 12. Мая 2009 :: 07:33 - PVR »  

    Poisk_2_0.7z ( 25 KB | Загрузки )
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #1 - 23. Мая 2008 :: 10:30
    Печать  
    Большое спасибо за идею Улыбка.
    Доработал под поиск по всем реквизитам, поиск идет по текущей колонке - то есть если в быстром поиске ввели строку и стоим в колонке имени - будет искать с таким именем, возможность выводить определенные колонки в обработке поиска, пропуск неправильных реквизитов, по которым поиск невозможен (неопределенный и тп), обработку Даты в поиске.
    +работает у меня с SQL базой, поэтому для DBF нужно будет менять.
      

    Poisk_001.ert ( 206 KB | Загрузки )
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #2 - 23. Мая 2008 :: 11:23
    Печать  
    unnamed писал(а) 23. Мая 2008 :: 10:30:
    Большое спасибо за идею Улыбка.
    Доработал под поиск по всем реквизитам, поиск идет по текущей колонке - то есть если в быстром поиске ввели строку и стоим в колонке имени - будет искать с таким именем, возможность выводить определенные колонки в обработке поиска, пропуск неправильных реквизитов, по которым поиск невозможен (неопределенный и тп), обработку Даты в поиске.
    +работает у меня с SQL базой, поэтому для DBF нужно будет менять.
    Я хочу сделать ун. + SQL и по любому реквизиту справочника, как только время будет, за помощь спасибо Очень довольный
    А я вот специально от глПоискПоПодстроке отвязался Подмигивание
      
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #3 - 23. Мая 2008 :: 11:30
    Печать  
    а зачем? обработочка то совместима, как раз кайф - без переделки старые места заработают быстрее. единственно, я там таблицу результата вынужден стал заполнять старым методом - через НоваяСтрока(), можно было бы по уму запрос SQL преобразовать так, чтоб он готовую уже возвращал... но на самом большом моем справочнике максимум работает 2,5 секунды в результате, так что возиться не стал
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #4 - 23. Мая 2008 :: 11:51
    Печать  
    unnamed писал(а) 23. Мая 2008 :: 11:30:
    а зачем?

    Затем что кнопочку "отбор" все равно добавить надо (заодно старый "поиск" заменить можно), а Запрос1С  для тех, кто в ДБФ монопольно зашел или не использует в стандартных конфах 1С++ Подмигивание
    по процедурам, проще обновлять стандартные конфы, для независимости и универсальности  Улыбка

      
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #5 - 23. Мая 2008 :: 11:53
    Печать  
    ага. ну в этих целях понятно Улыбка
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #6 - 23. Мая 2008 :: 11:58
    Печать  
    Я не на SQL сижу, на следующей неделе доработаю до реквизитов и оставлю заглушки для SQL, может, поможете и допишете туда под SQL  Подмигивание
      
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #7 - 23. Мая 2008 :: 12:03
    Печать  
    ну можно и так, хотя в моей реквизиты и показ колонок уже есть, можно на нее дописать если что нужно. в принципе там для dbf строчки разкомментировать и вызывать или так, или так - будет и через dbf работать. формулы в кнопках можно из старой обработки подставить - она что так, что через глобальник работать будет, без разницы, вызов-то одинаков.
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #8 - 23. Мая 2008 :: 12:20
    Печать  
    Твои наработки, конечно использую, тока усложню запрос, не нравится мне куча обращений к базе для реквизитов  Подмигивание
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #9 - 23. Мая 2008 :: 12:26
    Печать  
    + думаю может добавить галчонков, для подбора и Мн.Фильтра  Улыбка
      
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #10 - 23. Мая 2008 :: 16:11
    Печать  
    Отлично Подмигивание Я в эту сторону тоже думал (особенно мн. фильтр так и просится Подмигивание ), но текущих проектов за глаза хватает Улыбка Если что, далее допишу.
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #11 - 27. Мая 2008 :: 20:56
    Печать  
    Версия: 1.1  Подмигивание

    unnamed
    потестируй пожалуйста на SQL  Улыбка

    ps
    галчонки будут в 1.2
      
    Наверх
     
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #12 - 28. Мая 2008 :: 01:08
    Печать  
    сходу не пошла на этом участке, изменил:

               Если ЗагрузитьВнешнююКомпоненту("1cpp.dll")=1 Тогда
                     МетаИнфо=СоздатьОбъект("MetaInfoClasses");
                     фЭтоSQL=МетаИнфо.ЭтоSQL_Версия();
                     Попытка
                           БД=СоздатьОбъект("OLEDBData");
                           Если БД.Соединение(СтрокаСоединения)=0 Тогда
                                 БД=0;
                           КонецЕсли;
                     Исключение
                           БД=0;
                     КонецПопытки;
               КонецЕсли;

    Кроме этого пробел после AND вставил, иначе:

    SELECT Спр.ID as [Элемент $Справочник.Сертификаты],Спр.Descr as Наименование,Спр.sp8354 as Производитель,Спр.sp8355 as ДействиеС,Спр.sp8356 as ДействиеПо
    FROM
         sc8351 as Спр
    WHERE
       Спр.IsFolder = 2 AND UPPER(Спр.sp8357) LIKE '%31.08.08%' ORDER BY Спр.DESCR

    SELECT Спр.ID as [Элемент $Справочник.Сертификаты],Спр.Descr as Наименование,Спр.sp8354 as Производитель,Спр.sp8355 as ДействиеС,Спр.sp8356 as ДействиеПо
    FROM
         sc8351 as Спр
    WHERE
       Спр.IsFolder = 2 ANDСпр.sp8355='20080831' ORDER BY Спр.DESCR
    ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
    {E:\1CDATA\TANDEMNN\EXTFORMS\POISK.ERT(172)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 6: Incorrect syntax near 'ANDСпр'

    Подправленный:



    « Последняя редакция: 28. Мая 2008 :: 05:09 - unnamed »  
    Наверх
    ICQ  
    IP записан
     
    unnamed
    Full Member
    ***
    Отсутствует


    0x1c = 28

    Сообщений: 166
    Местоположение: Chelyabinsk
    Зарегистрирован: 01. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #13 - 28. Мая 2008 :: 05:00
    Печать  
    2. При открытии формы и последующем в нем поиске, а затем нажатии "Включить отбор" происходит ошибка, в тексте запроса при этом:

    SELECT ,$Спр.Элемент as [Элемент $Справочник],$Спр.Наименование as Наименование,$Спр.Артикул as Артикул,$Спр.Данные as [Данные $Справочник.ДанныеТовара],$Спр.Код as Код
    FROM
         $Справочник.Номенклатура as Спр
    WHERE
       Спр.IsFolder = 2 AND  UPPER(Спр.Descr) LIKE '%АРИЭ%' ORDER BY Спр.DESCR
    ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
    {E:\1CDATA\TANDEMNN\EXTFORMS\POISK.ERT(172)}: Meta name parser error: поле таблицы не найдено "$Спр.Элемент"

    Если после этого нажать снова Поиск, выскочит схожая ошибка:

    SELECT ,$Спр.Элемент as [Элемент $Справочник],$Спр.Наименование as Наименование,$Спр.Артикул as Артикул,$Спр.Данные as [Данные $Справочник.ДанныеТовара],$Спр.Код as Код
    FROM
         $Справочник.Номенклатура as Спр
    WHERE
       Спр.IsFolder = 2 AND  UPPER(Спр.Descr) LIKE '%АРИЭ%' ORDER BY Спр.DESCR
    ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
    {E:\1CDATA\TANDEMNN\EXTFORMS\POISK.ERT(172)}: Meta name parser error: поле таблицы не найдено "$Спр.Элемент"


    При первоначальном открытии и выполнении "Включить отбор" такого не происходит

    Проблема была в функции ДобавитьПоля:

               Если ПКолонка="элемент" Тогда
                     ТекстЗапроса=ТекстЗапроса+"Спр.ID as [Элемент $Справочник."+ВидСправочника+"]";

    заменил на мелкие буквы в алиасах.
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: Ун. обр. поиска и отбора по нескольким подстро
    Ответ #14 - 28. Мая 2008 :: 05:18
    Печать  
    Спасибо, unnamed  Улыбка

    1.
    Код
    Выбрать все
    Если БД.Соединение(СтрокаСоединения)=0 Тогда
    	БД=0;
    КонецЕсли; 
    
    
    В доке вроде написано что 0, а не исключение  Печаль

    Пробел, да не тестировал на датах.(пришлось условие воткнуть по уровням>1).

    2. потестирую  Подмигивание
      
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: [1] 2 3 ... 16
    ОтправитьПечать