Заметки из Зазеркалья

27.11.2018

Глобальный поиск и модернизация интерфейса клиентского приложения

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.15.

В клиентском приложении мы реализовали новый механизм – глобальный поиск. Вместе с этим мы решили изменить интерфейс клиентского приложения. В результате интерфейс стал более простым, и, мы думаем, удобным, а глобальный поиск позволяет не только находить информацию, но и выполнять некоторые действия. Но, обо всем по порядку.

Модернизация интерфейса

Поскольку эта статья описывает не тестовую и даже не бета-версию платформы, дизайн конкретных элементов носит рабочий, предварительный характер. Однако конструктивные решения, о которых пойдёт речь, скорее всего так и перейдут в «боевую» версию платформы. Хотя и тут мы не исключаем возможных изменений.

Первое отличие, которое бросается в глаза – это стандартный заголовок главного окна и отдельная главная панель, содержащая все необходимые инструменты:

101.png

Теперь отсутствует такие элементы интерфейса, как «панель инструментов» и «системная командная панель». Всё что нужно для работы, находится в главной панели:

102-left.png

102-right.png

Главное меню содержит, в том числе, и те команды, которые раньше находились в системной командной панели.

103.png

Если команды прибавления, вычитания и копирования чисел в буфер обмена нужны часто, вы можете нажать «Показать М, М+, М-», и эти команды появятся в главной панели перед строкой поиска.

111.png

Также мы изменили внешний вид вспомогательных окон.

104.png

Поле поиска, которое находится в главной панели, является основным и единственным интерфейсным элементом нового механизма глобального поиска. Пользователь вводит в это поле «что-то», что он хочет найти или сделать, и платформа показывает результат в списке, раскрывающемся под этим полем.

105.png

Глобальный поиск «из коробки»

Новый механизм глобального поиска работает «из коробки», и не требует от вас какой-либо настройки и программирования. В большинстве случаев его стандартное поведение покрывает все необходимые сценарии, а при желании вы можете настроить его на выполнение специфических задач.

Стандартно глобальный поиск работает следующим образом. Например, если пользователь хочет найти всё, в чем встречается некоторая строка, поиск будет выполняться по избранному, истории, …

106.png

… а также по меню функций, по обсуждениям и сообщениям системы взаимодействия, по данным (полнотекстовый поиск) и по справке. При этом каждый найденный элемент обозначается соответствующей пиктограммой.

107.png

Поиск в разных источниках в большинстве своём выполняется параллельно, например, в сообщениях и обсуждениях системы взаимодействия, в меню функций, в данных.

Во все поля ввода, таблицы, в текстовый, форматированный, табличный документ и в сообщения системы взаимодействия мы добавили контекстную команду Искать везде. По этой команде выбранное значение подставляется в поле поиска и сразу же выполняется поиск.

117.png

Кроме поиска механизм позволяет переходить по ссылкам. Это могут быть, например, ссылки на элементы данных. В заголовок управляемой формы мы добавили кнопку получения ссылки.

Один пользователь может скопировать эту ссылку, и послать её другому пользователю.

108.png

Другой пользователь просто вставляет её в строку поиска, и сразу может открыть нужный элемент данных.

109.png

Также можно переходить и по внешним гиперссылкам. В следующем примере нажатие на первой строке приведет к тому, что у пользователя в стандартном браузере откроется сайт компании «1С».

110.png

Помимо поиска и перехода по ссылкам новый механизм может вычислять выражения, то есть работать как формульный калькулятор.

112.png

При этом поддерживаются все функции работы с числами, которые определены во встроенном языке. Например, возведение в квадрат:

115.png

Настройка глобального поиска

Если вы хотите «чего-то особенного» или стандартное поведение глобального поиска вас не устраивает, вы можете настроить его работу под свои задачи.

Во встроенном языке мы реализовали объектную модель для работы с глобальным поиском. Она позволяет перехватывать многие события глобального поиска и изменять его стандартное поведение.

Перехватить нажатие на найденную ссылку

Например, справочник Товары у вас «особенный». В обычной ситуации для работы с элементами этого справочника вы используете форму ФормаЭлемента. Но когда пользователь находит элементы этого справочника с помощью глобального поиска, вы хотите, чтобы они открывались в другой форме, «особенной».

В этом вам поможет событие ПриВыбореРезультатаГлобальногоПоиска(). Оно возникает в момент нажатия на одну из найденных ссылок в списке, расположенном под полем ввода. Обработать это событие вы можете в модуле приложения.

201.png

Исключить некоторые виды поиска

Например, вы не хотите, чтобы глобальный поиск выдавал результаты, найденные в справке.

207.png

В этом случае вы можете при начале работы системы настроить менеджер глобального поиска. Менеджер доступен через свойство глобального контекста ГлобальныйПоиск. У менеджера есть план поиска – это коллекция, которая содержит те виды поиска, которые будут выполняться.

Если вы не хотите, чтобы выполнялся поиск в справке, просто удалите этот вид поиска из коллекции.

206.png

205.png

Добавить собственный вид поиска

Например, у вас есть собственный интернет-ресурс, на котором вы публикуете материалы для пользователей вашего прикладного решения. Вы можете добавить в результаты глобального поиска ссылку, которая покажет пользователю результаты, найденные на вашем сайте.

Для этого, как и в предыдущем примере, вы можете при начале работы системы настроить менеджер глобального поиска. В план поиска первым элементом вы вставите собственный элемент. Алгоритм его работы написан в процедуре ПоискНаИТС(), которая находится в общем модуле МодульГлобальногоПоискаКлиент.

300.png

В этой процедуре вы просто формируете URL, содержащий нужные параметры поиска. Затем вы добавляете его в результат глобального поиска.

302.png

Когда пользователь наберёт в строке поиска искомое слово, на первом месте он увидит ссылку на ваш интернет-ресурс.

301.png

Нажатие на эту ссылку приведет к тому, что у пользователя в стандартном браузере откроются результаты, найденные на вашем сайте.

303.png

Уточнить поиск в данных

Например, пользователи часто ищут приходные накладные по номеру. Вы можете определить, что в поле поиска введен фрагмент номера, выполнить поиск накладной с подходящим номером и показать результаты в начале списка.

Для этого, как и в предыдущем примере, вы можете при начале работы системы настроить менеджер глобального поиска. В план поиска первым элементом вы вставите собственный элемент. Алгоритм его работы написан в процедуре ПоискНакладныхПоНомеру(), которая находится в общем модуле МодульГлобальногоПоискаСервер.

401.png

В этой процедуре вы находите накладную с подходящим номером. Затем вы добавляете её в результат глобального поиска, выделяя жирным шрифтом.

402.png

Когда пользователь введёт в строке фрагмент номера накладной, в первой строке результатов он увидит подходящую накладную, если такая существует.

400.png

Выполнять собственный поиск по псевдокоманде

Например, в вашем прикладном решении довольно частой задачей является поиск товаров по фрагменту артикула. Глобальный поиск «из коробки» справляется с этой задачей, однако возвращает очень много результатов (т.к. ищет везде), и делает это недостаточно быстро (т.к. использует полнотекстовый поиск в данных).

В такой ситуации вы можете выделить задачу поиска по артикулу в отдельный «вид поиска», и реализовать для него собственный алгоритм. Допустим, вы решили поступить следующим образом: если пользователь хочет найти товар по фрагменту артикула, то первым символом в поисковую строку он должен ввести «№», а затем тот фрагмент артикула, который он ищет. Например: №2.

После этого вы можете воспользоваться событием ПриГлобальномПоиске(). Это событие возникает тогда, когда в процессе набора текста в поле поиска сделана пауза. Это событие вы можете обработать в модуле приложения.

Если в строке поиска первый символ «№», вы удаляете все элементы из плана поиска и добавляете свой собственный элемент. Алгоритм его работы написан в процедуре ПоискПоАртикулу(), которая находится в общем модуле МодульГлобальногоПоискаСервер.

208.png

Сам алгоритм поиска по артикулу заключается в том, что запросом вы получаете только те товары, в артикуле которых содержится искомый фрагмент строки. Затем в результат глобального поиска вы добавляете собственные элементы. Каждый из них содержит ссылку на найденный товар и представление, в котором выделен тот фрагмент, который пользователь ищет.

Чтобы быстро получить такое представление, вы можете использовать функцию СтрВыделитьОформлением(). В первом параметре вы передаёте ей ту строку, которую будете показывать, а во втором параметре – тот фрагмент, который надо выделить в этой строке.

209.png

В результате, когда пользователь введёт в строку поиска «№2», он быстро получит список только тех товаров, у которых в артикуле есть «2». Если пользователь не будет вводить «№» первым символом в поисковую строку, глобальный поиск будет работать как обычно, «из коробки».

202.png

Дополнить описание поиска новыми возможностями

Например, вы добавили в глобальный поиск возможность поиска по артикулу. Но не все сотрудники знают, как этим воспользоваться.

Глобальный поиск имеет описание, которое открывается по ссылке «Что искать». Вы можете добавить в него свою подсказку.

210.png

Для этого вам снова понадобится менеджер глобального поиска.

204.png

В результате пользователь увидит такое описание:

203.png

Кроме описания вы можете установить и собственную подсказку ввода, которая будет отображаться в пустом поле поиска. Для этого у менеджера глобального поиска существует метод УстановитьПодсказкуВвода().

Заключение

В этой статье мы описали только некоторые, наиболее простые возможности настройки глобального поиска. На самом деле с помощью этого механизма и своей фантазии вы можете заставить глобальный поиск не только искать данные, но и выполнять команды.

Например, если пользователь вводит «+» это значит, что он хочет добавить новые данные. В ответ на это вы можете предлагать ему список тех объектов, которые он может создать. Или, если в результатах поиска есть ссылка на товар, вы можете в результаты поиска добавлять ссылку, по которой автоматически выполнится отчёт «Остатки товаров» по этому товару.

Рассказать друзьям: