Быстрый поиск в справочниках по наименованию, с использованием 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. Выполнено в двух версиях: "полная" и "лайт".

2500 руб.

18.10.2022    7179    3    45    

6

Работа с интерфейсом Пользователь 1С v7.7 1C77 Абонемент ($m)

Часто встречающаяся проблема: потерялось Окно сообщений. Обработка исправляет эту "проблему" одним нажатием кнопки. Для обычных пользователей. Не требует программирования. Достаточно запустить обработку и нажать кнопку "Выполнить".

5 стартмани

17.01.2025    1554    2    CheBurator    13    

9

Работа с интерфейсом Программист 1С v7.7 1C77 Бесплатно (free)

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    6149    98    Cерый    15    

10

Поиск данных Чистка данных Логистика, склад и ТМЦ Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Простая и удобная обработка предназначена для поиска и исправления задублированных (повторяющихся) номенклатурных штрихкодов справочника Единицы. Также она даёт возможность посмотреть номенклатурные остатки. Полезна в случаях, когда номенклатура сопоставляется по штрихкоду с другими внешними источниками, а именно с модулем "Обмент ГИСМТ".

1 стартмани

19.11.2020    8659    1    Kuzya_brаtsk    4    

9

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

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

1 стартмани

24.01.2017    26703    21    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    22868    34    Jill    13    

13

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

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

1 стартмани

13.08.2013    26275    fixin    23    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1068 16.07.13 14:04 Сейчас в теме
пихать весь справочник в тз и потом скармливать компоненте не есть гуд.
2. Ёпрст 1068 16.07.13 14:04 Сейчас в теме
3. unichkin 1613 16.07.13 14:20 Сейчас в теме
На небольших справочниках работает неплохо. У меня самый большой - номенклатура - 4 тыс. элементов, время на формирование подбора ~0.3 сек.
В тз ищу одну строчку, заведомо уникальную. Но если результат запроса перед формированием списка загружать в ИТЗ, или список значений, мне кажется тормозить будет больше, нет?
4. selesta 19 27.07.13 22:45 Сейчас в теме
на скл можно передалть запрос? должно работать?
у меня пару справочников свыше 500 тыс. элементов (скл база) - есть шансы на нормальную работу?
или даже не пробовать?
5. unichkin 1613 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 1613 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 38 11.05.19 02:03 Сейчас в теме
(7)Пытаюсь реализовать полнотекстовый поиск в 1с 7.7 торговля и склад. Закинул dll в папку базы и скопировал выложенный текст в глобальный модель. В итоге пишет ошибку "Определения процедур и функций должны размещаться перед операторами основной программы" В чем может быть проблема?
13. Stæg 38 11.02.23 15:50 Сейчас в теме
(7)
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО)

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