Функция ТаблицаДанныхВыбораМенеджераЛкс(Знач ОбъектМД, Знач Параметры, Знач СхемаКомпоновки, Знач ОтображаемоеЧислоРезультатов = 50, Знач Компоновщик = Неопределено,
    Знач РежимПоискаПоСловам = Ложь) Экспорт 
    
    #Если Сервер И Не Сервер Тогда
        Параметры = Новый Структура;
        ОбъектМД = Метаданные.Справочники.Валюты;
        СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
    #КонецЕсли
    НастройкаКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию; 
    ИмяСсылка = ПеревестиСтроку("Ссылка");
    ИмяЭтоГруппа = ПеревестиСтроку("ЭтоГруппа");
    Если Параметры.Отбор <> Неопределено Тогда
        Для Каждого КлючИЗначение Из Параметры.Отбор Цикл
            НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение);
        КонецЦикла;
        //ОбработкаУстановкиОтбораВыбора(ОбъектМД, НастройкаКомпоновки, Параметры);
        Если Параметры.Отбор.Количество() > 0 Тогда
            // Нужно чтобы отключить элементы отбора несуществующих полей
            Если Компоновщик = Неопределено Тогда
                Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
                Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки));
            КонецЕсли;
            Компоновщик.ЗагрузитьНастройки(НастройкаКомпоновки);
            Компоновщик.Восстановить();
            НастройкаКомпоновки = Компоновщик.Настройки;
        КонецЕсли;
    КонецЕсли;
    Попытка
        ЧислоПоиска = Число(Параметры.СтрокаПоиска);
    Исключение
        ЧислоПоиска = Неопределено;
    КонецПопытки;
    ГруппаИли = НастройкаКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
    ТекстСортировки = новый Массив;
    Если Параметры.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(Параметры.СтрокаПоиска) Тогда
        СловаПоиска = ирОбщий.РазделитьСтрокуПоискаНаСловаПоискаЛкс(НРег(Параметры.СтрокаПоиска));
        ПоляТаблицы = ирКэш.ПоляТаблицыБДЛкс(ОбъектМД.ПолноеИмя());
        Для Каждого ПолеПоискаПоСтроке Из ОбъектМД.ВводПоСтроке Цикл
            ДоступноеПоле = ПоляТаблицы.Найти(ПолеПоискаПоСтроке.Имя, "Имя");
            #Если Сервер И Не Сервер Тогда
                ДоступноеПоле = Обработки.ирТипПолеБД.Создать();
            #КонецЕсли
            Если ДоступноеПоле.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
                Если РежимПоискаПоСловам Тогда
                    // 8.3
                    //Если СловаПоиска = Неопределено Тогда
                    //    СловаПоиска = Новый Массив;
                    //    СловаПоиска.Добавить(Параметры.СтрокаПоиска);
                    //    СпособПоискаСтроки = ОбъектМД.СпособПоискаСтрокиПриВводеПоСтроке;
                    //    Если Параметры.Свойство("СпособПоискаСтроки") И ЗначениеЗаполнено(Параметры.СпособПоискаСтроки) Тогда
                    //        СпособПоискаСтроки = Параметры.СпособПоискаСтроки;
                    //    КонецЕсли; 
                    //    Если СпособПоискаСтроки = СпособПоискаСтрокиПриВводеПоСтроке.ЛюбаяЧасть Тогда
                    //        ВидСравненияПоиска = ВидСравненияКомпоновкиДанных.Содержит;
                    //    Иначе
                    //        ВидСравненияПоиска = ВидСравненияКомпоновкиДанных.НачинаетсяС;
                    //    КонецЕсли; 
                    //Иначе
                        ВидСравненияПоиска = ВидСравненияКомпоновкиДанных.Содержит;
                    //КонецЕсли;
                    ГруппаИ = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
                    Для Каждого СловоПоиска Из СловаПоиска Цикл
                        НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ, ПолеПоискаПоСтроке.Имя, СловоПоиска, ВидСравненияПоиска,, Ложь);
                    КонецЦикла;
                Иначе
                    НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ПолеПоискаПоСтроке.Имя, Параметры.СтрокаПоиска + "%", ВидСравненияКомпоновкиДанных.Подобно,, Ложь);
                КонецЕсли;
                ТекстСортировки.Добавить(ПолеПоискаПоСтроке.Имя + " = &СтрокаПоиска УБЫВ");
            ИначеЕсли ЧислоПоиска <> Неопределено Тогда 
                НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ПолеПоискаПоСтроке.Имя, ЧислоПоиска, ВидСравненияКомпоновкиДанных.Равно,, Ложь);
                ТекстСортировки.Добавить(ПолеПоискаПоСтроке.Имя + " = &ЧислоПоиска УБЫВ");
            КонецЕсли;
        КонецЦикла;
        Для Каждого ПолеПоискаПоСтроке Из ОбъектМД.ВводПоСтроке Цикл
            ДоступноеПоле = ПоляТаблицы.Найти(ПолеПоискаПоСтроке.Имя, "Имя");
            #Если Сервер И Не Сервер Тогда
                ДоступноеПоле = Обработки.ирТипПолеБД.Создать();
            #КонецЕсли
            Если ДоступноеПоле.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
                ТекстСортировки.Добавить(ПолеПоискаПоСтроке.Имя + " ПОДОБНО &СтрокаПоиска + ""%"" УБЫВ");
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Если НастройкаКомпоновки.Выбор.Элементы.Количество() = 0 Тогда
        НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, "Ссылка");
    КонецЕсли;
    НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, "ПометкаУдаления");
    Для Каждого ПолеПоискаПоСтроке Из ОбъектМД.ВводПоСтроке Цикл
        НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ПолеПоискаПоСтроке.Имя);
    КонецЦикла;
    Если ЛиМетаданныеОбъектаСГруппамиЛкс(ОбъектМД) Тогда
        НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, "ЭтоГруппа");
    КонецЕсли;
    СхемаКолонок = Новый Структура;
    Запрос = ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки,,,, СхемаКолонок);
    #Если Сервер И Не Сервер Тогда
        Запрос = Новый Запрос;
    #КонецЕсли 
    Если ТекстСортировки.Количество() > 0 Тогда
        Запрос.УстановитьПараметр("СтрокаПоиска", Параметры.СтрокаПоиска);
        Запрос.УстановитьПараметр("ЧислоПоиска", ЧислоПоиска);
    КонецЕсли;
    ТекстСортировки.Добавить("Ссылка");
    ТекстСортировки = СтрСоединитьЛкс(ТекстСортировки, "," + Символы.ПС + Символы.Таб);
    Запрос.Текст = Запрос.Текст + "
    |УПОРЯДОЧИТЬ ПО
    |    " + ТекстСортировки + "
    |АВТОУПОРЯДОЧИВАНИЕ";

    ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
    Для Каждого КлючИЗначение Из СхемаКолонок Цикл
        ТаблицаРезультата.Колонки[КлючИЗначение.Ключ].Имя = СтрЗаменить(КлючИЗначение.Значение, ".", "");
    КонецЦикла; 
    
    // Формируем представления ссылок по полям ввода по строке с учетом поглощения
    ТаблицаРезультата.Колонки.Добавить("Представление");
    
    //ИмяПоляПорядка1 = "Важность" + СуффиксСлужебногоСвойстваЛкс();
    //ТаблицаРезультата.Колонки.Добавить(ИмяПоляПорядка1, Новый ОписаниеТипов("Число"));
    //ИмяПоляПорядка2 = "ОсновнойПорядок" + СуффиксСлужебногоСвойстваЛкс();
    //ТаблицаРезультата.Колонки.Добавить(ИмяПоляПорядка2);
    
    //Если ТаблицаРезультата.Количество() > МаксЧислоВариантов Тогда
    //    СтрокаРезультата = ТаблицаРезультата.Добавить();
    //    СтрокаРезультата[ИмяПоляПорядка1] = 2;
    //    СтрокаРезультата.Представление = СтрШаблонЛкс("<Результатов больше %1>", МаксЧислоВариантов);
    //КонецЕсли; 
    Если Истина
        И ТаблицаРезультата.Количество() > 0 
        И Параметры.Свойство("СтрокаПоиска") 
        И ЗначениеЗаполнено(Параметры.СтрокаПоиска) 
    Тогда
        ЕстьРавенствоПервойСтроки = Ложь;
        ЕстьРавенствоПоследнейСтроки = Ложь;
        ПоследнийИндекс = Мин(ОтображаемоеЧислоРезультатов, ТаблицаРезультата.Количество()) - 1;
        Для Каждого ПолеПоискаПоСтроке Из ОбъектМД.ВводПоСтроке Цикл
            Если СтрокиРавныЛкс(ТаблицаРезультата[0][ПолеПоискаПоСтроке.Имя], Параметры.СтрокаПоиска) Тогда
                ЕстьРавенствоПервойСтроки = Истина;
            КонецЕсли;
            Если СтрокиРавныЛкс(ТаблицаРезультата[ПоследнийИндекс][ПолеПоискаПоСтроке.Имя], Параметры.СтрокаПоиска) Тогда
                ЕстьРавенствоПоследнейСтроки = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;                   
        Если ЕстьРавенствоПервойСтроки И Не ЕстьРавенствоПоследнейСтроки Тогда
            Пока ТаблицаРезультата.Количество() > ОтображаемоеЧислоРезультатов Цикл
                ТаблицаРезультата.Удалить(ОтображаемоеЧислоРезультатов);
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    Если ТаблицаРезультата.Количество() <= ОтображаемоеЧислоРезультатов Тогда
        Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл
            //СтрокаРезультата[ИмяПоляПорядка2] = ТаблицаРезультата.Индекс(СтрокаРезультата);
            ПолноеПредставление = Новый Массив;
            ПолноеПредставление.Добавить("" + СтрокаРезультата[ИмяСсылка]);
            Для Каждого ПолеПоискаПоСтроке Из ОбъектМД.ВводПоСтроке Цикл
                ЗначениеРеквизита = СтрокаРезультата[ПолеПоискаПоСтроке.Имя];
                //Если ЗначениеЗаполнено(Параметры.СтрокаПоиска) И ирОбщий.СтрНачинаетсяСЛкс(ЗначениеРеквизита, СловаПоиска[0]) Тогда
                //    СтрокаРезультата[ИмяПоляПорядка1] = 1;
                //КонецЕсли;
                НадоДобавлять = Истина;
                УдалитьЭлементы = Новый Массив;
                Для Каждого Представление Из ПолноеПредставление Цикл
                    Если СтрНайтиЛкс(ЗначениеРеквизита, Представление,,,, Ложь) Тогда
                        УдалитьЭлементы.Добавить(Представление);
                    ИначеЕсли СтрНайтиЛкс(Представление, ЗначениеРеквизита,,,, Ложь) Тогда
                        НадоДобавлять = Ложь;
                    КонецЕсли;
                КонецЦикла;
                Для Каждого УдалитьЭлемент Из УдалитьЭлементы Цикл
                    ПолноеПредставление.Удалить(ПолноеПредставление.Найти(УдалитьЭлемент));
                КонецЦикла;
                Если НадоДобавлять Тогда   
                    ПолноеПредставление.Добавить(ЗначениеРеквизита);
                КонецЕсли;
            КонецЦикла;
            ПолноеПредставление = СтрСоединитьЛкс(ПолноеПредставление, " | ");
            Если ЛиМетаданныеОбъектаСГруппамиЛкс(ОбъектМД) И СтрокаРезультата[ИмяЭтоГруппа] Тогда
                ПолноеПредставление = ПолноеПредставление + " [Группа]";
            КонецЕсли;
            СтрокаРезультата.Представление = ПолноеПредставление;
        КонецЦикла;
        //ТаблицаРезультата.Сортировать(ИмяПоляПорядка1 + " Убыв, " + ИмяПоляПорядка2);
    КонецЕсли;
    Возврат ТаблицаРезультата;

КонецФункции