Каждый технический специалист или опытный пользователь 1С привык к быстрому и удобному поиску в дереве метаданных. Ранее, открыв окно Все функции, достаточно было набрать первые буквы названия нужного справочника или документа (например, «номен»), и система мгновенно переносила курсор к первому подходящему объекту. Однако после обновления платформы до версии 8.3.12 многие обнаружили, что этот привычный механизм перестал работать.
В этой статье мы подробно разберем, почему фирма «1С» приняла решение отключить быстрый поиск по символам, почему стандартные советы по очистке индекса полнотекстового поиска здесь не помогут, и какими способами можно вернуть удобство при работе со списками метаданных.
Многие разработчики после столкновения с этой проблемой посчитали ее багом очередного релиза платформы. Однако официальные разъяснения на партнерском форуме и анализ изменений в файле сопроводительной документации к версии 8.3.12 (V8Update) показали, что это изменение сделано намеренно.
Проанализируем предпосылки этого решения:
Ctrl+F, а также навигацию по результатам с помощью клавиш F3 и Ctrl+F3.Тем не менее, для многих это решение оказалось крайне неудобным, особенно при работе с крупными конфигурациями уровня ERP, где дерево метаданных содержит сотни объектов, а постоянное использование дополнительных диалоговых окон замедляет работу.
В процессе обсуждения проблемы на форумах часто можно встретить совет: «Попробуйте очистить индекс полнотекстового поиска (ППД) и выполнить переиндексацию». Давайте разберем по шагам, почему в данном конкретном случае это действие абсолютно бесполезно.
Механизм полнотекстового поиска в 1С отвечает за индексацию данных базы данных — элементов справочников, документов, записей регистров. Когда вы ищете конкретного контрагента или товар в форме списка, СУБД действительно обращается к таблицам полнотекстового поиска.
Дерево в окне Все функции строится непосредственно по структуре метаданных самой конфигурации, которая хранится в зашитом виде в файле базы данных или конфигурации. Индекс ППД не имеет никакого отношения к списку названий справочников или документов. Поэтому тратить время на удаление и генерацию нового индекса полнотекстового поиска для решения этой проблемы бессмысленно.
Существует несколько вариантов решения данной проблемы в зависимости от того, какими возможностями по обновлению системы вы располагаете.
Если вы вынуждены работать на релизах платформы линейки 8.3.12 — 8.3.14, единственным встроенным инструментом остается стандартный поиск.
Рассмотрим алгоритм действий:
Все функции.Ctrl+F.Enter.F3 для перехода к следующему найденному элементу в дереве метаданных.Волна недовольства со стороны сообщества разработчиков заставила фирму «1С» пересмотреть подход к юзабилити этого интерфейса. В последующих версиях платформы (начиная с 8.3.15 и окончательно в 8.3.17+) механизм был полностью переработан:
Все функции была переименована в Функции для технического специалиста. Чтобы ее включить, необходимо перейти в меню Сервис — Параметры и установить флажок Отображать команду "Функции для технического специалиста".При этом поиск теперь осуществляется не только по началу слова, но и по вхождению подстроки в любое место наименования объекта метаданных, что на практике оказалось значительно удобнее старого механизма.
Если по каким-то причинам вы не можете обновить платформу, а стандартное окно поиска по Ctrl+F замедляет вашу работу, отличным выходом будет использование внешней обработки, заменяющей стандартное окно Все функции.
Рассмотрим пример кода, с помощью которого можно программно получить дерево метаданных и вывести его на форму с возможностью быстрого динамического поиска по мере ввода букв.
Для создания дерева метаданных можно использовать следующий алгоритм на встроенном языке 1С:
// Процедура заполняет дерево значений объектами метаданных
Процедура ЗаполнитьДеревоМетаданных(ДеревоОбъектов) Экспорт
ДеревоОбъектов.Строки.Очистить();
// Добавим ветку для справочников
ВеткаСправочники = ДеревоОбъектов.Строки.Добавить();
ВеткаСправочники.Имя = "Справочники";
ВеткаСправочники.Синоним = "Справочники";
Для Каждого Метаобъект Из Метаданные.Справочники Цикл
НоваяСтрока = ВеткаСправочники.Строки.Добавить();
НоваяСтрока.Имя = Метаобъект.Имя;
НоваяСтрока.Синоним = ?(ЗначениеЗаполнено(Метаобъект.Синоним), Метаобъект.Синоним, Метаобъект.Имя);
КонецЦикла;
// Добавим ветку для документов
ВеткаДокументы = ДеревоОбъектов.Строки.Добавить();
ВеткаДокументы.Имя = "Документы";
ВеткаДокументы.Синоним = "Документы";
Для Каждого Метаобъект Из Метаданные.Документы Цикл
НоваяСтрока = ВеткаДокументы.Строки.Добавить();
НоваяСтрока.Имя = Метаобъект.Имя;
НоваяСтрока.Синоним = ?(ЗначениеЗаполнено(Метаобъект.Синоним), Метаобъект.Синоним, Метаобъект.Имя);
КонецЦикла;
КонецПроцедуры
Выведя полученную таблицу на управляемую форму и добавив стандартное текстовое поле ввода с включенным событием АвтоПодбор или ПриИзменении, мы сможем реализовать собственную фильтрацию строк дерева по введенным символам. Такая обработка может быть добавлена в дополнительные отчеты и обработки информационной базы и добавлена пользователями в раздел Избранное для быстрого доступа в один клик.
Таким образом, проанализировав ситуацию, мы видим, что временное неудобство с поиском в платформе 8.3.12 было лишь переходным этапом к гораздо более мощному и быстрому механизму фильтрации метаданных, который доступен всем пользователям современных версий платформ 1С.