В процессе эксплуатации высоконагруженных систем на базе 1С:ERP Управление предприятием пользователи часто сталкиваются со странным поведением поиска в форме подбора товаров. Типичная ситуация: поиск по части артикула выдает корректный результат, но при вводе полного номера номенклатура исчезает из списка. Особенно остро эта проблема проявляется в Личном кабинете дилера (ЛКД) или при работе через веб-клиент. Разберем детально причины этого сбоя и пошагово рассмотрим методы восстановления работоспособности поиска. Для поддержания производительности подобных высоконагруженных баз можно регулярно выполнять многопоточную свёртку 1С:ERP, которая помогает сократить объём накопленных данных.
Прежде всего, проанализируем механику работы поиска. В современных конфигурациях на управляемых формах поиск в списках подбора чаще всего завязан на механизм Полнотекстового поиска данных (ППД). Когда мы вводим символы в строку поиска, система обращается к заранее построенному индексу, а не напрямую к таблицам SQL. Это значительно ускоряет работу, но создает зависимость от актуальности и целостности этого самого индекса.
Выясним причину, по которой частичный поиск работает, а полный — нет. Полнотекстовый поиск 1С разбивает данные на слова (токены). Если артикул содержит спецсимволы или имеет большую длину, поисковый движок может проиндексировать его некорректно. Однако более частой причиной является повреждение (фрагментация) файлов индекса. В этом случае «хвост» индекса может указывать на несуществующие блоки данных, и при точном совпадении длинной строки система выдает пустой результат, в то время как по короткой подстроке (которая проиндексирована в другой части файла) объект находится успешно.
Важно различать два механизма поиска, доступных пользователю:
Ctrl+F, значит, с данными в таблицах базы все в порядке.ПолнотекстовыйПоиск. Если здесь результат пустой, проблема локализована в области ППД.Рассмотрим процедуру восстановления ППД. Обычное нажатие кнопки «Обновить индекс» в пользовательском интерфейсе часто не помогает, так как система пытается лишь дописать изменения в уже «битые» файлы. Нам необходимо выполнить полную очистку и перестроение.
Важный нюанс: В режиме работы 24/7 отключить ППД полностью бывает сложно, но необходимо понимать, что во время перестроения индекса пользователи смогут работать, но поиск по подстроке будет временно недоступен или неточен. Для крупной базы ERP процесс может занять несколько часов.
Для гарантированного результата выполним физическое удаление файлов индекса:
srvinfo).1cv8ftxt. Именно здесь хранятся файлы полнотекстового поиска.Проанализируем программный аспект. Если вам необходимо проверить состояние индекса через код, можно воспользоваться стандартными методами:
СостояниеИндекса = ПолнотекстовыйПоиск.ПолучитьСостояниеИндекса();
Если СостояниеИндекса = СостояниеПолнотекстовогоПоиска.ТребуетсяОбновление Тогда
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
КонецЕсли;
Если переиндексация не помогла, особенно в контексте Личного кабинета дилера, проанализируем влияние кэширования. Веб-клиент активно использует кэш серверных вызовов. Если в рабочей базе артикул был изменен, а в кэше веб-сервера (IIS или Apache) остались старые связи, поиск будет выдавать ошибку.
Рекомендуем выполнить следующие действия:
snacc в каталоге пользователя, под которым запущен сервер).
iisreset /restart
%AppData%\1C\1cv8\).Рассмотрим ситуацию, когда дилеры копируют артикулы из Excel или сторонних каталогов. При вставке в строку поиска в 1С могут попадать неразрывные пробелы (символ с кодом 160) или скрытые знаки форматирования. Поиск по подстроке (когда часть артикула вводится вручную) срабатывает, так как «мусорный» символ отсекается. Чтобы исключить подобные ошибки ручного ввода данных, можно организовать автоматический сбор и обработку прайс-листов из почты или FTP.
Проверим подозрительный артикул с помощью простой обработки или консоли запросов. Посмотрим на код символов:
Для Ном = 1 По СтрДлина(ПроверяемыйАртикул) Цикл
Сообщить("Символ: " + Сред(ПроверяемыйАртикул, Ном, 1) + " Код: " + КодСимвола(ПроверяемыйАртикул, Ном));
КонецЦикла;
Если в кодах символов обнаружится что-то отличное от цифр и букв (например, код 160 вместо 32), необходимо провести нормализацию данных в справочнике Номенклатура.
Часто в «базе разработок» всё работает корректно, а в «проде» — нет, из-за наличия специфических расширений. Проанализируем список активных расширений в рабочей базе. Обратим внимание на те, которые модифицируют форму подбора или перехватывают событие ПриИзменении поля поиска.
Если расширение изменяет текст запроса динамического списка, оно может некорректно обрабатывать параметры поиска, добавляя лишние условия или неправильно настраивая ТекущаяСтрока. Попробуем временно отключить расширения, связанные с формой подбора, чтобы исключить этот фактор.
Подводя итог, можно сказать, что в 90% случаев проблема «битого» поиска по полному артикулу в 1С:ERP решается физическим удалением папки индекса ППД и последующим полным обновлением. Остальные 10% приходятся на специфику веб-клиента (кэш IIS) и наличие невидимых символов в данных. После выполнения этих регламентных процедур поиск в форме подбора должен восстановить свою штатную работу. Для автоматизации такого обслуживания в нескольких базах удобно использовать инструмент для автоматического архивирования и тестирования баз, работающий по расписанию.