Полнотекстовый поиск в 1С: как выключить и включить снова
Содержание
Отключить глобальный поиск в 1С — значит перевести полнотекстовый поиск данных в режим «Запретить». Одна команда в режиме Предприятие: ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить). После этого поле поиска в шапке программы останется на месте, но перестанет находить документы, справочники и их содержимое — по нему будут открываться только команды и разделы.
Частое заблуждение — что строку поиска можно спрятать галочкой в настройках. Отдельного переключателя, который убирает поле из интерфейса «Такси», в платформе нет: лупа — часть системной командной панели. Управляют не самим полем, а тем, ищет ли оно по данным. Поэтому дальше речь про движок полнотекстового поиска — он и делает глобальный поиск «глобальным».
Отключают его обычно по двум причинам: обновление поискового индекса грузит сервер после массового ввода или обмена, либо поиск по данным на этой базе просто не нужен и мешает. Настройка общая для всей информационной базы и действует на всех пользователей, поэтому менять режим должен администратор.
Поле в шапке или движок поиска — что именно выключать
За словом «поиск» в 1С прячутся две разные вещи:
- 🔎 Глобальный поиск — поле с лупой в правом верхнем углу окна «Такси». Ищет и команды (разделы, документы, отчёты по названию), и данные.
- 🗂 Полнотекстовый поиск данных — движок платформы, который индексирует содержимое базы и позволяет находить документы по тексту внутри них.
Поле в шапке — это витрина. Данные ему отдаёт движок. Отключите движок — поле останется, но по данным искать перестанет: будет предлагать только команды и навигацию.
Не путайте глобальный поиск с поиском внутри списка. Когда вы стоите в журнале документов и жмёте Ctrl+F или начинаете набирать текст, срабатывает быстрый поиск по текущему списку — он работает всегда и к полнотекстовому поиску отношения не имеет. Отключение движка на него не влияет: по открытому списку искать по-прежнему можно.
Если задача в том, чтобы конкретные пользователи не видели чужие документы через поиск, движок можно оставить, а доступ ограничить ролями. Полнотекстовый поиск показывает только то, на что у пользователя есть права.
Отключение одной командой
Основной способ — встроенная команда платформы. Работает в любой конфигурации, права администратора обязательны.
- Откройте базу в режиме Предприятие под пользователем с административными правами.
- Выполните команду:
ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить);
- Зайдите в программу заново — режим действует на всю базу.
Без административных прав команда УстановитьРежим завершится ошибкой доступа, поэтому выполняют её под администратором. Режим меняется сразу и действует постоянно: держать что-то открытым или повторять запуск не нужно, пока вы не вернёте поиск обратно.
Выполнить одну строку кода «просто так» в Предприятии негде: для этого нужна внешняя обработка (следующий раздел) или готовая настройка в конфигурации. В типовых решениях на Библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) загляните в раздел Администрирование — там обычно есть управление полнотекстовым поиском с переключателем «Разрешить / Запретить». Если такого пункта нет, используйте обработку.
Режим хранится в информационной базе, а не в настройках пользователя. Отключив поиск, вы отключаете его сразу для всех. Вернуть можно так же, командой, но индекс придётся обновить — об этом ниже.
Внешняя обработка: отключаем без правки конфигурации
Чтобы не снимать конфигурацию с поддержки и не заходить в Конфигуратор, режим меняют внешней обработкой. Это файл .epf, который открывается в Предприятии.
Порядок:
- В Конфигураторе создайте внешнюю обработку
:
Файл → Новый → Внешняя обработка. - Добавьте форму с одной кнопкой и пропишите в модуль:
&НаСервере
Процедура ОтключитьПоискНаСервере()
ПолнотекстовыйПоиск.УстановитьРежим(РежимРаботыПолнотекстовогоПоиска.Запретить);
КонецПроцедуры
&НаКлиенте
Процедура Отключить(Команда)
ОтключитьПоискНаСервере();
Сообщить("Полнотекстовый поиск отключён");
КонецПроцедуры
- Сохраните файл, например
OtklPoisk.epf. - В Предприятии:
Файл → Открыть, выберите обработку и нажмите кнопку.
Команда УстановитьРежим исполняется на сервере, поэтому вынесена в серверную процедуру. Включение делается тем же способом — заменой Запретить на Разрешить.
Запускать обработку нужно под пользователем с административными правами — иначе платформа не даст сменить режим. Преимущество обработки в том, что она лежит отдельным файлом: её легко перенести на другую базу или отдать коллеге, не затрагивая конфигурацию.
Запуск из командной строки и по расписанию
Отдельного параметра запуска, который включает или выключает поиск, у 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). Это значит:
- снимите у роли право Чтение на объект — и он перестанет попадать в выдачу поиска для этих пользователей;
- настройте ограничение по организации или подразделению — и человек найдёт через поиск только «свои» документы.
Такой подход гибче: бухгалтер по-прежнему ищет накладные по тексту, а кладовщик видит в поиске только склад. При полном отключении поиск пропадает у всех без разбора.
Права проверяют в Конфигураторе в ветке Роли либо в типовых конфигурациях — в разделе Администрирование → Настройки пользователей и прав. Менять права тоже должен администратор.
Какие данные попадают в индекс и как его сузить
Полнотекстовый поиск индексирует не всё подряд. В индекс попадают строковые реквизиты объектов, у которых в конфигурации включён полнотекстовый поиск. У объекта и у отдельного реквизита есть свойство Полнотекстовый поиск со значениями «Использовать» и «Не использовать».
Это даёт промежуточный вариант между «включено» и «выключено». Разработчик может оставить поиск по справочникам и документам, но убрать из индекса, например, служебные или технические объекты, которые пользователю искать незачем. Поиск станет легче и быстрее, а переиндексация — короче.
У этого способа две оговорки:
- Он требует изменения конфигурации, то есть снятия базы с поддержки (или отдельного согласования с разработчиком типового решения).
- После смены состава индексируемых данных индекс нужно перестроить полностью.
Поэтому для разовой задачи «убрать поиск» он избыточен — проще отключить движок командой. Сужение индекса имеет смысл на больших базах, где поиск нужен, но тормозит из-за объёма данных.
Нагрузка на сервер и влияние на производительность
Главный миф по этой теме — что где-то есть «служба полнотекстового поиска», которую надо остановить. Отдельной службы нет. Индекс обслуживает сама платформа:
- в файловой базе — клиент, который инициирует обновление;
- в клиент-серверной — рабочие процессы сервера (
rphost), обычно по регламентному заданию обновления индекса.
Поэтому отключение делается одинаково для обоих вариантов — на уровне информационной базы, а не в службах Windows или Linux.
Понять, что нагрузку даёт именно поиск, можно по косвенным признакам: сервер заметно грузится после загрузки большой порции данных через обмен или после групповой перепроводки, а в это время в фоне крутится задание обновления индекса. Если такие всплески регулярно мешают работе пользователей, отключение поиска или перенос обновления индекса на ночь эту нагрузку уберёт.
Что меняется по нагрузке после отключения:
- регламентное обновление индекса больше ничего не делает — уходит периодическая нагрузка на процессор и диск;
- после массового ввода, групповых обработок и обменов сервер не тратит ресурсы на переиндексацию;
- пользователи при этом теряют поиск по содержимому документов и ищут только по реквизитам в списках.
Когда отключение оправдано:
| Ситуация | Отключать поиск? |
|---|---|
| Поиском по данным почти не пользуются, сервер слабый | Да, снимет лишнюю нагрузку |
| Частые массовые обмены, база «встаёт» на переиндексации | Да, либо перенести обновление индекса на ночь |
| Поиск активно используют в работе | Нет, лучше настроить расписание индекса |
На практике вместо полного отключения часто достаточно перенести обновление индекса на ночь через расписание регламентного задания. Тогда поиск по данным остаётся, а днём сервер на переиндексацию не отвлекается — компромисс лучше, чем совсем отказываться от поиска.
Расписание заданий в типовых конфигурациях на БСП смотрят в разделе Администрирование → Обслуживание → Регламентные и фоновые задания. Найдите задание обновления индекса полнотекстового поиска, откройте расписание и задайте ночное время. В клиент-серверном варианте задания выполняет сервер, поэтому важно, чтобы в это время он был включён и к базе никто активно не подключался.
Если поиск отключён совсем, это задание всё равно отработает вхолостую — трогать его не обязательно, но для чистоты можно снять флаг выполнения.
Частые вопросы
После отключения поиск всё равно что-то находит. Почему?
Включил поиск обратно, но старые документы не находятся.
ПолнотекстовыйПоиск.ОбновитьИндекс() и дождитесь завершения — после этого найдётся всё, что накопилось за время простоя.