mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
*Исправлено наложение пользовательского отбора при открытии управляемых форм списков из инструментов
Форма выбора метаданных
*После нажатия ENTER в поле фильтра теперь снова активизируется дерево
Загрузка табличных данных
*Исправлены ошибки при выполнении команды "Выбрать" в контекстном меню ячейки табличного документа в конфигурациях с управляемыми формами
Форма двоичных данных
*Исправлена ошибка при сохранении в файл без расширения
1483 lines
103 KiB
Plaintext
1483 lines
103 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем КомандыПоиска;
|
||
Перем дзВсеОбъекты Экспорт;
|
||
Перем ДеревоПодсистем Экспорт;
|
||
Перем стНастройки Экспорт;
|
||
Перем мСписокПолнотекстовогоПоиска; // Глобальный поиск
|
||
Перем СтатическиеВетки Экспорт;
|
||
Перем мПлатформа Экспорт;
|
||
Перем МассивСтатическихВеток;
|
||
Перем ВеткиМетаданных;
|
||
Перем 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" // и платформа позволяет
|
||
Тогда
|
||
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
|
||
мСписокПолнотекстовогоПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
|
||
мСписокПолнотекстовогоПоиска.ПолучатьОписание = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|