//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Перем КомандыПоиска; Перем дзВсеОбъекты Экспорт; Перем ДеревоПодсистем Экспорт; Перем стНастройки Экспорт; Перем мСписокПолнотекстовогоПоиска; // Глобальный поиск Перем СтатическиеВетки Экспорт; Перем мПлатформа Экспорт; Перем МассивСтатическихВеток; Перем ВеткиМетаданных; Перем RegExp; // Для поиска с помощью регулярных выражений Перем ВерсияПлатфомы Экспорт; Перем ИмяКорневойПодсистемы; Перем ЕстьСправочникВнешнихОбработок Экспорт; Перем мТекущийПользователь Экспорт; Перем ПутьФайлаНастроек; Перем ЕстьУниверсальныйОтчет Экспорт, Есть_РС_СохраненныеНастройки Экспорт; //Перем Есть_СправочникОрганизаций; Перем мСловаСтрокиУмногоПоиска Экспорт, СтрокаУмногоПоискаБезСуффикса Экспорт, СтрокаСуффиксаУмногоПоиска Экспорт, флПробоватьУмныйПоиск Экспорт, ЧислоСуффиксаУмногоПоиска, МассивПрефиксовОрганизаций, ДлинаСуффиксаУмногоПоиска; Перем СоответствиеВидовМетаданныхДляПоискаПолногоИмени Экспорт; Перем мВременныйФильтрИмен Экспорт; /////////////////////////////////////////////////////////////////////////////// Функция СохранитьВыбраннуюСтроку(Форма) ТекСтрока = Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока; Если ТекСтрока = Неопределено тогда Возврат Неопределено; КонецЕсли; стСтрока = Новый Структура("Представление,Уровень,Родитель,Вид,Имя"); стСтрока.Представление = ТекСтрока.Представление; стСтрока.Уровень = ТекСтрока.Уровень(); Если стСтрока.Уровень = 1 тогда стСтрока.Родитель = ТекСтрока.Родитель.Представление; стСтрока.Вид = ТекСтрока.Вид; стСтрока.Имя = ТекСтрока.Имя; КонецЕсли; Возврат стСтрока; КонецФункции // СохранитьВыбраннуюСтроку /////////////////////////////////////////////////////////////////////////////// Функция ВосстановитьВыбраннуюСтроку(стСтрока,Форма) ТекСтрока = Неопределено; Если стСтрока <> Неопределено тогда Если стСтрока.Уровень = 0 тогда ТекСтрока = ДеревоИнтерфейса.Строки.Найти(стСтрока.Представление, "Представление", Ложь); Иначе стрРодитель = ДеревоИнтерфейса.Строки.Найти(стСтрока.Родитель, "Представление", Ложь); Если стрРодитель <> Неопределено тогда стПоиск = Новый Структура("Вид,Имя", стСтрока.Вид, стСтрока.Имя); мСтроки = стрРодитель.Строки.НайтиСтроки(стПоиск, Ложь); Если мСтроки.Количество() > 0 тогда ТекСтрока = мСтроки[0]; Иначе Если стрРодитель.Строки.Количество() > 0 тогда ТекСтрока = стрРодитель.Строки[0]; Иначе ТекСтрока = стрРодитель; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если ТекСтрока <> Неопределено Тогда Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока = ТекСтрока; Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции /////////////////////////////////////////////////////////////////////////////// Функция СохранитьРазвернутыеВетви(Форма) мВетви = Новый Массив; элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса; Для каждого стрВетвь из ДеревоИнтерфейса.Строки цикл // Пропустим статические Если НЕ СтатическиеВетки[стрВетвь] = Неопределено Тогда Продолжить; КонецЕсли; Если элДеревоИнтерфейса.Развернут(стрВетвь) тогда мВетви.Добавить(стрВетвь.Представление); КонецЕсли; КонецЦикла; Возврат мВетви; КонецФункции // СохранитьРазвернутыеВетви /////////////////////////////////////////////////////////////////////////////// Процедура ВосстановитьРазвернутыеВетви(Знач мРазвернутыеВетви, Форма) Экспорт элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса; СтрокиДереваИнтерфейса = ДеревоИнтерфейса.Строки; Для каждого ПредставлениеВетви из мРазвернутыеВетви цикл стрВетвь = СтрокиДереваИнтерфейса.Найти(ПредставлениеВетви, "Представление", Ложь); Если стрВетвь <> Неопределено тогда элДеревоИнтерфейса.Развернуть(стрВетвь); КонецЕсли; КонецЦикла; КонецПроцедуры // ВосстановитьРазвернутыеВетви /////////////////////////////////////////////////////////////////////////////// Процедура ДобавитьОбъект(СтрокиВетви, Знач МетаД, Знач ВидОбъекта, Знач ИндексКартинки) стрСтрока = СтрокиВетви.Добавить(); стрСтрока.Вид = ВеткиМетаданных.НайтиПоЗначению(ВидОбъекта).Представление; стрСтрока.Имя = МетаД.Имя; стрСтрока.Представление = ?(ПустаяСтрока(МетаД.Синоним), МетаД.Имя, МетаД.Синоним); стрСтрока.ИндексКартинки = ИндексКартинки; спПодсистемы = Новый СписокЗначений; //Для каждого Подсистема из МетаД.Подсистемы цикл // ИмяПодсистемы = Подсистема.Имя; // спПодсистемы.Добавить(ИмяПодсистемы); // // стрПодсистема = дзВсеПодсистемы.Строки.Найти(ИмяПодсистемы, "Имя", Истина); // Пока стрПодсистема.Родитель <> Неопределено цикл // стрПодсистема = стрПодсистема.Родитель; // // Если спПодсистемы.НайтиПоЗначению(стрПодсистема.Имя) = Неопределено тогда // спПодсистемы.Добавить(стрПодсистема.Имя); // КонецЕсли; // КонецЦикла; //КонецЦикла; стрСтрока.Подсистемы = спПодсистемы; КонецПроцедуры // ДобавитьОбъект /////////////////////////////////////////////////////////////////////////////// Процедура ДобавитьВетвьМетаданных(Ветвь, Знач ИмяВетви, Знач КартинкаВетви=0, Знач КартинкаОбъекта=0) стрВетвь = дзВсеОбъекты.Строки.Добавить(); стрВетвь.Представление = ИмяВетви; стрВетвь.Имя = стрВетвь.Представление; стрВетвь.ИндексКартинки = КартинкаВетви; СтрокиВетви = стрВетвь.Строки; Для каждого МетаД из Ветвь цикл Попытка ЕстьПраво = ПравоДоступа("Просмотр", МетаД); Исключение Попытка ЕстьПраво = ПравоДоступа("Использование", МетаД); Исключение ЕстьПраво = Ложь; КонецПопытки; КонецПопытки; Если ЕстьПраво Тогда ДобавитьОбъект(СтрокиВетви, МетаД, ИмяВетви, КартинкаОбъекта); КонецЕсли; КонецЦикла; КонецПроцедуры // ДобавитьВетвьМетаданных /////////////////////////////////////////////////////////////////////////////// Процедура ЗаполнитьДеревоВсехОбъектов() Экспорт дзВсеОбъекты = Новый ДеревоЗначений; дзВсеОбъекты.Колонки.Добавить("Имя"); дзВсеОбъекты.Колонки.Добавить("Вид"); дзВсеОбъекты.Колонки.Добавить("Представление"); дзВсеОбъекты.Колонки.Добавить("ИндексКартинки"); дзВсеОбъекты.Колонки.Добавить("Подсистемы"); ДобавитьВетвьМетаданных(Метаданные.ОбщиеФормы, "Общие формы", 6, 7); ДобавитьВетвьМетаданных(Метаданные.Интерфейсы, "Интерфейсы", 54, 55); ДобавитьВетвьМетаданных(Метаданные.Константы, "Константы", 20, 0); ДобавитьВетвьМетаданных(Метаданные.Справочники, "Справочники", 2, 3); стрКорень = дзВсеОбъекты.Строки.Добавить(); стрКорень.Представление = "Документы"; стрКорень.Имя = стрКорень.Представление; стрКорень.ИндексКартинки = 12; СтрокиКорня = стрКорень.Строки; Для каждого МетаД из Метаданные.ЖурналыДокументов цикл Если ПравоДоступа("Просмотр", МетаД) тогда ДобавитьОбъект(СтрокиКорня, МетаД, "Журналы документов", 15); КонецЕсли; КонецЦикла; Для каждого МетаД из Метаданные.Документы цикл Если ПравоДоступа("Просмотр", МетаД) тогда ДобавитьОбъект(СтрокиКорня, МетаД, "Документы", 13); КонецЕсли; КонецЦикла; ДобавитьВетвьМетаданных(Метаданные.ПланыВидовХарактеристик, "Планы видов характеристик", 37, 38); ДобавитьВетвьМетаданных(Метаданные.ПланыСчетов, "Планы счетов", 39, 40); ДобавитьВетвьМетаданных(Метаданные.ПланыВидовРасчета, "Планы видов расчета", 47, 48); ДобавитьВетвьМетаданных(Метаданные.Отчеты, "Отчеты", 23, 24); ДобавитьВетвьМетаданных(Метаданные.Обработки, "Обработки", 18, 19); ДобавитьВетвьМетаданных(Метаданные.РегистрыСведений, "Регистры сведений", 33, 34); ДобавитьВетвьМетаданных(Метаданные.РегистрыНакопления, "Регистры накопления", 31, 32); ДобавитьВетвьМетаданных(Метаданные.РегистрыБухгалтерии, "Регистры бухгалтерии", 41, 42); ДобавитьВетвьМетаданных(Метаданные.Перечисления, "Перечисления", 9, 10); ДобавитьВетвьМетаданных(Метаданные.РегистрыРасчета, "Регистры расчета", 49, 50); ДобавитьВетвьМетаданных(Метаданные.БизнесПроцессы, "Бизнес-процессы", 43, 44); ДобавитьВетвьМетаданных(Метаданные.Задачи, "Задачи", 45, 46); ДобавитьВетвьМетаданных(Метаданные.ПланыОбмена, "Планы обмена", 51, 52); ВыводСодержимогоКаталогов(дзВсеОбъекты); ВыводСохраненныхВнешнихОбработок(дзВсеОбъекты); ВыводСохраненныхНастроекОтчетов(дзВсеОбъекты); СортироватьВторойУровеньДерева(дзВсеОбъекты); КонецПроцедуры // ЗаполнитьДеревоВсехОбъектов Процедура СортироватьВторойУровеньДерева(Дерево) Экспорт ИмяОсновногоПредставления = ПолучитьИмяОсновногоПредставления(); Для каждого стрВетви из Дерево.Строки цикл стрВетви.Строки.Сортировать("Вид УБЫВ, " + ИмяОсновногоПредставления, Ложь); КонецЦикла; КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// Процедура ЗаполнитьДеревоИнтерфейса(Форма) Экспорт стСтрока = СохранитьВыбраннуюСтроку(Форма); мРазвернутыеВетви = СохранитьРазвернутыеВетви(Форма); ДеревоИнтерфейса.Строки.Очистить(); ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма); НачатьФоновыйПоиск(Форма); элДерево = Форма.ЭлементыФормы.ДеревоИнтерфейса; ТекущаяСтрокаУстановлена = ВосстановитьВыбраннуюСтроку(стСтрока, Форма); //Если НЕ (СтатическиеВетки[элДерево.ТекущаяСтрока] = Неопределено) И // элДерево.ТекущаяСтрока.Строки.Количество() > 0 //Тогда // элДерево.ТекущаяСтрока = элДерево.ТекущаяСтрока.Строки[0]; //КонецЕсли; //ВосстановитьРазвернутыеВетви(мРазвернутыеВетви, Форма); ИндексНачальнойСтроки = 4; ЧислоДинамическихСтрок = 0; ТаблицаТиповМетаОбъектов = мПлатформа.ТаблицаТиповМетаОбъектов; Счетчик = 1; Для Индекс = ИндексНачальнойСтроки По ДеревоИнтерфейса.Строки.Количество() - 1 Цикл СтрокаДерева = ДеревоИнтерфейса.Строки[Индекс]; ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(СтрокаДерева); Для Каждого ДочерняяСтрокаДерева Из ВсеСтроки Цикл СтрокаТипаМетаОбъектов = ТаблицаТиповМетаОбъектов.Найти(ДочерняяСтрокаДерева.Вид, "Множественное"); Если Ложь Или СтрокаТипаМетаОбъектов = Неопределено //Или СтрокаТипаМетаОбъектов.Категория <> 0 Тогда Продолжить; КонецЕсли; ДочерняяСтрокаДерева.ПолноеИмяОбъекта = "" + СтрокаТипаМетаОбъектов.Единственное + "." + ДочерняяСтрокаДерева.Имя; ДочерняяСтрокаДерева.Порядок = Счетчик; Счетчик = Счетчик + 1; //ОписаниеТаблицы = ирОбщий.ПолучитьОписаниеТаблицыБДИис(ДочерняяСтрокаДерева.ПолноеИмяОбъекта); //Если Истина // И ОписаниеТаблицы <> Неопределено // И ОписаниеТаблицы.КоличествоСтрок <> Неопределено //Тогда // ирОбщий.ДобавитьКоличествоСтрокРодителюЛкс(ДочерняяСтрокаДерева, ОписаниеТаблицы.КоличествоСтрок); //КонецЕсли; КонецЦикла; СтрокаДерева.Порядок = Счетчик; Счетчик = Счетчик + 1; ЧислоДинамическихСтрок = ЧислоДинамическихСтрок + ВсеСтроки.Количество(); КонецЦикла; //ТекущаяСтрокаУстановлена = ТекущаяСтрокаУстановлена И элДерево.ТекущаяСтрока <> элДерево.Значение.Строки[ИндексНачальнойСтроки]; Если ЧислоДинамическихСтрок > 0 Тогда Если ЧислоДинамическихСтрок <= 30 Тогда ирОбщий.ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(элДерево, ИндексНачальнойСтроки); Если Не ТекущаяСтрокаУстановлена Тогда элДерево.ТекущаяСтрока = элДерево.Значение.Строки[ИндексНачальнойСтроки].Строки[0]; КонецЕсли; Иначе Если Не ТекущаяСтрокаУстановлена Тогда элДерево.ТекущаяСтрока = элДерево.Значение.Строки[ИндексНачальнойСтроки]; КонецЕсли; КонецЕсли; Иначе Если Истина И Не ТекущаяСтрокаУстановлена И НЕ (СтатическиеВетки[элДерево.ТекущаяСтрока] = Неопределено) И элДерево.ТекущаяСтрока.Строки.Количество() > 0 Тогда элДерево.ТекущаяСтрока = элДерево.ТекущаяСтрока.Строки[0]; КонецЕсли; КонецЕсли; //ирОбщий.ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоИнтерфейса); КонецПроцедуры #Если Клиент Тогда Процедура ПрочитатьНастройки() Экспорт стНастройки = ирОбщий.ВосстановитьЗначениеЛкс("ирИнтерфейснаяПанель.Настройки"); Если ТипЗнч(стНастройки) <> Тип("Структура") тогда стНастройки = Новый Структура; КонецЕсли; Если НЕ стНастройки.Свойство("ФильтрПодсистем") тогда стНастройки.Вставить("ФильтрПодсистем"); КонецЕсли; Если НЕ стНастройки.Свойство("ФильтрИмен") тогда стНастройки.Вставить("ФильтрИмен"); КонецЕсли; Если НЕ стНастройки.Свойство("ИсторияФильтраИмен") тогда стНастройки.Вставить("ИсторияФильтраИмен"); стНастройки.ИсторияФильтраИмен = Новый Массив; КонецЕсли; Если НЕ стНастройки.Свойство("РазвернутыеСтроки") тогда стНастройки.Вставить("РазвернутыеСтроки"); стНастройки.РазвернутыеСтроки = Новый Массив; КонецЕсли; Если НЕ стНастройки.Свойство("ВыбраннаяСтрока") тогда стНастройки.Вставить("ВыбраннаяСтрока"); КонецЕсли; Если НЕ стНастройки.Свойство("СтатистикаИспользования") тогда стНастройки.Вставить("СтатистикаИспользования"); тзСтатистикаИспользования = Новый ТаблицаЗначений; тзСтатистикаИспользования.Колонки.Добавить("Вид"); тзСтатистикаИспользования.Колонки.Добавить("Имя"); тзСтатистикаИспользования.Колонки.Добавить("КоличествоИспользований"); тзСтатистикаИспользования.Колонки.Добавить("ПоследнееИспользование"); стНастройки.СтатистикаИспользования = тзСтатистикаИспользования; КонецЕсли; // ДЛя произвольных статических веток Для каждого КлючЗначение Из МассивСтатическихВеток Цикл ИмяКолонки = КлючЗначение.Имя; Если стНастройки.СтатистикаИспользования.Колонки.Найти(ИмяКолонки) = Неопределено Тогда // Эта колонка была добавлена позже, ее может не быть в сохраненных настройках Попытка стНастройки.СтатистикаИспользования.Колонки.Добавить(ИмяКолонки); Исключение КонецПопытки; КонецЕсли; КонецЦикла; Если НЕ стНастройки.Свойство("Каталоги") тогда стНастройки.Вставить("Каталоги", Новый Соответствие); КонецЕсли; /////////////////////////////////////////////////////////////////////////////// // Параметры обработки Если НЕ стНастройки.Свойство("ИсторияКоманд") Тогда стНастройки.Вставить("ИсторияКоманд", ИсторияКоманд); КонецЕсли; Если НЕ стНастройки.Свойство("ИспользоватьРегулярныеВыражения") Тогда стНастройки.Вставить("ИспользоватьРегулярныеВыражения", ИспользоватьРегулярныеВыражения); КонецЕсли; Если стНастройки.ИспользоватьРегулярныеВыражения Тогда RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.MultiLine = Ложь; RegExp.Global = Истина; RegExp.IgnoreCase = Истина; КонецЕсли; // Глобальный поиск Если НЕ стНастройки.Свойство("ПолнотекстовыйПоискПорогНечеткости") Тогда стНастройки.Вставить("ПолнотекстовыйПоискПорогНечеткости",ПолнотекстовыйПоискПорогНечеткости); КонецЕсли; Если НЕ стНастройки.Свойство("ПолнотекстовыйПоискРазмерПорции") Тогда стНастройки.Вставить("ПолнотекстовыйПоискРазмерПорции",ПолнотекстовыйПоискРазмерПорции); КонецЕсли; // Порядок форм Если НЕ стНастройки.Свойство("ПриАвтозапускеОткрыватьФормуСписка") Тогда стНастройки.Вставить("ПриАвтозапускеОткрыватьФормуСписка", ПриАвтозапускеОткрыватьФормуСписка); КонецЕсли; Если НЕ стНастройки.Свойство("флИспользоватьУмныйПоиск") Тогда стНастройки.Вставить("флИспользоватьУмныйПоиск", Ложь); КонецЕсли; Если НЕ стНастройки.Свойство("флИмяСиноним") Тогда стНастройки.Вставить("флИмяСиноним", флИмяСиноним); КонецЕсли; Если НЕ стНастройки.Свойство("флИскатьВПодкаталогах") Тогда стНастройки.Вставить("флИскатьВПодкаталогах", Истина); КонецЕсли; Если НЕ стНастройки.Свойство("флВложенныеПодсистемы") Тогда стНастройки.Вставить("флВложенныеПодсистемы", Истина); КонецЕсли; КонецПроцедуры // ЗагрузитьНастройки Процедура СохранитьНастройки(Форма) Экспорт стНастройки.ФильтрПодсистем = ФильтрПодсистем; стНастройки.ФильтрИмен = ФильтрИмен; стНастройки.РазвернутыеСтроки = СохранитьРазвернутыеВетви(Форма); стНастройки.ВыбраннаяСтрока = СохранитьВыбраннуюСтроку(Форма); мИсторияФильтраИмен = Новый Массив; Для каждого зн из Форма.ЭлементыФормы.ФильтрИмен.СписокВыбора цикл мИсторияФильтраИмен.Добавить(зн.Значение); КонецЦикла; стНастройки.ИсторияФильтраИмен = мИсторияФильтраИмен; ЗаполнитьЗначенияСвойств(стНастройки, ЭтотОбъект); ирОбщий.СохранитьЗначениеЛкс("ирИнтерфейснаяПанель.Настройки", стНастройки); КонецПроцедуры // СохранитьНастройки #КонецЕсли /////////////////////////////////////////////////////////////////////////////// Процедура ОбновитьСтатистикуИспользования(стрОбъект, Форма) Экспорт ТекДата = ТекущаяДата(); тзСтатистикаИспользования = стНастройки.СтатистикаИспользования; стПоиск = Новый Структура("Вид,Имя"); стПоиск.Вид = стрОбъект.Вид; стПоиск.Имя = стрОбъект.Имя; мСтроки = тзСтатистикаИспользования.НайтиСтроки(стПоиск); Если мСтроки.Количество() = 0 тогда стрСтатистика = тзСтатистикаИспользования.Добавить(); стрСтатистика.Вид = стрОбъект.Вид; стрСтатистика.Имя = стрОбъект.Имя; стрСтатистика.КоличествоИспользований = 1; стрСтатистика.ПоследнееИспользование = ТекДата; Иначе стрСтатистика = мСтроки[0]; стрСтатистика.КоличествоИспользований = стрСтатистика.КоличествоИспользований + 1; стрСтатистика.ПоследнееИспользование = ТекДата; КонецЕсли; стНастройки.СтатистикаИспользования = тзСтатистикаИспользования; // Сохраним старую выделенную строку ТекСтрока = Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока; стСтрока = Неопределено; Для каждого СтатическаяВетка Из СтатическиеВетки Цикл Если НЕ (СтатическиеВетки[ТекСтрока.Родитель] = Неопределено) тогда стСтрока = СохранитьВыбраннуюСтроку(Форма); КонецЕсли; КонецЦикла; ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма); // Восстановим старую выделенную строку Если стСтрока <> Неопределено тогда ВосстановитьВыбраннуюСтроку(стСтрока, Форма); КонецЕсли; КонецПроцедуры // ОбновитьСтатистикуИспользования // Добавляет строку в статическую ветку (автозапуск, избранное и т.п.) // // Параметры // СтрокаДерева - строка дерева значений, которую требуется добавить в статическую ветку // Функция ДобавитьСтрокуВСтатическуюВетку(СтрокаДерева, ИмяКолонки) Экспорт тзСтатистикаИспользования = стНастройки.СтатистикаИспользования; СтрокаСтатическойВетки = тзСтатистикаИспользования.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаСтатическойВетки, СтрокаДерева); СтрокаСтатическойВетки[ИмяКолонки] = 1; Возврат СтрокаСтатическойВетки; КонецФункции // // Открывает форму обработки. // Предназначена для автооткрытия формы в 1С при запуске. // Помещаем в табло команду ВнешниеОбработки.Создать("<путь>ip8.epf").Открыть() и при каждом запуске, если окно табло включено, обработка будет запускаться автоматически // Параметры // // Возвращаемое значение: // булево - статус открытия (октрылась или нет) // Функция Открыть() экспорт Форма = ЭтотОбъект.ПолучитьФорму(); Форма.Открыть(); Возврат Форма.Открыта() КонецФункции // Открыть() ////////////////////////////////////////////////////////////////////////////// // проверяет условия с помощью регулярных выражений, // если НЕ ТолькоПроверка - заменяет выражение с помощью шаблона ШаблонЗамены и возвращает в переменной ИтоговаяСтрока Функция ПроверитьУсловие(СтрокаПоиска, ШаблонПоиска, ТолькоПроверка = Истина, ШаблонЗамены = "", ИтоговаяСтрока = "") Экспорт Попытка RegExp.Pattern = ШаблонПоиска; Найдено = RegExp.Test(СтрокаПоиска); Исключение //ирОбщий.СообщитьЛкс(ОписаниеОшибки()); Возврат Ложь; КонецПопытки; Если Не Найдено Или ТолькоПроверка тогда ИтоговаяСтрока = ""; возврат Найдено ; Иначе ИтоговаяСтрока = RegExp.Replace(СтрокаПоиска, ШаблонЗамены); возврат Найдено; КонецЕсли; КонецФункции // ПроверитьУсловие() Функция ПолучитьИмяОсновногоПредставления() Если флИмяСиноним Тогда ИмяКолонкиПредставления = "Имя"; Иначе ИмяКолонкиПредставления = "Представление"; КонецЕсли; Возврат ИмяКолонкиПредставления; КонецФункции /////////////////////////////////////////////////////////////////////////////// Функция ОбъектПроходитФильтры(стрОбъект, Знач СтрокаПоиска = "", ПроверятьПодсистему = Ложь, ОбъектыВыбранныхПодсистем = Неопределено) Если СтрокаПоиска = "" Тогда СтрокаПоиска = мВременныйФильтрИмен; КонецЕсли; // Поиск - по представлению Если ТипЗнч(СтрОбъект) = Тип("СтрокаДереваЗначений") Тогда ИмяКолонкиПредставления = ПолучитьИмяОсновногоПредставления(); Представление = стрОбъект[ИмяКолонкиПредставления]; Иначе // В случае передачи имени файла Представление = стрОбъект; КонецЕсли; МассивФрагментов = ирОбщий.СтрРазделитьЛкс(СтрокаПоиска, " ", Истина); Для Каждого СтрокаПоиска Из МассивФрагментов Цикл // Собственно, поиск по подстроке Если НЕ ПустаяСтрока(СокрЛП(СтрокаПоиска)) Тогда Если Ложь Или (Истина И стНастройки.ИспользоватьРегулярныеВыражения И Не ПроверитьУсловие(Представление, СтрокаПоиска)) // Проверка регулярным выражением Или (Истина И Не стНастройки.ИспользоватьРегулярныеВыражения И Найти(НРег(Представление), НРег(СтрокаПоиска)) = 0) // Проверка обычным поиском Тогда // Полная строка не нашлась, попробуем найти строку без уточняющего суффикса Если флПробоватьУмныйПоиск = Истина Тогда Если Ложь Или (Истина И стНастройки.ИспользоватьРегулярныеВыражения И Не ПроверитьУсловие(Представление, СтрокаУмногоПоискаБезСуффикса)) // Проверка регулярным выражением Или (Истина И Не стНастройки.ИспользоватьРегулярныеВыражения И Найти(НРег(Представление), НРег(СтрокаУмногоПоискаБезСуффикса)) = 0) // Проверка обычным поиском Тогда Возврат Ложь; КонецЕсли Иначе Возврат Ложь; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; // Отбор по подсистемам - самый медленный, оставим его напоследок Если Истина И ПроверятьПодсистему И ФильтрПодсистем.Количество() > 0 Тогда // Убрать мусор, который не относится к подсистемам Если стрОбъект.Вид = "СправочникВнешниеОбработки" Тогда Возврат Ложь; КонецЕсли; Если ирКэш.НомерИзданияПлатформыЛкс() >= "82" Тогда ОбъектМД = Метаданные[стрОбъект.Вид][стрОбъект.Имя]; Если ОбъектыВыбранныхПодсистем[ОбъектМД] = Неопределено тогда Возврат Ложь; КонецЕсли; Иначе Если Не ирОбщий.ЛиСпискиПодсистемПересекаютсяЛкс(ФильтрПодсистем, стрОбъект.Подсистемы) тогда Возврат Ложь; КонецЕсли; КонецЕсли; КонецЕсли; Возврат Истина; КонецФункции // ОбъектПроходитФильтры /////////////////////////////////////////////////////////////////////////////// Процедура ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма, УстановитьТекущуюСтроку = Неопределено) Экспорт Если УстановитьТекущуюСтроку <> Неопределено Тогда ИмяДляУстановкиТекущейСтроки = УстановитьТекущуюСтроку.Имя; КонецЕсли; Если СтатическиеВетки = Неопределено ИЛИ ДеревоИнтерфейса.Строки.Количество() = 0 Тогда СтатическиеВетки = Новый Соответствие(); Для каждого ЭлементМассива Из МассивСтатическихВеток Цикл Если ЭлементМассива.Использовать = Истина Тогда СтрокаКорняСтатическойВетки = ДеревоИнтерфейса.Строки.Добавить(); СтрокаКорняСтатическойВетки.Имя = ЭлементМассива.Имя; СтрокаКорняСтатическойВетки.Представление = ЭлементМассива.Представление; СтатическиеВетки.Вставить(СтрокаКорняСтатическойВетки, ЭлементМассива); КонецЕсли; КонецЦикла; КонецЕсли; элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса; // Для избежания дублей статистику надо свернуть тзСтатистикаИспользования = стНастройки.СтатистикаИспользования; СтрокаКолонокДляСвертки = ""; Для каждого СтатическаяВетка Из СтатическиеВетки Цикл Если СтатическаяВетка.Значение.РазрешитьПеретаскивание = Истина Тогда СтрокаКолонокДляСвертки = СтрокаКолонокДляСвертки + "," + СтатическаяВетка.Значение.Имя; КонецЕсли; КонецЦикла; тзСтатистикаИспользования.Свернуть("Вид,Имя,ПоследнееИспользование","КоличествоИспользований"+СтрокаКолонокДляСвертки); стПоиск = Новый Структура("Вид,Имя"); Для каждого СтатическаяВетка Из СтатическиеВетки Цикл Если СтатическаяВетка.Значение.Использовать = Ложь Тогда Продолжить; КонецЕсли; // тзСтатистикаИспользования.Сортировать(СтатическаяВетка.Значение.СтрокаСортировки); СтрокиКорня = СтатическаяВетка.Ключ.Строки; СтрокиКорня.Очистить(); нВставленоПозиций = 0; Для каждого стрСтатистика из тзСтатистикаИспользования цикл ЗаполнитьЗначенияСвойств(стПоиск, стрСтатистика); Если СтатическаяВетка.Ключ.Строки.НайтиСтроки(стПоиск, Истина).Количество() = 0 Тогда Если нВставленоПозиций > СтатическаяВетка.Значение.КоличествоОтображаемыхЭлементов Тогда Прервать; КонецЕсли; ЗначениеСортировки = стрСтатистика[Лев(СтатическаяВетка.Значение.СтрокаСортировки,Найти(СтатическаяВетка.Значение.СтрокаСортировки, " ")-1)]; Если ЗначениеСортировки = Неопределено ИЛИ ЗначениеСортировки = 0 ИЛИ ЗначениеСортировки = '00010101' // Попытка универсального подхода к отсечке пустых значений тогда Прервать; КонецЕсли; Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(стПоиск.Имя) Тогда //СсылкаПоИД = ПолучитьСсылкуПоУИД(стПоиск.Вид, стПоиск.Имя); // Попытка открыть результат полнотекстового поиска //Если СсылкаПоИД = Неопределено Тогда // Продолжить; //КонецЕсли; СсылкаПоИД = стПоиск.Имя; Представление = Строка(СсылкаПоИД); Если Истина И СтатическаяВетка.Значение.Фильтровать И НЕ ?(стНастройки.ИспользоватьРегулярныеВыражения, ПроверитьУсловие(Представление, мВременныйФильтрИмен), Найти(НРег(Представление), НРег(мВременныйФильтрИмен)) > 0) Тогда Продолжить; КонецЕсли; стрОбъектИнтерфейса = СтрокиКорня.Добавить(); стрОбъектИнтерфейса.Вид = стПоиск.Вид; стрОбъектИнтерфейса.Имя = стПоиск.Имя; //стрОбъектИнтерфейса.Представление = Представление; стрОбъектИнтерфейса.Представление = стПоиск.Имя; стрОбъектИнтерфейса.ИндексКартинки = 62; Иначе // Обработка результатов полнотекстового поиска в случае, если они не видны мСтроки = дзВсеОбъекты.Строки.НайтиСтроки(стПоиск, Истина); Если мСтроки.Количество() = 0 тогда // Попытка поиска среди объектов - не метаданных (работает только с теми элементами, которые видны) мСтроки = ДеревоИнтерфейса.Строки.НайтиСтроки(стПоиск, Истина); Если мСтроки.Количество() = 0 тогда Продолжить; Иначе стрОбъект = мСтроки[0]; ИндексКартинки = стрОбъект.ИндексКартинки; КонецЕсли; Иначе стрОбъект = мСтроки[0]; ИндексКартинки = стрОбъект.ИндексКартинки; КонецЕсли; Если СтатическаяВетка.Значение.Фильтровать И НЕ ОбъектПроходитФильтры(стрОбъект) тогда Продолжить; КонецЕсли; стрОбъектИнтерфейса = СтрокиКорня.Добавить(); стрОбъектИнтерфейса.Вид = стрОбъект.Вид; стрОбъектИнтерфейса.Имя = стрОбъект.Имя; стрОбъектИнтерфейса.Представление = стрОбъект.Представление; стрОбъектИнтерфейса.ИндексКартинки = ИндексКартинки; КонецЕсли; нВставленоПозиций = нВставленоПозиций + 1; КонецЕсли; КонецЦикла; Если НЕ ПустаяСтрока(СтатическаяВетка.Значение.СортировкаПриОтображении) Тогда СтрокиКорня.Сортировать(СтатическаяВетка.Значение.СортировкаПриОтображении); КонецЕсли; РазвернутьВетку = Ложь; Если СтатическаяВетка.Значение.Свойство("Развернуть", РазвернутьВетку) И РазвернутьВетку = Истина Тогда Если НЕ элДеревоИнтерфейса.Развернут(СтатическаяВетка.Ключ) тогда элДеревоИнтерфейса.Развернуть(СтатическаяВетка.Ключ); КонецЕсли; Иначе Если элДеревоИнтерфейса.Развернут(СтатическаяВетка.Ключ) тогда элДеревоИнтерфейса.Свернуть(СтатическаяВетка.Ключ); КонецЕсли; КонецЕсли; СтатическаяВетка.Ключ.Представление = СтатическаяВетка.Значение.Представление; СтатическаяВетка.Ключ.ИндексКартинки = -1; СтатическаяВетка.Ключ.Имя = СтатическаяВетка.Значение.Имя; КонецЦикла; Если ИмяДляУстановкиТекущейСтроки <> Неопределено Тогда НоваяТекущаяСтрока = ДеревоИнтерфейса.Строки.Найти(ИмяДляУстановкиТекущейСтроки, "Имя", Истина); Если НоваяТекущаяСтрока <> Неопределено Тогда элДеревоИнтерфейса.ТекущаяСтрока = НоваяТекущаяСтрока; КонецЕсли; КонецЕсли; КонецПроцедуры // ЗаполнитьСтатическиеВеткиДереваИнтерфейса ////////////////// // Фоновые команды Процедура НачатьФоновыйПоиск(Форма) Экспорт Если флИспользоватьУмныйПоиск Тогда КомандыПоиска.Добавить("ПоискПоМетаданным"); Иначе ПоискПоМетаданным(); КонецЕсли; КомандыПоиска.Добавить("ВыводСохраненныхНастроекОтчетов"); КомандыПоиска.Добавить("ПолнотекстовыйПоиск"); // Эти ветки теперь хранятся целиком в дзВсеОбъекты //КомандыПоиска.Добавить("ВыводСодержимогоКаталогов"); //КомандыПоиска.Добавить("ВыводСохраненныхВнешнихОбработок"); Форма.ПодключитьОбработчикОжидания("ФоновыйПоиск", 0.1, Истина); КонецПроцедуры Функция ВыполнитьФоновыйПоиск() Экспорт Если КомандыПоиска.Количество() > 0 Тогда Выполнить(КомандыПоиска[0]+"()"); КомандыПоиска.Удалить(0); Возврат Истина КонецЕсли; Возврат Ложь; КонецФункции Процедура ПоискПоМетаданным() Перем НайденныйОбъект; ОбновитьФильтрУмногоПоиска(); СтрокаНулей = "00000000000000"; ОбъектыВыбранныхПодсистем = ирОбщий.ОбъектыПодсистемЛкс(ФильтрПодсистем); Для каждого стрКорень из дзВсеОбъекты.Строки цикл СтрокиКорня = Неопределено; Для каждого стрОбъект из стрКорень.Строки цикл Если НЕ ОбъектПроходитФильтры(стрОбъект,, ВеткиМетаданных.НайтиПоЗначению(стрКорень.Имя) <> Неопределено, ОбъектыВыбранныхПодсистем) тогда Продолжить; КонецЕсли; Если СтрокиКорня = Неопределено тогда стрКореньИнтерфейса = ДеревоИнтерфейса.Строки.Добавить(); стрКореньИнтерфейса.Представление = стрКорень.Представление; стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление; стрКореньИнтерфейса.ИндексКартинки = стрКорень.ИндексКартинки; СтрокиКорня = стрКореньИнтерфейса.Строки; КонецЕсли; стрОбъектИнтерфейса = СтрокиКорня.Добавить(); стрОбъектИнтерфейса.Вид = стрОбъект.Вид; стрОбъектИнтерфейса.Имя = стрОбъект.Имя; стрОбъектИнтерфейса.Представление = стрОбъект.Представление; стрОбъектИнтерфейса.ИндексКартинки = стрОбъект.ИндексКартинки; Если флПробоватьУмныйПоиск = Истина Тогда Попытка ОбъектМД = Метаданные[стрОбъект.Вид][стрОбъект.Имя]; Исключение // Метаданные кончились Возврат КонецПопытки; Если Ложь Или стрОбъект.Вид = "Справочники" ИЛИ стрОбъект.Вид = "ПланыВидовХарактеристик" ИЛИ стрОбъект.Вид = "ПланыСчетов" ИЛИ стрОбъект.Вид = "ПланыВидовРасчета" ИЛИ стрОбъект.Вид = "Документы" ИЛИ стрОбъект.Вид = "БизнесПроцессы" ИЛИ стрОбъект.Вид = "Задачи" Тогда Если Ложь Или стрОбъект.Вид = "Справочники" ИЛИ стрОбъект.Вид = "ПланыВидовХарактеристик" ИЛИ стрОбъект.Вид = "ПланыСчетов" ИЛИ стрОбъект.Вид = "ПланыВидовРасчета" Тогда ДлинаКода = ОбъектМД.ДлинаКода; Если Истина И ДлинаКода > 0 И (Ложь// Есть где искать по коду Или стрОбъект.Вид = "ПланыВидовХарактеристик" // Либо это план видов характеристик (только строковые коды) Или стрОбъект.Вид = "ПланыСчетов" // Либо это план счетов (только строковые коды) Или (ЧислоСуффиксаУмногоПоиска = 0 И Строка(ОбъектМД.ТипКода)="Строка") // Либо тип кода строковый Или (ЧислоСуффиксаУмногоПоиска>0 И Строка(ОбъектМД.ТипКода)="Число") // Искомый суффикс похож на число ) Тогда Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоКоду(СтрокаСуффиксаУмногоПоиска)" ); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли ИначеЕсли (ЧислоСуффиксаУмногоПоиска > 0 И Строка(ОбъектМД.ТипКода)="Строка") Тогда // Номер может быть частичным - автодополняем префиксами и нулями Для каждого Префикс Из МассивПрефиксовОрганизаций Цикл Для сч=0 По ДлинаКода-СтрДлина(Префикс)-ДлинаСуффиксаУмногоПоиска Цикл КодСПрефиксом = Префикс + Лев(СтрокаНулей, сч) + СтрокаСуффиксаУмногоПоиска; Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоКоду(КодСПрефиксом)" ); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли КонецЦикла; КонецЦикла; КонецЕсли; Если ОбъектМД.ДлинаНаименования > 0 Тогда Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоНаименованию(СтрокаСуффиксаУмногоПоиска, Ложь" + ?(стрОбъект.Вид="ПланыСчетов", ", " + стрОбъект.Вид + "." + стрОбъект.Имя + ".ПустаяСсылка())", ")") ); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли; КонецЕсли; ИначеЕсли Ложь Или стрОбъект.Вид = "Документы" ИЛИ стрОбъект.Вид = "БизнесПроцессы" ИЛИ стрОбъект.Вид = "Задачи" Тогда ДлинаНомера = ОбъектМД.ДлинаНомера ; Если ДлинаНомера > 0 И ((ЧислоСуффиксаУмногоПоиска>0 И Строка(ОбъектМД.ТипНомера) = "Число") ИЛИ (ЧислоСуффиксаУмногоПоиска=0 И Строка(ОбъектМД.ТипНомера)="Строка")) Тогда Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоНомеру("+?(стрОбъект.Вид="Задачи", "СтрокаСуффиксаУмногоПоиска)", "СтрокаСуффиксаУмногоПоиска, РабочаяДата)" )); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли; ИначеЕсли (ЧислоСуффиксаУмногоПоиска > 0 И Строка(ОбъектМД.ТипНомера)="Строка") Тогда // Номер может быть частичным - автодополняем префиксами и нулями Для каждого Префикс Из МассивПрефиксовОрганизаций Цикл Для сч=0 По ДлинаНомера - СтрДлина(Префикс)-ДлинаСуффиксаУмногоПоиска Цикл НомерСПрефиксом = Префикс + Лев(СтрокаНулей, сч) + СтрокаСуффиксаУмногоПоиска; Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоНомеру("+?(стрОбъект.Вид="Задачи", "НомерСПрефиксом)", "НомерСПрефиксом, РабочаяДата)" )); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; // Если поиск по коду, наименованию, номеру не удался, попробуем поискать по индексируемым реквизитам Для каждого РеквизитОбъектаМД Из ОбъектМД.Реквизиты Цикл Если РеквизитОбъектаМД.Индексирование <> Метаданные.СвойстваОбъектов.Индексирование.НЕИндексировать Тогда Выполнить("НайденныйОбъект = " + стрОбъект.Вид + "." + стрОбъект.Имя + ".НайтиПоРеквизиту(РеквизитОбъектаМД.Имя, СтрокаСуффиксаУмногоПоиска)"); Если НЕ НайденныйОбъект.Пустая() Тогда СтрокаОбъекта = ДеревоИнтерфейса.Строки.Вставить(0); //СтрокаОбъекта.Имя = НайденныйОбъект.УникальныйИдентификатор(); СтрокаОбъекта.Имя = НайденныйОбъект; СтрокаОбъекта.Вид = НайденныйОбъект.Метаданные().ПолноеИмя(); СтрокаОбъекта.Представление = НайденныйОбъект; СтрокаОбъекта.ИндексКартинки = 62; Продолжить КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры Процедура ВыводСодержимогоКаталогов(ДеревоОбъектов = Неопределено, СтрокаПоиска="") // Вывод содержимого каталогов Для каждого Каталог Из стНастройки.Каталоги Цикл СтрокиКорня = Неопределено; МассивНайденныхФайлов = НайтиФайлы(Каталог.Ключ, "*", флИскатьВПодкаталогах=Истина); Для каждого НайденныйФайл Из МассивНайденныхФайлов Цикл Расширение = ВРЕГ(НайденныйФайл.Расширение); Если Расширение = ".EPF" Тогда ВидФайла = "Внешние обработки"; ИндексКартинки = 19; // 56; ИначеЕсли ВерсияПлатфомы >= "8.1" И Расширение = ".ERF" Тогда ВидФайла = "Внешние отчеты"; ИндексКартинки = 19; // 57; ИначеЕсли Расширение = ".TXT" Тогда ВидФайла = "Текстовые документы"; ИндексКартинки = 58; ИначеЕсли Расширение = ".MXL" Тогда ВидФайла = "Табличные документы"; ИндексКартинки = 59; ИначеЕсли Расширение = ".RCF" Тогда ВидФайла = "Настройки консоли отчетов"; ИндексКартинки = 60; ИначеЕсли Расширение = ".SEL" Тогда ВидФайла = "Настройки консоли запросов"; ИндексКартинки = 61; Иначе Продолжить; КонецЕсли; Если НЕ ОбъектПроходитФильтры(НайденныйФайл.ИмяБезРасширения, СтрокаПоиска) Тогда Продолжить; КонецЕсли; Если СтрокиКорня = Неопределено тогда стрКореньИнтерфейса = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса.Строки.Добавить(), ДеревоОбъектов.Строки.Добавить()) ; стрКореньИнтерфейса.Представление = Каталог.Значение; стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление; стрКореньИнтерфейса.ИндексКартинки = 12; СтрокиКорня = стрКореньИнтерфейса.Строки; КонецЕсли; стрОбъектИнтерфейса = СтрокиКорня.Добавить(); стрОбъектИнтерфейса.Вид = ВидФайла; стрОбъектИнтерфейса.Имя = НайденныйФайл.ПолноеИмя; стрОбъектИнтерфейса.Представление = НайденныйФайл.ИмяБезРасширения; стрОбъектИнтерфейса.ИндексКартинки = ИндексКартинки; КонецЦикла; КонецЦикла; КонецПроцедуры Процедура ВыводСохраненныхНастроекОтчетов(ДеревоОбъектов = Неопределено, СтрокаПоиска = "") // Вывод сохраненных настроек отчетов Если ЕстьУниверсальныйОтчет И Есть_РС_СохраненныеНастройки Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СохраненныеНастройки.ИмяОбъекта КАК Вид, | СохраненныеНастройки.НаименованиеНастройки как Имя, | СохраненныеНастройки.НаименованиеНастройки как Представление, | 24 как ИндексКартинки |ИЗ | РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки |ГДЕ | Выразить(СохраненныеНастройки.ИмяОбъекта как Строка(12)) = ""ОтчетОбъект."" | И СохраненныеНастройки.Пользователь = &ТекущийПользователь"; Запрос.УстановитьПараметр("ТекущийПользователь", мТекущийПользователь); РезультатЗапросаПоНастройкам = Запрос.Выполнить(); Если НЕ РезультатЗапросаПоНастройкам.Пустой() Тогда СтрокаКорняОтчетов = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Найти("Отчеты"); ВыборкаНастроек = РезультатЗапросаПоНастройкам.Выбрать(); Пока ВыборкаНастроек.Следующий() Цикл Если НЕ ОбъектПроходитФильтры(ВыборкаНастроек.Представление, СтрокаПоиска) Тогда Продолжить; КонецЕсли; Если СтрокаКорняОтчетов = Неопределено Тогда стрКореньИнтерфейса = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Добавить(); стрКореньИнтерфейса.Представление = "Отчеты"; стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление; стрКореньИнтерфейса.ИндексКартинки = 23; СтрокиКорня = стрКореньИнтерфейса.Строки; Иначе СтрокиКорня = СтрокаКорняОтчетов.Строки; КонецЕсли; ИмяОтчета = Сред(ВыборкаНастроек.Вид, Найти(ВыборкаНастроек.Вид, ".")+1); СтрокаОтчетаДляНастройки = СтрокиКорня.Найти(ИмяОтчета, "Имя", Истина); Если СтрокаОтчетаДляНастройки = Неопределено Тогда МДОтчет = Метаданные.Отчеты.Найти(ИмяОтчета); Если МДОтчет = Неопределено Тогда // Случай, когда в регистре сведний хранится название уже несуществующего отчета Продолжить; Иначе СтрокаОтчетаДляНастройки = СтрокиКорня.Добавить(); СтрокаОтчетаДляНастройки.Вид = "Отчеты"; СтрокаОтчетаДляНастройки.Имя = ИмяОтчета; СтрокаОтчетаДляНастройки.Представление = МДОтчет.Синоним; СтрокаОтчетаДляНастройки.ИндексКартинки = 23; КонецЕсли; КонецЕсли; стрОбъектИнтерфейса = СтрокаОтчетаДляНастройки.Строки.Добавить(); ЗаполнитьЗначенияСвойств(стрОбъектИнтерфейса, ВыборкаНастроек); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ВыводСохраненныхВнешнихОбработок(ДеревоОбъектов = Неопределено, СтрокаПоиска = "") // Вывод сохраненных внешних обработок Если ЕстьСправочникВнешнихОбработок Тогда Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеОбработки) Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Наименование как Представление, Код как Имя, ""СправочникВнешниеОбработки"" как Вид, | 19 как ИндексКартинки |ИЗ | Справочник.ВнешниеОбработки"; РезультатЗапросаПоСправочникуОбработок = Запрос.Выполнить(); Если НЕ РезультатЗапросаПоСправочникуОбработок.Пустой() Тогда ПредставлениеКорняВнешнихОбработок = "Справочник ""Внешние обработки"""; СтрокаКорняВнешнихОбработок = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Найти(ПредставлениеКорняВнешнихОбработок); Если СтрокаКорняВнешнихОбработок = Неопределено Тогда СтрокаКорняВнешнихОбработок = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Добавить(); СтрокаКорняВнешнихОбработок.Представление = ПредставлениеКорняВнешнихОбработок; СтрокаКорняВнешнихОбработок.Имя = СтрокаКорняВнешнихОбработок.Представление; СтрокаКорняВнешнихОбработок.ИндексКартинки = 18; КонецЕсли; СтрокиКорня = СтрокаКорняВнешнихОбработок.Строки; ВыборкаПоСправочникуВнешнихОбработок = РезультатЗапросаПоСправочникуОбработок.Выбрать(); Пока ВыборкаПоСправочникуВнешнихОбработок.Следующий() Цикл Если ОбъектПроходитФильтры(ВыборкаПоСправочникуВнешнихОбработок.Представление, СтрокаПоиска) Тогда стрОбъектИнтерфейса = СтрокаКорняВнешнихОбработок.Строки.Добавить(); ЗаполнитьЗначенияСвойств(стрОбъектИнтерфейса, ВыборкаПоСправочникуВнешнихОбработок); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры ////////////////////////////////////////////////////////////////////////////// // Глобальный поиск Процедура ПолнотекстовыйПоиск() // Полнотекстовый поиск по данным ИБ Если ПолнотекстовыйПоискВыполнен() Тогда КоличествоРезультатовПоиска = мСписокПолнотекстовогоПоиска.Количество(); ПолноеКоличествоРезультатовПоиска = мСписокПолнотекстовогоПоиска.ПолноеКоличество(); ПредставлениеКорняПолнотекстовогоПоиска = "Полнотекстовый поиск (" + КоличествоРезультатовПоиска + " из " + ПолноеКоличествоРезультатовПоиска + ")"; СтрокаКорня = ДеревоИнтерфейса.Строки.Найти(ПредставлениеКорняПолнотекстовогоПоиска); Если СтрокаКорня = Неопределено Тогда СтрокаКорня = ДеревоИнтерфейса.Строки.Добавить(); СтрокаКорня.Представление = ПредставлениеКорняПолнотекстовогоПоиска; СтрокаКорня.Имя = СтрокаКорня.Представление; СтрокаКорня.ИндексКартинки = 62; КонецЕсли; СтрокиКорня = СтрокаКорня.Строки; Если мСписокПолнотекстовогоПоиска.НачальнаяПозиция() > 0 Тогда // Строка возврата назад КонецЕсли; Для сч = 0 По КоличествоРезультатовПоиска-1 Цикл стрОбъектИнтерфейса = СтрокиКорня.Добавить(); ЭлементСпискаПолнотекстовогоПоиска = мСписокПолнотекстовогоПоиска.Получить(сч); //стрОбъектИнтерфейса.Имя = ЭлементСпискаПолнотекстовогоПоиска.Значение.УникальныйИдентификатор(); стрОбъектИнтерфейса.Имя = ЭлементСпискаПолнотекстовогоПоиска.Значение; стрОбъектИнтерфейса.Вид = ЭлементСпискаПолнотекстовогоПоиска.Метаданные.ПолноеИмя(); стрОбъектИнтерфейса.Представление = "" + ЭлементСпискаПолнотекстовогоПоиска.Метаданные + ":" + ЭлементСпискаПолнотекстовогоПоиска.Представление; стрОбъектИнтерфейса.ИндексКартинки = 62; КонецЦикла; КонецЕсли; КонецПроцедуры Функция ПолнотекстовыйПоискВыполнен() Если ФильтрИмен = "" ИЛИ мСписокПолнотекстовогоПоиска = Неопределено Тогда Возврат Ложь; КонецЕсли; МассивМД = Новый Массив(); Если ФильтрПодсистем.Количество() > 0 Тогда //ПодсистемаФильтра = Метаданные.Подсистемы.Найти(ФильтрПодсистем); //Для каждого ВидМД Из ВеткиМетаданных Цикл // Если // ВидМД.Значение = "Справочники" ИЛИ // ВидМД.Значение = "Документы"ИЛИ // ВидМД.Значение = "ПланыВидовХарактеристик"ИЛИ // ВидМД.Значение = "ПланыСчетов"ИЛИ // ВидМД.Значение = "ПланыВидовРасчета"ИЛИ // ВидМД.Значение = "БизнесПроцессы"ИЛИ // ВидМД.Значение = "Задачи"ИЛИ // ВидМД.Значение = "ПланыОбмена" // // Тогда // Для Каждого МД Из Метаданные[ВидМД.Представление] Цикл // Если МД.Подсистемы.Содержит(ПодсистемаФильтра) Тогда // МассивМД.Добавить(МД); // КонецЕсли; // КонецЦикла; // КонецЕсли; //КонецЦикла; Иначе Для каждого ВидМД Из ВеткиМетаданных Цикл Если ВидМД.Значение = "Справочники" ИЛИ ВидМД.Значение = "Документы"ИЛИ ВидМД.Значение = "ПланыВидовХарактеристик"ИЛИ ВидМД.Значение = "ПланыСчетов"ИЛИ ВидМД.Значение = "ПланыВидовРасчета"ИЛИ ВидМД.Значение = "БизнесПроцессы"ИЛИ ВидМД.Значение = "Задачи"ИЛИ ВидМД.Значение = "ПланыОбмена" Тогда Для Каждого МД Из Метаданные[ВидМД.Представление] Цикл МассивМД.Добавить(МД); КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; мСписокПолнотекстовогоПоиска.ОбластьПоиска = МассивМД; мСписокПолнотекстовогоПоиска.ПорогНечеткости = стНастройки.ПолнотекстовыйПоискПорогНечеткости; мСписокПолнотекстовогоПоиска.СтрокаПоиска = ФильтрИмен; мСписокПолнотекстовогоПоиска.РазмерПорции = стНастройки.ПолнотекстовыйПоискРазмерПорции; мСписокПолнотекстовогоПоиска.ПерваяЧасть(); Возврат мСписокПолнотекстовогоПоиска.ПолноеКоличество()>0; КонецФункции /////////////////////////////////////////////////////// // Служебные процедуры и функции // Устанавливает переменные умного поиска для дальнейшего использования // Процедура ОбновитьФильтрУмногоПоиска(Принудительно=Ложь) Экспорт Если МассивПрефиксовОрганизаций = Неопределено Тогда МассивПрефиксовОрганизаций = Новый Массив; КонецЕсли; Если стНастройки.флИспользоватьУмныйПоиск = Истина Тогда Если НЕ Принудительно И ЗначениеЗаполнено(мСловаСтрокиУмногоПоиска) и Лев(ФильтрИмен, СтрДлина(мСловаСтрокиУмногоПоиска[0]))=мСловаСтрокиУмногоПоиска[0] Тогда Возврат КонецЕсли; мСловаСтрокиУмногоПоиска = ирОбщий.СтрРазделитьЛкс(ФильтрИмен, " ", Истина, Ложь); КоличествоСлов = мСловаСтрокиУмногоПоиска.Количество(); Если КоличествоСлов>1 Тогда СтрокаУмногоПоискаБезСуффикса = ""; Для сч=0 По КоличествоСлов-2 Цикл СтрокаУмногоПоискаБезСуффикса = ?(ПустаяСтрока(СтрокаУмногоПоискаБезСуффикса), "", СтрокаУмногоПоискаБезСуффикса + " ") + мСловаСтрокиУмногоПоиска[сч]; КонецЦикла; СтрокаСуффиксаУмногоПоиска = мСловаСтрокиУмногоПоиска[КоличествоСлов-1]; ДлинаСуффиксаУмногоПоиска = СтрДлина(СтрокаСуффиксаУмногоПоиска); Попытка ЧислоСуффиксаУмногоПоиска = Число(СокрЛП(СтрокаСуффиксаУмногоПоиска)); Исключение ЧислоСуффиксаУмногоПоиска = 0; КонецПопытки; флПробоватьУмныйПоиск = Истина; Иначе мСловаСтрокиУмногоПоиска = Неопределено; СтрокаУмногоПоискаБезСуффикса = ""; СтрокаСуффиксаУмногоПоиска = ""; флПробоватьУмныйПоиск = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры // ОбновитьФильтрУмногоПоиска() // Простейший вывод таблицы значений в табличный документ // // Параметры // ТЗ - таблица значений // // Возвращаемое значение: // Сформированный табличный документ // Функция ВывестиТЗвТД(ТЗ, Показывать = Ложь, Заголовок = "Таблица значений") Экспорт _ПостроительОтчета = Новый ПостроительОтчета; _ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ); _ПостроительОтчета.ЗаполнитьНастройки(); _ТД = Новый ТабличныйДокумент; _ПостроительОтчета.Вывести(_ТД); Если Показывать Тогда _ТД.Показать(Заголовок); КонецЕсли; Возврат _ТД; КонецФункции // ВывестиТЗвТД() //ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла); //ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); //ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ НАСТРОЕК ИсторияКоманд = 50; ИспользоватьРегулярныеВыражения = Истина; ПолнотекстовыйПоискПорогНечеткости = 0; ПолнотекстовыйПоискРазмерПорции = 0; // Если 0 - то полнотекстовый поиск отключен ////////////////////////////////////////////////////////////////////////////////////////////// // Соответствие статических веток (История использования и Избранное) и настроек для них //Представление, - отображение в интерфейсе //СтрокаСортировки, - строка сортировки в таблице статистики //КоличествоОтображаемыхЭлементов, - сколько элементов выводить //Фильтровать - фильтровать ли данную ветку вместе с деревом МассивСтатическихВеток = Новый Массив; //// Быстрый поиск //МассивСтатическихВеток.Добавить(Новый Структура( // "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть", // "БыстрыйПоиск", // Истина, // Использовать ли данную ветку // "Быстрый поиск", // Представление ветки в дереве // "БыстрыйПоиск УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся // 5, // Количество элементов, отображаемых в данной ветке // Истина, // Фильтровать ли ветку при непустой строке фильтра // "", // не сортировать // Ложь, // Разрешить перетаскивание // Ложь // Автозапуск команд в данной ветке при открытии обработки // ,Истина // Ветка развернута // ) // ); // Недавние МассивСтатическихВеток.Добавить(Новый Структура( "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть", "НедавноИспользованные", Истина, // Использовать ли данную ветку "Недавно использованные", // Представление ветки в дереве "ПоследнееИспользование УБЫВ", // Строка сортировки статистической таблицы. Сортировка определяет, какие элементы выводятся 10, // Количество элементов, отбражаемых в данной ветке Ложь, // Фильтровать ли ветку при непустой строке фильтра // Сортировка отображаемых элементов // "Вид,Имя" - обычная сортировка "", // сортировка по дате использования Ложь, // Перетаскивание Ложь // Автозапуск ,Ложь // Ветка свернута ) ); // Часто используемые МассивСтатическихВеток.Добавить(Новый Структура( "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть", "ЧастоИспользуемые", Истина, "Часто используемые", "КоличествоИспользований УБЫВ,ПоследнееИспользование", 10, Ложь, // Сортировка отображаемых элементов "Вид,Имя", Ложь, // Перетаскивание Ложь // Автозапуск ,Ложь // Ветка свернута ) ); // Избранное МассивСтатическихВеток.Добавить(Новый Структура( "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть", "Избранное", Истина, // Использовать ли данную ветку "Избранное", // Представление ветки в дереве "Избранное УБЫВ", 10, Ложь, // Сортировка отображаемых элементов "Вид,Имя", Истина, // Перетаскивание Ложь // Автозапуск ,Ложь // Ветка свернута ) ); // Автозапуск МассивСтатическихВеток.Добавить(Новый Структура( "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть", "Автозапуск", Истина, // Использовать ли данную ветку "Автозапуск", // Представление ветки в дереве "Автозапуск УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся 10, // Количество элементов, отображаемых в данной ветке Ложь, // Фильтровать ли ветку при непустой строке фильтра "", // не сортировать Истина, // Разрешить перетаскивание Истина // Автозапуск команд в данной ветке при открытии обработки ,Ложь // Ветка свернута ) ); // Пример пользовательской статической ветки (раскомментируйте и добавьте необходимое количество экземпляров) //СтатическиеВетки.Вставить(ДеревоИнтерфейса.Строки.Добавить(), Новый Структура( // "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск", // "МойСборникКоманд", // Представление ветки в дереве // Истина, // Использовать ли данную ветку // "Мой сборник команд", // Представление ветки в дереве // "МойСборникКоманд УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся // 10, // Количество элементов, отображаемых в данной ветке // Ложь, // Фильтровать ли ветку при непустой строке фильтра // "", // не сортировать // Истина, // Разрешить перетаскивание // Ложь // Автозапуск команд в данной ветке при открытии обработки // ) // ); // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ИНИЦИАЛИЗАЦИЯ ОБРАБОТКИ КолонкиДерева = ДеревоИнтерфейса.Колонки; Если КолонкиДерева.Найти("Представление") = Неопределено Тогда КолонкиДерева.Добавить("Представление"); КолонкиДерева.Добавить("Имя"); КолонкиДерева.Добавить("Вид"); КолонкиДерева.Добавить("ИндексКартинки"); КолонкиДерева.Добавить("ПолноеИмяОбъекта"); КолонкиДерева.Добавить("КоличествоСтрок"); КолонкиДерева.Добавить("Порядок"); КонецЕсли; мПлатформа = ирКэш.Получить(); КомандыПоиска = Новый Массив(); ВеткиМетаданных = Новый СписокЗначений; ВеткиМетаданных.Добавить("Общие формы", "ОбщиеФормы"); ВеткиМетаданных.Добавить("Интерфейсы", "Интерфейсы"); ВеткиМетаданных.Добавить("Константы", "Константы"); ВеткиМетаданных.Добавить("Справочники", "Справочники"); ВеткиМетаданных.Добавить("Перечисления", "Перечисления"); ВеткиМетаданных.Добавить("Документы", "Документы"); ВеткиМетаданных.Добавить("Журналы документов", "ЖурналыДокументов"); ВеткиМетаданных.Добавить("Отчеты", "Отчеты"); ВеткиМетаданных.Добавить("Обработки", "Обработки"); ВеткиМетаданных.Добавить("Планы видов характеристик", "ПланыВидовХарактеристик"); ВеткиМетаданных.Добавить("Регистры сведений", "РегистрыСведений"); ВеткиМетаданных.Добавить("Регистры накопления", "РегистрыНакопления"); ВеткиМетаданных.Добавить("Планы счетов", "ПланыСчетов"); ВеткиМетаданных.Добавить("Планы видов расчета", "ПланыВидовРасчета"); ВеткиМетаданных.Добавить("Регистры бухгалтерии", "РегистрыБухгалтерии"); ВеткиМетаданных.Добавить("Регистры расчета", "РегистрыРасчета"); ВеткиМетаданных.Добавить("Бизнес-процессы", "БизнесПроцессы"); ВеткиМетаданных.Добавить("Задачи","Задачи"); ВеткиМетаданных.Добавить("Планы обмена", "ПланыОбмена"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени = Новый Соответствие; СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ОбщиеФормы", "ОбщаяФорма"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Интерфейсы","Интерфейс"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Константы","Константа"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Справочники","Справочник"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Перечисления","Перечисление"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Документы","Документ"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ЖурналыДокументов","ЖурналДокументов"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Отчеты","Отчет"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Обработки","Обработка"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыВидовХарактеристик", "ПланВидовХарактеристик"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыСведений","РегистрСведений"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыНакопления","РегистрНакопления"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыСчетов","ПланСчетов"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыВидовРасчета","ПланВидовРасчета"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыБухгалтерии","РегистрБухгалтерии"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыРасчета","РегистрРасчета"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("БизнесПроцессы","БизнесПроцесс"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Задачи","Задача"); СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыОбмена","ПланОбмена"); ЕстьУниверсальныйОтчет = (Метаданные.Отчеты.Найти("УниверсальныйОтчет") <> Неопределено); Есть_РС_СохраненныеНастройки = (Метаданные.РегистрыСведений.Найти("СохраненныеНастройки") <> Неопределено); //Есть_СправочникОрганизаций = (Метаданные.Справочники.Найти("Организации") <> Неопределено); ЕстьСправочникВнешнихОбработок = (Метаданные.Справочники.Найти("ВнешниеОбработки") <> Неопределено); ИмяКорневойПодсистемы = "Конфигурация." + Метаданные.Имя; Если Метаданные.ПараметрыСеанса.Найти("ТекущийПользователь") = Неопределено Тогда мТекущийПользователь = Неопределено; Иначе Попытка мТекущийПользователь = ПараметрыСеанса.ТекущийПользователь; Исключение КонецПопытки; КонецЕсли; СистемнаяИнформация = Новый СистемнаяИнформация; ВерсияПлатфомы = Лев(СистемнаяИнформация.ВерсияПриложения,3); Если Истина И ПолнотекстовыйПоискРазмерПорции > 0 // Включен И ВерсияПлатфомы >= "8.1" // и платформа позволяет Тогда Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда мСписокПолнотекстовогоПоиска = ПолнотекстовыйПоиск.СоздатьСписок(); мСписокПолнотекстовогоПоиска.ПолучатьОписание = Ложь; КонецЕсли; КонецЕсли;