AdvancedGlobalSearchOneS для 1С
Расширение для 1С, улучшающее глобальный поиск через иерархическое меню команд. Позволяет быстро находить нужные объекты.
- GitHub: https://github.com/SeiOkami/AdvancedGlobalSearchOneS
- Gitsell page: https://gitsell.ru/SeiOkami/AdvancedGlobalSearchOneS
- Visibility: public/free
- GitHub stars: 71
- Gitsell views: 46
- Gitsell downloads: 1
1C Configurations
Not specified.
Pricing
Free or price is not specified.
README
Расширенный глобальный поиск 1С
О расширении
## О расширении Поле поиска 1С само по себе имеет удобный функционал, но и обладает недостатками. Когда пользователь вводит строку поиска, то платформа ищет буквально все, что может. И метаданные, и элементы базы и справку и так далее. При этом сам пользователь в большинстве случаев знает, что он хочет найти. Например, какую-то обработку или отчет. Такое поведение и замедляет работу базы, и не предоставляет удобства, ведь среди лишних результатов поиска нужно еще найти свой. А если результатов будет много, то 1С может и отказать в их выводе. Так же платформа позволяет переопределять поведение строки поиска и наделять ее своими "быстрыми действиями". Но разрабатывать и поддерживать их неудобно, а самого пользователя принуждает запоминать и вводить вручную "ключевые слова". Данное расширение позволяет объединить все свои допонительные возможности поля поиска в одно иерархическое меню. И предоставляет удобные методы для его настройки. С таким подходом пользователю достаточно запомнить один ключевой символ для активации меню, а дале действовать интерактивно. Расширение уже содержит встроенное меню, но разработано как фреймворк для создания своих отдельных пунктов. При этом это можно делать в своих независимых расширениях, чтобы не было необходимости изменять основное.  Стандартные возможности строки поиска остаются без изменений, но лишь дополняются своими действиями. Поддерживаются любые конфигурации с русским или английским языком.Как это работает
## Как это работает Используются платформенные события, которые позволяют переопределить поведение глобального поиска. Когда пользователь вводит ключевой символ `\`, то расширение перехватывает управление поиском и строит пункты меню (команды). При интерактивном нажатии на какую-то из команд, расширение соответствующим образом изменяет строку поиска. При изменении строки поиска снова срабатывает логика расширения и выводятся уже подчиненные команды или результаты поиска. При этом каждая команда может обладать: - Подчиненными командами (подменю) - Параметрами, которые могут быть переданы программно или изменены интерактивно (например, номер текущей страницы результатов) - Строкой поиска При этом содержимое поля поиска 1С строится и разбирается фреймворком по формату: `\Команда\ПодчиненнаяКоманда?Параметр1=Значение1&Параметр2=Значение2\СтрокаПоиска` Например, в этой строке выполняется команда `Метаданные` с параметром `Тип` = `РегистрыСведений` и `C` (страница) = `2`. А в самом конце указана строка поиска: `\Метаданные?Тип=РегистрыСведений&С=2\поль` Сам пользователь никак не формирует эту строку. Все это делает расширение автоматически исходя из интерактивных действий в построенном меню.Установка
## Установка Актуальную версию можно скачать на [странице релизов](https://github.com/SeiOkami/AdvancedGlobalSearchOneS/releases) Файлы расширений приложены в разрезе версии платформы и языка конфигурации. Например, версия для RU-конфигурации и платформы 8.3.22: `AdvancedGlobalSearchOneS_RU_8322` Установку необходимо производить в режиме конфигуратора. Снимаются все галочки кроме "Активно". При установке может возникать необходимость решать конфликты. Например, несоответствие идентификатора языка конфигурации.Почему установка в конфигураторе
Начиная с версии 8.3.22 при добавлении расширения _в режиме предриятия_ могут возникать ошибки по типу: ` Не найден метод "ПриГлобальномПоиске", указанный в аннотации метода "РГП_ПриГлобальномПоиске" ` Такое возникает, если в конфигурации нет стандартного метода в модуле приложения, а расширение пытается его переопределить. Это баг платформы и события всё равно будут работать. Ошибка игнорируется **в режиме конфигуратора**.Встроенное меню
## Встроенное меню Расширение имеет встроенное меню, которое можно отключить частично или полностью. ### Поиск по метаданным Позволяет искать метаданные по именам, синонимам, подсказкам и так далее. С фильтром по типу метаданных и без. В каждом элементе результата есть свои действия типа создания нового объекта или открытия.  ### Поиск по формам Позволяет искать по открытым формам. Формы можно активировать или закрывать. Дополнительно по форме можно искать элементы. Элемент можно активировать или дополнительно выделить заливкой.  ### Вычисление выражений Позволяет выполнить произвольное выражение с выбором контекста (с сохранением истории). Общая функциональность
## Общая функциональность Движок помимо построения пунктов меню и вывода результата предоставляет возможности: - __Панель "Избранное".__ В каждом пункте меню по умолчанию выводится кнопка, позволяющая добавить текущую строку поиска в избранное. При этом сохраняются все содержимое строки поиска (текущая команда, параметры, строка поиска и так далее). Такие элементы можно открывать как из меню поиска, так и из стандартной панели избранного 1С. - __Постраничный вывод.__ Можно использовать специальный метод, который выводит результаты поиска с учетом текущей страницы. При этом пользователь получает интерфейс по быстрому переходу  - __Пользовательские настройки.__ Существуют как общие настройки (например, количество выводимых на странице результатов), так и индивидульные для команды, которые разработчик добавляет самостоятельно. Расширение предоставляет возможности их интерактивного изменения  - __Готовые программные методы.__ Множество методов, которые позволяют программисту быстро разрабатывать свои пункты менюРазработка собственного меню
## Разработка собственного меню Для удобства поддержки и обновления самого фреймворка, свои пункты меню строятся не внутри общего расширения, а отдельно в своих независимых. Для этого в своем расширении необходимо добавить переопределяемый модуль по шаблону: `РГП_ГлобальныйПоискКлиентПереопределяемый_ВАШЕИМЯ`. Этот модуль будет вызываться из фреймворка при определении настроек меню. Дополнительно можно подключить серверный переопределяемый общий модуль, чтобы при построении меню как-то дополнять данные из сервера. Шаблоны таких модулей лежат в основном расширении. Их можно просто скопировать в свое и изменить последнюю часть имени, чтобы не было пересечений. Пример такого расширения лежит в проекте: [InfostartToolkit](РасширенныйГлобальныйПоиск.InfostartToolkit) Оно дополняет меню поиска инструментами [Infostart Toolkit](https://infostart.ru/marketplace/toolkit/) ## Примеры своих команд Все команды должны иметь родителя. Все кроме "корневой", которая активируется путём ввода специального символа. Этот же символ далее будет являться разделителем команд. В расширении есть предопределенное меню с корневой командой, использующей символ. Получить основную команду можно так: ` КорневоеМеню = РГП_ГлобальныйПоискКлиент.ОсновноеМенюРасширенногоГлобальногоПоиска(ПараметрыПоиска); ` Далее можно добавлять свои команды. Простой пример:НашеМеню = РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Наше", КорневоеМеню);
НашеМеню.Представление = "Наше меню";
Можно добавить свою картинку:
НашеМеню.Картинка = БиблиотекаКартинок.ПоискДанных;
И подчиненные команды:
Команда при нажатии открывает форму:
Команда = РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "К1", НашеМеню);
Команда.Представление = "Открыть форму";
Команда.ВыполняемоеДействие = РГП_ГлобальныйПоискКлиентСервер.ВыполняемоеДействиеОткрытияФормы("ОбщаяФорма.ОбщиеНастройки");
Команда при нажатии открывает значение:
Команда = РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "К2", НашеМеню);
Команда.Представление = "Открыть значение";
Команда.ВыполняемоеДействие = РГП_ГлобальныйПоискКлиентСервер.ВыполняемоеДействиеОткрытияЗначения(ТекущаяДата());
Команда при нажатии выполняет описание оповещения:
Команда = РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "К3", НашеМеню);
Команда.Представление = "Описание оповещения";
ОписаниеОповещения = РГП_ГлобальныйПоискКлиентСервер.ОписаниеОповещения("Процедура1", "Модуль1");
Команда.ВыполняемоеДействие = РГП_ГлобальныйПоискКлиентСервер.ВыполняемоеДействиеОписанияОповещения(ОписаниеОповещения);
При этом сигнатура описания будет такой:
// Выполнить что-то
//
// Параметры:
// ВыполняемоеДействие - см. РГП_ГлобальныйПоискКлиентСервер.ВыполняемоеДействие
// ДополнительныеПараметры - Произвольный
Процедура Процедура1(ВыполняемоеДействие, ДополнительныеПараметры) Экспорт
//Что-то делаем
КонецПроцедуры
Команда при нажатии выполняет план поиска:
Команда = РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "К4", НашеМеню);
Команда.Представление = "План поиска";
ЭлементПлана = РГП_ГлобальныйПоискКлиент.ЭлементПланаГлобальногоПоискаКоманды("Процедура2", "Модуль1", Ложь);
Команда.ПланПоиска.Добавить(ЭлементПлана);
При этом так может выглядеть процедура плана поиска:
// Заполняем РезультатыПоиска, которые увидит пользователь
//
// Параметры:
// СтрокаПоиска - Строка - Полная строка (включая команды меню).
// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска.
// ПараметрыВыполнения - см. ПараметрыВыполненияКомандыПоиска
Процедура Процедура2(Знач СтрокаПоиска, РезультатыПоиска, ПараметрыВыполнения) Экспорт
//Во входящей строке находится полная строка (включая команды меню)
//Если же нам нужна именно строка без команд, то можем взять её в параметрах выполнения
СтрокаПоиска = ПараметрыВыполнения.СтрокаПоиска;
//Здесь у нас находится ключ команды
КлючКоманды = ПараметрыВыполнения.Ключ;
//Так мы можем добавить результат поиска. При этом применяются те же объекты выполняемых действий
ВыполняемоеДействие = РГП_ГлобальныйПоискКлиентСервер.ВыполняемоеДействиеОткрытияЗначения(ТекущаяДата());
РГП_ГлобальныйПоискКлиентСервер.ДобавитьЭлементРезультатаГлобальногоПоиска(
РезультатыПоиска, ВыполняемоеДействие, "Текущая дата");
КонецПроцедуры
### Ограничения команд
Если доступность команды должна зависеть от прав или ролей пользователя, то для этого можно использовать функции расширения, которые кэшируют получения данных с сервера:
Процедура ПослеЗаполненияПараметровРасширенногоГлобальногоПоиска(ПараметрыПоиска) Экспорт
КомандаПоиска = РГП_ГлобальныйПоискКлиент.ОписаниеКомандыПоискаПоФормам(ПараметрыПоиска);
//Ограничение на полноправного пользователя (БСП)
КомандаПоиска.Использование = РГП_ГлобальныйПоискКлиентСервер.ЭтоПолноправныйПользователь(ПараметрыПоиска);
//Ограничение по конкретной роли
КомандаПоиска.Использование = РГП_ГлобальныйПоискКлиентСервер.РолиДоступны(ПараметрыПоиска, "АдминистраторСистемы");
//Ограничение по конкретному праву
КомандаПоиска.Использование = РГП_ГлобальныйПоискКлиентСервер.ЕстьПравоДоступа(ПараметрыПоиска, "Администрирование");
КонецПроцедуры
### Серверные данные
Чтобы оптимизировать получение данных о правах и ролях, нужно использовать серверный переопределяемый модуль (чтобы минимизировать обращения к серверу).
Тут же можно получить какие-то данные с сервера, которые потом пригодятся в Клиентском переопределяемом модуле для настройки команд.
Процедура ПередЗаполнениемПараметровГлобальногоПоиска(Параметры) Экспорт
РГП_ГлобальныйПоискКлиентСервер.ДополнитьКэшРолейПользователей(Параметры, "АдминистраторСистемы");
РГП_ГлобальныйПоискКлиентСервер.ДополнитьКэшПравПользователей(Параметры, "Администрирование");
Параметры.ДополнительныеПараметры.Вставить("МоиДанные");
КонецПроцедуры