"Глобальный" поиск (легкая замена полнотекстовому)

09.01.10

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

Есть такая штука в Axapta, как "Глобальный поиск"... Правда я ее увидел после того, как сделал первый вариант своего, но... потом пришлось дорабатывать по аксаптовский, уж больно он мне понравился :-) Но покажу только первый вариант.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Обработка
.epf 5,76Kb
238 Скачать бесплатно

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Впервые проблема встала в форме журнала, когда надо найти документ по части номера. Сначала сделали самое простое - вынесли текстовую составляющую номера в отдельное индексированное поле и получили значительный прирост скорости поиска.

Потом появилась задача так же быстро искать и контрагентов по частям наименований. [ООО "Континент" - Континент, ООО - Континент и т.д.]. Но не будешь же кучу полей добавлять в справочнике для каждой части наименования!

Выход напрашивается сам собой - регистр сведений с двумя полями: законченное слово из наименования и ссылка на объект...

А дальше пара глобальных функций и процедур :-)

В общем выкладываю маленькую обработку, которая все это делает (я ее через глобальную переменную юзаю). Дальше разберетесь - сложности никакой.

P.S. есть возможность искать по нескольким словам (условие И); есть возможность искать по части строки ("слов*", "*лов", "*ло*")

P.P.S. зачем все это если есть полнотекстовый? а попробуйте на уже живой базе в 100 гиг его поднять... да и с обновлением динамическим потом намучаетесь... :-)

P.P.P.S. в принципе все это можно перенести и на 7.7... и не на 1С тоже...

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

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

180000 руб.

05.09.2025    5562    2    1    

4

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.

6000 руб.

25.02.2026    6031    21    1    

21

SALE! 15%

Поиск данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13420 11407 руб.

14.05.2012    173081    360    253    

591

Поиск данных Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Беларусь Россия Казахстан Платные (руб)

Встройте искусственный интеллект прямо в вашу 1С за один вечер. «Цифровой сотрудник» - это чат с нейросетью внутри привычного интерфейса 1С, который умеет отвечать не «в общем», а по вашим данным: обучите его на регламентах, инструкциях и прайсах компании, подключите к данным информационной базы - и получите ассистента, который консультирует бухгалтера по учёту, отвечает менеджеру по прайсу и достаёт цифры из базы по запросу на обычном русском языке. Поддерживаются OpenAI, DeepSeek, Qwen и локальные LLM - включая вариант, когда данные вообще не покидают ваш контур.

3660 руб.

03.08.2026    1048    1    0    

3

Поиск данных 1С:Управление торговлей 11 Россия Платные (руб)

Возможность по ИНН контрагента быстро найти Партнера с которым связан контрагент.

7015 руб.

11.09.2025    1262    1    0    

3

НДС 22% Поиск данных Регламентированный учет и отчетность Взаиморасчеты Учет доходов и расходов Анализ учета Учет документов Бизнес-аналитик Бухгалтер Пользователь 1С 8.3 1С:Бухгалтерия 3.0 Россия Налоговый учет НДС Абонемент ($m)

🔍 Обработка предназначена для быстрого анализа входящего НДС по документам поступления. Она позволяет увидеть, какие ставки НДС применены в каждом документе, выявить ошибки в их использовании и проконтролировать корректность учета.

6100 руб.

06.07.2026    350    1    0    

2

Учетные задачи Поиск данных Подбор и обработка объектов 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

1.обработка позволяет автоматически вычислить дубли и привести их к единому наименованию во всех документах. 2.так же есть возможность в документах поменять счета учета для номенклатуры. Например разные бухгалтера оформляют поступление одного и того же товара - один занес на 10.01, второй на 41.01 в результате в ОСВ у нас минусы. В обработке есть возможность наглядно увидеть такие ошибки и тут же их поправить не бегая по всем документам. Достаточно поставить галочку у номенклатуры и указать счет учета который надо найти и счет учета на который надо его заменить. Обработка сама вычислит документы в которых номенклатура с галочкой была задействована и заменит счета учета. Что бы не было излишнего изменения документов, в обработке указываются типы документов, где операция замены счета разрешена (например Поступление ТМЦ, Реализация, Отчет о розничных продажах, возврат покупателю итд.)

7320 руб.

05.06.2026    725    2    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnyDeath 302 09.01.10 12:44 Сейчас в теме
А вот так:
SELECT *
FROM НужнаяТаблица
WHERE НужнаяТаблица.НужноеПоле LIKE '%ПодстрокаПоиска%'

Не лучше будет? Можно искать по любому реквизиту любой таблицы.

А в твоем варианте, если завтра бухи захотят поиск по ИНН, ты быдешь в регистр и это поле заносить? И так для каждого чиха?
2. dolter 120 09.01.10 12:50 Сейчас в теме
(1) Так и было в начале... во всех формах... но на 2 млн расходных документов в год и 0,5 млн контрагентов вешалась база намертво - никто работать не мог по человечески.
А во втором решении (скорее всего буду выкладывать как платное) добавление ИНН происходит установкой одной "галки" - и можно искать одновременно и по части наименования и по ИНН.
А то, что написали вы... попробуйте найти просто "СТО" без всяких "столица", "столичный", "астория" и пр. И самое главное - ускорение поиска в десятки раз по сравнению с вашим вариантом, т.к. поиск производится по индексу (не в случае поиска типа "*ло*" :-))...
3. CheBurator 3234 09.01.10 13:09 Сейчас в теме
такс... побежал за попкорном и колой
4. Saint 09.01.10 16:42 Сейчас в теме
А что, отборы уже отменили? Я что-то пока не улавливаю, чем принципиально лучше предложенное решение по сравнению с отборами.
5. dolter 120 09.01.10 17:12 Сейчас в теме
(4) Какие отборы? О чем речь?
Если о графах отбора, то это совершенно другое решение.
Прежде чем пользоваться отбором по графе, нужно найти сам элемент (наверное :-)).
6. Saint 09.01.10 17:40 Сейчас в теме
(5) Универсальный объект "Отбор". Отбор используется для установки и хранения условий фильтрации элементов в списках и наборах записей. Отбор элементов в списках помогает, если необходимо выбрать элементы по определенному критерию из большого списка элементов.

Это из синтакс-помошника.
7. dolter 120 09.01.10 17:52 Сейчас в теме
(6) и как он поможет мне в данной ситуации?
попробуй установить отбор по наименованию по содержит и слова не в том порядке, как они записаны в наименовании, а еще одно слово полностью, а второе с любым окончанием...
8. Valet 56 09.01.10 18:09 Сейчас в теме
(7)Что мешает добавить индекс реквизиту? И будет поиск по реквизиту с использованием индекса.
А выносить поля в регистр сведений, лишь из-за того чтобы не делать индекс по ним в реальном справочнике/документе, как то странно.

Отбор в форме списка не установишь, но ничего не мешает запрос с ПОДОБНО и со своей строкой поиска по любому реквизиту.
9. dolter 120 09.01.10 18:16 Сейчас в теме
ох-хо-хоюшки... да что за молодежь пошла такая непонятливая-то...
ладно, будет желание - потестите на скорости и нагрузки (да и на различных вариаций в возможностях поиска), а нет... так на нет и суда нет :-)
(8) при поиске по like не испольузется индекс
12. JohnyDeath 302 10.01.10 21:00 Сейчас в теме
(9)
при поиске по like не испольузется индекс

а в твоем случае поиск по '*со*' будет попадать в индекс?

А если известно начало слова, то можно построить поиск по >= и <= (или BETWEEN). Смысла выводить значения в отдельный регистр не вижу.
13. dolter 120 11.01.10 08:58 Сейчас в теме
(12) в (2) я об этом говорил (про индекс)...
не понял насчет ">= и <= (или BETWEEN") - можно пример?
14. artbear 1589 11.01.10 09:58 Сейчас в теме
(13) Регистр как и когда заполняется?
16. dolter 120 11.01.10 12:17 Сейчас в теме
(14) у меня по событию ПриЗаписи (начальное заполнение, ессесно, обработкой)
(15) о! спасибо! для поиска по началу так и сделаю (такой идеи пока не было) :-)
17. JohnyDeath 302 11.01.10 12:25 Сейчас в теме
(16) ну так зачем регистр, если можно обойтись и без него?
18. dolter 120 11.01.10 13:17 Сейчас в теме
(17) не дописал: "для поиска по началу так и сделаю" + " в регистре" :-)
потому что... я хочу (МОГУ) искать по первым символам любого слова в строке и (или) по различным сочетаниям этих слов (с учетом того, что все они ИМЕННО в регистре проиндексированы)
15. JohnyDeath 302 11.01.10 10:44 Сейчас в теме
(13) Например, надо найти всех контрагентов, которые начинаются с 'ма'.
select descr
from Справочник_Контрагенты
where descr between 'ма' and 'маЯ'

Попали в индекс "UPPER(DESCR)"

П.С. Пишу для 7.7 под 1sqlite. На другом, к сожалению проверить не могу.
П.С.2. Если уж совсем придираться, то левую часть условия лучше всего добивать буквой "Я" до полной длины. Т.е. если длина наименования = 20, то запрос выглядит так:
select descr
from Справочник_Контрагенты
where descr between 'ма' and 'маЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ'
10. Saint 09.01.10 20:54 Сейчас в теме
(7) Не знаю, как он поможет тебе, просто я в своей практике не встречал у пользователей необходимости в таких сложных поисковых запросах. Может пользователи не самые продвинутые, но тем не менее.
(9) Ну да, куда уж нам до седобородых старцев, умудрённых опытом. :D Может твоё решение найдёт применение в определённых ситуациях, но в целом нет необходимости выдумывать новые сущности. Естественно это только моё личное мнение. :idea:
11. MRAK 730 10.01.10 11:08 Сейчас в теме
(10) ну все зависит от специфики и методологии работы конкретной конторы. Думаю, иногда сабж имеет смысл.
19. JohnyDeath 302 11.01.10 13:56 Сейчас в теме
Всё равно так и не понял, в чём смысл дублировать данные в отдельном регистре...
20. dolter 120 11.01.10 14:41 Сейчас в теме
(19) ок...
напиши как найти с использованием индекса (т.е. _быстро_) контрагента с наименованием
"ООО Континент-СТО" 

по строке
"СТО Континент"

без использования отдельного регистра...
21. JohnyDeath 302 11.01.10 14:53 Сейчас в теме
(20) да, тогда никак.
А у тебя получается, что ты в ПриЗаписи разбиваешь наименования на слова и заносишь отдельными строками в регистр?

И еще вопрос. Твой регистр состоит из 2-х колонок: "Наименование" и "Объект". Теперь бухи хотят иметь быстрый поиск не только по справочнику контрагентов, но и по справочнику сотрудников. Делаем поиск по "Мажор" в итоге выпадает "ООО Мажор" из контрагентов и "Мажоров Иван Иваныч" из сотрудников?
22. dolter 120 11.01.10 15:35 Сейчас в теме
(21) в том варианте, что я выложил, для каждого объекта необходим отдельный регистр.
в варианте платном (ели выложу) общий регистр с дополнительным полем "вид объекта" - т.е. можно указывать область поиска (см.картинки)
Прикрепленные файлы:
23. ander_ 13.01.10 13:12 Сейчас в теме
как вариант (реально работающий на 1с7.7 SQL + 1с++) на интересующий справочник/документ вешается тригер, который собирает участвующие в поиске поля в одну строку (по определенным правилам) и по ней заполняет дополнительную табличку, по которой в дальнейшем и будет идти поиск. Н.р.:
из реквизитов "ЧП Иванов" + "22-33-44" + "г.Урюпинск" получим строку
"ЧП Иванов 223344 г.Урюпинск" заполним таблицу
ид стр
' 56 ' ЧП Иванов 223344 г.Урюпинск
' 56 ' П Иванов 223344 г.Урюпинск
' 56 ' Иванов 223344 г.Урюпинск
' 56 ' Иванов 223344 г.Урюпинск
' 56 ' ванов 223344 г.Урюпинск
' 56 ' анов 223344 г.Урюпинск
' 56 ' нов 223344 г.Урюпинск
' 56 ' ов 223344 г.Урюпинск
' 56 ' в 223344 г.Урюпинск
' 56 ' 223344 г.Урюпинск
' 56 ' 223344 г.Урюпинск
' 56 ' 23344 г.Урюпинск
' 56 ' 3344 г.Урюпинск
' 56 ' 344 г.Урюпинск
' 56 ' 44 г.Урюпинск
' 56 ' 4 г.Урюпинск
' 56 ' г.Урюпинск
' 56 ' г.Урюпинск
и т.д.

потом когда пользователь вводит строку для поиска, считаем что пробел это "И", запятая "ИЛИ" и строим соответствующий запрос с использованием LIKE str+'%' (попадаем в индекс)

избыточность конечно большая, но быстродействие пока радует.
ЗЫ: Здесь вариант немного упрощенный привел.
24. dolter 120 13.01.10 14:13 Сейчас в теме
25. V.Nikonov 132 13.01.10 14:44 Сейчас в теме
Я поступил проще. Самый распространённый Поиск/Отбор это по фрагменту номера документа и по Контрагенту. Для этих двух реквизитов созданы 2 дополнительных поля фильтрации, отрабатываются процедуры изменения поля Доп.Фильтра как исправление Фильтра журнала в 1С8.хх.

С номером совсем просто, можно установить отбор с критерием отбора "Содержит".

Отбор по контрагенту у нас используется через задание ссылки, но при желании можно и отрабатывать по Списку значений.
26. dolter 120 13.01.10 15:07 Сейчас в теме
(25) ничего не понял...
27. V.Nikonov 132 13.01.10 19:11 Сейчас в теме
Фрагмент кода обрабатывающий изменение Фильтра Номера:
//НВЮ/ Поиск заказа по части Номера
// Элемент - текстовое поле для отбора по фрагменту номера
Процедура ИскомыйНомерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Элемент.Значение) Тогда
        ЭтаФорма.Отбор.Номер.ВидСравнения = ВидСравнения.Содержит;
        ЭтаФорма.Отбор.Номер.Значение = Элемент.Значение;
        ЭтаФорма.Отбор.Номер.Использование = Истина;
        ЭтаФорма.Обновить();
    Иначе
        ЭтаФорма.Отбор.Номер.Значение = "";
        ЭтаФорма.Отбор.Номер.Использование = Ложь;
        ЭтаФорма.Обновить();
    КонецЕсли;
КонецПроцедуры
Показать
28. dolter 120 14.01.10 08:56 Сейчас в теме
(27) отписал в личку...
29. yoyoman 06.04.12 12:00 Сейчас в теме
Я делал как то так:
сч=1;
ТекстЦикл="";
Для каждого ЭлементСписка из СписокСлов цикл
	ТекстЦикл=ТекстЦикл + "
	|	И Номенклатура.Наименование ПОДОБНО &Наименование"+сч;
	сч=сч+1;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|	Номенклатура.Наименование КАК Наименование,
|	Номенклатура.Ссылка КАК Ссылка
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.ЭтоГруппа = ЛОЖЬ"
+ТекстЦикл+"								
|
|УПОРЯДОЧИТЬ ПО
|	Наименование";
сч=1;								 
Для каждого ЭлементСписка из СписокСлов цикл
	Запрос.УстановитьПараметр("Наименование"+сч,"%"+ЭлементСписка+"%");
	сч=сч+1;
КонецЦикла;
Показать

СписокСлов это массив, который собирался разбиванием строкового поля ввода пробелами
30. yoyoman 06.04.12 12:10 Сейчас в теме
Такм образом "ООО Континент-СТО" достаточно легко находится через "СТО Континент"
31. dolter 120 06.04.12 13:22 Сейчас в теме
(30) yoyoman,
согласен - просто и работоспособно, но(!) скорость обработки такого запроса на больших объемах просто запредельная :(
да и под каждое текстовое поле придется писать свой запрос, т.е. ненастраиваемо
32. Kosmovski 9 05.02.13 19:18 Сейчас в теме
StrMatch.dll - посмотри неплохая dll-ка для нечеткого поиска
Для отправки сообщения требуется регистрация/авторизация