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

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    5261    2    1    

4

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

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

6000 руб.

25.02.2026    5327    17    1    

20

Поиск данных Системный администратор Программист 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 руб.

14.05.2012    172185    360    253    

589

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    47132    32    15    

50

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

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

7320 руб.

05.06.2026    623    2    0    

4

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

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

3660 руб.

03.08.2026    352    1    0    

2

Поиск данных Программист Пользователь 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Умное сравнение табличных документов с визуальной подсветкой. В отличие от стандартного сравнения, обработка ищет отличия по ключевому значению, игнорируя сдвиги строк. Результат — цветовая маркировка добавленных, удаленных и измененных строк прямо в документе + точный лог расхождений по каждой ячейке.

1 стартмани

27.04.2026    1658    17    war41k    5    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 130 13.01.10 14:44 Сейчас в теме
Я поступил проще. Самый распространённый Поиск/Отбор это по фрагменту номера документа и по Контрагенту. Для этих двух реквизитов созданы 2 дополнительных поля фильтрации, отрабатываются процедуры изменения поля Доп.Фильтра как исправление Фильтра журнала в 1С8.хх.

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

Отбор по контрагенту у нас используется через задание ссылки, но при желании можно и отрабатывать по Списку значений.
26. dolter 120 13.01.10 15:07 Сейчас в теме
(25) ничего не понял...
27. V.Nikonov 130 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-ка для нечеткого поиска
Для отправки сообщения требуется регистрация/авторизация