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

Публикация № 194178

Администрирование - Администрирование данных 1С - Поиск данных

По аналогии с 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. Ёпрст 1043 16.07.13 14:04 Сейчас в теме
пихать весь справочник в тз и потом скармливать компоненте не есть гуд.
2. Ёпрст 1043 16.07.13 14:04 Сейчас в теме
3. unichkin 16.07.13 14:20 Сейчас в теме
На небольших справочниках работает неплохо. У меня самый большой - номенклатура - 4 тыс. элементов, время на формирование подбора ~0.3 сек.
В тз ищу одну строчку, заведомо уникальную. Но если результат запроса перед формированием списка загружать в ИТЗ, или список значений, мне кажется тормозить будет больше, нет?
4. selesta 17 27.07.13 22:45 Сейчас в теме
на скл можно передалть запрос? должно работать?
у меня пару справочников свыше 500 тыс. элементов (скл база) - есть шансы на нормальную работу?
или даже не пробовать?
5. unichkin 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 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 12 11.05.19 02:03 Сейчас в теме
(7)Пытаюсь реализовать полнотекстовый поиск в 1с 7.7 торговля и склад. Закинул dll в папку базы и скопировал выложенный текст в глобальный модель. В итоге пишет ошибку "Определения процедур и функций должны размещаться перед операторами основной программы" В чем может быть проблема?
10. acanta 11.05.19 02:21 Сейчас в теме
Скопированный текст следует размещать в глобальном модуле после глобальных переменных.
11. Stæg 12 16.05.19 00:05 Сейчас в теме
(10) Вставил после глобальных переменных, теперь появились другие ошибки
Ошибки
Оставьте свое сообщение

См. также

Настройка содержимого обработки "Дополнительные возможности" индивидуально для каждого пользователя

Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

При большом количестве внешних отчетов в обработке "Дополнительные возможности" пользователям трудно стало искать нужные отчеты, более того некоторые отчеты нужны были только определенным пользователям, а некоторым пользователям не нужно было в принципе видеть все, что содержалось в списке. В Итоге появилось желание настроить список отчетов для каждого пользователя индивидуально.

07.09.2011    7154    vlgogolev    5    

Как раскрасить контрагентов в отчетах за 15 минут

Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Попросили меня как-то ввести «цветовую дифференциацию штанов» у контрагентов в базе 1С 7.7, да так, чтобы они и в печатных формах отчетов выводились соответствующим цветом. Например, чтобы можно было каких-нибудь «злостных» должников выделять красным, а особо важных – синим, а уже не актуальных – сереньким и т.п. И если раскрасить формы списков справочника и организовать выбор цвета с формы элемента справочника не особо напряжно (с FormEx’ом), то с отчетами хотелось бы сделать так, чтобы не прилагать «титанических» усилий по переписыванию и дописыванию разнообразных отчетов, где фигурируют контрагенты. И поэтому, немного подумав, поступил так…

06.12.2010    26009    venger    27    

Имитация бурной деятельности (шутка)

Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Бесплатно (free)

Как изобразить бурную деятельность программы для нежелательного контролера

01.12.2010    12866    vladismi    12    

ПрогрессБар в строке состояния

Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

ПрогрессБар в строке состояния. Маленький, шустренький (без ВК)

13.11.2010    20839    via    19    

Web клиент к 7.7

Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

В качестве примера возможности использования API J1C предлагается демонстрация реализации web-клиента к 7.7

13.09.2010    21207    gildebrand    36    

Восстановление потерянных реквизитов документов v 7.7

Администрирование данных 1С Поиск данных Тестирование и исправление v7.7 1cv7.md Россия Бесплатно (free)

В ранее записанных и проведённых документах пропали неторые реквизиты. В результате в отчётах полный бардак. Как я решил эту проблему.

13.09.2010    12177    vladimir_makarov    8    

1c v 7.7. Установка владельца для справочника, имеющего записи.

Практика программирования Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Итак, в конфигурацию я должен был добавить новый справочник, и, самое странное, должен был поставить ему в подчинение уже существующий справочник, причем активно использующийся. Если делать это штатными средствами, 1с при сохранении конфигурации выдает сообщение, что справочник такой-то имеет записи и не может быть подчинен.

28.04.2010    9376    Майкопчанин    12    

Простое решение проблемы с казахстанской кодировкой

Практика программирования Работа с интерфейсом v7.7 1cv7.md Казахстан Бесплатно (free)

Известно, что для того, чтобы работать в 1С с казахскими шрифтами, нужно изменить кодировку в ОС. Иногда это может быть не очень удобно.

22.01.2010    16820    Gvozdod    3    

Работа с периодическими реквизитами 1С версии 7.7 при помощи прямых запросов.

Практика программирования Работа с интерфейсом openconf v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Описание структуры хранения периодических реквизитов, рассмотрены подробно несколько простых примеров использования прямых запросов при работе с периодическими реквизитами. Приведены несколько текстов прямых запросов для решения на мой взгляд распространенных задач.

23.12.2009    39450    glassman    11    

"Быстрый" выбор периода в журнале

Практика программирования Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Всего одна функция глобального модуля и у вас в каждом журнале появиться возможность в 2 клика выбрать любой месяц.

09.12.2009    11713    mdbm    11    

Граф(ин) 7.7.

Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

Что порождает чудовищ? 1С+Дракон или сны разума?

01.07.2009    14314    Арчибальд    10    

[ОБУЧАЛОВКА] Позиционирование на последнем элементе списка справочника

Практика программирования Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Для журналов можно задать режим отображения при открытии журнала (в режиме 1С:Предприятие): Меню - Сервис - Параметры-Журналы - "При открытии жирнала переходить в конец = вКл". Вопрос: почему нельзя задать такой вариант для справочников?

30.06.2009    22354    CheBurator    11    

Удлинение строковых реквизитов справочников,документов за пределы 100 символов

Работа с интерфейсом v77::ОУ v77::БУ 1cv7.md Россия Бесплатно (free)

Как сделать реквизит типа "Строка" длиной 250 символов? (без применения строк неограниченной длины)

29.05.2009    4769    mike65    9    

Как найти новые документы автора, в т.ч. созданные программно

Практика программирования Работа с интерфейсом Чистка базы v7.7 1cv7.md Россия Бесплатно (free)

Как найти новые документы автора, в т.ч. созданные программно и не прописанные в журнале регистрации (v77). Передо мной встала такая задача: пользователь создал много новых документов обработкой в разных периодах, а потом захотел сделать откат назад. Делюсь, может кому-нибудь пригодится.

11.03.2009    15210    Shaman100M    16    

[1С:Предприятие 7.7] Занимательная передача параметров

Практика программирования Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

"Казнить нельзя, помиловать. Казнить, нельзя помиловать." (c) Детская сказка

07.10.2008    17438    venger    110    

Изменение типовых отчетов ТиС

Оптовая торговля Практика программирования Работа с интерфейсом Оптовая торговля v77::ОУ 1С7:Комплекс 1С7:ТиС 1С7:ПУБ Россия УУ Бесплатно (free)

Большинство отчетов типовой конфигурации ТиС (Комплексная) имеют ограничение в 5 группировок. Настоящая статья позволит начинающему программисту снять указанные ограничения.

18.09.2008    16784    poppy    15    

Ограничение формирования стандартных отчётов некоторым набором счетов

Практика программирования Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

В стандартных средствах платформы 7 нет возможности ограничить доступ к отчётам только определёнными счетами, хотя вопрос этот периодически возникает. Предложено решение, позволяющее путём небольших переделок типовой конфигурации внедрить механизм ограничения выбора счёта в стандартном отчёте и относительно легко настраивать его для новых пользователей.

24.03.2008    10673    Timesoft    14    

[ОБУЧАЛОВКА] Каким макаром к номенклатуре привязать картинку...?

Практика программирования Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

Последнее время, буквально в течение недели, выплывает постоянно один и тот же вопрос: как показать картинку в справочнике (товаров, сотрудников и т.д.)..? Странный вопрос... На дисках ИТС описано это наверное с начала 2000-х годов, плюс в ЗиК карточка сотрудника показывается... или я отстал от жизни...? Как всегда - парить себе мозги не будем, надо картинку - сделаем! Делаем - как всегда - без лишней головной боли (глубокое имхо)...

10.02.2008    38869    CheBurator    66    

TestIB8x (Общая концепция)

Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

Данная статья - компиляция из трех статей сайта ( http://brix8x.stavr.ru ), описывающая общую концепцию программы TestIB8x. Цель статьи - оценить актуальность задачи контроля качества создаваемых конфигураций для сообщества infostart и получить отклики в виде пожеланий какие тесты было бы необходимо реализовать в первую очередь.

12.12.2007    9605    brix8x    5    

Мастер класс «O-Planet»: Произвольный отчет с группировками.

Практика программирования Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

Помнится, как-то давно обещался я опубликовать что-то вроде авторской методики написания отчетов с группировками...

27.11.2007    23851    O-Planet    21    

Много общих журналов + гибкие закладки

Математика и алгоритмы Обработка документов Работа с интерфейсом v7.7 1cv7.md Бесплатно (free)

Общий журнал в ТиС имеет удобный механизм отбора, однако, жальба, что из меню можно открыть только один его экземпляр. Исправляем... А также добавляем "гибкие" закладки.

21.10.2007    16183    Shaman100M    20    

[ОБУЧАЛОВКА] Как перестать парить себе мозги и не фанить тюльку... - 2

Практика программирования Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

Статья продолжает описание полезностей, которые реализуем штатными средствами - вместо головной боли по написанию корявых доморощенных алгоритмов. ;-) В статье рассматривается расширение функционала по подбору объектов в штатной обработке Отчет.ПодборОбъектов (или внешней Uchoice.ert)

18.10.2007    21778    CheBurator    14    

[MultiLevel] Многоуровневое меню штатными средствами

Практика программирования Работа с интерфейсом v77::ОУ v77::БУ v77::Расчет Россия Бесплатно (free)

Пример демонстрирует использование построения и использования многоуровневого меню штатными средствами на основе списка значений. При использовании рассмотренного подхода все что требуется - сформировать ТЗ с данными для меню.

27.05.2007    18548    CheBurator    8    

Управление списком пользователей из режима 1С:Предприятие.

Работа с интерфейсом v7.7 1cv7.md Россия Бесплатно (free)

В режиме 1С:Предприятие мы может видеть список активных пользователей, можем работать с логом работы пользователей. Однако функции управления списком пользователей вынесены в режим конфигурирования, а из режима 1С:Предприятие это сделать нельзя. Вполне справедливо. Но если очень хочется, то можно.

09.11.2006    12685    Robert    27