RDT1C/DataProcessors/ирИнтерфейснаяПанель/Ext/ObjectModule.bsl
Администратор 6a2d8d07e4 4.09
Интерфейсная панель
        +Для ветки "Избранное" добавлена команда выгрузки ссылок в список значений
        +Для ссылок в ветке "Избранное" в представление добавлен их тип в скобках
        +Добавлена поддержка копирования ссылок из ветки "Избранное"
    Консоль запросов
        *Вставка ссылки на объект БД теперь вставляет имя параметра в текст запроса только если он имеет фокус ввода
        *Исправлена ошибка возможности установки параметру  строкового значения, не соответствующего квалификатору
    Консоль кода
        *Вставка ссылки на объект БД теперь вставляет имя параметра в скрипт только если он имеет фокус ввода
    Поиск дублей и замена ссылок
        +При добавления нового правила замены теперь устанавливается тип ссылки по выбранной в настройках поиска дублей таблице
    Подбор и обработка объектов
        +Обработка "Объединить ссылки на объекты" переименована в "Заменить ссылки на объекты" в связи с расширением функциональности
        +Обработка "Объединить ссылки" теперь предоставляет на выбор создание одной группы дублей для всех объектов или своего правила замены для каждого объекта
    Редактор пользователей
        +В форме запуска сеанса под пользователем добавлен флажок "отключить защиту от опасных действий на время запуска"
    Портативный вариант
        *При обновлении с сайта архив теперь помещается в каталог базового модуля
    Анализ техножурнала
        *Во встроенном варианте исправлена проблема сброса чужой схемы БД каждые 20 минут
        *Исправлен ряд ошибок в форме управляемой блокировки
    Редактор списка значений
        +Добавлена команда передачи в таблицу значений
    Управление COM классами
        +Реализована поддержка 64-разрядных классов Application и CApplication
4.10
    Конструктор запроса
        +Добавлен флажок "Иерархическая логика" (включен по умолчанию) обеспечивающий иерархический стиль сборки условий отбора и соединений
        +При выборе таблицы-параметра теперь автоматически вставляется запрос на создание временной таблицы и выбирается временная таблица вместо параметра
        *Исправлена ошибка загрузки запроса с выражением ЗНАЧЕНИЕ(XXX.YYY)
    Консоль запросов
        *Исправлена свежая проблема не вставки имени параметра в активное поле обработчика результата при вставке ссылки
    Общее
        +Для встроенного варианта реализована настройка "Каталог объектов для отладки" в общих настройках инструментов
        *Вывод табличного поля в табличный документ теперь корректно выводит колонку с данными флажка
        *Исправлен некорректный запуск команд системы на некоторых 64-разрядных ОС
    Портативный
        +При загрузке новой версии теперь сохраняется ее архив по аналогии со старой версией
    Табличный документ
        +Добавлена поддержка форматов "xls,xls,ods" при загрузке/выгрузке в файл
    Структура хранения БД
        +Добавлена кнопка вывода в табличный документ ИР
        *Исправлена ошибка нажатия на кнопку "Сравнить"
        *Исправлена ошибка активизации закладки "Общая таблица индексов"
    Исследователь объектов
        +Хранилище значений и двоичные данные теперь открываются в сопоставленных редакторах по двойному клику в ячейке Значение
    Подбор и обработка объектов
        *Флажок "Без автоупорядочивания" теперь устанавливается при изменении области поиска
    Редактор констант
        +Добавлены флажки "Отключить контроль записи" и "Запись на сервере"
2017-05-28 22:19:29 +03:00

1574 lines
109 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем КомандыПоиска;
Перем дзВсеОбъекты Экспорт;
Перем дзВсеПодсистемы Экспорт;
Перем стНастройки Экспорт;
Перем мСписокПолнотекстовогоПоиска; // Глобальный поиск
Перем СтатическиеВетки Экспорт;
Перем мПлатформа Экспорт;
Перем МассивСтатическихВеток;
Перем ВеткиМетаданных;
Перем RegExp; // Для поиска с помощью регулярных выражений
Перем ВерсияПлатфомы Экспорт;
Перем ИмяКорневойПодсистемы;
Перем ЕстьСправочникВнешнихОбработок Экспорт;
Перем мТекущийПользователь Экспорт;
Перем ПутьФайлаНастроек;
Перем ЕстьУниверсальныйОтчет Экспорт, Есть_РС_СохраненныеНастройки Экспорт;
//Перем Есть_СправочникОрганизаций;
Перем мСловаСтрокиУмногоПоиска Экспорт, СтрокаУмногоПоискаБезСуффикса Экспорт, СтрокаСуффиксаУмногоПоиска Экспорт, флПробоватьУмныйПоиск Экспорт, ЧислоСуффиксаУмногоПоиска, МассивПрефиксовОрганизаций, ДлинаСуффиксаУмногоПоиска;
Перем СоответствиеВидовМетаданныхДляПоискаПолногоИмени Экспорт;
Перем мВременныйФильтрИмен Экспорт;
///////////////////////////////////////////////////////////////////////////////
Функция СохранитьВыбраннуюСтроку(Форма)
ТекСтрока = Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока;
Если ТекСтрока = Неопределено тогда
Возврат Неопределено;
КонецЕсли;
стСтрока = Новый Структура("Представление,Уровень,Родитель,Вид,Имя");
стСтрока.Представление = ТекСтрока.Представление;
стСтрока.Уровень = ТекСтрока.Уровень();
Если стСтрока.Уровень = 1 тогда
стСтрока.Родитель = ТекСтрока.Родитель.Представление;
стСтрока.Вид = ТекСтрока.Вид;
стСтрока.Имя = ТекСтрока.Имя;
КонецЕсли;
Возврат стСтрока;
КонецФункции // СохранитьВыбраннуюСтроку
///////////////////////////////////////////////////////////////////////////////
Функция ВосстановитьВыбраннуюСтроку(стСтрока,Форма)
ТекСтрока = Неопределено;
Если стСтрока <> Неопределено тогда
Если стСтрока.Уровень = 0 тогда
ТекСтрока = ДеревоИнтерфейса.Строки.Найти(стСтрока.Представление, "Представление", Ложь);
Иначе
стрРодитель = ДеревоИнтерфейса.Строки.Найти(стСтрока.Родитель, "Представление", Ложь);
Если стрРодитель <> Неопределено тогда
стПоиск = Новый Структура("Вид,Имя", стСтрока.Вид, стСтрока.Имя);
мСтроки = стрРодитель.Строки.НайтиСтроки(стПоиск, Ложь);
Если мСтроки.Количество() > 0 тогда
ТекСтрока = мСтроки[0];
Иначе
Если стрРодитель.Строки.Количество() > 0 тогда
ТекСтрока = стрРодитель.Строки[0];
Иначе
ТекСтрока = стрРодитель;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// +++.ДОБАВЛЕНИЕ.12/04/21-20:21:17.<2iS>.СтарыхСА
//Если ТекСтрока = Неопределено тогда
// Если ДеревоИнтерфейса.Строки.Количество() > 0 тогда
// ТекСтрока = ДеревоИнтерфейса.Строки[0];
// КонецЕсли;
//КонецЕсли;
Если ТекСтрока <> Неопределено Тогда
Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока = ТекСтрока;
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
// ---.ДОБАВЛЕНИЕ.12/04/21-20:21:17.<2iS>.СтарыхСА
КонецФункции
///////////////////////////////////////////////////////////////////////////////
Функция СохранитьРазвернутыеВетви(Форма)
мВетви = Новый Массив;
элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса;
Для каждого стрВетвь из ДеревоИнтерфейса.Строки цикл
// Пропустим статические
Если НЕ СтатическиеВетки[стрВетвь] = Неопределено Тогда
Продолжить;
КонецЕсли;
Если элДеревоИнтерфейса.Развернут(стрВетвь) тогда
мВетви.Добавить(стрВетвь.Представление);
КонецЕсли;
КонецЦикла;
Возврат мВетви;
КонецФункции // СохранитьРазвернутыеВетви
///////////////////////////////////////////////////////////////////////////////
Процедура ВосстановитьРазвернутыеВетви(Знач мРазвернутыеВетви, Форма) Экспорт
элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса;
СтрокиДереваИнтерфейса = ДеревоИнтерфейса.Строки;
Для каждого ПредставлениеВетви из мРазвернутыеВетви цикл
стрВетвь = СтрокиДереваИнтерфейса.Найти(ПредставлениеВетви, "Представление", Ложь);
Если стрВетвь <> Неопределено тогда
элДеревоИнтерфейса.Развернуть(стрВетвь);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ВосстановитьРазвернутыеВетви
///////////////////////////////////////////////////////////////////////////////
Процедура ДобавитьОбъект(СтрокиВетви, Знач МетаД, Знач ВидОбъекта, Знач ИндексКартинки)
стрСтрока = СтрокиВетви.Добавить();
стрСтрока.Вид = ВеткиМетаданных.НайтиПоЗначению(ВидОбъекта).Представление;
стрСтрока.Имя = МетаД.Имя;
стрСтрока.Представление = ?(ПустаяСтрока(МетаД.Синоним), МетаД.Имя, МетаД.Синоним);
стрСтрока.ИндексКартинки = ИндексКартинки;
спПодсистемы = Новый СписокЗначений;
//Для каждого Подсистема из МетаД.Подсистемы цикл
// ИмяПодсистемы = Подсистема.Имя;
// спПодсистемы.Добавить(ИмяПодсистемы);
//
// стрПодсистема = дзВсеПодсистемы.Строки.Найти(ИмяПодсистемы, "Имя", Истина);
// Пока стрПодсистема.Родитель <> Неопределено цикл
// стрПодсистема = стрПодсистема.Родитель;
//
// Если спПодсистемы.НайтиПоЗначению(стрПодсистема.Имя) = Неопределено тогда
// спПодсистемы.Добавить(стрПодсистема.Имя);
// КонецЕсли;
// КонецЦикла;
//КонецЦикла;
стрСтрока.Подсистемы = спПодсистемы;
КонецПроцедуры // ДобавитьОбъект
///////////////////////////////////////////////////////////////////////////////
Процедура ДобавитьВетвьМетаданных(Ветвь, Знач ИмяВетви, Знач КартинкаВетви=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);
ВыводСодержимогоКаталогов(дзВсеОбъекты);
ВыводСохраненныхВнешнихОбработок(дзВсеОбъекты);
ВыводСохраненныхНастроекОтчетов(дзВсеОбъекты);
СортироватьВторойУровеньДерева(дзВсеОбъекты);
КонецПроцедуры // ЗаполнитьДеревоВсехОбъектов
Процедура СортироватьВторойУровеньДерева(Дерево) Экспорт
// +++.ДОБАВЛЕНИЕ.12/04/29-20:16:37.<2iS>.СтарыхСА
ИмяОсновногоПредставления = ПолучитьИмяОсновногоПредставления();
Для каждого стрВетви из Дерево.Строки цикл
стрВетви.Строки.Сортировать("Вид УБЫВ, " + ИмяОсновногоПредставления, Ложь);
КонецЦикла;
// ---.ДОБАВЛЕНИЕ.12/04/29-20:16:37.<2iS>.СтарыхСА
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
Процедура ЗаполнитьДеревоИнтерфейса(Форма) Экспорт
стСтрока = СохранитьВыбраннуюСтроку(Форма);
мРазвернутыеВетви = СохранитьРазвернутыеВетви(Форма);
ДеревоИнтерфейса.Строки.Очистить();
ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма);
НачатьФоновыйПоиск(Форма);
элДерево = Форма.ЭлементыФормы.ДеревоИнтерфейса;
ТекущаяСтрокаУстановлена = ВосстановитьВыбраннуюСтроку(стСтрока, Форма);
//Если НЕ (СтатическиеВетки[элДерево.ТекущаяСтрока] = Неопределено) И
// элДерево.ТекущаяСтрока.Строки.Количество() > 0
//Тогда
// элДерево.ТекущаяСтрока = элДерево.ТекущаяСтрока.Строки[0];
//КонецЕсли;
//ВосстановитьРазвернутыеВетви(мРазвернутыеВетви, Форма);
ИндексНачальнойСтроки = 4;
ЧислоДинамическихСтрок = 0;
ТаблицаТиповМетаОбъектов = мПлатформа.ТаблицаТиповМетаОбъектов;
Счетчик = 1;
Для Индекс = ИндексНачальнойСтроки По ДеревоИнтерфейса.Строки.Количество() - 1 Цикл
СтрокаДерева = ДеревоИнтерфейса.Строки[Индекс];
ВсеСтроки = ирОбщий.ПолучитьВсеСтрокиДереваЗначенийЛкс(СтрокаДерева);
Для Каждого ДочерняяСтрокаДерева Из ВсеСтроки Цикл
СтрокаТипаМетаОбъектов = ТаблицаТиповМетаОбъектов.Найти(ДочерняяСтрокаДерева.Вид, "Множественное");
Если Ложь
Или СтрокаТипаМетаОбъектов = Неопределено
Или СтрокаТипаМетаОбъектов.Категория <> 0
Тогда
Продолжить;
КонецЕсли;
ДочерняяСтрокаДерева.ПолноеИмяОбъекта = "" + СтрокаТипаМетаОбъектов.Единственное + "." + ДочерняяСтрокаДерева.Имя;
ДочерняяСтрокаДерева.Порядок = Счетчик;
Счетчик = Счетчик + 1;
//ОписаниеТаблицы = ирОбщий.ПолучитьОписаниеТаблицыБДИис(ДочерняяСтрокаДерева.ПолноеИмяОбъекта);
//Если Истина
// И ОписаниеТаблицы <> Неопределено
// И ОписаниеТаблицы.КоличествоСтрок <> Неопределено
//Тогда
// ирОбщий.ДобавитьКоличествоСтрокРодителюЛкс(ДочерняяСтрокаДерева, ОписаниеТаблицы.КоличествоСтрок);
//КонецЕсли;
КонецЦикла;
СтрокаДерева.Порядок = Счетчик;
Счетчик = Счетчик + 1;
ЧислоДинамическихСтрок = ЧислоДинамическихСтрок + ВсеСтроки.Количество();
КонецЦикла;
//ТекущаяСтрокаУстановлена = ТекущаяСтрокаУстановлена И элДерево.ТекущаяСтрока <> элДерево.Значение.Строки[ИндексНачальнойСтроки];
Если ЧислоДинамическихСтрок > 0 Тогда
Если ЧислоДинамическихСтрок <= 30 Тогда
ирОбщий.ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(элДерево, ИндексНачальнойСтроки);
Если Не ТекущаяСтрокаУстановлена Тогда
элДерево.ТекущаяСтрока = элДерево.Значение.Строки[ИндексНачальнойСтроки].Строки[0];
КонецЕсли;
Иначе
Если Не ТекущаяСтрокаУстановлена Тогда
элДерево.ТекущаяСтрока = элДерево.Значение.Строки[ИндексНачальнойСтроки];
КонецЕсли;
КонецЕсли;
Иначе
Если Истина
И Не ТекущаяСтрокаУстановлена
И НЕ (СтатическиеВетки[элДерево.ТекущаяСтрока] = Неопределено)
И элДерево.ТекущаяСтрока.Строки.Количество() > 0
Тогда
элДерево.ТекущаяСтрока = элДерево.ТекущаяСтрока.Строки[0];
КонецЕсли;
КонецЕсли;
//ирОбщий.ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоИнтерфейса);
КонецПроцедуры // ЗаполнитьДеревоИнтерфейса
#Если Клиент Тогда
Процедура ЗагрузитьНастройки() Экспорт
стНастройки = ВосстановитьЗначение("ирИнтерфейснаяПанель.Настройки");
Если ТипЗнч(стНастройки) <> Тип("Структура") тогда
стНастройки = Новый Структура;
КонецЕсли;
Если НЕ стНастройки.Свойство("ФильтрПодсистем") тогда
стНастройки.Вставить("ФильтрПодсистем");
КонецЕсли;
Если НЕ стНастройки.Свойство("ФильтрИмен") тогда
стНастройки.Вставить("ФильтрИмен");
КонецЕсли;
Если НЕ стНастройки.Свойство("ИсторияФильтраИмен") тогда
стНастройки.Вставить("ИсторияФильтраИмен");
стНастройки.ИсторияФильтраИмен = Новый Массив;
КонецЕсли;
Если НЕ стНастройки.Свойство("РазвернутыеСтроки") тогда
стНастройки.Вставить("РазвернутыеСтроки");
стНастройки.РазвернутыеСтроки = Новый Массив;
КонецЕсли;
Если НЕ стНастройки.Свойство("ВыбраннаяСтрока") тогда
стНастройки.Вставить("ВыбраннаяСтрока");
КонецЕсли;
Если НЕ стНастройки.Свойство("СтатистикаИспользования") тогда
стНастройки.Вставить("СтатистикаИспользования");
тзСтатистикаИспользования = Новый ТаблицаЗначений;
тзСтатистикаИспользования.Колонки.Добавить("Вид");
тзСтатистикаИспользования.Колонки.Добавить("Имя");
тзСтатистикаИспользования.Колонки.Добавить("КоличествоИспользований");
тзСтатистикаИспользования.Колонки.Добавить("ПоследнееИспользование");
стНастройки.СтатистикаИспользования = тзСтатистикаИспользования;
КонецЕсли;
// ДЛя произвольных статических веток
Для каждого КлючЗначение Из МассивСтатическихВеток Цикл
ИмяКолонки = КлючЗначение.Имя;
Если стНастройки.СтатистикаИспользования.Колонки.Найти(ИмяКолонки) = Неопределено Тогда
// Эта колонка была добавлена позже, ее может не быть в сохраненных настройках
Попытка
стНастройки.СтатистикаИспользования.Колонки.Добавить(ИмяКолонки);
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если НЕ стНастройки.Свойство("Каталоги") тогда
стНастройки.Вставить("Каталоги", Новый Соответствие);
КонецЕсли;
///////////////////////////////////////////////////////////////////////////////
// Параметры обработки
Если НЕ стНастройки.Свойство("ИсторияКоманд") Тогда
стНастройки.Вставить("ИсторияКоманд", ИсторияКоманд);
КонецЕсли;
Если НЕ стНастройки.Свойство("ИспользоватьРегулярныеВыражения") Тогда
стНастройки.Вставить("ИспользоватьРегулярныеВыражения", ИспользоватьРегулярныеВыражения);
КонецЕсли;
Если стНастройки.ИспользоватьРегулярныеВыражения Тогда
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Ложь;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
КонецЕсли;
// Глобальный поиск
Если НЕ стНастройки.Свойство("ПолнотекстовыйПоискПорогНечеткости") Тогда
стНастройки.Вставить("ПолнотекстовыйПоискПорогНечеткости",ПолнотекстовыйПоискПорогНечеткости);
КонецЕсли;
Если НЕ стНастройки.Свойство("ПолнотекстовыйПоискРазмерПорции") Тогда
стНастройки.Вставить("ПолнотекстовыйПоискРазмерПорции",ПолнотекстовыйПоискРазмерПорции);
КонецЕсли;
// Порядок форм
Если НЕ стНастройки.Свойство("ПриАвтозапускеОткрыватьФормуСписка") Тогда
стНастройки.Вставить("ПриАвтозапускеОткрыватьФормуСписка", ПриАвтозапускеОткрыватьФормуСписка);
КонецЕсли;
Если НЕ стНастройки.Свойство("флИспользоватьУмныйПоиск") Тогда
// +++.ДОБАВЛЕНИЕ.12/04/22-01:04:18.<2iS>.СтарыхСА
стНастройки.Вставить("флИспользоватьУмныйПоиск", Ложь);
// ---.ДОБАВЛЕНИЕ.12/04/22-01:04:18.<2iS>.СтарыхСА
КонецЕсли;
// +++.ДОБАВЛЕНИЕ.12/04/21-11:08:09.<2iS>.СтарыхСА
Если НЕ стНастройки.Свойство("флИмяСиноним") Тогда
стНастройки.Вставить("флИмяСиноним", флИмяСиноним);
КонецЕсли;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:08:09.<2iS>.СтарыхСА
Если НЕ стНастройки.Свойство("флИскатьВПодкаталогах") Тогда
стНастройки.Вставить("флИскатьВПодкаталогах", Истина);
КонецЕсли;
Если НЕ стНастройки.Свойство("флВложенныеПодсистемы") Тогда
стНастройки.Вставить("флВложенныеПодсистемы", Истина);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, стНастройки);
КонецПроцедуры // ЗагрузитьНастройки
Процедура СохранитьНастройки(Форма) Экспорт
стНастройки.ФильтрПодсистем = ФильтрПодсистем;
стНастройки.ФильтрИмен = ФильтрИмен;
стНастройки.РазвернутыеСтроки = СохранитьРазвернутыеВетви(Форма);
стНастройки.ВыбраннаяСтрока = СохранитьВыбраннуюСтроку(Форма);
мИсторияФильтраИмен = Новый Массив;
Для каждого зн из Форма.ЭлементыФормы.ФильтрИмен.СписокВыбора цикл
мИсторияФильтраИмен.Добавить(зн.Значение);
КонецЦикла;
стНастройки.ИсторияФильтраИмен = мИсторияФильтраИмен;
ЗаполнитьЗначенияСвойств(стНастройки, ЭтотОбъект);
СохранитьЗначение("ирИнтерфейснаяПанель.Настройки", стНастройки);
КонецПроцедуры // СохранитьНастройки
#КонецЕсли
///////////////////////////////////////////////////////////////////////////////
Процедура ОбновитьСтатистикуИспользования(стрОбъект, Форма) Экспорт
ТекДата = ТекущаяДата();
тзСтатистикаИспользования = стНастройки.СтатистикаИспользования;
стПоиск = Новый Структура("Вид,Имя");
стПоиск.Вид = стрОбъект.Вид;
стПоиск.Имя = стрОбъект.Имя;
мСтроки = тзСтатистикаИспользования.НайтиСтроки(стПоиск);
Если мСтроки.Количество() = 0 тогда
стрСтатистика = тзСтатистикаИспользования.Добавить();
стрСтатистика.Вид = стрОбъект.Вид;
стрСтатистика.Имя = стрОбъект.Имя;
стрСтатистика.КоличествоИспользований = 1;
стрСтатистика.ПоследнееИспользование = ТекДата;
Иначе
стрСтатистика = мСтроки[0];
стрСтатистика.КоличествоИспользований = стрСтатистика.КоличествоИспользований + 1;
стрСтатистика.ПоследнееИспользование = ТекДата;
КонецЕсли;
стНастройки.СтатистикаИспользования = тзСтатистикаИспользования;
// Сохраним старую выделенную строку
ТекСтрока = Форма.ЭлементыФормы.ДеревоИнтерфейса.ТекущаяСтрока;
стСтрока = Неопределено;
Для каждого СтатическаяВетка Из СтатическиеВетки Цикл
Если НЕ (СтатическиеВетки[ТекСтрока.Родитель] = Неопределено) тогда
стСтрока = СохранитьВыбраннуюСтроку(Форма);
КонецЕсли;
КонецЦикла;
ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма);
// Восстановим старую выделенную строку
Если стСтрока <> Неопределено тогда
ВосстановитьВыбраннуюСтроку(стСтрока, Форма);
КонецЕсли;
КонецПроцедуры // ОбновитьСтатистикуИспользования
// Добавляет строку в статическую ветку (автозапуск, избранное и т.п.)
//
// Параметры
// СтрокаДерева - строка дерева значений, которую требуется добавить в статическую ветку
//
Функция ДобавитьСтрокуВСтатическуюВетку(СтрокаДерева, ИмяКолонки) Экспорт
тзСтатистикаИспользования = стНастройки.СтатистикаИспользования;
СтрокаСтатическойВетки = тзСтатистикаИспользования.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСтатическойВетки, СтрокаДерева);
СтрокаСтатическойВетки[ИмяКолонки] = 1;
Возврат СтрокаСтатическойВетки;
КонецФункции //
// Открывает форму обработки.
// Предназначена для автооткрытия формы в 1С при запуске.
// Помещаем в табло команду ВнешниеОбработки.Создать("<путь>ip8.epf").Открыть() и при каждом запуске, если окно табло включено, обработка будет запускаться автоматически
// Параметры
//
// Возвращаемое значение:
// булево - статус открытия (октрылась или нет)
//
Функция Открыть() экспорт
Форма = ЭтотОбъект.ПолучитьФорму();
Форма.Открыть();
Возврат Форма.Открыта()
КонецФункции // Открыть()
//////////////////////////////////////////////////////////////////////////////
// проверяет условия с помощью регулярных выражений,
// если НЕ ТолькоПроверка - заменяет выражение с помощью шаблона ШаблонЗамены и возвращает в переменной ИтоговаяСтрока
Функция ПроверитьУсловие(СтрокаПоиска,ШаблонПоиска,ТолькоПроверка=Истина,ШаблонЗамены="",ИтоговаяСтрока="") Экспорт
Попытка
RegExp.Pattern = ШаблонПоиска;
Найдено = RegExp.Test(СтрокаПоиска);
Исключение
//Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Если НЕ Найдено или ТолькоПроверка тогда
ИтоговаяСтрока = "";
возврат Найдено ;
Иначе
ИтоговаяСтрока = RegExp.Replace(СтрокаПоиска,ШаблонЗамены);
возврат Найдено;
КонецЕсли;
КонецФункции // ПроверитьУсловие()
Функция ПолучитьИмяОсновногоПредставления()
// +++.ДОБАВЛЕНИЕ.12/04/21-10:55:56.<2iS>.СтарыхСА
Если флИмяСиноним Тогда
ИмяКолонкиПредставления = "Имя";
Иначе
ИмяКолонкиПредставления = "Представление";
КонецЕсли;
Возврат ИмяКолонкиПредставления;
// ---.ДОБАВЛЕНИЕ.12/04/21-10:55:56.<2iS>.СтарыхСА
КонецФункции
///////////////////////////////////////////////////////////////////////////////
Функция ОбъектПроходитФильтры(стрОбъект, Знач СтрокаПоиска = "", ПроверятьПодсистему = Ложь, ОбъектыВыбранныхПодсистем = Неопределено)
Если СтрокаПоиска = "" Тогда
СтрокаПоиска = мВременныйФильтрИмен;
КонецЕсли;
// Поиск - по представлению
Если ТипЗнч(СтрОбъект) = Тип("СтрокаДереваЗначений") Тогда
// +++.ДОБАВЛЕНИЕ.12/04/21-10:55:56.<2iS>.СтарыхСА
ИмяКолонкиПредставления = ПолучитьИмяОсновногоПредставления();
Представление = стрОбъект[ИмяКолонкиПредставления];
// ---.ДОБАВЛЕНИЕ.12/04/21-10:55:56.<2iS>.СтарыхСА
Иначе
// В случае передачи имени файла
Представление = стрОбъект;
КонецЕсли;
// +++.ДОБАВЛЕНИЕ.12/04/21-11:38:57.<2iS>.СтарыхСА
МассивФрагментов = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(СтрокаПоиска, " ", Истина);
Для Каждого СтрокаПоиска Из МассивФрагментов Цикл
// Собственно, поиск по подстроке
Если НЕ (ПустаяСтрока(СокрЛП(СтрокаПоиска))) Тогда
Если ?(стНастройки.ИспользоватьРегулярныеВыражения,
НЕ ПроверитьУсловие(Представление, СтрокаПоиска), // Проверка регулярным выражением
(Найти(НРег(Представление), НРег(СтрокаПоиска)) = 0) // Проверка обычным поиском
)
Тогда
// Полная строка не нашлась, попробуем найти строку без уточняющего суффикса
Если флПробоватьУмныйПоиск = Истина Тогда
Если ?(стНастройки.ИспользоватьРегулярныеВыражения,
НЕ ПроверитьУсловие(Представление, СтрокаУмногоПоискаБезСуффикса), // Проверка регулярным выражением
(Найти(НРег(Представление), НРег(СтрокаУмногоПоискаБезСуффикса)) = 0) // Проверка обычным поиском
)
Тогда
Возврат Ложь;
КонецЕсли
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:38:57.<2iS>.СтарыхСА
// Отбор по подсистемам - самый медленный, оставим его напоследок
Если Истина
И НЕ ПустаяСтрока(ФильтрПодсистем)
// +++.ДОБАВЛЕНИЕ.12/10/30-01:03:35.<2iS>.СтарыхСА
//И ФильтрПодсистем <> ИмяКорневойПодсистемы
// ---.ДОБАВЛЕНИЕ.12/10/30-01:03:35.<2iS>.СтарыхСА
И НЕ ПроверятьПодсистему
Тогда
// Если установлен фильтр подсистемы, то нужны только объекты метаданных, настройки отчетов, внешние обработки и файлы не выводим
Возврат Ложь;
КонецЕсли;
Если Истина
И Не ПустаяСтрока(ФильтрПодсистем)
И ФильтрПодсистем <> ИмяКорневойПодсистемы
Тогда
// Проверка подсистем
Если Истина
И ПроверятьПодсистему
И ФильтрПодсистем <> ИмяКорневойПодсистемы
И Не ПустаяСтрока(ФильтрПодсистем)
Тогда
// Убрать мусор, который не относится к подсистемам
Если стрОбъект.Вид = "СправочникВнешниеОбработки" Тогда
Возврат Ложь;
КонецЕсли;
Если мПлатформа.ИДВерсииПлатформы >= "82" Тогда
ОбъектМД = Метаданные[стрОбъект.Вид][стрОбъект.Имя];
Если ОбъектыВыбранныхПодсистем[ОбъектМД] = Неопределено тогда
Возврат Ложь;
КонецЕсли;
Иначе
Если (стрОбъект.Подсистемы.НайтиПоЗначению(ФильтрПодсистем) = Неопределено) тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции // ОбъектПроходитФильтры
///////////////////////////////////////////////////////////////////////////////
Процедура ЗаполнитьСтатическиеВеткиДереваИнтерфейса(Форма, УстановитьТекущуюСтроку = Неопределено) Экспорт
Если УстановитьТекущуюСтроку <> Неопределено Тогда
ИмяДляУстановкиТекущейСтроки = УстановитьТекущуюСтроку.Имя;
КонецЕсли;
Если СтатическиеВетки = Неопределено ИЛИ ДеревоИнтерфейса.Строки.Количество() = 0 Тогда
СтатическиеВетки = Новый Соответствие();
Для каждого ЭлементМассива Из МассивСтатическихВеток Цикл
Если ЭлементМассива.Использовать = Истина Тогда
СтрокаКорняСтатическойВетки = ДеревоИнтерфейса.Строки.Добавить();
СтрокаКорняСтатическойВетки.Имя = ЭлементМассива.Имя;
СтрокаКорняСтатическойВетки.Представление = ЭлементМассива.Представление;
СтатическиеВетки.Вставить(СтрокаКорняСтатическойВетки, ЭлементМассива);
КонецЕсли;
КонецЦикла;
КонецЕсли;
элДеревоИнтерфейса = Форма.ЭлементыФормы.ДеревоИнтерфейса;
// Для избежания дублей статистику надо свернуть
тзСтатистикаИспользования = стНастройки.СтатистикаИспользования;
СтрокаКолонокДляСвертки = "";
Для каждого СтатическаяВетка Из СтатическиеВетки Цикл
Если СтатическаяВетка.Значение.РазрешитьПеретаскивание = Истина Тогда
СтрокаКолонокДляСвертки = СтрокаКолонокДляСвертки + "," + СтатическаяВетка.Значение.Имя;
КонецЕсли;
КонецЦикла;
тзСтатистикаИспользования.Свернуть("Вид,Имя,ПоследнееИспользование","КоличествоИспользований"+СтрокаКолонокДляСвертки);
стПоиск = Новый Структура("Вид,Имя");
Для каждого СтатическаяВетка Из СтатическиеВетки Цикл
Если СтатическаяВетка.Значение.Использовать = Ложь Тогда
Продолжить;
КонецЕсли;
//
тзСтатистикаИспользования.Сортировать(СтатическаяВетка.Значение.СтрокаСортировки);
СтрокиКорня = СтатическаяВетка.Ключ.Строки;
СтрокиКорня.Очистить();
нВставленоПозиций = 0;
Для каждого стрСтатистика из тзСтатистикаИспользования цикл
ЗаполнитьЗначенияСвойств(стПоиск, стрСтатистика);
Если СтатическаяВетка.Ключ.Строки.НайтиСтроки(стПоиск, Истина).Количество() = 0 Тогда
Если нВставленоПозиций > СтатическаяВетка.Значение.КоличествоОтображаемыхЭлементов Тогда
Прервать;
КонецЕсли;
ЗначениеСортировки = стрСтатистика[Лев(СтатическаяВетка.Значение.СтрокаСортировки,Найти(СтатическаяВетка.Значение.СтрокаСортировки, " ")-1)];
Если ЗначениеСортировки = Неопределено ИЛИ ЗначениеСортировки = 0 ИЛИ ЗначениеСортировки = '00010101' // Попытка универсального подхода к отсечке пустых значений
тогда
Прервать;
КонецЕсли;
Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(стПоиск.Имя) Тогда
//СсылкаПоИД = ПолучитьСсылкуПоУИД(стПоиск.Вид, стПоиск.Имя); // Попытка открыть результат полнотекстового поиска
//Если СсылкаПоИД = Неопределено Тогда
// Продолжить;
//КонецЕсли;
СсылкаПоИД = стПоиск.Имя;
Представление = Строка(СсылкаПоИД);
Если Истина
И СтатическаяВетка.Значение.Фильтровать
И НЕ ?(стНастройки.ИспользоватьРегулярныеВыражения,
ПроверитьУсловие(Представление, мВременныйФильтрИмен),
Найти(НРег(Представление), НРег(мВременныйФильтрИмен)) > 0)
Тогда
Продолжить;
КонецЕсли;
стрОбъектИнтерфейса = СтрокиКорня.Добавить();
стрОбъектИнтерфейса.Вид = стПоиск.Вид;
стрОбъектИнтерфейса.Имя = стПоиск.Имя;
//стрОбъектИнтерфейса.Представление = Представление;
стрОбъектИнтерфейса.Представление = стПоиск.Имя;
стрОбъектИнтерфейса.ИндексКартинки = 62;
Иначе
// Обработка результатов полнотекстового поиска в случае, если они не видны
мСтроки = дзВсеОбъекты.Строки.НайтиСтроки(стПоиск, Истина);
Если мСтроки.Количество() = 0 тогда
// Попытка поиска среди объектов - не метаданных (работает только с теми элементами, которые видны)
мСтроки = ДеревоИнтерфейса.Строки.НайтиСтроки(стПоиск, Истина);
Если мСтроки.Количество() = 0 тогда
Продолжить;
Иначе
стрОбъект = мСтроки[0];
ИндексКартинки = стрОбъект.ИндексКартинки;
КонецЕсли;
Иначе
стрОбъект = мСтроки[0];
ИндексКартинки = стрОбъект.ИндексКартинки;
КонецЕсли;
Если СтатическаяВетка.Значение.Фильтровать И НЕ ОбъектПроходитФильтры(стрОбъект) тогда
Продолжить;
КонецЕсли;
стрОбъектИнтерфейса = СтрокиКорня.Добавить();
стрОбъектИнтерфейса.Вид = стрОбъект.Вид;
стрОбъектИнтерфейса.Имя = стрОбъект.Имя;
стрОбъектИнтерфейса.Представление = стрОбъект.Представление;
стрОбъектИнтерфейса.ИндексКартинки = ИндексКартинки;
КонецЕсли;
нВставленоПозиций = нВставленоПозиций + 1;
КонецЕсли;
КонецЦикла;
Если НЕ ПустаяСтрока(СтатическаяВетка.Значение.СортировкаПриОтображении) Тогда
СтрокиКорня.Сортировать(СтатическаяВетка.Значение.СортировкаПриОтображении);
КонецЕсли;
РазвернутьВетку = Ложь;
Если СтатическаяВетка.Значение.Свойство("Развернуть", РазвернутьВетку) И РазвернутьВетку = Истина Тогда
Если НЕ элДеревоИнтерфейса.Развернут(СтатическаяВетка.Ключ) тогда
элДеревоИнтерфейса.Развернуть(СтатическаяВетка.Ключ);
КонецЕсли;
Иначе
Если элДеревоИнтерфейса.Развернут(СтатическаяВетка.Ключ) тогда
элДеревоИнтерфейса.Свернуть(СтатическаяВетка.Ключ);
КонецЕсли;
КонецЕсли;
СтатическаяВетка.Ключ.Представление = СтатическаяВетка.Значение.Представление;
СтатическаяВетка.Ключ.ИндексКартинки = -1;
СтатическаяВетка.Ключ.Имя = СтатическаяВетка.Значение.Имя;
КонецЦикла;
Если ИмяДляУстановкиТекущейСтроки <> Неопределено Тогда
НоваяТекущаяСтрока = ДеревоИнтерфейса.Строки.Найти(ИмяДляУстановкиТекущейСтроки, "Имя", Истина);
Если НоваяТекущаяСтрока <> Неопределено Тогда
элДеревоИнтерфейса.ТекущаяСтрока = НоваяТекущаяСтрока;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ЗаполнитьСтатическиеВеткиДереваИнтерфейса
//////////////////
// Фоновые команды
Процедура НачатьФоновыйПоиск(Форма) Экспорт
// +++.ДОБАВЛЕНИЕ.12/04/21-10:21:47.<2iS>.СтарыхСА
Если флИспользоватьУмныйПоиск Тогда
КомандыПоиска.Добавить("ПоискПоМетаданным");
Иначе
ПоискПоМетаданным();
КонецЕсли;
// ---.ДОБАВЛЕНИЕ.12/04/21-10:21:47.<2iS>.СтарыхСА
КомандыПоиска.Добавить("ВыводСохраненныхНастроекОтчетов");
КомандыПоиска.Добавить("ПолнотекстовыйПоиск");
// Эти ветки теперь хранятся целиком в дзВсеОбъекты
//КомандыПоиска.Добавить("ВыводСодержимогоКаталогов");
//КомандыПоиска.Добавить("ВыводСохраненныхВнешнихОбработок");
Форма.ПодключитьОбработчикОжидания("ФоновыйПоиск", 0.1, Истина);
КонецПроцедуры
Функция ВыполнитьФоновыйПоиск() Экспорт
Если КомандыПоиска.Количество()>0 Тогда
Выполнить(КомандыПоиска[0]+"()");
КомандыПоиска.Удалить(0);
Возврат Истина
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ОбъектыВыбранныхПодсистем(СтрокаДереваПодсистем = Неопределено, ОбъектыВыбранныхПодсистем = Неопределено)
Если ОбъектыВыбранныхПодсистем = Неопределено Тогда
ОбъектыВыбранныхПодсистем = Новый Соответствие;
КонецЕсли;
Если СтрокаДереваПодсистем = Неопределено Тогда
СтрокаДереваПодсистем = дзВсеПодсистемы.Строки.Найти(ФильтрПодсистем, "ПолноеИмя" ,Истина);
КонецЕсли;
Если СтрокаДереваПодсистем <> Неопределено Тогда
Если флВложенныеПодсистемы И СтрокаДереваПодсистем.Строки.Количество() Тогда
Для каждого Подсистема Из СтрокаДереваПодсистем.Строки Цикл
ОбъектыВыбранныхПодсистем(Подсистема, ОбъектыВыбранныхПодсистем)
КонецЦикла;
КонецЕсли;
Для Каждого ЭлементСостава Из СтрокаДереваПодсистем.МД.Состав Цикл
ОбъектыВыбранныхПодсистем.Вставить(ЭлементСостава, 1);
КонецЦикла;
КонецЕсли;
Возврат ОбъектыВыбранныхПодсистем;
КонецФункции
Процедура ПоискПоМетаданным()
Перем НайденныйОбъект;
ОбновитьФильтрУмногоПоиска();
СтрокаНулей = "00000000000000";
// Фильтр подсистем для ускорения определим один раз
ОбъектыВыбранныхПодсистем = ОбъектыВыбранныхПодсистем();
Для каждого стрКорень из дзВсеОбъекты.Строки цикл
СтрокиКорня = Неопределено;
Для каждого стрОбъект из стрКорень.Строки цикл
Если НЕ ОбъектПроходитФильтры(стрОбъект,, ВеткиМетаданных.НайтиПоЗначению(стрКорень.Имя) <> Неопределено, ОбъектыВыбранныхПодсистем) тогда
Продолжить;
КонецЕсли;
Если СтрокиКорня = Неопределено тогда
стрКореньИнтерфейса = ДеревоИнтерфейса.Строки.Добавить();
стрКореньИнтерфейса.Представление = стрКорень.Представление;
// +++.ДОБАВЛЕНИЕ.12/04/21-11:30:29.<2iS>.СтарыхСА
стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:30:29.<2iS>.СтарыхСА
стрКореньИнтерфейса.ИндексКартинки = стрКорень.ИндексКартинки;
СтрокиКорня = стрКореньИнтерфейса.Строки;
КонецЕсли;
стрОбъектИнтерфейса = СтрокиКорня.Добавить();
стрОбъектИнтерфейса.Вид = стрОбъект.Вид;
стрОбъектИнтерфейса.Имя = стрОбъект.Имя;
стрОбъектИнтерфейса.Представление = стрОбъект.Представление;
стрОбъектИнтерфейса.ИндексКартинки = стрОбъект.ИндексКартинки;
Если флПробоватьУмныйПоиск = Истина Тогда
Попытка
ОбъектМД = Метаданные[стрОбъект.Вид][стрОбъект.Имя];
Исключение
// Метаданные кончились
Возврат
КонецПопытки;
Если Ложь
Или стрОбъект.Вид = "Справочники"
ИЛИ стрОбъект.Вид = "ПланыВидовХарактеристик"
ИЛИ стрОбъект.Вид = "ПланыСчетов"
ИЛИ стрОбъект.Вид = "ПланыВидовРасчета"
ИЛИ стрОбъект.Вид = "Документы"
ИЛИ стрОбъект.Вид = "БизнесПроцессы"
ИЛИ стрОбъект.Вид = "Задачи"
Тогда
Если Ложь
Или стрОбъект.Вид = "Справочники"
ИЛИ стрОбъект.Вид = "ПланыВидовХарактеристик"
ИЛИ стрОбъект.Вид = "ПланыСчетов"
ИЛИ стрОбъект.Вид = "ПланыВидовРасчета"
Тогда
ДлинаКода = ОбъектМД.ДлинаКода;
Если Истина
И ДлинаКода > 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/04/21-11:31:23.<2iS>.СтарыхСА
стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:31:23.<2iS>.СтарыхСА
стрКореньИнтерфейса.ИндексКартинки = 12;
СтрокиКорня = стрКореньИнтерфейса.Строки;
КонецЕсли;
стрОбъектИнтерфейса = СтрокиКорня.Добавить();
стрОбъектИнтерфейса.Вид = ВидФайла;
стрОбъектИнтерфейса.Имя = НайденныйФайл.ПолноеИмя;
стрОбъектИнтерфейса.Представление = НайденныйФайл.ИмяБезРасширения;
стрОбъектИнтерфейса.ИндексКартинки = ИндексКартинки;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВыводСохраненныхНастроекОтчетов(ДеревоОбъектов = Неопределено, СтрокаПоиска = "")
// Вывод сохраненных настроек отчетов
Если ЕстьУниверсальныйОтчет И Есть_РС_СохраненныеНастройки Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СохраненныеНастройки.ИмяОбъекта КАК Вид,
| СохраненныеНастройки.НаименованиеНастройки как Имя,
| СохраненныеНастройки.НаименованиеНастройки как Представление,
| 24 как ИндексКартинки
|ИЗ
| РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки
|ГДЕ
| Выразить(СохраненныеНастройки.ИмяОбъекта как Строка(12)) = ""ОтчетОбъект.""
| И СохраненныеНастройки.Пользователь = &ТекущийПользователь";
Запрос.УстановитьПараметр("ТекущийПользователь", мТекущийПользователь);
РезультатЗапросаПоНастройкам = Запрос.Выполнить();
Если НЕ РезультатЗапросаПоНастройкам.Пустой() Тогда
СтрокаКорняОтчетов = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Найти("Отчеты");
ВыборкаНастроек = РезультатЗапросаПоНастройкам.Выбрать();
Пока ВыборкаНастроек.Следующий() Цикл
Если НЕ ОбъектПроходитФильтры(ВыборкаНастроек.Представление, СтрокаПоиска) Тогда
Продолжить;
КонецЕсли;
Если СтрокаКорняОтчетов = Неопределено Тогда
стрКореньИнтерфейса = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Добавить();
стрКореньИнтерфейса.Представление = "Отчеты";
// +++.ДОБАВЛЕНИЕ.12/04/21-11:31:58.<2iS>.СтарыхСА
стрКореньИнтерфейса.Имя = стрКореньИнтерфейса.Представление;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:31:58.<2iS>.СтарыхСА
стрКореньИнтерфейса.ИндексКартинки = 23;
СтрокиКорня = стрКореньИнтерфейса.Строки;
Иначе
СтрокиКорня = СтрокаКорняОтчетов.Строки;
КонецЕсли;
ИмяОтчета = Сред(ВыборкаНастроек.Вид, Найти(ВыборкаНастроек.Вид, ".")+1);
СтрокаОтчетаДляНастройки = СтрокиКорня.Найти(ИмяОтчета, "Имя", Истина);
Если СтрокаОтчетаДляНастройки = Неопределено Тогда
МДОтчет = Метаданные.Отчеты.Найти(ИмяОтчета);
Если МДОтчет = Неопределено Тогда
// Случай, когда в регистре сведний хранится название уже несуществующего отчета
Продолжить;
Иначе
СтрокаОтчетаДляНастройки = СтрокиКорня.Добавить();
СтрокаОтчетаДляНастройки.Вид = "Отчеты";
СтрокаОтчетаДляНастройки.Имя = ИмяОтчета;
СтрокаОтчетаДляНастройки.Представление = МДОтчет.Синоним;
СтрокаОтчетаДляНастройки.ИндексКартинки = 23;
КонецЕсли;
КонецЕсли;
стрОбъектИнтерфейса = СтрокаОтчетаДляНастройки.Строки.Добавить();
ЗаполнитьЗначенияСвойств(стрОбъектИнтерфейса, ВыборкаНастроек);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыводСохраненныхВнешнихОбработок(ДеревоОбъектов = Неопределено, СтрокаПоиска = "")
// Вывод сохраненных внешних обработок
Если ЕстьСправочникВнешнихОбработок Тогда
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеОбработки) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Наименование как Представление, Код как Имя, ""СправочникВнешниеОбработки"" как Вид,
| 19 как ИндексКартинки
|ИЗ
| Справочник.ВнешниеОбработки";
РезультатЗапросаПоСправочникуОбработок = Запрос.Выполнить();
Если НЕ РезультатЗапросаПоСправочникуОбработок.Пустой() Тогда
ПредставлениеКорняВнешнихОбработок = "Справочник ""Внешние обработки""";
СтрокаКорняВнешнихОбработок = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Найти(ПредставлениеКорняВнешнихОбработок);
Если СтрокаКорняВнешнихОбработок = Неопределено Тогда
СтрокаКорняВнешнихОбработок = ?(ДеревоОбъектов = Неопределено, ДеревоИнтерфейса, ДеревоОбъектов).Строки.Добавить();
СтрокаКорняВнешнихОбработок.Представление = ПредставлениеКорняВнешнихОбработок;
// +++.ДОБАВЛЕНИЕ.12/04/21-11:25:37.<2iS>.СтарыхСА
СтрокаКорняВнешнихОбработок.Имя = СтрокаКорняВнешнихОбработок.Представление;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:25:37.<2iS>.СтарыхСА
СтрокаКорняВнешнихОбработок.ИндексКартинки = 18;
КонецЕсли;
СтрокиКорня = СтрокаКорняВнешнихОбработок.Строки;
ВыборкаПоСправочникуВнешнихОбработок = РезультатЗапросаПоСправочникуОбработок.Выбрать();
Пока ВыборкаПоСправочникуВнешнихОбработок.Следующий() Цикл
Если ОбъектПроходитФильтры(ВыборкаПоСправочникуВнешнихОбработок.Представление, СтрокаПоиска) Тогда
стрОбъектИнтерфейса = СтрокаКорняВнешнихОбработок.Строки.Добавить();
ЗаполнитьЗначенияСвойств(стрОбъектИнтерфейса, ВыборкаПоСправочникуВнешнихОбработок);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////
// Глобальный поиск
Процедура ПолнотекстовыйПоиск()
// Полнотекстовый поиск по данным ИБ
Если ПолнотекстовыйПоискВыполнен() Тогда
КоличествоРезультатовПоиска = мСписокПолнотекстовогоПоиска.Количество();
ПолноеКоличествоРезультатовПоиска = мСписокПолнотекстовогоПоиска.ПолноеКоличество();
ПредставлениеКорняПолнотекстовогоПоиска = "Полнотекстовый поиск (" + КоличествоРезультатовПоиска + " из " + ПолноеКоличествоРезультатовПоиска + ")";
СтрокаКорня = ДеревоИнтерфейса.Строки.Найти(ПредставлениеКорняПолнотекстовогоПоиска);
Если СтрокаКорня = Неопределено Тогда
СтрокаКорня = ДеревоИнтерфейса.Строки.Добавить();
СтрокаКорня.Представление = ПредставлениеКорняПолнотекстовогоПоиска;
// +++.ДОБАВЛЕНИЕ.12/04/21-11:25:37.<2iS>.СтарыхСА
СтрокаКорня.Имя = СтрокаКорня.Представление;
// ---.ДОБАВЛЕНИЕ.12/04/21-11:25:37.<2iS>.СтарыхСА
СтрокаКорня.ИндексКартинки = 62;
КонецЕсли;
СтрокиКорня = СтрокаКорня.Строки;
Если мСписокПолнотекстовогоПоиска.НачальнаяПозиция() > 0 Тогда
// Строка возврата назад
КонецЕсли;
Для сч = 0 По КоличествоРезультатовПоиска-1 Цикл
стрОбъектИнтерфейса = СтрокиКорня.Добавить();
ЭлементСпискаПолнотекстовогоПоиска = мСписокПолнотекстовогоПоиска.Получить(сч);
//стрОбъектИнтерфейса.Имя = ЭлементСпискаПолнотекстовогоПоиска.Значение.УникальныйИдентификатор();
стрОбъектИнтерфейса.Имя = ЭлементСпискаПолнотекстовогоПоиска.Значение;
стрОбъектИнтерфейса.Вид = ЭлементСпискаПолнотекстовогоПоиска.Метаданные.ПолноеИмя();
стрОбъектИнтерфейса.Представление = "" + ЭлементСпискаПолнотекстовогоПоиска.Метаданные + ":" + ЭлементСпискаПолнотекстовогоПоиска.Представление;
стрОбъектИнтерфейса.ИндексКартинки = 62;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПолнотекстовыйПоискВыполнен()
Если ФильтрИмен = "" ИЛИ мСписокПолнотекстовогоПоиска = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
МассивМД = Новый Массив();
Если ФильтрПодсистем <> ИмяКорневойПодсистемы И (ПустаяСтрока(ФильтрПодсистем) = Ложь) Тогда
//ПодсистемаФильтра = Метаданные.Подсистемы.Найти(ФильтрПодсистем);
//Для каждого ВидМД Из ВеткиМетаданных Цикл
// Если
// ВидМД.Значение = "Справочники" ИЛИ
// ВидМД.Значение = "Документы"ИЛИ
// ВидМД.Значение = "ПланыВидовХарактеристик"ИЛИ
// ВидМД.Значение = "ПланыСчетов"ИЛИ
// ВидМД.Значение = "ПланыВидовРасчета"ИЛИ
// ВидМД.Значение = "БизнесПроцессы"ИЛИ
// ВидМД.Значение = "Задачи"ИЛИ
// ВидМД.Значение = "ПланыОбмена"
//
// Тогда
// Для Каждого МД Из Метаданные[ВидМД.Представление] Цикл
// Если МД.Подсистемы.Содержит(ПодсистемаФильтра) Тогда
// МассивМД.Добавить(МД);
// КонецЕсли;
// КонецЦикла;
// КонецЕсли;
//КонецЦикла;
Иначе
Для каждого ВидМД Из ВеткиМетаданных Цикл
Если
ВидМД.Значение = "Справочники" ИЛИ
ВидМД.Значение = "Документы"ИЛИ
ВидМД.Значение = "ПланыВидовХарактеристик"ИЛИ
ВидМД.Значение = "ПланыСчетов"ИЛИ
ВидМД.Значение = "ПланыВидовРасчета"ИЛИ
ВидМД.Значение = "БизнесПроцессы"ИЛИ
ВидМД.Значение = "Задачи"ИЛИ
ВидМД.Значение = "ПланыОбмена"
Тогда
Для Каждого МД Из Метаданные[ВидМД.Представление] Цикл
МассивМД.Добавить(МД);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
мСписокПолнотекстовогоПоиска.ОбластьПоиска = МассивМД;
мСписокПолнотекстовогоПоиска.ПорогНечеткости = стНастройки.ПолнотекстовыйПоискПорогНечеткости;
мСписокПолнотекстовогоПоиска.СтрокаПоиска = ФильтрИмен;
мСписокПолнотекстовогоПоиска.РазмерПорции = стНастройки.ПолнотекстовыйПоискРазмерПорции;
мСписокПолнотекстовогоПоиска.ПерваяЧасть();
Возврат мСписокПолнотекстовогоПоиска.ПолноеКоличество()>0;
КонецФункции
///////////////////////////////////////////////////////
// Служебные процедуры и функции
// --------------------------------------------
Функция СтрокаМассив(Знач Значение,Разделитель) Экспорт
Если ТипЗнч(Значение)=Тип("Строка") Тогда
МнСтр=СтрЗаменить(Значение,Разделитель,Символы.ПС);
Массив=Новый Массив;
Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
Массив.Добавить(СтрПолучитьСтроку(МнСтр,н));
КонецЦикла;
Возврат Массив;
ИначеЕсли ТипЗнч(Значение)=Тип("Массив") Тогда
Строка="";
Для Каждого Элемент Из Значение Цикл
Строка=Строка+?(Строка<>"",Разделитель,"")+Элемент;
КонецЦикла;
Возврат Строка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции // гмРазобратьСтроку()
// Устанавливает переменные умного поиска для дальнейшего использования
//
Процедура ОбновитьФильтрУмногоПоиска(Принудительно=Ложь) Экспорт
Если МассивПрефиксовОрганизаций = Неопределено Тогда
//Если Есть_СправочникОрганизаций Тогда
// Запрос = Новый Запрос("Выбрать различные разрешенные Префикс из Справочник.Организации");
// МассивПрефиксовОрганизаций = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Префикс");
// МассивПрефиксовОрганизаций.Добавить("");
//Иначе
МассивПрефиксовОрганизаций = Новый Массив;
//КонецЕсли;
КонецЕсли;
Если стНастройки.флИспользоватьУмныйПоиск = Истина Тогда
Если НЕ Принудительно И ЗначениеЗаполнено(мСловаСтрокиУмногоПоиска) и Лев(ФильтрИмен, СтрДлина(мСловаСтрокиУмногоПоиска[0]))=мСловаСтрокиУмногоПоиска[0] Тогда
Возврат
КонецЕсли;
мСловаСтрокиУмногоПоиска = СтрокаМассив(ФильтрИмен, " ");
КоличествоСлов = мСловаСтрокиУмногоПоиска.Количество();
Если КоличествоСлов>1 Тогда
СтрокаУмногоПоискаБезСуффикса = "";
Для сч=0 По КоличествоСлов-2 Цикл
СтрокаУмногоПоискаБезСуффикса = ?(ПустаяСтрока(СтрокаУмногоПоискаБезСуффикса), "", СтрокаУмногоПоискаБезСуффикса + " ") + мСловаСтрокиУмногоПоиска[сч];
КонецЦикла;
СтрокаСуффиксаУмногоПоиска = мСловаСтрокиУмногоПоиска[КоличествоСлов-1];
ДлинаСуффиксаУмногоПоиска = СтрДлина(СтрокаСуффиксаУмногоПоиска);
Попытка
ЧислоСуффиксаУмногоПоиска = Число(СокрЛП(СтрокаСуффиксаУмногоПоиска));
Исключение
ЧислоСуффиксаУмногоПоиска = 0;
КонецПопытки;
флПробоватьУмныйПоиск = Истина;
Иначе
мСловаСтрокиУмногоПоиска = Неопределено;
СтрокаУмногоПоискаБезСуффикса = "";
СтрокаСуффиксаУмногоПоиска = "";
флПробоватьУмныйПоиск = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбновитьФильтрУмногоПоиска()
// Простейший вывод таблицы значений в табличный документ
//
// Параметры
// ТЗ - таблица значений
//
// Возвращаемое значение:
// Сформированный табличный документ
//
Функция ВывестиТЗвТД(ТЗ, Показывать = Ложь, Заголовок = "Таблица значений") Экспорт
остроительОтчета = Новый ПостроительОтчета;
остроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
остроительОтчета.ЗаполнитьНастройки();
_ТД = Новый ТабличныйДокумент;
остроительОтчета.Вывести(_ТД);
Если Показывать Тогда
_ТД.Показать(Заголовок);
КонецЕсли;
Возврат _ТД;
КонецФункции // ВывестиТЗвТД()
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// РАЗДЕЛ НАСТРОЕК
ИсторияКоманд = 50;
ИспользоватьРегулярныеВыражения = Истина;
ПолнотекстовыйПоискПорогНечеткости = 0;
ПолнотекстовыйПоискРазмерПорции = 0; // Если 0 - то полнотекстовый поиск отключен
//////////////////////////////////////////////////////////////////////////////////////////////
// Соответствие статических веток (История использования и Избранное) и настроек для них
//Представление, - отображение в интерфейсе
//СтрокаСортировки, - строка сортировки в таблице статистики
//КоличествоОтображаемыхЭлементов, - сколько элементов выводить
//Фильтровать - фильтровать ли данную ветку вместе с деревом
МассивСтатическихВеток = Новый Массив;
//// Быстрый поиск
//МассивСтатическихВеток.Добавить(Новый Структура(
// "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть",
// "БыстрыйПоиск",
// Истина, // Использовать ли данную ветку
// "Быстрый поиск", // Представление ветки в дереве
// "БыстрыйПоиск УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся
// 5, // Количество элементов, отображаемых в данной ветке
// Истина, // Фильтровать ли ветку при непустой строке фильтра
// "", // не сортировать
// Ложь, // Разрешить перетаскивание
// Ложь // Автозапуск команд в данной ветке при открытии обработки
// ,Истина // Ветка развернута
// )
// );
// Недавние
МассивСтатическихВеток.Добавить(Новый Структура(
"Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть",
"НедавноИспользованные",
Истина, // Использовать ли данную ветку
"Недавно использованные", // Представление ветки в дереве
"ПоследнееИспользование УБЫВ", // Строка сортировки статистической таблицы. Сортировка определяет, какие элементы выводятся
10, // Количество элементов, отбражаемых в данной ветке
Ложь, // Фильтровать ли ветку при непустой строке фильтра
// Сортировка отображаемых элементов
// "Вид,Имя" - обычная сортировка
"", // сортировка по дате использования
Ложь, // Перетаскивание
Ложь // Автозапуск
,Ложь // Ветка свернута
)
);
// Часто используемые
МассивСтатическихВеток.Добавить(Новый Структура(
"Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть",
"ЧастоИспользуемые",
Истина,
"Часто используемые",
"КоличествоИспользований УБЫВ,ПоследнееИспользование",
10,
Ложь,
// Сортировка отображаемых элементов
"Вид,Имя",
Ложь, // Перетаскивание
Ложь // Автозапуск
,Ложь // Ветка свернута
)
);
// Избранное
МассивСтатическихВеток.Добавить(Новый Структура(
"Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть",
"Избранное",
Истина, // Использовать ли данную ветку
"Избранное", // Представление ветки в дереве
"Избранное УБЫВ",
10,
Ложь,
// Сортировка отображаемых элементов
"Вид,Имя",
Истина, // Перетаскивание
Ложь // Автозапуск
,Ложь // Ветка свернута
)
);
// Автозапуск
МассивСтатическихВеток.Добавить(Новый Структура(
"Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск,Развернуть",
"Автозапуск",
Истина, // Использовать ли данную ветку
"Автозапуск", // Представление ветки в дереве
"Автозапуск УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся
10, // Количество элементов, отображаемых в данной ветке
Ложь, // Фильтровать ли ветку при непустой строке фильтра
"", // не сортировать
Истина, // Разрешить перетаскивание
Истина // Автозапуск команд в данной ветке при открытии обработки
,Ложь // Ветка свернута
)
);
// Пример пользовательской статической ветки (раскомментируйте и добавьте необходимое количество экземпляров)
//СтатическиеВетки.Вставить(ДеревоИнтерфейса.Строки.Добавить(), Новый Структура(
// "Имя,Использовать,Представление,СтрокаСортировки,КоличествоОтображаемыхЭлементов,Фильтровать,СортировкаПриОтображении,РазрешитьПеретаскивание,Автозапуск",
// "МойСборникКоманд", // Представление ветки в дереве
// Истина, // Использовать ли данную ветку
// "Мой сборник команд", // Представление ветки в дереве
// "МойСборникКоманд УБЫВ", // Строка сортировки статистической таблицы. Определяет, какие элементы выводятся
// 10, // Количество элементов, отображаемых в данной ветке
// Ложь, // Фильтровать ли ветку при непустой строке фильтра
// "", // не сортировать
// Истина, // Разрешить перетаскивание
// Ложь // Автозапуск команд в данной ветке при открытии обработки
// )
// );
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ИНИЦИАЛИЗАЦИЯ ОБРАБОТКИ
КолонкиДерева = ДеревоИнтерфейса.Колонки;
Если КолонкиДерева.Найти("Представление") = Неопределено Тогда
КолонкиДерева.Добавить("Представление");
КолонкиДерева.Добавить("Имя");
КолонкиДерева.Добавить("Вид");
КолонкиДерева.Добавить("ИндексКартинки");
КолонкиДерева.Добавить("ПолноеИмяОбъекта");
КолонкиДерева.Добавить("КоличествоСтрок");
КолонкиДерева.Добавить("Порядок");
КонецЕсли;
мПлатформа = ирКэш.Получить();
КомандыПоиска = Новый Массив();
ВеткиМетаданных = Новый СписокЗначений;
ВеткиМетаданных.Добавить("Общие формы", "ОбщиеФормы");
ВеткиМетаданных.Добавить("Интерфейсы", "Интерфейсы");
ВеткиМетаданных.Добавить("Константы", "Константы");
ВеткиМетаданных.Добавить("Справочники", "Справочники");
ВеткиМетаданных.Добавить("Перечисления", "Перечисления");
ВеткиМетаданных.Добавить("Документы", "Документы");
ВеткиМетаданных.Добавить("Журналы документов", "ЖурналыДокументов");
ВеткиМетаданных.Добавить("Отчеты", "Отчеты");
ВеткиМетаданных.Добавить("Обработки", "Обработки");
ВеткиМетаданных.Добавить("Планы видов характеристик", "ПланыВидовХарактеристик");
ВеткиМетаданных.Добавить("Регистры сведений", "РегистрыСведений");
ВеткиМетаданных.Добавить("Регистры накопления", "РегистрыНакопления");
ВеткиМетаданных.Добавить("Планы счетов", "ПланыСчетов");
ВеткиМетаданных.Добавить("Планы видов расчета", "ПланыВидовРасчета");
ВеткиМетаданных.Добавить("Регистры бухгалтерии", "РегистрыБухгалтерии");
ВеткиМетаданных.Добавить("Регистры расчета", "РегистрыРасчета");
ВеткиМетаданных.Добавить("Бизнес-процессы", "БизнесПроцессы");
ВеткиМетаданных.Добавить("Задачи","Задачи");
ВеткиМетаданных.Добавить("Планы обмена", "ПланыОбмена");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени = Новый Соответствие;
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ОбщиеФормы", "ОбщаяФорма");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Интерфейсы","Интерфейс");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Константы","Константа");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Справочники","Справочник");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Перечисления","Перечисление");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Документы","Документ");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ЖурналыДокументов","ЖурналДокументов");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Отчеты","Отчет");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Обработки","Обработка");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыВидовХарактеристик", "ПланВидовХарактеристик");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыСведений","РегистрСведений");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыНакопления","РегистрНакопления");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыСчетов","ПланСчетов");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыВидовРасчета","ПланВидовРасчета");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыБухгалтерии","РегистрБухгалтерии");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("РегистрыРасчета","РегистрРасчета");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("БизнесПроцессы","БизнесПроцесс");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("Задачи","Задача");
СоответствиеВидовМетаданныхДляПоискаПолногоИмени.Вставить("ПланыОбмена","ПланОбмена");
ЕстьУниверсальныйОтчет = (Метаданные.Отчеты.Найти("УниверсальныйОтчет") <> Неопределено);
Есть_РС_СохраненныеНастройки = (Метаданные.РегистрыСведений.Найти("СохраненныеНастройки") <> Неопределено);
//Есть_СправочникОрганизаций = (Метаданные.Справочники.Найти("Организации") <> Неопределено);
ЕстьСправочникВнешнихОбработок = (Метаданные.Справочники.Найти("ВнешниеОбработки") <> Неопределено);
ИмяКорневойПодсистемы = "Конфигурация." + Метаданные.Имя;
Если Метаданные.ПараметрыСеанса.Найти("ТекущийПользователь") = Неопределено Тогда
мТекущийПользователь = Неопределено;
Иначе
Попытка
мТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;
Исключение
КонецПопытки;
КонецЕсли;
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияПлатфомы = Лев(СистемнаяИнформация.ВерсияПриложения,3);
Если Истина
И ПолнотекстовыйПоискРазмерПорции > 0 // Включен
И ВерсияПлатфомы >= "8.1" // и платформа позволяет
Тогда
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
мСписокПолнотекстовогоПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
мСписокПолнотекстовогоПоиска.ПолучатьОписание = Ложь;
КонецЕсли;
КонецЕсли;