Имя: Пароль:
1C
1С v8
Поиск по строке справочника "номенклатура" УТ 11.1.14.1 (выявленный ляп)
0 MrGray
 
10.04.14
23:58
Собственно началось всё с того, что подбор по строке (по любому сочитанию полей в этой конфе) не работает...

Вот процедура замещающая стандартный функционал:

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

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        ТекстЗначения = СокрП(Выборка.ПредставлениеСовпадения) + " (" + Выборка.ПредставлениеНоменклатуры + ")";
        ДанныеВыбора.Добавить(Выборка.Ссылка, ТекстЗначения);
        
    КонецЦикла;

КонецПроцедуры

// ---

Собссно вопрос, неужели никого не интересовала данная проблема?
Особо умиляет

СтруктураРеквизитов.Свойство(КлючИЗначениеОтбора.Ключ) Тогда
            УсловиеОтбора = УсловиеОтбора + "
                |И СпрНоменклатура." + КлючИЗначениеОтбора.Ключ + " В (&" + КлючИЗначениеОтбора.Ключ + ")";

..короче, если у кого есть проблемы с вводом по строке в данной конфе,- проще отключить "грибной" код замены стандартных действий.