При работе с системой 1С пользователи часто сталкиваются с проблемой замедления поиска номенклатуры, особенно при ее подборе в такие документы, как «Чек ККМ». Если в вашей базе данных насчитывается 10 тысяч и более наименований номенклатуры, а стандартный поиск работает медленно, зависает, или полнотекстовый поиск (ПП) не позволяет искать по части наименования или кода без использования специальных символов (масок), эта статья поможет нам разобраться в причинах и найти пути решения.
Мы рассмотрим оба сценария: когда стандартный поиск замедляется, и когда полнотекстовый поиск не предоставляет ожидаемой гибкости. Наша задача – добиться эффективного и быстрого поиска номенклатуры, соответствующего потребностям бизнеса.
Полнотекстовый поиск в 1С предназначен для ускорения доступа к данным за счет индексации. Однако, как мы видим из обращения, он может работать не совсем так, как мы ожидаем, например, не ища по произвольной части наименования без масок. Разберем шаги по его проверке и настройке.
Проверка включения и статуса полнотекстового поиска:
Прежде всего, давайте убедимся, что полнотекстовый поиск включен и его индекс актуален. Для этого нам необходимо:
Перейти в раздел НСИ и администрирование.
Выбрать Общие настройки.
Найти подраздел Поиск данных и убедиться, что установлена галочка Использовать полнотекстовый поиск.
Затем, рядом с этой галочкой, нажать кнопку Настроить. В открывшемся окне проверьте, что опция Использовать полнотекстовый поиск также установлена в положение ВКЛ.
Обратите внимание на Статус индекса. В идеале он должен быть «обновление не требуется» или находиться в процессе обновления. Если индекс поврежден или давно не обновлялся, это может быть одной из причин некорректной работы.
Обновление и перезаполнение индекса ППД:
Даже если статус показывает, что обновление не требуется, иногда полнотекстовый индекс может «заглючить». В таких случаях нам поможет принудительное обновление или даже полное перезаполнение:
Обновить индекс: В окне настроек полнотекстового поиска нажмите кнопку Обновить индекс. Это запустит процесс перестроения индекса.
Очистить и перезаполнить индекс: Как показывает опыт, иногда необходимо полностью очистить индекс и заполнить его заново. В том же окне настроек должна быть соответствующая команда. Этот шаг может занять значительное время в зависимости от объема данных.
Выключить и включить ППД: Если обновление не помогло, попробуйте полностью выключить полнотекстовый поиск (снять галочку в Общих настройках и в окне Настроить), а затем снова включить. Это может принудительно инициировать корректное построение индекса с нуля.
Проверить регламентные задания: Полнотекстовый поиск поддерживается регламентными заданиями. Мы должны проверить активность и настройки регламентных заданий, отвечающих за обновление и слияние индекса ППД. По умолчанию обновление индекса происходит раз в минуту, а слияние — раз в сутки. Убедитесь, что они выполняются корректно.
Один из участников обсуждения также упоминал о проблеме с индексами и контерами, которую он решил через сброс и повторное заполнение, а также установку параметра, указывающего на отсутствие серверов в кластере под управлением Windows. Если вы используете мини-сервер на Windows, этот опыт может быть полезен.
Увеличение ограничения максимального размера индексируемых данных:
Пользователи упомянули, что ограничение максимального размера индексируемых данных установлено в 1МБ. Для базы с 10 тысячами номенклатурных позиций это может быть критически мало. Мы рекомендуем попробовать увеличить это ограничение и затем повторно перезаполнить индекс.
Это делается в тех же настройках полнотекстового поиска. Увеличение этого параметра позволит системе индексировать больший объем информации, что важно для больших справочников.
Особенности поиска по части слова без масок:
По умолчанию полнотекстовый поиск может не искать по части слова, если эта часть не является началом слова. Например, при поиске по "молоко" он найдет "молоко", но при поиске по "олок" не найдет "молоко", если специально не задана маска. Это связано с тем, как формируются поисковые индексы (по словам). В более поздних версиях платформы 1С (например, начиная с 8.3.3) появилась возможность настроить способ поиска "Любая часть" в свойствах поля ввода справочника. Мы должны проверить эту настройку.
Если же полнотекстовый поиск все равно не работает так, как нам нужно, а пользователи не готовы составлять маски со звездочками (например, *часть*), возможно, потребуется программная доработка. Мы можем модифицировать типовую логику, чтобы система автоматически добавляла символы * до и/или после вводимой поисковой строки, превращая пользовательский ввод в маску для ППД.
Если полнотекстовый поиск не удовлетворяет нашим требованиям, или мы решили его отключить из-за проблем с производительностью, мы можем вернуться к стандартному поиску и попытаться оптимизировать его.
Проверка настройки справочника "Номенклатура":
В справочнике Номенклатура, в свойствах поля, по которому осуществляется поиск (например, наименование или код), часто по умолчанию установлен поиск по началу строки. Если нам нужен поиск по любой части строки, мы должны изменить эту настройку. Мы ищем опцию "Способ поиска" и устанавливаем его в "Любая часть". Это крайне важно для функциональности стандартного поиска.
Для этого нам необходимо открыть конфигуратор, найти справочник Номенклатура, перейти на вкладку Формы, открыть форму выбора или списка, найти элемент управления, связанный с полем поиска, и в его свойствах найти и изменить способ поиска.
Влияние индексов СУБД:
Стандартный поиск, особенно при поиске по части строки без масок (например, с использованием оператора SQL LIKE '%текст%'), может быть очень медленным, так как он не использует стандартные индексы СУБД и приводит к полному сканированию таблиц. Для оптимизации таких запросов может потребоваться создание собственных индексов на уровне СУБД или использование других специализированных инструментов. Однако это уже выходит за рамки стандартных настроек 1С и требует глубокого понимания работы СУБД.
Отключение ППД как временное решение:
Как показывает опыт некоторых пользователей, если полнотекстовый поиск вызывает неоправданную нагрузку на систему или работает некорректно, его полное отключение может значительно ускорить работу базы данных, переложив функцию поиска полностью на СУБД. Нам необходимо оценить, насколько критична потеря функциональности ППД по сравнению с приобретенной скоростью.
Для отключения ППД мы:
Переходим в НСИ и администрирование.
Выбираем Общие настройки.
В подразделе Поиск данных снимаем галочку Использовать полнотекстовый поиск.
После отключения мы должны протестировать производительность стандартного поиска.
Независимо от выбора между стандартным и полнотекстовым поиском, существуют общие подходы к оптимизации производительности 1С, которые могут значительно улучшить ситуацию.
Очистка кэша и временных файлов:
Загаженный кэш и временные файлы как на клиентских машинах, так и на сервере, могут значительно замедлять работу 1С и операционной системы в целом. Мы рекомендуем регулярно очищать кэш 1С (удалением соответствующих папок из профиля пользователя) и временные системные файлы (папка %TEMP%).
Анализ аппаратного обеспечения и среды:
Производительность 1С напрямую зависит от ресурсов, на которых она работает. Мы должны обратить внимание на следующие аспекты:
Оперативная память (RAM): Недостаток оперативной памяти может быть узким местом, особенно в момент слияния таблиц индексов поиска или при работе с большими объемами данных.
Дисковая подсистема: Использование твердотельных накопителей (SSD) для хранения базы данных (как на клиенте, так и на сервере) может значительно ускорить операции ввода-вывода и, как следствие, работу 1С. Медленные HDD могут быть причиной большинства задержек.
Сетевое подключение: При работе в клиент-серверном режиме или через удаленный рабочий стол (RDP), узкое место может быть в локальной сети или канале связи. Мы должны проверить стабильность и скорость сетевого подключения.
Антивирусное программное обеспечение: Антивирусы могут сканировать файлы 1С в реальном времени, значительно замедляя операции. Мы рекомендуем настроить исключения для каталогов с базами 1С и серверными компонентами.
Тип базы данных: Для баз с большим объемом данных (например, от 10 тысяч номенклатур и более) и несколькими пользователями, файловый режим работы становится неэффективным. Переход на клиент-серверный режим с использованием СУБД (например, PostgreSQL или MS SQL Server) является одним из наиболее мощных решений проблем производительности.
Иерархия видов номенклатуры:
Построение логичной иерархии видов номенклатуры (как предложил один из участников обсуждения) может существенно упростить и ускорить поиск для пользователей. Вместо того чтобы просматривать весь список, пользователи смогут сначала выбрать категорию, а затем уже искать внутри нее. Это сокращает объем данных для поиска.
Программная доработка автоматического добавления масок:
Если полнотекстовый поиск устраивает нас своей скоростью, но не гибкостью без масок, мы можем рассмотреть программную доработку. Она заключается в изменении логики обработки поисковой строки пользователя: перед выполнением поиска мы можем автоматически добавлять символы * до и/или после введенного текста. Например, если пользователь ввел "молоко", система сама преобразует это в *молоко* или молоко*, чтобы обеспечить поиск по части слова или по началу. Это позволит пользователям работать привычным способом, не задумываясь о синтаксисе поисковых запросов.
Оптимизация конфигурации:
Мы должны проанализировать, нет ли в вашей конфигурации неоптимальных запросов, особенно в динамических списках. Если в динамический список выведены поля через несколько «точек» (например, Ссылка.ГоловнойКонтрагент.ОсновнойДоговор.Владелец), это может значительно замедлять его работу, так как для отображения каждого элемента приходится выполнять сложные джойны.
Также следует проверить фоновые задания – активные фоновые задания в период интенсивной работы пользователей могут создавать значительную нагрузку на сервер.
Регулярная свертка информационной базы, если она накопила большой объем данных за долгие годы работы, также может значительно повысить общую производительность системы.
Настройка подбора номенклатуры:
В формах подбора товаров, особенно при отображении остатков на складах, более производительно использовать динамический список. Заполнение таблицы значений при открытии формы может быть медленным для большого справочника, так как необходимо получить все данные из базы сразу.
Влияние версии платформы и режима совместимости:
Мы не должны забывать, что производительность и функциональность поиска могут сильно зависеть от версии платформы 1С и установленного режима совместимости. Более новые версии платформы часто содержат оптимизации и улучшения в механизмах поиска. Убедитесь, что используете актуальную и стабильную версию платформы.
Глобальный поиск:
Платформа 1С, начиная с версии 8.3.15.1489, предлагает механизм "Глобального поиска", который позволяет искать информацию в различных источниках (избранное, история, меню функций, полнотекстовый поиск данных и справка). В версии 8.3.24 была улучшена релевантность результатов поиска. Если ваша платформа позволяет, мы можем рассмотреть его использование, так как он часто работает "из коробки" без дополнительной настройки и может предоставить более быстрые и релевантные результаты для пользователей.
Таким образом, проблема производительности поиска номенклатуры в 1С требует комплексного подхода. Мы начали с диагностики и настройки полнотекстового поиска, затем перешли к особенностям стандартного поиска, и в конце рассмотрели общие меры по оптимизации работы системы. Выбор конкретного решения или их комбинации будет зависеть от специфики вашей системы и предпочтений пользователей. Не забывайте о регулярном мониторинге производительности и обслуживании базы данных.