Быстрый поиск в справочниках по наименованию, с использованием 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С:Фото номенклатуры 7.7 - решение для работы с фотографиями номенклатуры в 1С:7.7 (включая формат PNG)

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

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

5000 руб.

18.10.2022    5159    1    45    

3

Быстрый умный поиск с выпадающим списком

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

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

1 стартмани

30.12.2013    21963    34    Jill    13    

12

Примеры дизайнов торговых отчетов 2001

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

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

1 стартмани

13.08.2013    25366    fixin    23    

14

Где-то была обработка

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

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

1 стартмани

07.03.2013    14890    21    lamer19    25    

14

Инструментарий: Подсистема "Акварелька"©

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

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

1 стартмани

05.09.2012    12903    34    GSoft    2    

15

Мини-класс для непосредственного ввода в элементах диалога V7.7

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

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

26.06.2012    27850    194    Ёпрст    88    

54

Группы "быстрых" индикаторов на формах 1с7.

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

Индикация влож. циклов, параллел. процессов; динам.гистограммы. Индикаторы: реагируют на отрицат.шаги - не только Прогресс-Индикаторы. "Быстрые": вывод на экран не на каждом, а на заранее расчитанном шаге. Управление: инверсия белого-черного, переворот линейки. Можно записывать истории Процессов. Возможны вертикальный и компактный вывод.

1 стартмани

13.06.2012    15843    23    newold2    6    

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

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