Браузеры. Программы. Социальные сети. Сервисы

Браузеры. Программы. Социальные сети. Сервисы

» » 1с полнотекстовый поиск отключение. Механизм полнотекстового поиска (1Cv8)

1с полнотекстовый поиск отключение. Механизм полнотекстового поиска (1Cv8)

Функциональность нового поиска основана на двух механизмах:
- полнотекстовый поиск (работает очень быстро и требует минимум вычислительных ресурсов);
- поиск средствами СУБД (в общем случае длительность поиска и затраты вычислительных ресурсов пропорциональны объему информации в таблице).

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

Если же полнотекстовый поиск включен в информационной базе, а индекс не обновлен совсем или частично (из моей практики 95% информационных баз Заказчиков), то пользователь при поиске получит либо недостоверный, либо пустой результат поиска.

Спрашиваем у Фирмы 1С - как быть? как гарантировать достоверность результатов поиска всегда?
Получаем ответ: Да, для того, чтобы результаты поиска при включенном полнотекстовом поиске были актуальными, нужно следить за тем, чтобы индекс полнотекстового поиска был актуальным.Других вариантов эффективного и актуального поиска пока нет ().

А существует ли вообще "актуальный полнотекстовый индекс"? Зависит от числа пользователей, интенсивности изменения информации в базе и частоты запуска обновления индекса. Обычно обновление индекса запускают раз в 60 секунд. Хорошо, если объектов было изменено не много, и процедура успела обработать все изменения за эти 60 секунд. А если сделали перепроведение группы документов, или массовую перезапись справочника? В этом случае никто не может гарантировать время, через которое поиск по индексу снова даст достоверные данные.
В принципе, это не особо критично, кроме нескольких ситуаций. Частый вариант работы пользователей - установить в списке отбор по какому-то значению, например "Контрагенту", ввести новый или скопировать существующий документ и записать. Со старым поиском новый документ моментально был виден в списке. Теперь пользователь его увидит только через N секунд в лучшем случае, где N скорее ближе к 50-60 секундам, нежели к 2-3.
Если не заметить, что нового документа нет и по отобранным результатам предоставить информацию кому-либо, то она будет заведомо недостоверной.

Это было в случае нормальной работы с информационной базой. А что будет в специфических ситуациях? Приведу пару примеров.
1) В рабочей базе полнотекстовый индекс включен и часто обновляется. Пользователь просит развернуть ему копию рабочей базы, что по ней заняться анализом данных.
Восстанавливаем бэкап и даем доступ. Вот только полнотекстовый поиск работать не будет, т.к. индекс хранится не в СУБД, а в отдельных файлах (и в файловом, и в клиент-серверном варианте). Индекса нет в dt-файле.
т.е. чтобы пользователь смог использовать поиск по спискам - надо выключить полнотекстовый индекс в этой базе. Правда пользователь будет слегка удивлен тому, что поиск будет выполняться гораздо дольше. Либо перестроить индекс по всей базе.

2) (Актуально для более менее больших баз). В рабочей базе полнотекстовый индекс включен и часто обновляется. Наступает конец месяца и начинается закрытие периода. Начинаем массово грузить и перепроводить документы. Для снижения нагрузки на систему блокируем выполнение регламентных заданий, соответственно, и обновление индекс останавливается. Пользователи будут, мягко говоря, в недоумении - чего же в списках нет новых или измененных документов. Единственный выход - отключить полнотекстовый поиск для информационной базы, и, соответственно, получить еще большую нагрузку на оборудование за счет тяжелого поиска по всем реквизитам.

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

  1. Настройка регламентных и фоновых заданий;
  2. Диагностика и устранение ошибок информационной базы, имеющий файловый формат хранения данных;
  3. Запустить индексацию полнотекстового поиска в 1С либо выключить его вовсе;
  4. Запуск базы на последних Платформах 8.3.8;
  5. Запуск в Тонком Клиенте;
  6. Увеличение скорости перепроведения документов при отключенном антивирусе;
  7. Запустить Пересчет итогов и восстановление последовательности;
  8. Выполнить Тестирование и исправление базы, проверку утилитой chdbfl.exe;
  9. Если конфигурация не типовая, то есть доработанная программистами под конкретную организацию, выполнить Проверку конфигурации;
  10. Отключить ненужные функциональные режимы;
  11. Настроить права пользователей;
  12. Свертка базы;
  13. Модернизация аппаратной части.

Способ 1. Настройка регламентных и фоновых заданий

Приложение в новой редакции 1С Бухгалтерия 3.0 помимо выполнения основной работы запускает операции в фоновом режиме, которые ведут к снижению быстродействия программы.

Фоновый режим - это режим ожидания, то есть операция запущена всегда, хоть и не используется.

Шаг 1. Настройка регламентных и фоновых заданий

Открываем перечень регламентных и фоновых заданий: раздел Администрирование – Поддержка и обслуживание – Регламентные операции – Регламентные и фоновые задания :

После запуска программы 1С 8.3 автоматически запускаются фоновые задания и выполняются регламентные задачи, которые используют огромное количество ресурсов и замедляют работу программы. Следовательно, нужно проанализировать работу бухгалтеров и определить какие фоновые задачи целесообразно оставить в автозапуске, а какие нужно отключить.

На рисунке видим список регламентных заданий, которые запускаются в 1С 8.3 Бухгалтерия:

На рисунке видим список выполненных фоновых заданий:

Например,

  • Программа 1С 8.3 Бухгалтерия для обновления различных классификаторов постоянно подключается к сайту;
  • Если на предприятии не ведутся операции связанные с иностранной валютой, то нет необходимости отслеживать курсы валют;
  • Если бухгалтер не пользуется полнотекстовым поиском в программе, то не целесообразно запускать процесс «Извлечение текста».

Шаг 2. Отключение нецелесообразных задач

Рассмотрим подробно как отключить загрузку . Установим курсор на нужную строку и сделаем двойной щелчок:

Для отключения задания убираем галочку Включено:

Шаг 3. Настройка расписания регламентных задач

Рассмотрим подробно, как настроить расписание . Установим курсор на нужную строку и сделаем двойной щелчок:

Выберем пункт Расписание:

В открывшемся окне переходим на нужную закладку и делаем соответствующую настройку:

Способ 2. Диагностика и устранение ошибок информационной базы, имеющей файловый формат хранения данных

Шаг 1.

Создаем резервную копию базы данных.

Шаг 2.

Запускаем процедуру . Для этого открываем Конфигуратор и запускаем процедуру Тестирование и исправления информационной базы: раздел Администрирование – Тестирование и исправление. Выбираем проверки и режимы, которые нужно выполнить для информационной базы:

Рассмотрим, подробнее предлагаемые варианты проверки:

  • Реиндексация таблиц информационной базы – перестраивает индексы таблиц для повышения быстродействия работы базы данных;
  • Проверка логической целостности информационной базы – проверка логики базы данных;
  • Проверка ссылочной целостности информационной базы – проверка логической целостности базы данных для обнаружения «битых» ссылок;
  • Пересчет итогов – перерасчет итогов таблиц регистров накопления;
  • Сжатие таблиц информационной базы – уменьшает размер базы данных после тестирования и исправления;
  • Реструктуризация таблиц информационной базы – оптимизирует структуру базы данных используя вспомогательные файлы с целью повышения стабильности и быстродействия.

Если выбираем вариант процедуры Тестирование и исправление в режиме Проверка ссылочной целостности информационной базы, то пункты настроек по обработке ошибок базы данных становятся доступными:

  • Пункт При наличии ссылок на несуществующие объекты означает, что при обнаружении «битых» ссылок, будет обрабатывать ссылки, используя выбранный вариант;
  • Пункт При частичной потере данных объектов означает, что остаток данных достаточен для восстановления данных какого-либо объекта.

Процедуру тестирования и исправления информационной базы 1С можно выполнять только в монопольном режиме.

Способ 3. Запустить индексацию полнотекстового поиска в 1С либо выключить его вовсе

Полнотекстовый поиск данных компания 1С разработала для облегчения поиска незнакомой информации пользователем. Особенностью полнотекстового поиска данных в 1С 8.3 является:

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

Например, нужно настроить полнотекстовый поиск в документах Авансовый отчет.

Шаг 1.

Шаг 2.

Открываем документ Авансовый отчет: меню Конфигуратор – Открыть конфигурацию.

Шаг 3.

В строке Полнотекстовый поиск выбираем пункт Использовать: Авансовый отчет – Поле ввода – Полнотекстовый поиск:

Шаг 4.

Запускаем программу и обновляем режим полнотекстового поиска. Открываем Регламентные операции: раздел Администрирование – Настройки программы – Поддержка и обслуживание:

Шаг 5.

Открываем настройку и обновляем индекс используя кнопку Обновить индекс:

Способ 4. Запуск базы на последних платформах 8.3.8

Как обновить технологическую платформу 1С 8.3 смотрите в нашем видео уроке:

Специалисты 1С улучшили распределение нагрузки:

  • Имеется возможность более точно управлять объемом памяти, расходуемой рабочими процессами сервера, что позволяет повысить устойчивость кластера к неосторожным действиям пользователей.
  • Реструктуризация информационных баз в фоновом режиме. Новая возможность позволяет свести к минимуму время простоя системы, необходимое для обновления прикладных решений.
  • Платформа версии 8.3 получила новый интерфейс приложений “Такси”, более удобный и наглядный с новым ярким дизайном. Улучшились возможности навигации по приложению. Пользователь может самостоятельно настраивать свое рабочее пространство, располагая панели в разных областях экрана. Новый механизм ввода по строке существенно ускоряет поиск данных. Подробнее о новых возможностях программы 1С 8.3 Бухгалтерия интерфейс “Такси” смотрите в нашем видео:

Способ 5. Запуск в Тонком клиенте

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

Способ 6. Поменять антивирусное программное обеспечение

Если стоит антивирус Avast или Касперский, то желательно заменить на другой. Опыт показал увеличение скорости перепроведения документов при отключенном антивирусе в разы, так как антивирусы занимают ресурсы компьютера.

Способ 7. Тестирование и исправление базы, проверка утилитой chdbfl.exe

Необходимо выполнить Тестирование и исправление базы, предварительно сделав копию.

Шаг 1. Делаем копию базы данных

Как сделать резервную копию 1С 8.3 смотрите в следующем видео уроке:

Шаг 2. Выполняем проверку с помощью утилиты chdbfl.exe

Утилиту chdbfl.exe используют в случаях, когда система не запускается даже в режиме конфигуратора. Расположена утилита в папке «bin» установленной технологической платформы, например: c:\Program Files (x86)\1cv8\8.3.9.1818\bin\chdbfl.exe:

Выполняем проверку с помощью утилиты chdbfl.exe:

Шаг 3. Выполнить Тестирование и исправление базы

Выполнить Тестирование и исправление базы запустив систему в режиме конфигуратора.

Шаг 4. Восстановление последовательности документов

Для восстановления последовательности в 1С 8.3 открываем Все функции: главное Меню – Все функции. Выбираем нужный пункт и открываем используя кнопку Открыть:

В открывшемся окне на закладке Восстановление последовательностей и нажимаем Восстановить или Восстановить все:

Способ 8. Если конфигурация не типовая, то выполнить проверку конфигурации

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

Шаг 1.

Запускаем программу в режиме Конфигуратор.

Шаг 2.

Открыть конфигурацию БД: раздел Конфигурация – Конфигурация базы данных:

Шаг 3.

Выбираем пункт Проверка конфигурации и делаем настройки:

Способ 9. Отключить ненужные функциональные режимы

Открываем Функциональность программы 1С 8.3: раздел Главное – Настройки – Функциональность, делаем настройки по каждому разделу:

Способ 10. Настроить права пользователей

Шаг 1.

Запускаем 1С 8.3 в режиме Конфигуратор.

Шаг 2.

Открываем список пользователей: раздел Администрирование – Пользователи. На закладке Прочее определяем какие роли нужно назначить пользователю и отметить их галочкой.

Уменьшение выбранного функционала уменьшает время на отсортировку программой управляемых форм при открытии списка документов, то есть чем меньше лишнего в управляемом интерфейсе – тем быстрее он работает:

Способ 11. Дефрагментация диска с файловой базой

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

Выделив жесткий диск, правой клавишей мыши вызываем команду Свойства:

На закладке Сервис выбираем Оптимизация и дефрагментация диска:

Способ 12. Свертка базы

– это ввод актуальных остатков на определенную дату и удаление старых, ненужных документов. Этот способ может оказаться полезным, если база большого объема, например, за несколько лет. Свертку необходимо производить без работающих в системе пользователей.

Шаг 1. Создаем копию базы данных

Шаг 2. Выполняем процедуру свертки базы 1С 8.3

Раздел Администрирование – Сервис – Свертка информационной базы.

На первом этапе программа 1С 8.3 предлагает сделать резервную копию, где нужно указать каталог для сохранения. Нажимаем Далее:

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

Полнотекстовый поиск предоставляет следующие возможности:

  • Есть поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ 7.79-2000). Пример: "русская фраза" = "russkaya fraza".
  • Есть поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами). Пример: "руссrfz фраpf" (окончания каждого слова набраны латиницей, допустим, в результате ошибки оператора).
  • Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово "привет" и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: "привет", "превет", "привед".
  • Есть возможность указать область выполнения поиска по выбранным объектам метаданных.
  • Полнотекстовое индексирование названий стандартных полей ("Код", "Наименование" и т. д.) производится на всех языках конфигурации.
  • Поиск выполняется с учетом синонимов русского, английского и украинского языков.
  • Морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ "1С:Предприятие".
  • Стандартно в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, которые предоставлены компанией "Информатик".
  • Поиск можно осуществлять с использованием подстановочных символов ("*"), а также с указанием поисковых операторов ("И", "ИЛИ", "НЕ", "РЯДОМ") и спецсимволов.

Полнотекстовый поиск можно осуществлять в любой конфигурации на платформе 1С:Предприятие 8

Для того чтобы открыть окно управления полнотекстовым поиском необходимо выполнить следующее:

Обычное приложение - пункт меню Операции - Управление полнотекстовым поиском .

Управляемое приложение - пункт меню Главное меню - Все функции - Стандартные - Управление полнотекстовым поиском.


  • Обновить индекс – Создание индекса/Обновление индекса;
  • Очистить индекс – обнуление индекса(рекомендуется после обновления всех данных);
  • пункт Разрешить слияние индексов – отвечает за слияние основного и дополнительного индекса.

Полнотекстовый поиск осуществляется при помощи полнотекстового индекса. При отсутствии индекса полнотекстовый поиск как таковой не возможен. Для того чтобы поиск имел результат, все необходимые данные должны быть включены в полнотекстовый индекс. Если пользователем введены в базу новые данные, их следует включить в рассматриваемый индекс, иначе они не будут участвовать в поиске. Чтобы этого избежать, необходимо обновлять полнотекстовый индекс. При обновлении система анализирует только определенные типы данных: Строка, Данные ссылочного типа (ссылки на документы, справочники),Число, Дата, ХранилищеЗначения. Если пользователь не имеет прав доступа к определенной информации, то он не сможет увидеть ее в результатах поиска. Следует также помнить и о том, что в свойствах объектов, по которым будет происходить поиск должно быть установлено значение Полнотекстовый Поиск – Использовать , которое задано по умолчанию.

Как вы можете заметить свойство Использовать установлено для всего справочника Контрагенты , но сделать это можно и для каждого его реквизита соответствующего типа.

Рассмотрим более подробно полнотекстовый индекс, который состоит из двух частей (индексов): основного индекса и дополнительного. Высокая скорость поиска данных обеспечивается за счет основного индекса, но обновление его происходит относительно медленно, в зависимости от объема данных. Дополнительный индекс ему противоположен. Данные добавляются в него намного быстрее, но поиск осуществляется медленнее. Система осуществляет поиск одновременно в обоих индексах. Большая часть данных находится в основном индексе, а данные добавляемые в систему попадают в дополнительный индекс. Пока объем данных в дополнительном индексе небольшой, поиск по нему происходит относительно быстро. В тот момент, когда нагрузка на систему невелика, происходит операция слияния индексов, в результате чего дополнительный индекс очищается, а все данные помещаются в основной индекс. Слияние индексов предпочтительнее выполнять в тот момент времени, когда нагрузка на систему минимальна. С этой целью можно создавать регламентированные задания и задания по расписанию.

Специальные операторы, допустимые при задании поискового выражения

Механизм полнотекстового поиска допускает написание части символов русского слова одноклавишными латинскими символами. Результат поиска при этом не измениться.

Два оператора РЯДОМ

  • упрощенный. На расстоянии 8 слов друг от друга
  • РЯДОМ/[+/-]n – поиск данных в одном реквизите на расстоянии n-1 слов между ними.

Знак указывает в каком направлении от первого слова будет поиск второго. (+ - после, - до)

Групповой символ «*» может использоваться только в качестве замены конца слова

Оператор нечеткости «#». Если неизвестно точное написание названия, имени.

Программными средствами и средствами 1с: программирование.

Оператор синонимов «!». Позволяет найти слово и его синонимы

Как программно обновить индекс полнотекстового поиска?

Код 1C v 8.х Процедура ОбновлениеИндексы() Экспорт
ПолнотекстовыйПоиск.ОбновитьИндекс();
КонецПроцедуры

Пример полнотекстового поиска данных

Определение переменной СписокПоиска

Код 1C v 8.х Перем СписокПоиска;

Кроме этого в процедуре обработки события ПриОткрыии формы определим, что эта переменная будет содержать список полнотекстового поиска, с помощью которого мы и будем осуществлять поиск в данных

Код 1C v 8.х Процедура ПриОткрытии()
СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
КонецПроцедуры

Теперь для события нажатия на кнопку Найти напишем код, который позволит нам выполнять поиск в соответствии с тем выражением, которое задано в поле ПоисковоеВыражение

Код 1C v 8.х Процедура НайтиНажатие(Элемент)
СписокПоиска.СтрокаПоиска = ПоисковоеВыражение;
Попытка
СписокПоиска.ПерваяЧасть();
Исключение
Предупреждение(ОписаниеОшибки());
КонецПопытки;
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
ЭлементыФормы.СообщениеОРезультате.Значение = "Не найдено";
ЭлементыФормы.РезультатПоиска.УстановитьТекст("");
Иначе
ВывестиРезультатПоиска();
КонецЕсли;
КонецПроцедуры

Сначала в этой процедуре мы устанавливаем поисковое выражение, введенное пользователем, в качестве строки поиска для полнотекстового поиска. Затем выполняем метод ПерваяЧасть(), который собственно запускает полнотекстовый поиск и возвращает первую порцию результатов. По умолчанию порция содержит 20 элементов. После этого мы анализируем количество элементов в списке поиска. Если он не содержит ни одного элемента, то мы выводим в форму соответствующее сообщение. В противном случае вызывается процедура ВывестиРезультатПоиска(), которая отображает полученные результаты пользователю.

Создадим в модуле формы процедуру с таким именем и напишем в ней код,

Код 1C v 8.х Процедура ВывестиРезультатПоиска()
ЭлементыФормы.СообщениеОРезультате.Значение = "Показаны " + Строка(СписокПоиска.НачальнаяПозиция() + 1) + " - " + Строка(СписокПоиска.НачальнаяПозиция() +СписокПоиска.Количество()) + " из " + СписокПоиска.ПолноеКоличество();
Результат = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
ЭлементыФормы.РезультатПоиска.УстановитьТекст(Результат);
ДоступностьКнопок();
КонецПроцедуры

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

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

Код 1C v 8.х Процедура ДоступностьКнопок()
ЭлементыФормы.СледующаяПорция.Доступность = (СписокПоиска.ПолноеКоличество() - СписокПоиска.НачальнаяПозиция()) > СписокПоиска.Количество();
ЭлементыФормы.ПредыдущаяПорция.Доступность = (СписокПоиска.НачальнаяПозиция() > 0);
КонецПроцедуры

Теперь необходимо создать обработчики событий нажатия на кнопки ПредыдущаяПорция() и СледующаяПорция().

Код 1C v 8.х Процедура ПредыдущаяПорцияНажатие(Элемент)
СписокПоиска.ПредыдущаяЧасть();
ВывестиРезультатПоиска();
КонецПроцедуры
Процедура СледующаяПорцияНажатие(Элемент)
СписокПоиска.СледующаяЧасть();
ВывестиРезультатПоиска();
КонецПроцедуры

Заключительным «штрихом» будет создание обработчика события onclick поля HTML-документа, расположенного в форме. Дело в том, что результат полнотекстового поиска, представленный в виде HTML-текста, содержит гиперссылки на номера элементов списка поиска. И нам хотелось бы, чтобы при переходе пользователя на эту ссылку система открывала бы форму того объекта, который содержится в этом элементе списка. Для этого мы будем перехватывать событие onclick HTML-документа, содержащегося в поле HTML-документа, получать номер элемента списка из гиперссылки и открывать форму соответствующего объекта. Текст обработчика события onclick поля HTML-документа представлен в коде

Код 1C v 8.х Процедура РезультатПоискаonclick(Элемент, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Проверить идентификатор элемента
Если (htmlElement.id = "FullTextSearchListItem") Тогда
// Получить имя файла (номер строки списка поиска),
// содержащегося в гиперссылке
НомерВСписке = Число(htmlElement.nameProp);
// Получить строку списка поиска по номеру
ВыбраннаяСтрока = СписокПоиска[НомерВСписке];
// Открыть форму найденного объекта
ОткрытьЗначение(ВыбраннаяСтрока.Значение);
pEvtObj.returnValue = Ложь;
КонецЕсли;
КонецПроцедуры

Механизм полнотекстового поиска

Основные возможности полнотекстового поиска

  • поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ);
  • поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами);
  • возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости;
  • возможность указания области выполнения поиска по выбранным объектам метаданных;
  • представление результатов поиска в формате XML и HTML с выделением найденных слов;
  • полнотекстовое индексирование названий стандартных полей ("Код", "Наименование" и т.д.) на всех языках конфигурации;
  • выполнение поиска с учетом синонимов русского, английского и украинского языков;
  • морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ 1С:Предприятие;
  • возможность использования дополнительных словарей полнотекстового поиска;
  • в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, предоставленные компанией "Информатик".

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

Механизм полнотекстового поиска в данных системы 1С:Предприятие 8 позволяет осуществлять поиск в базе данных с указанием поисковых операторов (И, ИЛИ, НЕ, РЯДОМ и др.).

Механизм полнотекстового поиска основан на использовании двух составляющих:

  • полнотекстового индекса, который создается для текущей базы данных и затем периодически, по мере необходимости, обновляется;
  • средств выполнения полнотекстового поиска.

Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме 1С:Предприятие 8, или программно, средствами встроенного языка. Ниже приведен диалог управления полнотекстовым индексированием в режиме 1С:Предприятие:

Для выполнения поиска данных в базе данных может использоваться, например, обработка Поиск данных, представленная ниже.

В представленном примере найдены документы, реквизиты которых содержат значения, начинающиеся на "Компл" и "вент" - контрагент "Комплетк ТД" и реквизиты, содержащие различные формы слова "вентилятор".

Система 1С:Предприятие 8 позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Также существует возможность ограничить область поиска данными только указанных объектов конфигурации.

Полнотекстовый поиск в справочной системе

В справочной системе 1С:Предприятия 8 также реализован полнотекстовый поиск, позволяющий использовать поисковые операторы И, ИЛИ, НЕ, РЯДОМ и др.. При этом найденные слова выделяются.

Программный интерфейс

Используются следующие прикладные объекты:

  • МенеджерПолнотекстовогоПоиска
  • СписокПолнотекстовогоПоиска
  • ЭлементСпискаПолнотекстовогоПоиска

МенеджерПолнотекстовогоПоиска имеет методы для построения индекса поиска, проверки его актуальности, а также создания списка поиска типа СписокПолнотекстовогоПоиска по заданному запросу.

МенеджерПолнотекстовогоПоиска доступен как свойство глобального контекста ПолнотекстовыйПоиск.

СписокПолнотекстовогоПоиска предоставляет доступ к результатам поиска. Кроме того, можно указать область поиска в виде массива элементов метаданных конфигурации.

Результатом поиска является ЭлементСпискаПолнотекстовогоПоиска.

Операторы строки поиска

В строке ввода допускается использование следующих поисковых операторов:

И (AND или #) - поиск данных, содержащих все слова; пример: "запись И документ" - в реквизитах должны быть и "проведение" и "документ" (с учетом морфологии);

ИЛИ (OR или | или,) - поиск хотя бы одного слова из перечисленных; пример: "запись ИЛИ документ" - в реквизитах должно быть хотя бы одно из слов "запись" или "документ";

НЕ (NOT или ~) - поиск данных, в реквизитах которых есть первое слово, но нет второго; пример: "закрытие НЕ месяц" - будут найдены все, содержащие "закрытие", но не содержащие слова "месяц". Использование "~" в начале строки не допускается;

РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.

Знак указывает, в каком направлении от первого слова будет искаться второе слово ("+" – после первого; "-" – до первого слова).

Если знак не указан, то будет найдены данные, содержащие указанные слова на дистанции n слов друг о друга.

Порядок слов не имеет значения.

  • "фен РЯДОМ/3 воздух" - будут найдены данные, в которых "воздух" находится не более 3-х слов до или после "фен";
  • фен РЯДОМ/+3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов после "фен";
  • фен РЯДОМ/-3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов перед "фен".

РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";

"" (текст в кавычках) - поиск точной с учетом морфологии фразы, пример: "проведение документа" - эквивалентно: проведение /1 документа;

() - группировка слов (сколько угодно уровней вложенности); пример: "(проведение | выписка) # (счета, документа)";

* - поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: "доку*" - найдет "документ", "документировать", "документальный" и др.;

# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";

Поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".

Если не указано никаких операторов (слова набраны через пробел), то программа осуществляет поиск всех слов из запроса с использованием оператора И.

Примеры

СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок("", 20); СписокПоиска.ПолучатьОписание = Истина;

МассивМД = Новый Массив(); МассивМД.Добавить(Метаданные.Справочники.Товары); МассивМД.Добавить(Метаданные.Документы.КассовыйЧек);

СписокПоиска.ОбластьПоиска = МассивМД; СписокПоиска.СтрокаПоиска = ПолеВводаПоиска; СписокПоиска.РазмерПорции = РазмерПорции; СписокПоиска.ПерваяЧасть();

Если СписокПоиска.ПолноеКоличество() = 0 Тогда Если СписокПоиска.СлишкомМногоРезультатов() Тогда Предупреждение("Слишком много результатов, уточните запрос."); КонецЕсли; Возврат; КонецЕсли;

Колво = СписокПоиска.ПолноеКоличество();

СтрHTML = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст); Сообщить(СтрHTML);

Для каждого индекс=0 По СписокПоиска.Количество-1 Цикл элемент = СписокПоиска.Получить(индекс); Сообщить(элемент.Представление); КонецЦикла;

Особенности

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

Например, в мультибазной системе нужно отсекать объекты других баз.

Кроме того, такая фильтрация тесно пересекается с контролем доступа. Известно, что очень часто "дырой" в безопасности являются как раз механизмы поиска.

Несмотря на то, что полнотекстовый поиск на платформе 8.3 был анонсирован разработчиками достаточно давно (с платформы 8.3.5), в типовых конфигурациях активно он не применялся. В последних релизах Бухгалтерии предприятия 3.0 во многих списках разработчики включили полнотекстовый поиск. Для моих пользователей это оказалось шоком - программа перестала искать.

Конечно, полнотекстовый поиск работает, но пользователи, не видя окна "Найти" путаются. Обычный сценарий использования: Начинают ввод с клавиатуры, в процессе ввода появляется окно "Найти", где указано поле, в котором будет осуществлен поиск, искомый текст и режим поиска "По части строки".

По нажатию на кнопку ввода список отфильтровывается, над списком появляется строка состояния поиска. Пользователь сам определяет, в каком поле и что он ищет. Новый поиск начинает работать сразу же при вводе и действует на все поля, отображенные в списке. Отдельное окно не появляется, цветом подсвечиваются все совпадения поисковых слов.

Несколько дней мы жили с новым поиском. Пользователи мучались, жаловались, саботировали. Жалобы не прекращались, руководством было поставлено задание "сделать все как было".

С чего начать? Нужно понять, чем отличаются формы друг от друга. Выгрузил исходные коды конфигурации с новым поведением поиска и со старым и сравнил исходники форм.

За функциональность нового полнотекстового поиска отвечает дополнение элемента формы с типом "Строка поиска". Стало понятно, что искать. Нашел статью на ИТС 7.3.1.5. Поиск в динамическом списке . Изучение этой статьи привело к выводу, что новый вариант работы поиска зависит от двух факторов: 1. У формы должно быть вышеуказанное дополнение элемента формы, 2. Динамический список на форме должен иметь свойство "ПоложениеСтрокиПоиска" не равное "Нет".

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

Процедура ОтключениеНовогоПоискаВСписках(Форма) Экспорт Список = Форма.Элементы.Найти("Список"); Если Список = Неопределено Тогда Возврат; КонецЕсли; Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет; ДополнениеСтрокаПоиска = Форма.Элементы.Найти("ДополнениеСтрокаПоиска"); Если НЕ ДополнениеСтрокаПоиска = Неопределено Тогда ДополнениеСтрокаПоиска.Видимость = Ложь; КонецЕсли; КонецПроцедуры

В процедуру "ОтключениеНовогоПоискаВСписках" нужно передать исправляемую форму. Но как же это сделать для всех форм сразу?

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

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

ПриСозданииНаСервере(Форма, МестоРазмещенияКомандПоУмолчанию, ОбъектыПечати) Экспорт

Эта процедура вызывается при создании на сервере формы для заполнения команд печати. В этой процедуре пишем код, вызывающий нашу функцию отключения нового поиска в списках:

МойОбщийМодуль.ОтключениеНовогоПоискаВСписках(Форма);

Бухгалтера наслаждаются старым поиском, а мы готовимся к тому моменту, когда режим совместимости "Бухгалтерии предприятия 3.0" позволит нам перенести этот функционал в расширение.