Каталог решений - Ввод по строке (доработанный)

Ввод по строке (доработанный)

Ввод по строке (доработанный)

В наличии

Ввод по строке по дополнительным реквизитам. УТ 11.

Категория:

Описание

При переходе с УТ 10.3 на УТ 11.4 столкнулись с проблемой ввода по строке при заполнении документов.

В УТ 11 есть дополнительные реквизиты, в то время как в УТ 10 мы добавляли реквизиты через конфигуратор в справочник "Номенклатура". в УТ 11 решили так не делать. А расширения дают нам возможность дорабатывать конфигурацию, не меняя её.

Нам нужно было как у нас в УТ 10 было, чтобы при вводе по строке в документы можно было добавлять номенклатуру не только по стандартным реквизитам, но и по дополнительным реквизитам тоже (ну и чтобы номенклатура искалась по любой части наименования).

Стал разбираться, как это реализовать, и разобрался. За ввод по строке отвечает 

Процедура НоменклатураОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

В общем модуле "НоменклатураВызовСервера"

Вывел эту процедуру в расширение с параметром "&Вместо" и дописал текст запроса, получилось вот это:
 

&Вместо("НоменклатураОбработкаПолученияДанныхВыбора")

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

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

 

И Вуаля, теперь в документах ввод по строке можно осуществлять по дополнительным реквизитам:

 

Где (SKU) является дополнительным реквизитом справочника "Номенклатура"

 

 

Разработано и протестировано на платформе:

:Предприятие 8.3 (8.3.19.1351)

Управление торговлей, редакция 11 (11.4.6.188)

P.S. Не судите строго, я не так давно начал всем этим заниматься и очень много чего не знаю. но если кому-то это пригодится как пример — замечательно, ну а если нет, то нет.

Если у вас, более опытных, есть какие-либо замечания или советы, буду рад почитать ваши комментарии!

Всем добра!

has been added to your cart:
Оформление заказа