Полнотекстовый поиск в 1С: как выключить и включить снова

· 9 мин

Содержание

Отключить глобальный поиск в 1С — значит перевести полнотекстовый поиск данных в режим «Запретить». Одна команда в режиме Предприятие: ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить). После этого поле поиска в шапке программы останется на месте, но перестанет находить документы, справочники и их содержимое — по нему будут открываться только команды и разделы.

Частое заблуждение — что строку поиска можно спрятать галочкой в настройках. Отдельного переключателя, который убирает поле из интерфейса «Такси», в платформе нет: лупа — часть системной командной панели. Управляют не самим полем, а тем, ищет ли оно по данным. Поэтому дальше речь про движок полнотекстового поиска — он и делает глобальный поиск «глобальным».

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

Поле в шапке или движок поиска — что именно выключать

За словом «поиск» в 1С прячутся две разные вещи:

  • 🔎 Глобальный поиск — поле с лупой в правом верхнем углу окна «Такси». Ищет и команды (разделы, документы, отчёты по названию), и данные.
  • 🗂 Полнотекстовый поиск данных — движок платформы, который индексирует содержимое базы и позволяет находить документы по тексту внутри них.

Поле в шапке — это витрина. Данные ему отдаёт движок. Отключите движок — поле останется, но по данным искать перестанет: будет предлагать только команды и навигацию.

Не путайте глобальный поиск с поиском внутри списка. Когда вы стоите в журнале документов и жмёте Ctrl+F или начинаете набирать текст, срабатывает быстрый поиск по текущему списку — он работает всегда и к полнотекстовому поиску отношения не имеет. Отключение движка на него не влияет: по открытому списку искать по-прежнему можно.

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

Что именно мешает в поиске?

Отключение одной командой

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

  1. Откройте базу в режиме Предприятие под пользователем с административными правами.
  2. Выполните команду:
ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить);
  1. Зайдите в программу заново — режим действует на всю базу.

Без административных прав команда УстановитьРежим завершится ошибкой доступа, поэтому выполняют её под администратором. Режим меняется сразу и действует постоянно: держать что-то открытым или повторять запуск не нужно, пока вы не вернёте поиск обратно.

Выполнить одну строку кода «просто так» в Предприятии негде: для этого нужна внешняя обработка (следующий раздел) или готовая настройка в конфигурации. В типовых решениях на Библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) загляните в раздел Администрирование — там обычно есть управление полнотекстовым поиском с переключателем «Разрешить / Запретить». Если такого пункта нет, используйте обработку.

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

Внешняя обработка: отключаем без правки конфигурации

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

Порядок:

  1. В Конфигураторе создайте внешнюю обработку : Файл → Новый → Внешняя обработка.
  2. Добавьте форму с одной кнопкой и пропишите в модуль:
&НаСервере
Процедура ОтключитьПоискНаСервере()
    ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить);
КонецПроцедуры

&НаКлиенте
Процедура Отключить(Команда)
    ОтключитьПоискНаСервере();
    Сообщить("Полнотекстовый поиск отключён");
КонецПроцедуры
  1. Сохраните файл, например OtklPoisk.epf.
  2. В Предприятии: Файл → Открыть, выберите обработку и нажмите кнопку.

Команда УстановитьРежим исполняется на сервере, поэтому вынесена в серверную процедуру. Включение делается тем же способом — заменой Запретить на Разрешить.

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

Запуск из командной строки и по расписанию

Отдельного параметра запуска, который включает или выключает поиск, у 1cv8 нет: режим живёт в базе, а не в ярлыке. Но ту же обработку можно запустить автоматически, без участия пользователя, через параметр /Execute.

Пример для клиент-серверной базы (путь к 1cv8.exe зависит от версии платформы — подставьте свою):

"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8.exe" ENTERPRISE ^
  /S"server:1541\accounting" ^
  /N"Администратор" /P"пароль" ^
  /Execute"C:\scripts\OtklPoisk.epf" ^
  /DisableStartupMessages

Для файловой базы вместо /S укажите путь к каталогу: /F"D:\bases\accounting".

Что означают параметры:

  • ENTERPRISE — запуск в режиме Предприятие (не Конфигуратор);
  • /S — адрес клиент-серверной базы в виде сервер:порт\имя; /F — путь к файловой базе;
  • /N и /P — имя пользователя и пароль;
  • /Execute — внешняя обработка, которую нужно выполнить;
  • /DisableStartupMessages — подавить стартовые сообщения, чтобы запуск не ждал подтверждения.

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

В .bat-файле логин и пароль хранятся открытым текстом. Не оставляйте такой файл в общей папке и ограничьте к нему доступ.

Как проверить режим и включить поиск обратно

Текущее состояние проверяют командой:

Если ПолнотекстовыйПоиск.ПолучитьРежим() = РежимРаботыПолнотекстовогоПоиска.Запретить Тогда
    Сообщить("Поиск по данным отключён");
Иначе
    Сообщить("Поиск по данным включён");
КонецЕсли;

Включение — обратная команда:

ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Разрешить);

Но просто включить мало. Пока поиск был выключен, новые и изменённые данные в индекс не попадали — он устарел. Чтобы поиск снова находил всё, индекс обновляют:

ПолнотекстовыйПоиск.ОбновитьИндекс();

Проверить, актуален ли индекс, помогает метод ПолнотекстовыйПоиск.ИндексАктуален() — он возвращает Истина, когда перестраивать нечего.

Полное обновление индекса на большой базе — тяжёлая операция: нагружает сервер и диск. Запускайте её в нерабочее время, а не в разгар дня, иначе пользователи почувствуют замедление.

Ограничение поиска правами вместо полного отключения

Полное отключение — не всегда лучший вариант. Если поиск нужен одним сотрудникам и мешает другим, его не выключают целиком, а разграничивают доступ.

Движок отдаёт пользователю только те объекты, на чтение которых у него есть право. Работают и роли, и ограничения доступа на уровне записей (RLS). Это значит:

  • снимите у роли право Чтение на объект — и он перестанет попадать в выдачу поиска для этих пользователей;
  • настройте ограничение по организации или подразделению — и человек найдёт через поиск только «свои» документы.

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

Права проверяют в Конфигураторе в ветке Роли либо в типовых конфигурациях — в разделе Администрирование → Настройки пользователей и прав. Менять права тоже должен администратор.

Какие данные попадают в индекс и как его сузить

Полнотекстовый поиск индексирует не всё подряд. В индекс попадают строковые реквизиты объектов, у которых в конфигурации включён полнотекстовый поиск. У объекта и у отдельного реквизита есть свойство Полнотекстовый поиск со значениями «Использовать» и «Не использовать».

Это даёт промежуточный вариант между «включено» и «выключено». Разработчик может оставить поиск по справочникам и документам, но убрать из индекса, например, служебные или технические объекты, которые пользователю искать незачем. Поиск станет легче и быстрее, а переиндексация — короче.

У этого способа две оговорки:

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

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

Нагрузка на сервер и влияние на производительность

Главный миф по этой теме — что где-то есть «служба полнотекстового поиска», которую надо остановить. Отдельной службы нет. Индекс обслуживает сама платформа:

  • в файловой базе — клиент, который инициирует обновление;
  • в клиент-серверной — рабочие процессы сервера (rphost), обычно по регламентному заданию обновления индекса.

Поэтому отключение делается одинаково для обоих вариантов — на уровне информационной базы, а не в службах Windows или Linux.

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

Что меняется по нагрузке после отключения:

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

Когда отключение оправдано:

СитуацияОтключать поиск?
Поиском по данным почти не пользуются, сервер слабыйДа, снимет лишнюю нагрузку
Частые массовые обмены, база «встаёт» на переиндексацииДа, либо перенести обновление индекса на ночь
Поиск активно используют в работеНет, лучше настроить расписание индекса

На практике вместо полного отключения часто достаточно перенести обновление индекса на ночь через расписание регламентного задания. Тогда поиск по данным остаётся, а днём сервер на переиндексацию не отвлекается — компромисс лучше, чем совсем отказываться от поиска.

Расписание заданий в типовых конфигурациях на БСП смотрят в разделе Администрирование → Обслуживание → Регламентные и фоновые задания. Найдите задание обновления индекса полнотекстового поиска, откройте расписание и задайте ночное время. В клиент-серверном варианте задания выполняет сервер, поэтому важно, чтобы в это время он был включён и к базе никто активно не подключался.

Если поиск отключён совсем, это задание всё равно отработает вхолостую — трогать его не обязательно, но для чистоты можно снять флаг выполнения.

Частые вопросы

После отключения поиск всё равно что-то находит. Почему?
Режим меняется на уровне базы сразу. Если поиск ещё выдаёт данные — обновите открытую форму поиска или перезайдите в программу: скорее всего, вы смотрите ранее открытый результат.
Включил поиск обратно, но старые документы не находятся.
Пока поиск был выключен, индекс не пополнялся. Выполните ПолнотекстовыйПоиск.ОбновитьИндекс() и дождитесь завершения — после этого найдётся всё, что накопилось за время простоя.
Можно отключить поиск только одному пользователю?
Нет. Режим полнотекстового поиска общий для всей базы. Разграничить получится лишь видимость данных через права ролей: поиск не покажет то, на что у пользователя нет доступа.
Удалится ли поисковый индекс при отключении?
Нет, индекс остаётся в базе. При включении его не строят с нуля — достаточно обновить изменения, накопившиеся за время, пока поиск был выключен.
Нужно ли снимать конфигурацию с поддержки?
Нет. Смена режима через команду или внешнюю обработку не трогает конфигурацию, поэтому снимать базу с поддержки не требуется.
Исчезнет ли поле поиска в шапке после отключения?
Нет, поле с лупой останется — убрать его штатными средствами платформы нельзя. Оно просто перестанет находить данные и будет предлагать только команды и разделы.