From 07d3e3bd3014552ead31f3bc168b8f7983ebfe08 Mon Sep 17 00:00:00 2001 From: SeiOkami Date: Mon, 13 Mar 2023 20:38:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BF=D0=BE=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D0=BC=20=D0=B8=20=D1=8D=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC=20#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Module.bsl" | 895 +++++++++++++++--- .../Module.bsl" | 328 +++++++ .../Module.bsl" | 37 +- .../ManagedApplicationModule.bsl" | 8 + 4 files changed, 1095 insertions(+), 173 deletions(-) diff --git "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202/Module.bsl" "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202/Module.bsl" index 3c14e28..887e686 100644 --- "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202/Module.bsl" +++ "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202/Module.bsl" @@ -2,22 +2,24 @@ #Область СлужебныйПрограммныйИнтерфейс +#Область СобытияМодуляПриложения + // Событие модуля приложения "ПриНачалеРаботыСистемы" // Производим инициализацию параметров поиска Процедура ПриНачалеРаботыСистемы() Экспорт - + ПараметрыПоиска = ПараметрыРасширенногоГлобальногоПоиска(); - + Если ЗначениеЗаполнено(ПараметрыПоиска.Описание) Тогда ГлобальныйПоиск.УстановитьОписание(ПараметрыПоиска.Описание); КонецЕсли; - + Если ЗначениеЗаполнено(ПараметрыПоиска.ПодсказкаВвода) Тогда ГлобальныйПоиск.УстановитьПодсказкуВвода(ПараметрыПоиска.ПодсказкаВвода); КонецЕсли; - + РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеСобытияПриНачалеРаботыСистемы(); - + КонецПроцедуры // Событие модуля приложения "ПриГлобальномПоиске" @@ -27,52 +29,51 @@ // ИзначальнаяСтрокаПоиска - Строка - Строка, введенная пользователем или скриптом в поле глобального поиска // ПланПоиска - ПланГлобальногоПоиска - Текущий план выполнения глобального поиска. Процедура ПриГлобальномПоиске(ИзначальнаяСтрокаПоиска, ПланПоиска) Экспорт - + СтрокаПоиска = ВРег(СокрЛП(ИзначальнаяСтрокаПоиска)); - + ПараметрыПоиска = ПараметрыРасширенногоГлобальногоПоиска(); Для Каждого КлючИЗначение Из ПараметрыПоиска.Команды Цикл - - Если НЕ СтрНачинаетсяС(СтрокаПоиска, КлючИЗначение.Ключ) - ИЛИ НЕ КлючИЗначение.Значение.Использование Тогда + + Если Не СтрНачинаетсяС(СтрокаПоиска, КлючИЗначение.Ключ) Или Не КлючИЗначение.Значение.Использование Тогда Продолжить; КонецЕсли; - + ПланПоиска.Очистить(); - + СтрокаПоиска = Сред(СтрокаПоиска, СтрДлина(КлючИЗначение.Ключ) + 1); - + ТекущаяКоманда = КлючИЗначение.Значение; //см. НоваяКомандаРасширенногоПоиска ЧастиСтрокиПоиска = СтрРазделить(СтрокаПоиска, ТекущаяКоманда.Разделитель, Истина); Для Каждого ЧастьСтроки Из ЧастиСтрокиПоиска Цикл - + ПодчиненнаяКоманда = ТекущаяКоманда.Команды.Получить(ЧастьСтроки); //см. НоваяКомандаРасширенногоПоиска - - Если ПодчиненнаяКоманда = Неопределено - ИЛИ НЕ ПодчиненнаяКоманда.Использование Тогда + + Если ПодчиненнаяКоманда = Неопределено Или Не ПодчиненнаяКоманда.Использование Тогда Прервать; Иначе ТекущаяКоманда = ПодчиненнаяКоманда; КонецЕсли; - + КонецЦикла; - + Для Каждого ЭлементПлана Из ТекущаяКоманда.ПланПоиска Цикл - - ПланПоиска.Добавить(ЭлементПлана.ИмяПроцедуры, ЭлементПлана.Модуль, ЭлементПлана.НаСервере, + + ПланПоиска.Добавить(ЭлементПлана.ИмяПроцедуры, ЭлементПлана.Модуль, ЭлементПлана.НаСервере, ЭлементПлана.Фоновый, ЭлементПлана.Порядок, ЭлементПлана.ДополнительныеПараметры); - + КонецЦикла; - + Если ЗначениеЗаполнено(ТекущаяКоманда.Команды) Тогда - ПланПоиска.Добавить("ГлобальныйПоискВывестиПодчиненныеКоманды", - "РГП_ГлобальныйПоискКлиент", Ложь, Ложь, ПланПоиска.Количество() + 1, ТекущаяКоманда); - КонецЕсли; - + ПланПоиска.Добавить("ГлобальныйПоискВывестиПодчиненныеКоманды", "РГП_ГлобальныйПоискКлиент", Ложь, Ложь, + ПланПоиска.Количество() + 1, ТекущаяКоманда); + КонецЕсли; + КонецЦикла; - - РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеСобытияПриГлобальномПоиске(ИзначальнаяСтрокаПоиска, ПланПоиска); - + + РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеСобытияПриГлобальномПоиске(ИзначальнаяСтрокаПоиска, + ПланПоиска); + КонецПроцедуры // Событие модуля приложения "ПриВыбореРезультатаГлобальногоПоиска" @@ -81,22 +82,362 @@ // Параметры: // ЭлементРезультата - ЭлементРезультатаГлобальногоПоиска: // * Значение - см. НоваяКомандаРасширенногоПоиска +// - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска // СтандартнаяОбработка - Булево -Процедура ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, СтандартнаяОбработка) Экспорт +Процедура ПриВыбореРезультатаГлобальногоПоиска(Знач ЭлементРезультата, СтандартнаяОбработка) Экспорт - ПараметрыПоиска = ПараметрыРасширенногоГлобальногоПоиска(); - Если ЭлементРезультата.ВидПоиска <> ПараметрыПоиска.КлючВидаПоискаВыбораКоманды Тогда + Если ЭлементРезультата.ВидПоиска = РГП_ГлобальныйПоискКлиентСервер.КлючВидаРасширенногоГлобальногоПоиска() Тогда + ОбработатьДанныеРезультатаГлобальногоПоиска(ЭлементРезультата.Значение, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// При выборе действия результата глобального поиска. +// +// Параметры: +// ЭлементРезультата - ЭлементРезультатаГлобальногоПоиска +// Действие - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) Экспорт + + Если ЭлементРезультата.ВидПоиска = РГП_ГлобальныйПоискКлиентСервер.КлючВидаРасширенногоГлобальногоПоиска() Тогда + ОбработатьДанныеРезультатаГлобальногоПоиска(Действие); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиГлобальногоПоиска + +// Метод плана глобального поиска для вывода подчиненных команд пользователю +// +// Параметры: +// СтрокаПоиска - Строка - Строка, по которой выполняется поиск. +// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска. +// ОписаниеКоманды - см. РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска +Процедура ГлобальныйПоискВывестиПодчиненныеКоманды(СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды) Экспорт + + ПараметрыВыполнения = ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска(ОписаниеКоманды); + ДанныеПоиска = РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска(ПараметрыВыполнения, СтрокаПоиска); + + Для Каждого ПодчиненнаяКоманда Из ОписаниеКоманды.ПорядокКоманд Цикл //см. НоваяКомандаРасширенногоПоиска + + Если Не ПодчиненнаяКоманда.Использование Или Не ПодчиненнаяКоманда.ОтображатьВМеню Тогда + Продолжить; + КонецЕсли; + + ДанныеРезультата = ДанныеРезультатаГлобальногоПоискаНаОсновеОписанияКоманды(ПодчиненнаяКоманда, ДанныеПоиска); + ЭлементРезультата = РГП_ГлобальныйПоискКлиентСервер.ЭлементРезультатаГлобальногоПоиска(ДанныеРезультата, + ПодчиненнаяКоманда.Представление, ПодчиненнаяКоманда.Картинка, ПодчиненнаяКоманда.Описание); + + РезультатыПоиска.Добавить(ЭлементРезультата); + + КонецЦикла; + + РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеВыводаПодчиненныхКомандГлобальногоПоиска( + СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды); + +КонецПроцедуры + +// Метод плана глобального для поиска по открытым окнам +// +// Параметры: +// СтрокаПоиска - Строка - Строка, по которой выполняется поиск. +// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска. +// ОписаниеКоманды - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +Процедура ГлобальныйПоискПоОткрытымОкнам(Знач СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды) Экспорт + + ОбщиеПараметры = ОбщиеПараметрыВыполненияГлобальногоПоискаПоОткрытымОкнам(СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды); + + ОткрытыеОкна = ПолучитьОкна(); + Для Каждого Окно Из ОткрытыеОкна Цикл + + Для Каждого Форма Из Окно.Содержимое Цикл + + Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") Тогда + + ФормаПодходит = ОбщиеПараметры.ВыводВсехДанных; + + Для Каждого СловоПоиска Из ОбщиеПараметры.ДанныеВыполнения.СловаПоиска Цикл + + Если ФормаПодходит Тогда + Прервать; + КонецЕсли; + + Если СтрНайти(Форма.Заголовок, СловоПоиска) > 0 + ИЛИ СтрНайти(Форма.ИмяФормы, СловоПоиска) > 0 Тогда + ФормаПодходит = Истина; + КонецЕсли; + + КонецЦикла; + + Если ФормаПодходит Тогда + + ПредставлениеРезультата = ?(ПустаяСтрока(Форма.Заголовок), Окно.Заголовок, Форма.Заголовок); + ГлобальныйПоискПоОткрытымОкнам_ДобавитьРезультат(ОбщиеПараметры, Форма, ПредставлениеРезультата); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Метод плана глобального для поиска по открытым окнам +// +// Параметры: +// СтрокаПоиска - Строка - Строка, по которой выполняется поиск. +// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска. +// ОписаниеКоманды - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +Процедура ГлобальныйПоискПоЭлементамФормы(Знач СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды) Экспорт + + ДанныеПоиска = РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска(ОписаниеКоманды, СтрокаПоиска); + Если НЕ ЗначениеЗаполнено(ДанныеПоиска.ПараметрыКоманды) Тогда + Возврат; + КонецЕсли; + + РГП_ГлобальныйПоискКлиентСервер.ДобавитьЭлементРезультатаКомандаВводаСтрокиНаОсновеДанныхПоиска(РезультатыПоиска, ДанныеПоиска); + + Если ПустаяСтрока(ДанныеПоиска.СтрокаПоиска) Тогда + Возврат; + КонецЕсли; + + Форма = ФормаПоУникальномуИдентификатору(ДанныеПоиска.ПараметрыКоманды[0]); + Если Форма = Неопределено Тогда Возврат; КонецЕсли; - Команда = ЭлементРезультата.Значение; - Если Команда.Использование Тогда - СтандартнаяОбработка = Ложь; - ГлобальныйПоиск.НачатьПоиск(ЭлементРезультата.Значение.ПолныйКлюч); + СтрокаПоиска = ДанныеПоиска.СтрокаПоиска; + СловаПоиска = ДанныеПоиска.СловаПоиска; + ПриоритетыЭлементов = Новый СписокЗначений; //СписокЗначений из Число + Для Каждого ЭлементФормы Из Форма.Элементы Цикл + + ПолучаемыеСвойства = Новый Структура("Видимость, Имя, Заголовок", Ложь, "", ""); + + Попытка + ЗаполнитьЗначенияСвойств(ПолучаемыеСвойства, ЭлементФормы); + Исключение + Продолжить; //TODO: На декорациях платформа падает. Фиг с ними + КонецПопытки; + + Если НЕ ПолучаемыеСвойства.Видимость Тогда + Продолжить; + КонецЕсли; + + ПриоритетЭлемента = 0; + ИмяЭлементаВрег = ВРег(ПолучаемыеСвойства.Имя); + ЗаголовокВрег = ВРег(ПолучаемыеСвойства.Заголовок); + + Если ИмяЭлементаВрег = СтрокаПоиска ИЛИ ЗаголовокВрег = СтрокаПоиска Тогда + ПриоритетЭлемента = ДанныеПоиска.МаксимальныйПриоритет; + ИначеЕсли СтрНачинаетсяС(ИмяЭлементаВрег, СтрокаПоиска) ИЛИ СтрНачинаетсяС(ЗаголовокВрег, СтрокаПоиска) Тогда + ПриоритетЭлемента = ДанныеПоиска.МаксимальныйПриоритет - 1; + Иначе + Для Каждого СловоПоиска Из СловаПоиска Цикл + ПриоритетЭлемента = ПриоритетЭлемента + СтрЧислоВхождений(ИмяЭлементаВрег, СловоПоиска); + ПриоритетЭлемента = ПриоритетЭлемента + СтрЧислоВхождений(ЗаголовокВрег, СловоПоиска); + КонецЦикла; + КонецЕсли; + + Если ПриоритетЭлемента > 0 Тогда + ПриоритетыЭлементов.Добавить(ПриоритетЭлемента, ИмяЭлементаВрег); + КонецЕсли; + + КонецЦикла; + + ПриоритетыЭлементов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + + ДополнительныеПараметрыДействий = Новый Структура; + ДополнительныеПараметрыДействий.Вставить("Форма", Форма); + ДополнительныеПараметрыДействий.Вставить("Элемент", Неопределено); + КартинкаФормы = БиблиотекаКартинок.ПолеВводаОткрыть; + ОписаниеВыделения = Новый ОписаниеОповещения("ВыделитьЭлементФормы", ЭтотОбъект); + ОписаниеАктивация = Новый ОписаниеОповещения("АктивироватьЭлементФормы", ЭтотОбъект); + + Для Каждого ЭлементСписка Из ПриоритетыЭлементов Цикл + + Если РезультатыПоиска.Количество() > ДанныеПоиска.ЛимитСтрокРезультата Тогда + Прервать; + КонецЕсли; + + ЭлементФормы = Форма.Элементы.Найти(ЭлементСписка.Представление); + Представление = ?(ПустаяСтрока(ЭлементФормы.Заголовок), ЭлементФормы.Имя, ЭлементФормы.Заголовок); + Представление = СтрШаблон("%1: %2", ТипЗнч(ЭлементФормы), Представление); + + ДополнительныеПараметрыДействий.Элемент = ЭлементФормы; + + ДанныеРезультатаАктивация = ДанныеРезультатаНаОсновеДанныхВыполнения(ДанныеПоиска); + ДанныеРезультатаАктивация.ОписаниеОповещения = ОписаниеАктивация; + ДанныеРезультатаАктивация.ДополнительныеПараметры.Вставить("Форма", Форма); + ДанныеРезультатаАктивация.ДополнительныеПараметры.Вставить("Элемент", ЭлементФормы); + + ДанныеРезультатаВыделение = ДанныеРезультатаНаОсновеДанныхВыполнения(ДанныеПоиска); + ДанныеРезультатаВыделение.ОписаниеОповещения = ОписаниеВыделения; + ДанныеРезультатаВыделение.ДополнительныеПараметры.Вставить("Форма", Форма); + ДанныеРезультатаВыделение.ДополнительныеПараметры.Вставить("Элемент", ЭлементФормы); + + ЭлементРезультата = РГП_ГлобальныйПоискКлиентСервер.ЭлементРезультатаГлобальногоПоиска( + ДанныеРезультатаАктивация, Представление, КартинкаФормы); + + ЭлементРезультата.Действия.Добавить(ДанныеРезультатаАктивация, "Акивировать", КартинкаФормы); + ЭлементРезультата.Действия.Добавить(ДанныеРезультатаВыделение, "Выделить", КартинкаФормы); + + РезультатыПоиска.Добавить(ЭлементРезультата); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиРезультатаГлобальногоПоиска + +// Показать поле ввода строки поиска +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// ПараметрыДействия - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыДействияВводаСтроки +Процедура ОтобразитьВводСтроки(ДанныеРезультата, ПараметрыДействия) Экспорт + + ОписаниеОкончанияВвода = Новый ОписаниеОповещения("ПоместитьСтрокуВКонецПоиска", ЭтотОбъект, ПараметрыДействия); + ПоказатьВводСтроки(ОписаниеОкончанияВвода, ПараметрыДействия.НачальнаяСтрока, ПараметрыДействия.Представление); + +КонецПроцедуры + +// Поместить введенную строку в конец строки поиска +// +// Параметры: +// Строка - Строка, Неопределено - +// ПараметрыДействия - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыДействияВводаСтроки +Процедура ПоместитьСтрокуВКонецПоиска(Строка, ПараметрыДействия) Экспорт + + Если ЗначениеЗаполнено(Строка) Тогда + + ГлобальныйПоиск.НачатьПоиск(ПараметрыДействия.СтрокаПоиска + Строка); + + КонецЕсли; + +КонецПроцедуры + +// Активировать форму. +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// ДополнительныеПараметры - Произвольный +Процедура АктивироватьФорму(ДанныеРезультата, ДополнительныеПараметры) Экспорт + + Форма = Неопределено; //ФормаКлиентскогоПриложения + Если ДанныеРезультата.ДополнительныеПараметры.Свойство("Форма", Форма) Тогда + Форма.Активизировать(); + КонецЕсли; + +КонецПроцедуры + +// Закрыть форму. +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// ДополнительныеПараметры - Произвольный +Процедура ЗакрытьФорму(ДанныеРезультата, ДополнительныеПараметры) Экспорт + + Форма = Неопределено; //ФормаКлиентскогоПриложения + Если ДанныеРезультата.ДополнительныеПараметры.Свойство("Форма", Форма) Тогда + Форма.Закрыть(); + КонецЕсли; + +КонецПроцедуры + +// Активировать элемент формы +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// ДополнительныеПараметры - Произвольный +Процедура АктивироватьЭлементФормы(ДанныеРезультата, ДополнительныеПараметры) Экспорт + + Форма = Неопределено; //ФормаКлиентскогоПриложения + Элемент = Неопределено; //ПолеВвода + Если ДанныеРезультата.ДополнительныеПараметры.Свойство("Форма", Форма) + И ДанныеРезультата.ДополнительныеПараметры.Свойство("Элемент", Элемент) Тогда + + Форма.ТекущийЭлемент = Элемент; //@skip-check statement-type-change + + КонецЕсли; + +КонецПроцедуры + +// Выделить элемент формы +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// ДополнительныеПараметры - Произвольный +Процедура ВыделитьЭлементФормы(ДанныеРезультата, ДополнительныеПараметры) Экспорт + + Форма = Неопределено; //ФормаКлиентскогоПриложения + Элемент = Неопределено; //ПолеВвода + Если ДанныеРезультата.ДополнительныеПараметры.Свойство("Форма", Форма) + И ДанныеРезультата.ДополнительныеПараметры.Свойство("Элемент", Элемент) Тогда + + НовыеСвойства = Новый Структура; + НовыеСвойства.Вставить("ЦветРамки", WebЦвета.Красный); + НовыеСвойства.Вставить("ЦветФона" , WebЦвета.СветлоЖелтый); + + ЗаполнитьЗначенияСвойств(Элемент, НовыеСвойства); + + Форма.ТекущийЭлемент = Элемент; //@skip-check statement-type-change + КонецЕсли; КонецПроцедуры +#КонецОбласти + +#Область МетодыРаботыСРасширеннымПоиском + +// Обработать данные результата глобального поиска. +// +// Параметры: +// ДанныеРезультата - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +// СтандартнаяОбработка - Булево +Процедура ОбработатьДанныеРезультатаГлобальногоПоиска(ДанныеРезультата, СтандартнаяОбработка = Истина) Экспорт + + СтандартнаяОбработка = Ложь; + + ОписаниеОповещения = ОписаниеОповещения(ДанныеРезультата.ОписаниеОповещения); + Если ТипЗнч(ОписаниеОповещения) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(ОписаниеОповещения, ДанныеРезультата); + КонецЕсли; + + Если ДанныеРезультата.ОткрываемоеЗначение <> Неопределено Тогда + + ПоказатьЗначение = Истина; + Если ТипЗнч(ДанныеРезультата.ОткрываемоеЗначение) = Тип("Строка") Тогда + + НавигационнаяСсылка = ДанныеРезультата.ОткрываемоеЗначение; //Строка + + Попытка //@skip-check empty-except-statement + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); + ПоказатьЗначение = Ложь; + Исключение + //Значит это не навигационная ссылка + КонецПопытки; + + КонецЕсли; + + Если ПоказатьЗначение Тогда + ПоказатьЗначение(Неопределено, ДанныеРезультата.ОткрываемоеЗначение); + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеРезультата.ПутьПерехода) Тогда + ГлобальныйПоиск.НачатьПоиск(ДанныеРезультата.ПутьПерехода); + КонецЕсли; + +КонецПроцедуры + // Параметры расширенного глобального поиска // Именять содержимое можно только в переропределяемом событии "ПослеЗаполненияПараметровРасширенногоГлобальногоПоиска" // @@ -108,34 +449,36 @@ // Структура - Параметры расширенного глобального поиска: // * КлючВидаПоискаВыбораКоманды - Строка - Ключевая строка, передается в вид поиска результата при выборе пользователем команды // * Команды - см. КоллекцияКомандПараметровРасширенногоГлобальногоПоиска -// * ШаблонКоманды - см. НоваяКомандаРасширенногоПоиска +// * ПолныеКлючиКоманд - см. КоллекцияВсехКомандПараметровРасширенногоГлобальногоПоиска // * Описание - Строка - Описание глобального поиска. Если заполнено, устанавливается при начале работы системы // * ПодсказкаВвода - Строка - Подсказка ввода глобального поиска. Если заполнено, устанавливается при начале работы системы Функция ПараметрыРасширенногоГлобальногоПоиска(ИзКэша = Истина) Экспорт - + Если ИзКэша Тогда Возврат РГП_ГлобальныйПоискКлиентПовтИсп.ПараметрыРасширенногоГлобальногоПоиска(); КонецЕсли; - + ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("КлючВидаПоискаВыбораКоманды", "Команда расширенного глобального поиска"); - ПараметрыПоиска.Вставить("ШаблонКоманды", НоваяКомандаРасширенногоПоиска("")); ПараметрыПоиска.Вставить("Команды", КоллекцияКомандПараметровРасширенногоГлобальногоПоиска()); + ПараметрыПоиска.Вставить("ПолныеКлючиКоманд", КоллекцияВсехКомандПараметровРасширенногоГлобальногоПоиска()); ПараметрыПоиска.Вставить("Описание", ""); ПараметрыПоиска.Вставить("ПодсказкаВвода", ""); - + ЗаполнитьСтандартныеКомандыРасширенногоГлобальногоПоиска(ПараметрыПоиска); - - РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеЗаполненияПараметровРасширенногоГлобальногоПоиска(ПараметрыПоиска); - + + РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеЗаполненияПараметровРасширенногоГлобальногоПоиска( + ПараметрыПоиска); + Возврат ПараметрыПоиска; - + КонецФункции // Новая команда расширенного поиска. // Данным методом можно создать свою команду расширенного поиска // // Параметры: +// ПараметрыВыполнения - см. ПараметрыРасширенногоГлобальногоПоиска // Ключ - Строка - Короткий ключ команды. Нужен для идентификации команды в контексте родителя // Родитель - Неопределено // - см. НоваяКомандаРасширенногоПоиска @@ -148,9 +491,13 @@ // * ПланПоиска - ПланГлобальногоПоиска - План поиска, который необходимо применить при выборе команды. // Игнорируется, если есть подчиненные команды // * ОткрываемоеЗначение - Произвольный - Если нет подчиненных команд и плана поиска, тогда открывается указанное значение +// * ОписаниеОповещения - Неопределено +// - ОписаниеОповещения - При выборе команды сработает описание оповещения // * Родитель - Неопределено - Команда верхнего уровня. В таком случае Ключ команды = Разделитель // - см. НоваяКомандаРасширенногоПоиска // * Разделитель - Строка - Разделитель команды. Используется ключ команды верхнего уровня. +// * ВозможныПараметры - Булево - Если установлено в Истина, то строка поиска (после полного ключа) дополнительно разбивается на разделитель +// Например, "\ПолныйКлючКоманды\Параметр\СтрокаПоиска". Наследуется от родителя // * ПолныйКлюч - Строка - Полный ключ команды по формату <ПолныйКлючРодителя> + <Ключ> + <Разделитель> // * Представление - Строка - Строка, выводимая пользователю // * Описание - Строка - Строка, выводимая пользователю в качестве описания @@ -161,39 +508,47 @@ // * ДополнительныеПараметры - Структура из КлючИЗначение - Параметры, копируемые в ДополнительныеПараметры выполняемого метода команды: // ** Ключ - Строка // ** Значение - Произвольный -Функция НоваяКомандаРасширенногоПоиска(Ключ, Родитель = Неопределено) Экспорт - +Функция НоваяКомандаРасширенногоПоиска(ПараметрыВыполнения, Ключ, Родитель = Неопределено) Экспорт + Команда = Новый Структура; Команда.Вставить("Ключ", Ключ); Команда.Вставить("Представление", ""); Команда.Вставить("Описание", ""); - - Команда.Вставить("Использование" , Истина); + + Команда.Вставить("Использование", Истина); Команда.Вставить("ОтображатьВМеню", Истина); - + Команда.Вставить("Команды", КоллекцияКомандПараметровРасширенногоГлобальногоПоиска()); Команда.Вставить("ПорядокКоманд", УпорядоченнаяКоллекцияКомандРасширенногоГлобальногоПоиска()); Команда.Вставить("ПланПоиска", Новый ПланГлобальногоПоиска); Команда.Вставить("ОткрываемоеЗначение", Неопределено); - + Команда.Вставить("ОписаниеОповещения", Неопределено); + Команда.Вставить("Родитель", Родитель); Команда.Вставить("Разделитель", ""); + Команда.Вставить("ВозможныПараметры", Ложь); + Команда.Вставить("ПолныйКлюч", ""); Команда.Вставить("Картинка", Неопределено); Команда.Вставить("ДополнительныеПараметры", Новый Структура); - + Если Родитель = Неопределено Тогда Команда.Разделитель = Ключ; Команда.ПолныйКлюч = Ключ; + КоллекцияКоманды = ПараметрыВыполнения.Команды; Иначе + Команда.ВозможныПараметры = Родитель.ВозможныПараметры; Команда.Разделитель = Родитель.Разделитель; Команда.ПолныйКлюч = СтрШаблон("%1%2%3", Родитель.ПолныйКлюч, Ключ, Команда.Разделитель); Родитель.ПорядокКоманд.Добавить(Команда); - Родитель.Команды.Вставить(ВРег(Ключ), Команда); + КоллекцияКоманды = Родитель.Команды; КонецЕсли; + КоллекцияКоманды.Вставить(ВРег(Ключ), Команда); + ПараметрыВыполнения.ПолныеКлючиКоманд.Вставить(Команда.ПолныйКлюч, Команда); + Возврат Команда; //@skip-check constructor-function-return-section - баг ЕДТ - + КонецФункции // Метод добавляет в описание команды новый элемент плана поиска, созданный на основе переданного эталона @@ -207,99 +562,132 @@ // ** Ключ - Строка // ** Значение - Произвольный Процедура ДобавитьВКомандуЭлементПланаПоиска(Команда, ЭталонныйЭлемент) Экспорт - - ПараметрыВыполнения = РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска(); - ЗаполнитьЗначенияСвойств(ПараметрыВыполнения, Команда); - + + ПараметрыВыполнения = ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска(Команда); + ЭталонныеДопПараметры = ЭталонныйЭлемент.ДополнительныеПараметры; Если ТипЗнч(ЭталонныеДопПараметры) = Тип("Структура") Тогда Для Каждого КлючИЗначение Из ЭталонныеДопПараметры Цикл ПараметрыВыполнения.ДополнительныеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; КонецЕсли; - - НовыйЭлемент = Новый ЭлементПланаГлобальногоПоиска(ЭталонныйЭлемент.ИмяПроцедуры, ЭталонныйЭлемент.Модуль, + + НовыйЭлемент = Новый ЭлементПланаГлобальногоПоиска(ЭталонныйЭлемент.ИмяПроцедуры, ЭталонныйЭлемент.Модуль, ЭталонныйЭлемент.НаСервере, ЭталонныйЭлемент.Фоновый, ЭталонныйЭлемент.Порядок, ПараметрыВыполнения); - + Команда.ПланПоиска.Добавить(НовыйЭлемент); - + КонецПроцедуры -// Метод плана глобального поиска для вывода подчиненных команд пользователю +// Описание оповещения. // // Параметры: -// СтрокаПоиска - Строка - Строка, по которой выполняется поиск. -// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска. -// ОписаниеКоманды - см. РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска -Процедура ГлобальныйПоискВывестиПодчиненныеКоманды(СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды) Экспорт - - ПараметрыПоиска = ПараметрыРасширенногоГлобальногоПоиска(); - - Для Каждого ПодчиненнаяКоманда Из ОписаниеКоманды.ПорядокКоманд Цикл //см. НоваяКомандаРасширенногоПоиска - - Если НЕ ПодчиненнаяКоманда.Использование ИЛИ НЕ ПодчиненнаяКоманда.ОтображатьВМеню Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(ПодчиненнаяКоманда.ОткрываемоеЗначение) Тогда - Значение = ПодчиненнаяКоманда.ОткрываемоеЗначение; - ВидПоиска = СтандартныйВидГлобальногоПоиска.НавигационнаяСсылка; //СтандартныйВидГлобальногоПоиска, Строка - Иначе - Значение = ПодчиненнаяКоманда; - ВидПоиска = ПараметрыПоиска.КлючВидаПоискаВыбораКоманды; - КонецЕсли; +// ДанныеОписания - Неопределено +// - ОписаниеОповещения +// - см. РГП_ГлобальныйПоискСервер.ОписаниеОповещения +// +// Возвращаемое значение: +// - ОписаниеОповещения +// - Неопределено +Функция ОписаниеОповещения(Знач ДанныеОписания) Экспорт + + Если ТипЗнч(ДанныеОписания) = Тип("ОписаниеОповещения") Тогда + + ОписаниеОповещения = ДанныеОписания; + + ИначеЕсли РГП_ГлобальныйПоискКлиентСервер.ЗначениеСоответствуетШаблону( + ДанныеОписания, РГП_ГлобальныйПоискКлиентСервер.ОписаниеОповещения()) Тогда + + ДанныеОписания = ДанныеОписания; //см. РГП_ГлобальныйПоискКлиентСервер.ОписаниеОповещения - РезультатыПоиска.Добавить(Значение, ПодчиненнаяКоманда.Представление, - ПодчиненнаяКоманда.Картинка, ВидПоиска, ПодчиненнаяКоманда.Описание); + ОбщийМодульМетода = ОбщийМодуль(ДанныеОписания.Модуль); - КонецЦикла; - - РГП_ГлобальныйПоискКлиентПереопределяемый.Модуль().ПослеВыводаПодчиненныхКомандГлобальногоПоиска( - СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды); - -КонецПроцедуры + Если ЗначениеЗаполнено(ДанныеОписания.ИмяПроцедурыОбработкиОшибки) Тогда + + ОбщийМодульОбработкиОшибки = ОбщийМодуль(ДанныеОписания.МодульОбработкиОшибки); + + ОписаниеОповещения = Новый ОписаниеОповещения( + ДанныеОписания.ИмяПроцедуры, ОбщийМодульМетода, ДанныеОписания.ДополнительныеПараметры, + ДанныеОписания.ИмяПроцедурыОбработкиОшибки, ОбщийМодульОбработкиОшибки); + + Иначе + + ОписаниеОповещения = Новый ОписаниеОповещения( + ДанныеОписания.ИмяПроцедуры, ОбщийМодульМетода, ДанныеОписания.ДополнительныеПараметры); + + КонецЕсли; -#КонецОбласти + Иначе -#Область СлужебныеПроцедурыИФункции + ОписаниеОповещения = Неопределено; -// Упорядоченная коллекция команд расширенного глобального поиска. -// Нужна для правильного порядка вывода команд пользователю + КонецЕсли; + + Возврат ОписаниеОповещения; + +КонецФункции + +// Параметры выполнения команды расширенного глобального поиска. +// +// Параметры: +// ОписаниеКоманды - см. НоваяКомандаРасширенногоПоиска // // Возвращаемое значение: -// Массив из см. НоваяКомандаРасширенногоПоиска -Функция УпорядоченнаяКоллекцияКомандРасширенногоГлобальногоПоиска() +// см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +Функция ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска(ОписаниеКоманды) Экспорт - Возврат Новый Массив; + ПараметрыВыполнения = РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска(); + ЗаполнитьЗначенияСвойств(ПараметрыВыполнения, ОписаниеКоманды); + Возврат ПараметрыВыполнения; КонецФункции -// Иерархическая коллекция команд параметров расширенного глобального поиска. +// Данные результата глобального поиска на основе описания команды. +// +// Параметры: +// ОписаниеКоманды - см. НоваяКомандаРасширенногоПоиска +// ДанныеПоиска - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска // // Возвращаемое значение: -// Соответствие из КлючИЗначение: -// * Ключ - Строка -// * Значение - см. НоваяКомандаРасширенногоПоиска -Функция КоллекцияКомандПараметровРасширенногоГлобальногоПоиска() +// см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +Функция ДанныеРезультатаГлобальногоПоискаНаОсновеОписанияКоманды(ОписаниеКоманды, ДанныеПоиска) Экспорт - Возврат Новый Соответствие; + ДанныеРезультата = РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска(); + ЗаполнитьЗначенияСвойств(ДанныеРезультата, ОписаниеКоманды); + + Если ДанныеРезультата.ОписаниеОповещения = Неопределено + И ДанныеРезультата.ОткрываемоеЗначение = Неопределено Тогда + + РГП_ГлобальныйПоискКлиентСервер.ЗаполнитьПутьПереходаВДанныхРезультата(ДанныеРезультата, ДанныеПоиска); + КонецЕсли; + + Возврат ДанныеРезультата; + КонецФункции +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ЗаполнениеКоманд + // Заполняет стандартные команды расширенного глобального поиска // // Параметры: // ПараметрыПоиска - см. ПараметрыРасширенногоГлобальногоПоиска Процедура ЗаполнитьСтандартныеКомандыРасширенногоГлобальногоПоиска(ПараметрыПоиска) - - ОбщаяКоманда = НоваяКомандаРасширенногоПоиска("\"); - + + ОбщаяКоманда = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "\"); + ЗаполнитьКомандыПоискаМетаданныхРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда); - + + ЗаполнитьКомандыПоискаПоФормамРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда); + ЗаполнитьИнформационныеКомандыРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда); - - ПараметрыПоиска.Команды.Вставить(ОбщаяКоманда.Разделитель, ОбщаяКоманда); - + КонецПроцедуры // Заполняет команды поиска метаданных расширенного глобального поиска @@ -308,92 +696,119 @@ // ПараметрыПоиска - см. ПараметрыРасширенногоГлобальногоПоиска // ОбщаяКоманда - см. НоваяКомандаРасширенногоПоиска Процедура ЗаполнитьКомандыПоискаМетаданныхРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда) - - ЭлементПланаПоиска = Новый ЭлементПланаГлобальногоПоиска( - "ГлобальныйПоискМетаданные", "РГП_ГлобальныйПоискСервер", Истина, Ложь); - - КомандаПоискаМетаданных = НоваяКомандаРасширенногоПоиска("М", ОбщаяКоманда); + + ЭлементПланаПоиска = Новый ЭлементПланаГлобальногоПоиска("ГлобальныйПоискМетаданные", "РГП_ГлобальныйПоискСервер", + Истина, Ложь); + + КомандаПоискаМетаданных = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "М", ОбщаяКоманда); КомандаПоискаМетаданных.Представление = "Поиск по метаданным"; КомандаПоискаМетаданных.Описание = "Поиск по именам, синонимам, представлениям и подсказкам"; КомандаПоискаМетаданных.Картинка = БиблиотекаКартинок.ПоискДанных; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоискаМетаданных, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Все", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Все", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Все"; КомандаПоиска.Описание = "Поиск по всем объектам метаданных"; КомандаПоиска.Картинка = БиблиотекаКартинок.ПоискДанных; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Спр", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Спр", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Справочники"; КомандаПоиска.Картинка = БиблиотекаКартинок.Справочник; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Док", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Док", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Документы"; КомандаПоиска.Картинка = БиблиотекаКартинок.Документ; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("ЖД", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "ЖД", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Журналы документов"; КомандаПоиска.Картинка = БиблиотекаКартинок.ЖурналДокументов; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Отч", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Отч", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Отчеты"; КомандаПоиска.Картинка = БиблиотекаКартинок.Отчет; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Обр", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Обр", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Обработки"; КомандаПоиска.Картинка = БиблиотекаКартинок.Обработка; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("РС", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "РС", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Регистры сведений"; КомандаПоиска.Картинка = БиблиотекаКартинок.РегистрСведений; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("РН", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "РН", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Регистры накопления"; КомандаПоиска.Картинка = БиблиотекаКартинок.РегистрНакопления; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("РБ", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "РБ", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Регистры бухгалтерии"; КомандаПоиска.Картинка = БиблиотекаКартинок.РегистрБухгалтерии; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("БП", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "БП", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Бизнес процессы"; КомандаПоиска.Картинка = БиблиотекаКартинок.БизнесПроцесс; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("Здч", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Здч", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Задачи"; КомандаПоиска.Картинка = БиблиотекаКартинок.Задача; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("ПВР", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "ПВР", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Планы видов расчета"; КомандаПоиска.Картинка = БиблиотекаКартинок.ПланВидовРасчета; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("ПВХ", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "ПВХ", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Планы видов характеристик"; КомандаПоиска.Картинка = БиблиотекаКартинок.ПланВидовХарактеристик; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("ПО", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "ПО", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Планы обмена"; КомандаПоиска.Картинка = БиблиотекаКартинок.ПланОбмена; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("ПС", КомандаПоискаМетаданных); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "ПС", КомандаПоискаМетаданных); КомандаПоиска.Представление = "Планы счетов"; КомандаПоиска.Картинка = БиблиотекаКартинок.ПланСчетов; ДобавитьВКомандуЭлементПланаПоиска(КомандаПоиска, ЭлементПланаПоиска); - + +КонецПроцедуры + +// Заполняет команды поиска по формам +// +// Параметры: +// ПараметрыПоиска - см. ПараметрыРасширенногоГлобальногоПоиска +// ОбщаяКоманда - см. НоваяКомандаРасширенногоПоиска +Процедура ЗаполнитьКомандыПоискаПоФормамРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда) + + ЭлементПланаПоискаФорм = Новый ЭлементПланаГлобальногоПоиска( + "ГлобальныйПоискПоОткрытымОкнам", "РГП_ГлобальныйПоискКлиент", Ложь, Ложь); + + ЭлементПланаПоискаЭлементов = Новый ЭлементПланаГлобальногоПоиска( + "ГлобальныйПоискПоЭлементамФормы", "РГП_ГлобальныйПоискКлиент", Ложь, Ложь); + + ОсновнаяКоманда = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Формы", ОбщаяКоманда); + ОсновнаяКоманда.Представление = "Поиск по формам"; + ОсновнаяКоманда.Картинка = БиблиотекаКартинок.Форма; + ДобавитьВКомандуЭлементПланаПоиска(ОсновнаяКоманда, ЭлементПланаПоискаФорм); + + КомандаЭлементы = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Э", ОсновнаяКоманда); + КомандаЭлементы.Представление = "Элементы"; + КомандаЭлементы.Картинка = БиблиотекаКартинок.ПоказатьДанные; + КомандаЭлементы.ВозможныПараметры = Истина; + КомандаЭлементы.ОтображатьВМеню = Ложь; + ДобавитьВКомандуЭлементПланаПоиска(КомандаЭлементы, ЭлементПланаПоискаЭлементов); + КонецПроцедуры // Заполняет информационные команды расширенного глобального поиска @@ -402,16 +817,192 @@ // ПараметрыПоиска - см. ПараметрыРасширенногоГлобальногоПоиска // ОбщаяКоманда - см. НоваяКомандаРасширенногоПоиска Процедура ЗаполнитьИнформационныеКомандыРасширенногоГлобальногоПоиска(ПараметрыПоиска, ОбщаяКоманда) - - ИнформационнаяКоманда = НоваяКомандаРасширенногоПоиска("Инфо", ОбщаяКоманда); + + ИнформационнаяКоманда = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "Инфо", ОбщаяКоманда); ИнформационнаяКоманда.Представление = "О расширении глобального поиска"; ИнформационнаяКоманда.Картинка = БиблиотекаКартинок.Информация; - - КомандаПоиска = НоваяКомандаРасширенногоПоиска("github", ИнформационнаяКоманда); + + КомандаПоиска = НоваяКомандаРасширенногоПоиска(ПараметрыПоиска, "github", ИнформационнаяКоманда); КомандаПоиска.Представление = "Открыть репозиторий"; КомандаПоиска.Картинка = БиблиотекаКартинок.РГП_GitHub; КомандаПоиска.ОткрываемоеЗначение = "https://github.com/SeiOkami/AdvancedGlobalSearchOneS"; + +КонецПроцедуры + +#КонецОбласти + +#Область ОписанияТипов + +// Упорядоченная коллекция команд расширенного глобального поиска. +// Нужна для правильного порядка вывода команд пользователю +// +// Возвращаемое значение: +// Массив из см. НоваяКомандаРасширенногоПоиска +Функция УпорядоченнаяКоллекцияКомандРасширенногоГлобальногоПоиска() + + Возврат Новый Массив; + +КонецФункции + +// Иерархическая коллекция команд параметров расширенного глобального поиска. +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - см. НоваяКомандаРасширенногоПоиска +Функция КоллекцияКомандПараметровРасширенногоГлобальногоПоиска() + + Возврат Новый Соответствие; + +КонецФункции + +// Коллекция всех команд по полному ключу +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - см. НоваяКомандаРасширенногоПоиска +Функция КоллекцияВсехКомандПараметровРасширенногоГлобальногоПоиска() + + Возврат Новый Соответствие; + +КонецФункции + +#КонецОбласти + +#Область Обработчики + +// Общие параметры выполнения глобального поиска по открытым окнам. +// +// Параметры: +// СтрокаПоиска - см. ГлобальныйПоискПоОткрытымОкнам.СтрокаПоиска +// РезультатыПоиска - см. ГлобальныйПоискПоОткрытымОкнам.РезультатыПоиска +// ОписаниеКоманды - см. ГлобальныйПоискПоОткрытымОкнам.ОписаниеКоманды +// +// Возвращаемое значение: +// Структура - Общие параметры выполнения глобального поиска по открытым окнам: +// * ДанныеВыполнения - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска +// * ВыводВсехДанных - Булево - Выводить ли все окна или искать среди них +// * КартинкаФорма - Картинка - Картинка для форм +// * КартинкаЗакрыть - Картинка - Картинка для команды закрытия +// * КартинкаОткрыть - Картинка - Картинка для команды открытия +// * КартинкаДанные - Картинка - Картинка для команды инспектирования +// * ОповещениеОткрытие - ОписаниеОповещения - Оповещение для открытия формы +// * ОповещениеЗакрытие - ОписаниеОповещения - Оповещение для закрытия формы +// * РезультатыПоиска - см. ГлобальныйПоискПоОткрытымОкнам.РезультатыПоиска +Функция ОбщиеПараметрыВыполненияГлобальногоПоискаПоОткрытымОкнам(СтрокаПоиска, РезультатыПоиска, ОписаниеКоманды) + + ОбщиеПараметры = Новый Структура; + ОбщиеПараметры.Вставить("ДанныеВыполнения", + РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска(ОписаниеКоманды, СтрокаПоиска)); + ОбщиеПараметры.Вставить("ВыводВсехДанных", НЕ ЗначениеЗаполнено(ОбщиеПараметры.ДанныеВыполнения.СловаПоиска)); + + ОбщиеПараметры.Вставить("КартинкаФорма", БиблиотекаКартинок.Форма); + ОбщиеПараметры.Вставить("КартинкаЗакрыть", БиблиотекаКартинок.Закрыть); + ОбщиеПараметры.Вставить("КартинкаОткрыть", БиблиотекаКартинок.ПолеВводаОткрыть); + ОбщиеПараметры.Вставить("КартинкаДанные", БиблиотекаКартинок.ПоказатьДанные); + + ОбщиеПараметры.Вставить("ОповещениеОткрытие", Новый ОписаниеОповещения("АктивироватьФорму", ЭтотОбъект)); + ОбщиеПараметры.Вставить("ОповещениеЗакрытие", Новый ОписаниеОповещения("ЗакрытьФорму", ЭтотОбъект)); + + ОбщиеПараметры.Вставить("РезультатыПоиска", РезультатыПоиска); + + Возврат ОбщиеПараметры; + +КонецФункции + +// Глобальный поиск по открытым окнам добавить результат. +// +// Параметры: +// ОбщиеПараметры - см. ОбщиеПараметрыВыполненияГлобальногоПоискаПоОткрытымОкнам +// Форма - ФормаКлиентскогоПриложения +// ПредставлениеРезультата - Строка +Процедура ГлобальныйПоискПоОткрытымОкнам_ДобавитьРезультат(ОбщиеПараметры, Форма, ПредставлениеРезультата) + + ДанныеРезультатаОткрытие = ДанныеРезультатаНаОсновеДанныхВыполнения(ОбщиеПараметры.ДанныеВыполнения); + ДанныеРезультатаОткрытие.ДополнительныеПараметры.Вставить("Форма", Форма); + ДанныеРезультатаОткрытие.ОписаниеОповещения = ОбщиеПараметры.ОповещениеОткрытие; + ЭлементРезультата = РГП_ГлобальныйПоискКлиентСервер.ЭлементРезультатаГлобальногоПоиска( + ДанныеРезультатаОткрытие, ПредставлениеРезультата, ОбщиеПараметры.КартинкаФорма); + + ЭлементРезультата.Действия.Добавить(ДанныеРезультатаОткрытие, "Открыть", ОбщиеПараметры.КартинкаОткрыть); + + ДанныеРезультатаЗакрытие = ДанныеРезультатаНаОсновеДанныхВыполнения(ОбщиеПараметры.ДанныеВыполнения); + ДанныеРезультатаЗакрытие.ДополнительныеПараметры.Вставить("Форма", Форма); + ДанныеРезультатаЗакрытие.ОписаниеОповещения = ОбщиеПараметры.ОповещениеЗакрытие; + ЭлементРезультата.Действия.Добавить(ДанныеРезультатаЗакрытие, "Закрыть", ОбщиеПараметры.КартинкаЗакрыть); + + ДанныеРезультатаИнспектировать = ДанныеРезультатаНаОсновеДанныхВыполнения(ОбщиеПараметры.ДанныеВыполнения); + РГП_ГлобальныйПоискКлиентСервер.ЗаполнитьПутьПереходаВДанныхРезультата( + ДанныеРезультатаИнспектировать, ОбщиеПараметры.ДанныеВыполнения, "Э", Форма.УникальныйИдентификатор); + ЭлементРезультата.Действия.Добавить(ДанныеРезультатаИнспектировать, "Элементы", ОбщиеПараметры.КартинкаДанные); + + ОбщиеПараметры.РезультатыПоиска.Добавить(ЭлементРезультата); КонецПроцедуры #КонецОбласти + +#Область Вспомогательные + +// Форма по уникальному идентификатору. +// +// Параметры: +// ИдентификаторФормы - Строка, УникальныйИдентификатор - +// +// Возвращаемое значение: +// Неопределено, ФормаКлиентскогоПриложения - +Функция ФормаПоУникальномуИдентификатору(ИдентификаторФормы) + + Попытка + ИдентификаторФормы = Новый УникальныйИдентификатор(ИдентификаторФормы); + Исключение + Возврат Неопределено;//Это не УИД; + КонецПопытки; + + Для Каждого Окно Из ПолучитьОкна() Цикл + + Для Каждого Форма Из Окно.Содержимое Цикл //ФормаКлиентскогоПриложения + + Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") + И Форма.УникальныйИдентификатор = ИдентификаторФормы Тогда + Возврат Форма; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +//см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаНаОсновеДанныхВыполнения +Функция ДанныеРезультатаНаОсновеДанныхВыполнения(ДанныеВыполнения) + + Возврат РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаНаОсновеДанныхВыполнения(ДанныеВыполнения); + +КонецФункции + +// Общий модуль. +// +// Параметры: +// ИмяИлиМодуль - ОбщийМодуль, Строка - Имя или модуль +// +// Возвращаемое значение: +// ОбщийМодуль +Функция ОбщийМодуль(ИмяИлиМодуль) + + Если ТипЗнч(ИмяИлиМодуль) = Тип("Строка") Тогда + ВременнаяСтруктура = Новый Структура; + ВременнаяСтруктура.Вставить(ИмяИлиМодуль); //Проверка на корректную строку + Возврат Вычислить(ИмяИлиМодуль); //ОбщийМодуль + Иначе + Возврат ИмяИлиМодуль; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" index 29f6269..76fc05d 100644 --- "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" +++ "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" @@ -2,12 +2,54 @@ #Область СлужебныйПрограммныйИнтерфейс +// Значение соответствует шаблону. +// +// Параметры: +// Значение - Произвольный +// - Структура из КлючИЗначение: +// * Ключ - Строка +// Шаблон - Произвольный +// - Структура из КлючИЗначение: +// * Ключ - Строка +// +// Возвращаемое значение: +// Булево +Функция ЗначениеСоответствуетШаблону(Значение, Шаблон) Экспорт + + Соответствует = Истина; + + ТипЗначения = ТипЗнч(Значение); + Если ТипЗначения <> ТипЗнч(Шаблон) Тогда + + Соответствует = Ложь; + + ИначеЕсли ТипЗначения = Тип("Структура") Тогда + + Если Шаблон.Количество() <> Значение.Количество() Тогда + Соответствует = Ложь; + Иначе + Для Каждого КлючИЗначение Из Шаблон Цикл + Если НЕ Значение.Свойство(КлючИЗначение.Ключ) Тогда + Соответствует = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Возврат Соответствует; + +КонецФункции + // Параметры выполнения команды расширенного глобального поиска. +// Значения наследуются из РГП_ГлобальныйПоискКлиент.НоваяКомандаРасширенногоПоиска // // Возвращаемое значение: // Структура - Параметры выполнения команды расширенного глобального поиска: // * Ключ - Строка // * Разделитель - Строка +// * ВозможныПараметры - Булево // * ПолныйКлюч - Строка // * ДополнительныеПараметры - Структура из КлючИЗначение: // ** Ключ - Строка @@ -17,6 +59,7 @@ ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("Ключ", ""); ПараметрыВыполнения.Вставить("Разделитель", ""); + ПараметрыВыполнения.Вставить("ВозможныПараметры", Ложь); ПараметрыВыполнения.Вставить("ПолныйКлюч", ""); ПараметрыВыполнения.Вставить("ДополнительныеПараметры", Новый Структура); @@ -24,4 +67,289 @@ КонецФункции +// Описание оповещения. +// +// Параметры: +// ИмяПроцедуры - Строка, Неопределено - Имя экспортируемой процедуры модуля, которая будет вызвана. +// Модуль - ОбщийМодуль, Строка - Программный модуль, процедура которого будет вызвана +// ДополнительныеПараметры - Неопределено, Произвольный - Значение любого типа, которое при вызове будет передано в указанную процедуру последним параметром. +// ИмяПроцедурыОбработкиОшибки - Строка - Имя экспортируемой процедуры модуля, которая будет вызвана в случае возникновения ошибки. +// МодульОбработкиОшибки - ОбщийМодуль, Строка, Неопределено - Программный модуль, процедура которого будет вызвана в случае возникновения ошибки. При использовании типа ФормаКлиентскогоПриложения будет вызван метод модуля указанной формы клиентского приложения. При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса. При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля. +// +// Возвращаемое значение: +// Структура - Описание оповещения: +// * ИмяПроцедуры - см. ОписаниеОповещения.ИмяПроцедуры +// * Модуль - см. ОписаниеОповещения.Модуль +// * ДополнительныеПараметры - см. ОписаниеОповещения.ДополнительныеПараметры +// * ИмяПроцедурыОбработкиОшибки - см. ОписаниеОповещения.ИмяПроцедурыОбработкиОшибки +// * МодульОбработкиОшибки - см. ОписаниеОповещения.МодульОбработкиОшибки +Функция ОписаниеОповещения(ИмяПроцедуры = "", Модуль = "", ДополнительныеПараметры = Неопределено, + ИмяПроцедурыОбработкиОшибки = "", МодульОбработкиОшибки = "") Экспорт //@skip-check method-too-many-params + + ОписаниеОповещения = Новый Структура; + ОписаниеОповещения.Вставить("ИмяПроцедуры", ИмяПроцедуры); + ОписаниеОповещения.Вставить("Модуль", Модуль); + ОписаниеОповещения.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + ОписаниеОповещения.Вставить("ИмяПроцедурыОбработкиОшибки", ИмяПроцедурыОбработкиОшибки); + ОписаниеОповещения.Вставить("МодульОбработкиОшибки", МодульОбработкиОшибки); + + //@skip-check constructor-function-return-section - баг ЕДТ + Возврат ОписаниеОповещения; + +КонецФункции + +// Данные результата глобального поиска. +// +// Возвращаемое значение: +// Структура: +// * Ключ - Строка - Ключ команды +// * ПолныйКлюч - Строка - Полный ключ команды +// * Разделитель - Строка - Разделитель команд +// * ОткрываемоеЗначение - Неопределено, Произвольный - Значение, которое необходимо открыть +// * ПутьПерехода - Строка - Полный путь перехода по глобальному поиску +// * ОписаниеОповещения - Неопределено +// - ОписаниеОповещения +// - см. ОписаниеОповещения +// * ДополнительныеПараметры - Структура из КлючИЗначение - : +// ** Ключ - Строка +// ** Значение - Произвольный +Функция ДанныеРезультатаГлобальногоПоиска() Экспорт + + Результат = Новый Структура; + + //Идентификация команды + Результат.Вставить("Ключ", ""); + Результат.Вставить("ПолныйКлюч", ""); + Результат.Вставить("Разделитель", ""); + + //Выполняемое действие + Результат.Вставить("ОткрываемоеЗначение", Неопределено); + Результат.Вставить("ПутьПерехода", ""); + Результат.Вставить("ОписаниеОповещения", Неопределено); + + //Дополнительные параметры + Результат.Вставить("ДополнительныеПараметры", Новый Структура); + + Возврат Результат; + +КонецФункции + +// Данные результата глобального поиска на основе описания команды. +// +// Параметры: +// ДанныеВыполнения - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска +// +// Возвращаемое значение: +// см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +Функция ДанныеРезультатаНаОсновеДанныхВыполнения(ДанныеВыполнения) Экспорт + + Возврат ДанныеРезультатаНаОсновеПараметрыВыполнения(ДанныеВыполнения.ПараметрыВыполнения); + +КонецФункции + +// Данные результата глобального поиска на основе описания команды. +// +// Параметры: +// ПараметрыВыполнения - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +// +// Возвращаемое значение: +// см. РГП_ГлобальныйПоискКлиентСервер.ДанныеРезультатаГлобальногоПоиска +Функция ДанныеРезультатаНаОсновеПараметрыВыполнения(ПараметрыВыполнения) Экспорт + + ДанныеРезультата = ДанныеРезультатаГлобальногоПоиска(); + ЗаполнитьЗначенияСвойств(ДанныеРезультата, ПараметрыВыполнения, "Ключ,ПолныйКлюч,Разделитель"); + + Возврат ДанныеРезультата; + +КонецФункции + +// Заполнить путь перехода в данных результата. +// +// Параметры: +// ДанныеРезультата - см. ДанныеРезультатаГлобальногоПоиска +// ДанныеПоиска - см. ДанныеПоискаКомандыГлобальногоПоиска +// КлючКоманды - Строка +// ПараметрыКоманды - Массив из Произвольный +// - Произвольный +// - Неопределено +// +Процедура ЗаполнитьПутьПереходаВДанныхРезультата(ДанныеРезультата, ДанныеПоиска, КлючКоманды = "", ПараметрыКоманды = Неопределено) Экспорт + + ЧастиСтроки = Новый Массив; //Массив из Строка + + Если ЗначениеЗаполнено(КлючКоманды) Тогда + ЧастиСтроки.Добавить(КлючКоманды); + КонецЕсли; + + Для Каждого ПараметрКоманды Из ДанныеПоиска.ПараметрыКоманды Цикл + ЧастиСтроки.Добавить(ПараметрКоманды); + КонецЦикла; + + Если ТипЗнч(ПараметрыКоманды) = Тип("Массив") Тогда + Для Каждого ПараметрКоманды Из ПараметрыКоманды Цикл + ЧастиСтроки.Добавить(Строка(ПараметрКоманды)); + КонецЦикла; + ИначеЕсли ПараметрыКоманды <> Неопределено Тогда + ЧастиСтроки.Добавить(Строка(ПараметрыКоманды)); + КонецЕсли; + + ЧастиСтроки.Добавить(ДанныеПоиска.СтрокаПоиска); + + ДанныеРезультата.ПутьПерехода = ДанныеРезультата.ПолныйКлюч + СтрСоединить(ЧастиСтроки, ДанныеРезультата.Разделитель); + +КонецПроцедуры + +// Данные для выполнения команды расширенного глобального поиска. +// +// Параметры: +// ПараметрыВыполнения - см. ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +// СтрокаПоиска - Строка +// +// Возвращаемое значение: +// Структура - Данные для выполнения команды расширенного глобального поиска: +// * ПараметрыВыполнения - см. ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска +// * ПараметрыКоманды - Массив из Строка - Параметры, переданные после имени команды с использованием разделителя +// * ПолныйКлючСКомандами - Строка - Полный ключ команды, включая параметры +// * СтрокаПоиска - Строка - Строка поиска с вырезанным ключем команды +// * СтрокаПоискаВрег - Строка - СтрокаПоиска в верхнем регистре +// * СловаПоиска - Массив из Строка - СтрокаПоискаВрег разбитая на слова +// * МаксимальныйПриоритет - Число - Максимальный приоритет, устанавливаемый для идеального совпадения по строке поиска +// * ЛимитСтрокРезультата - Число - Максимальное число выводимых строк результата +Функция ДанныеПоискаКомандыГлобальногоПоиска(ПараметрыВыполнения, Знач СтрокаПоиска) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + Результат.Вставить("ПараметрыКоманды", Новый Массив); + Результат.Вставить("ПолныйКлючСКомандами", ПараметрыВыполнения.ПолныйКлюч); + СтрокаПоиска = СокрЛП(Сред(СтрокаПоиска, СтрДлина(ПараметрыВыполнения.ПолныйКлюч) + 1)); + + Если ПараметрыВыполнения.ВозможныПараметры Тогда + ПараметрыКоманды = СтрРазделить(СтрокаПоиска, ПараметрыВыполнения.Разделитель); + ГраницаПараметров = ПараметрыКоманды.ВГраница(); + Если ГраницаПараметров > 0 Тогда + СтрокаПоиска = ПараметрыКоманды.Получить(ГраницаПараметров); + ПараметрыКоманды.Удалить(ГраницаПараметров); + Результат.ПараметрыКоманды = ПараметрыКоманды; + Результат.ПолныйКлючСКомандами = СтрШаблон("%1%2%3", Результат.ПолныйКлючСКомандами, + СтрСоединить(Результат.ПараметрыКоманды, ПараметрыВыполнения.Разделитель), ПараметрыВыполнения.Разделитель); + КонецЕсли; + КонецЕсли; + + Результат.Вставить("СтрокаПоиска", СтрокаПоиска); + Результат.Вставить("СтрокаПоискаВрег", ВРег(Результат.СтрокаПоиска)); + Результат.Вставить("СловаПоиска", СтрРазделить(Результат.СтрокаПоискаВрег, " .\/", Ложь)); + Результат.Вставить("МаксимальныйПриоритет", 999); + Результат.Вставить("ЛимитСтрокРезультата", 33); + + Возврат Результат; + +КонецФункции + +// Ключ вида расширенного глобального поиска. +// По нему определяем, что при нажатии нужно выполнять свою логику +// +// Возвращаемое значение: +// Строка +Функция КлючВидаРасширенногоГлобальногоПоиска() Экспорт + + Возврат "РГП_РасширенныйГлобальныйПоиск"; + +КонецФункции + +// Новый элемент результата глобального поиска. +// +// Параметры: +// ДанныеРезультата - см. ДанныеРезультатаГлобальногоПоиска +// Представление - Строка - Представление +// Картинка - Неопределено, Картинка - Картинка +// Описание - Строка - Описание +// ВидПоиска - Неопределено, Строка, СтандартныйВидГлобальногоПоиска - Вид поиска +// +// Возвращаемое значение: +// ЭлементРезультатаГлобальногоПоиска +Функция ЭлементРезультатаГлобальногоПоиска(ДанныеРезультата, Представление, + Картинка = Неопределено, Описание = "", Знач ВидПоиска = Неопределено) Экспорт + + Если ВидПоиска = Неопределено Тогда + ВидПоиска = КлючВидаРасширенногоГлобальногоПоиска(); + КонецЕсли; + + Возврат Новый ЭлементРезультатаГлобальногоПоиска(ДанныеРезультата, Представление, Картинка, ВидПоиска, Описание); + +КонецФункции + +// Добавить элемент результата команда ввода строки на основе данных поиска. +// +// Параметры: +// РезультатыПоиска - РезультатГлобальногоПоиска - Выходной параметр. Содержит результаты поиска. +// ДанныеПоиска - см. ДанныеПоискаКомандыГлобальногоПоиска +// Представление - Строка - Представление в заголовке поля ввода +Процедура ДобавитьЭлементРезультатаКомандаВводаСтрокиНаОсновеДанныхПоиска( + РезультатыПоиска, ДанныеПоиска, Представление = "Введите строку для поиска") Экспорт + + РезультатыПоиска.Добавить( + ЭлементРезультатаКомандаВводаСтрокиНаОсновеДанныхПоиска(ДанныеПоиска, Представление)); + +КонецПроцедуры + +// Элемент результата команда ввода строки в конце поля поиска. +// +// Параметры: +// ДанныеПоиска - см. ДанныеПоискаКомандыГлобальногоПоиска +// Представление - Строка - Представление в заголовке поля ввода +// +// Возвращаемое значение: +// ЭлементРезультатаГлобальногоПоиска +Функция ЭлементРезультатаКомандаВводаСтрокиНаОсновеДанныхПоиска(ДанныеПоиска, Представление = "Введите строку для поиска") Экспорт + + Возврат ЭлементРезультатаКомандаВводаСтроки(ДанныеПоиска.ПолныйКлючСКомандами, ДанныеПоиска.СтрокаПоиска, Представление); + +КонецФункции + +// Элемент результата команда ввода строки в конце поля поиска. +// +// Параметры: +// СтрокаПоиска - Строка - Строка поиска, в конце которой будет подставлена введенная строка +// НачальнаяСтрока - Строка - Начальное значение строки, которое будет использовано в качестве начального значения в окне ввода. +// Представление - Строка - Представление в заголовке поля ввода +// +// Возвращаемое значение: +// ЭлементРезультатаГлобальногоПоиска +Функция ЭлементРезультатаКомандаВводаСтроки(СтрокаПоиска, НачальнаяСтрока = "", Представление = "Введите строку для поиска") Экспорт + + ПараметрыМетода = ПараметрыДействияВводаСтроки(СтрокаПоиска, НачальнаяСтрока, Представление); + + ДанныеРезультата = ДанныеРезультатаГлобальногоПоиска(); + ДанныеРезультата.ОписаниеОповещения = ОписаниеОповещения( + "ОтобразитьВводСтроки", "РГП_ГлобальныйПоискКлиент", ПараметрыМетода); + + ЭлементРезультата = ЭлементРезультатаГлобальногоПоиска(ДанныеРезультата, Представление, БиблиотекаКартинок.ПоискДанных); + + Возврат ЭлементРезультата; + +КонецФункции + +// Параметры действия ввода строки. +// +// Параметры: +// СтрокаПоиска - см. ЭлементРезультатаКомандаВводаСтроки.СтрокаПоиска +// НачальнаяСтрока - см. ЭлементРезультатаКомандаВводаСтроки.НачальнаяСтрока +// Представление - см. ЭлементРезультатаКомандаВводаСтроки.Представление +// +// Возвращаемое значение: +// Структура - Параметры действия ввода строки: +// * СтрокаПоиска - см. ЭлементРезультатаКомандаВводаСтроки.СтрокаПоиска +// * НачальнаяСтрока - см. ЭлементРезультатаКомандаВводаСтроки.НачальнаяСтрока +// * Представление - см. ЭлементРезультатаКомандаВводаСтроки.Представление +Функция ПараметрыДействияВводаСтроки(СтрокаПоиска, НачальнаяСтрока, Представление) Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("СтрокаПоиска", СтрокаПоиска); + Параметры.Вставить("Представление", Представление); + Параметры.Вставить("НачальнаяСтрока", НачальнаяСтрока); + + Возврат Параметры; + +КонецФункции + #КонецОбласти diff --git "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" index 7731064..0420fc9 100644 --- "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" +++ "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/CommonModules/\320\240\320\223\320\237_\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272\320\241\320\265\321\200\320\262\320\265\321\200/Module.bsl" @@ -14,7 +14,10 @@ РГП_ГлобальныйПоискСерверПереопределяемый.Модуль().ПередВыполнениемГлобальногоПоискаМетаданных( ПараметрыВыполнения, ИзначальнаяСтрокаПоиска); - + + РГП_ГлобальныйПоискКлиентСервер.ДобавитьЭлементРезультатаКомандаВводаСтрокиНаОсновеДанныхПоиска( + РезультатыПоиска, ПараметрыВыполнения.ДанныеПоиска); + ГлобальныйПоискМетаданные_НайтиПодходящиеМетаданные(ПараметрыВыполнения); ГлобальныйПоискМетаданные_ЗаполнитьРезультатыПоиска(ПараметрыВыполнения, РезультатыПоиска); @@ -29,27 +32,18 @@ // // Возвращаемое значение: // Структура - Параметры выполнения глобального поиска метаданных: -// * СтрокаПоиска - Строка - Строка поиска с вырезанным ключем команды -// * ПараметрыКоманды - см. РГП_ГлобальныйПоискКлиентСервер.ПараметрыВыполненияКомандыРасширенногоГлобальногоПоиска -// * СтрокаПоискаВрег - Строка - СтрокаПоиска в верхнем регистре -// * СловаПоиска - Массив из Строка - СтрокаПоискаВрег разбитая на слова +// * ДанныеПоиска - см. РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска // * СловарьПоиска - см. ШаблонСловаряГлобальногоПоискаМетаданных -// * МаксимальныйПриоритет - Число - Максимальный приоритет, устанавливаемый для идеального совпадения по строке поиска -// * ЛимитСтрокРезультата - Число - Максимальное число выводимых строк результата // * ПодходящиеМетаданные - ТаблицаЗначений - коллекция подходящих под строку поиска метаданных: // ** СтрокаСловаря - СтрокаТаблицыЗначений: см. КоллекцияМетаданныхСловаряГлобальногоПоиска // ** Приоритет - Число - Приоритет вывода. Пользователь первыми будет видеть строки с максимальным значением Функция ПараметрыВыполненияГлобальногоПоискаМетаданных(ИзначальнаяСтрокаПоиска, ПараметрыКоманды) Экспорт ПараметрыВыполнения = Новый Структура(); + ПараметрыВыполнения.Вставить("ДанныеПоиска", + РГП_ГлобальныйПоискКлиентСервер.ДанныеПоискаКомандыГлобальногоПоиска(ПараметрыКоманды, ИзначальнаяСтрокаПоиска)); - ПараметрыВыполнения.Вставить("СтрокаПоиска" , Сред(ИзначальнаяСтрокаПоиска, СтрДлина(ПараметрыКоманды.ПолныйКлюч)+1)); - ПараметрыВыполнения.Вставить("ПараметрыКоманды", ПараметрыКоманды); - ПараметрыВыполнения.Вставить("СтрокаПоискаВрег", ВРег(ПараметрыВыполнения.СтрокаПоиска)); - ПараметрыВыполнения.Вставить("СловаПоиска" , СтрРазделить(ПараметрыВыполнения.СтрокаПоискаВрег, " .\/", Ложь)); ПараметрыВыполнения.Вставить("СловарьПоиска" , СловарьГлобальногоПоискаМетаданных()); - ПараметрыВыполнения.Вставить("МаксимальныйПриоритет", 999); - ПараметрыВыполнения.Вставить("ЛимитСтрокРезультата" , 30); ПодходящиеМетаданные = Новый ТаблицаЗначений; ПодходящиеМетаданные.Колонки.Добавить("СтрокаСловаря", Новый ОписаниеТипов("СтрокаТаблицыЗначений")); @@ -139,8 +133,9 @@ // ПараметрыВыполнения - см. ПараметрыВыполненияГлобальногоПоискаМетаданных Процедура ГлобальныйПоискМетаданные_НайтиПодходящиеМетаданные(ПараметрыВыполнения) - КлючТипа = ПараметрыВыполнения.СловарьПоиска.КлючиТипов.Получить(ВРег(ПараметрыВыполнения.ПараметрыКоманды.Ключ)); - ПустаяСтрокаПоиска = ПустаяСтрока(ПараметрыВыполнения.СтрокаПоиска); + КлючТипа = ПараметрыВыполнения.СловарьПоиска.КлючиТипов.Получить( + ВРег(ПараметрыВыполнения.ДанныеПоиска.ПараметрыВыполнения.Ключ)); + ПустаяСтрокаПоиска = ПустаяСтрока(ПараметрыВыполнения.ДанныеПоиска.СтрокаПоиска); Если КлючТипа = Неопределено Тогда Если ПустаяСтрокаПоиска Тогда @@ -157,7 +152,7 @@ Для Каждого СтрокаСловаря Из ДанныеСловаря Цикл //СтрокаТаблицыЗначений: см. КоллекцияМетаданныхСловаряГлобальногоПоиска Если ПустаяСтрокаПоиска Тогда - Если ПодходящиеМетаданные.Количество() >= ПараметрыВыполнения.ЛимитСтрокРезультата Тогда + Если ПодходящиеМетаданные.Количество() >= ПараметрыВыполнения.ДанныеПоиска.ЛимитСтрокРезультата Тогда Возврат; Иначе ПодходящиеМетаданные.Добавить().СтрокаСловаря = СтрокаСловаря; @@ -177,7 +172,7 @@ // СтрокаСловаря - СтрокаТаблицыЗначений: см. КоллекцияМетаданныхСловаряГлобальногоПоиска Процедура ГлобальныйПоискМетаданные_ОбработатьСтрокуСловаря(ПараметрыВыполнения, СтрокаСловаря) - МаксимальныйПриоритет = ПараметрыВыполнения.МаксимальныйПриоритет; + МаксимальныйПриоритет = ПараметрыВыполнения.ДанныеПоиска.МаксимальныйПриоритет; Приоритет = 0; @@ -189,10 +184,10 @@ Для ИндексСвойства = 0 По ПроверяемыеСвойстваМетаданных.Количество() - 1 Цикл ЗначениеСвойства = ПроверяемыеСвойстваМетаданных[ИндексСвойства]; - Если ЗначениеСвойства = ПараметрыВыполнения.СтрокаПоискаВрег Тогда + Если ЗначениеСвойства = ПараметрыВыполнения.ДанныеПоиска.СтрокаПоискаВрег Тогда Приоритет = МаксимальныйПриоритет; Иначе - НайденнаяКоордината = СтрНайти(ЗначениеСвойства, ПараметрыВыполнения.СтрокаПоискаВрег); + НайденнаяКоордината = СтрНайти(ЗначениеСвойства, ПараметрыВыполнения.ДанныеПоиска.СтрокаПоискаВрег); Если НайденнаяКоордината = 0 Тогда Продолжить; ИначеЕсли НайденнаяКоордината = 1 Тогда @@ -207,7 +202,7 @@ КонецЦикла; Если Приоритет = 0 Тогда - Для Каждого СловоПоиска Из ПараметрыВыполнения.СловаПоиска Цикл + Для Каждого СловоПоиска Из ПараметрыВыполнения.ДанныеПоиска.СловаПоиска Цикл Если СтрНайти(СтрокаСловаря.КлючевыеСлова, СловоПоиска) > 0 Тогда Приоритет = Приоритет + 1; КонецЕсли; @@ -229,7 +224,7 @@ // РезультатыПоиска - см. ГлобальныйПоискМетаданные.РезультатыПоиска Процедура ГлобальныйПоискМетаданные_ЗаполнитьРезультатыПоиска(ПараметрыВыполнения, РезультатыПоиска) - ДоступноРезультатов = ПараметрыВыполнения.ЛимитСтрокРезультата; + ДоступноРезультатов = ПараметрыВыполнения.ДанныеПоиска.ЛимитСтрокРезультата; ПодходящиеМетаданные = ПараметрыВыполнения.ПодходящиеМетаданные; ПодходящиеМетаданные.Сортировать("Приоритет УБЫВ"); diff --git "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/Configuration/ManagedApplicationModule.bsl" "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/Configuration/ManagedApplicationModule.bsl" index 41395e5..34c293b 100644 --- "a/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/Configuration/ManagedApplicationModule.bsl" +++ "b/\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\275\321\213\320\271\320\223\320\273\320\276\320\261\320\260\320\273\321\214\320\275\321\213\320\271\320\237\320\276\320\270\321\201\320\272/src/Configuration/ManagedApplicationModule.bsl" @@ -25,4 +25,12 @@ КонецПроцедуры +//@skip-check not-allowed-pragma - баг ЕДТ +&После("ПриВыбореДействияРезультатаГлобальногоПоиска") +Процедура РГП_ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) + + РГП_ГлобальныйПоискКлиент.ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие); + +КонецПроцедуры + #КонецОбласти