Вход | Регистрация

1С:Предприятие ::

Метки: 

Поиск по строке справочника "номенклатура" УТ 11.1.14.1 (выявленный ляп)

Я
   MrGray
 
10.04.14 - 23:58
Собственно началось всё с того, что подбор по строке (по любому сочитанию полей в этой конфе) не работает...

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Получим структуру возможных полей отбора справочника номенклатуры

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

    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    НоменклатураПоиск.Ссылка,
    |    МИНИМУМ(НоменклатураПоиск.Порядок) КАК Порядок
    |ПОМЕСТИТЬ НоменклатураПоПорядку
    |ИЗ
    |    НоменклатураПоиск КАК НоменклатураПоиск
    |
    |СГРУППИРОВАТЬ ПО
    |    НоменклатураПоиск.Ссылка
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    НоменклатураПоиск.Качество КАК Качество,
    |    НоменклатураПоиск.Ссылка,
    |    НоменклатураПоиск.Порядок КАК Порядок,
    |    НоменклатураПоиск.ПредставлениеСовпадения КАК ПредставлениеСовпадения,
    |    НоменклатураПоиск.ПредставлениеНоменклатуры КАК ПредставлениеНоменклатуры
    |ИЗ
    |    НоменклатураПоПорядку КАК НоменклатураПоПорядку
    |        ЛЕВОЕ СОЕДИНЕНИЕ НоменклатураПоиск КАК НоменклатураПоиск
    |        ПО НоменклатураПоПорядку.Ссылка = НоменклатураПоиск.Ссылка
    |            И НоменклатураПоПорядку.Порядок = НоменклатураПоиск.Порядок
    |
    |УПОРЯДОЧИТЬ ПО
    |    Порядок,
    |    Качество,
    |    ПредставлениеСовпадения,
    |    ПредставлениеНоменклатуры";
    
    Запрос.Текст = ТекстЗапроса;
    
    Запрос.УстановитьПараметр("СтрокаПоиска", СтрокаПоиска + "%");
    
    ДанныеВыбора = Новый СписокЗначений;

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

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

// --- 


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

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

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


Список тем форума
Рекламное место пустует   Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует