Ситуация, когда данные физически присутствуют в базе данных, успешно выбираются в документах, но «исчезают» из общего списка справочника, часто ставит в тупик даже опытных специалистов. Особенно часто это проявляется в конфигурации 1С:Управление нашей фирмой (УНФ) после массовой загрузки контрагентов из внешних источников (Excel, XML или другие системы). Рассмотрим подробно, почему так происходит и как вернуть данные в поле зрения пользователя.
Первым делом проанализируем поведение системы. Если контрагент находитcя через поле ввода в документе (по строке), это означает, что объект существует в таблицах базы данных и программные механизмы выбора работают корректно. Однако, если при открытии списка справочника Контрагенты часть записей отсутствует, необходимо выяснить, какой именно механизм поиска используется в данный момент.
Разберем ситуацию автора: при использовании обычного отбора данные видны, но при использовании Ctrl+F (полнотекстовый поиск) — нет. В современных версиях УНФ поиск в списках по умолчанию настроен на работу через механизм полнотекстового поиска (ППС). Если индекс этого поиска не актуален или поврежден, система просто «не знает», что в базе появились новые записи, и не выводит их в результат.
Выясним причину, почему при записи одного контрагента вручную он появляется в списке, а при массовой загрузке — нет. Дело в том, что при интерактивной записи объекта 1С может ставить его в очередь на немедленное индексирование. При массовой программной записи (особенно в файловых базах) регламентные задания по обновлению индекса могут не успевать обрабатывать поток данных или вовсе не запускаться.
Рассмотрим по шагам, как исправить состояние индекса стандартными средствами:
Если простое обновление не помогло, проанализируем более радикальный метод — полную очистку и перестроение. Для этого в той же обработке нажмите Очистить индекс, а затем Создать индекс. Имейте в виду, что на больших базах этот процесс может занять значительное время.
Проанализируем ситуацию, характерную для файловых баз. В отличие от клиент-серверного варианта, где за выполнение фоновых заданий отвечает кластер серверов 1С, в файловой базе регламентные задания (включая индексацию) выполняются только в том случае, если запущен специальный сеанс или если настроено автоматическое выполнение в текущем сеансе.
Если вы загрузили контрагентов и сразу пытаетесь их найти, фоновое задание по индексации могло еще не запуститься. Посмотрите, запущен ли у вас в базе Менеджер регламентных заданий. Для корректной работы поиска в файловом режиме рекомендуется держать открытым один сеанс, который будет выполнять роль «серверного» для обработки очереди заданий.
Иногда стандартная очистка через интерфейс 1С не дает результата, так как файлы индекса на уровне операционной системы могут быть заблокированы или повреждены. Выясним, как выполнить «глубокую» очистку:
После удаления файлов система будет вынуждена просканировать все таблицы заново, что гарантированно решит проблему «битых» ссылок в поиске.
Если вы являетесь разработчиком и хотите избежать подобных проблем в будущем при написании обработок загрузки, рассмотрим вариант принудительного вызова обновления индекса в коде. Хотя злоупотреблять этим не стоит из-за нагрузки на систему, в конце процедуры загрузки можно вызвать:
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
// Первый параметр - Немедленно (False для фонового режима)
// Второй параметр - Порция (True для частичного обновления)
Это позволит инициировать процесс обработки новых данных сразу после завершения загрузки.
Если перестроение индекса не помогло, разберем ситуацию на уровне Конфигуратора. Проверим свойства справочника Контрагенты:
Контрагенты.Использовать.Наименование, ИНН). Если у реквизита в свойствах поиск стоит в значении Не использовать, то поиск по этому полю через Ctrl+F работать не будет, даже если объект в списке виден.Подводя итог, в большинстве случаев проблема «невидимости» контрагентов в УНФ после загрузки решается именно через полный сброс индекса полнотекстового поиска и удаление содержимого папки 1Cv8FTxt. Это стандартная процедура обслуживания базы данных, которую рекомендуется проводить при возникновении расхождений между реальными данными и результатами поиска в списках.