Быстрый поиск в справочниках по наименованию, с использованием svcsvc.dll

15.07.13

Задачи пользователя - Поиск данных

По аналогии с http://infostart.ru/public/14286/, недавно узнал что в svcsvc.dll несколько обновился функционал, в частности был добавлен метод AddString().
В прилагаемом коде показан запрос, реализованный методами ВК 1SQlite, т.е. только для DBF.
Это только пример. Т.е. если например у справочника отсутствует поле "Наименование", то скорее всего будет ошибка.
Тем не менее критика приветствуется)))
Необходимые ВК: 1SQlite, FORMEX, svcsvc.dll (отсюда: http://www.1cpp.ru/forum/YaBB.pl?num=1373266553).

p.s.
Спасибо огромное уважаемому ADirks за все эти прекрасные плюшки, и помощь в их освоении)))
//Все вставляем в глобальный модуль
//======================================================================
Функция гв_ПоискЭлементаСправочникаВСписке_svc(ВидСправочника, Владелец = "", Элем = "") Экспорт
    

    //Эту процедуру удобно использовать и в дальнейшем, например для отчетов        
    База = СоздатьОбъект("SQLiteBase");

    База.Открыть(":memory:");
    Запрос = База.НовыйЗапрос();
    ТекстЗапроса = "
    |SELECT
    |    спр.DESCR||'|'||спр.CODE as [Поиск],
    |    спр.ID as [Ид :Справочник."
+ ВидСправочника +"]
    |FROM
    |    [Справочник."
+ ВидСправочника +"] as спр
    |WHERE
    |    1=1
    |ORDER BY спр.DESCR
    |"
;


    Условие = "
    |    спр.ISMARK <> '*'
    |"
;

    
    Если Метаданные.Справочник(ВидСправочника).КоличествоУровней > 1 Тогда
        Условие = Условие + "
        |    AND
        |    спр.ISFOLDER = 2
        |"
;

    КонецЕсли;
    
    Если ПустоеЗначение(Владелец) = 0 Тогда
        Условие = Условие + "
        |    AND
        |    спр.PARENTEXT = :Владелец
        |"
;

        Запрос.Подставлять("Владелец", Владелец);
    КонецЕсли;
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "1=1", Условие);
    
    тз = Запрос.ВыполнитьЗапрос(ТекстЗапроса);    

    свц = CreateObject("svcsvc.Service");

    тз.выбратьСТроки();
    Пока тз.ПолучитьСтроку() = 1 Цикл
        свц.AddString(тз.Поиск);

    КонецЦикла;

    рез = свц.FilterValue("", 1, "");

    свц = "";
    Если ПустаяСтрока(рез) = 0 Тогда
        нс = 0;

        тз.НайтиЗначение(рез, нс, "Поиск");
        Элем = тз.ПолучитьЗначение (нс, "Ид");
        Возврат 1;
    Иначе
        Возврат 0;

    КонецЕсли;
    
            
КонецФункции // гв_ПоискЭлементаСправочникаВСписке_svc        
//======================================================================
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО)

    Если Альт = 1 Тогда
        Если КодКлавиши = 116 Тогда // ALT-F5
        ФСО = 0;

        РасширениеФормы = СоздатьОбъект("РасширениеФормы");
        Попытка
            РасширениеФормы.УстановитьФорму(КонтФормы.Форма);

            ПолныйТипОбъекта = РасширениеФормы.ПолныйТипОбъекта();
            Если Найти(ПолныйТипОбъекта, "ФормаСписка") > 0 Тогда
                Владелец = "";

                Если Метаданные.Справочник(КонтФормы.Вид()).Владелец.Выбран() = 1 Тогда
                    Владелец = КонтФормы.Владелец;

                КонецЕсли;
                ДлинаНаименования = Метаданные.Справочник(КонтФормы.Вид()).ДлинаНаименования;
                ДлинаКода = Метаданные.Справочник(КонтФормы.Вид()).ДлинаКода;
                
                Если (ДлинаНаименования > 0) и (ДлинаКода > 0) Тогда
                    Элем = "";

                    Если гв_ПоискЭлементаСправочникаВСписке_svc(КонтФормы.Вид(), Владелец, Элем) = 1 Тогда
                        КонтФормы.АктивизироватьОбъект(Элем);

                        Попытка
                            КонтФормы.Активизировать("Наименование", 0);    

                        Исключение
                        КонецПопытки;

                    КонецЕсли;    
                Иначе
                    Сообщить("В справочнике вида """+ КонтФормы.Вид() +""" быстрый поиск невозможен.");

                КонецЕсли;
            КонецЕсли;
        Исключение
        КонецПопытки;

            
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
 

См. также

Работа с интерфейсом Логистика, склад и ТМЦ Системный администратор Программист Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5849    1    45    

4

Работа с интерфейсом Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Представлены два диалога для выбора интервала дат по календарю в составе демонстрационных конфигураций 1С8.3 и 1С7.7

1 стартмани

24.01.2017    26032    20    romasna    7    

9

Поиск данных Программист Платформа 1С v7.7 Абонемент ($m)

Обработка + консольная утилита (exe). Работает с использованием FormEx.dll (Алексей Фёдоров aka АЛьФ), strmatch (Ракунов Александр aka skorp) и 1sqlite (Александр Орефков). Выполняет быстрый нечеткий поиск по справочнику (по умолчанию - номенклатуры) с выводом наиболее похожих позиций в выпадающий список. Работает на 1с 7.7. Тестировалось на server 2003 в терминалах, в файловой БД. Предполагаемые достоинства: пример (более) «адекватного» (по меркам автора на данный момент) поведения поисковой строки (реализовано при помощи консольной утилиты, работающей через winapi – исходники прилагаются (писалось в lazarus)) и удобной навигации по списку, во время ввода. Является, скорее, примером для реализаций собственных адаптированных поисковых решений.

1 стартмани

30.12.2013    22241    34    Jill    13    

12

Розничная торговля Работа с интерфейсом Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Управленческий учет Абонемент ($m)

В 2001 году я работал программистом, сопровождал базу «Торговля и склад 77» в сети супермаркетов. Для нужд бизнеса писал отчеты, при этом добиваясь максимальной эффективности и красоты. Потому что красивые отчеты воспринимаются проще и лучше. Приведу примеры дизайнов и расскажу, в чем изюм каждого отчета.

1 стартмани

13.08.2013    25586    fixin    23    

14

Поиск данных Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка 1С 7.7 осуществляющая поиск по истории открытых обработок. Обработки могли быть открыты программистом в конфигураторе и пользователем в режиме предприятия. В редакции 0.5 добавлены плюшечки: Наравне с открытием обработки добавлено, открытие папки содержащей обработку. Так же понятно что поскольку история хранится в реестре, то данная обработка является примером для работы с реестром. Строго говоря в то время для эксплуатации реестра MSScriptControl.ScriptControl . Крест возле имения базы на форме означает что база нет (нет файла 1CV7.MD по указанному пути). Соответственно крест возле имени обработки означает что обработки нет по указанному пути. Добавлена сортировка. Убрана возможность разобрать понравившуюся обработку. Добавлена возможность показать в папке (не путать с открыть папку). Добавлена возможность скопировать обработку. Добавлена выборка обработок по истории отладчика.

1 стартмани

07.03.2013    15096    21    lamer19    25    

14

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Решил тут в кои-то веков разукрасить свою систему документооборота. Готовых решений с нужным мне функционалом не нашел. В результате написал свою собственную универсальную подсистему раскраски таблиц в 1С. Использовалась ВК Formex (Альф©). Основное отличие - задание цветовой гаммы объектов в пользовательском режиме. Можно внедрить в любую конфигурацию за 10 минут и получать удовольствие от любимых цветов.

1 стартмани

05.09.2012    12980    34    GSoft    2    

15

Работа с интерфейсом Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Класс основан на баге платформы 7.7, является продолжением публикации http://infostart.ru/public/140861/ позволяет искать по наименованию в реквизитах типа справочник "а-ля снеговик".

26.06.2012    28279    196    Ёпрст    88    

54
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1065 16.07.13 14:04 Сейчас в теме
пихать весь справочник в тз и потом скармливать компоненте не есть гуд.
2. Ёпрст 1065 16.07.13 14:04 Сейчас в теме
3. unichkin 1579 16.07.13 14:20 Сейчас в теме
На небольших справочниках работает неплохо. У меня самый большой - номенклатура - 4 тыс. элементов, время на формирование подбора ~0.3 сек.
В тз ищу одну строчку, заведомо уникальную. Но если результат запроса перед формированием списка загружать в ИТЗ, или список значений, мне кажется тормозить будет больше, нет?
4. selesta 18 27.07.13 22:45 Сейчас в теме
на скл можно передалть запрос? должно работать?
у меня пару справочников свыше 500 тыс. элементов (скл база) - есть шансы на нормальную работу?
или даже не пробовать?
5. unichkin 1579 28.07.13 18:28 Сейчас в теме
Текст запроса написан для sqlite, на SQL не работал, скорее всего нужно будет переписать.
Свыше 500 тыс. - нет, даже не пробуйте.
Лучше переписать поиск из типовой, и передавать в запрос часть наименования СРАЗУ, чтобы отсеивать по LIKE.
Посмотрите пример отсюда: http://www.1cpp.ru/forum/YaBB.pl?num=1373266553
6. lelusha 06.02.14 22:22 Сейчас в теме
работает и под dbf и под скульную версию базы?
7. unichkin 1579 07.02.14 00:04 Сейчас в теме
(6) lelusha, Ток dbf, читай шапку "В прилагаемом коде показан запрос, реализованный методами ВК 1SQlite, т.е. только для DBF." Но никто не запрещает перегнать под скуль, только надо учитывать, что это для небольших справочников, пост №3: "4 тыс. элементов, время на формирование подбора ~0.3 сек". Если больше - то читаем пост №5 и идем на http://www.1cpp.ru/forum/YaBB.pl?num=1373266553.
Вот так =)
9. Stæg 32 11.05.19 02:03 Сейчас в теме
(7)Пытаюсь реализовать полнотекстовый поиск в 1с 7.7 торговля и склад. Закинул dll в папку базы и скопировал выложенный текст в глобальный модель. В итоге пишет ошибку "Определения процедур и функций должны размещаться перед операторами основной программы" В чем может быть проблема?
13. Stæg 32 11.02.23 15:50 Сейчас в теме
(7)
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО)

В параметрах процедуры вроде должен КонтФормы быть, а не Конт
8. пользователь 23.05.17 10:22
Сообщение было скрыто модератором.
...
10. acanta 11.05.19 02:21 Сейчас в теме
Скопированный текст следует размещать в глобальном модуле после глобальных переменных.
11. Stæg 32 16.05.19 00:05 Сейчас в теме
(10) Вставил после глобальных переменных, теперь появились другие ошибки
Ошибки
12. Stæg 32 18.12.21 02:00 Сейчас в теме
В какое конкретно место в глобальном модуле надо вставить этот код?
14. Stæg 32 17.02.23 00:00 Сейчас в теме
Последняя версия svcsvc.dll, где добавлен метод AddString(), не регистрируется в windows 10. У кого получилось поправить глюк?
Оставьте свое сообщение