При переходе с УТ 10.3 на УТ 11.4 столкнулись с проблемой ввода по строке при заполнении документов.
В УТ 11 есть дополнительные реквизиты, в то время как в УТ 10 мы добавляли реквизиты через конфигуратор в справочник "Номенклатура". в УТ 11 решили так не делать. А расширения дают нам возможность дорабатывать конфигурацию, не меняя её.
Нам нужно было как у нас в УТ 10 было, чтобы при вводе по строке в документы можно было добавлять номенклатуру не только по стандартным реквизитам, но и по дополнительным реквизитам тоже (ну и чтобы номенклатура искалась по любой части наименования).
Стал разбираться, как это реализовать, и разобрался. За ввод по строке отвечает
Процедура НоменклатураОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
В общем модуле "НоменклатураВызовСервера"
Вывел эту процедуру в расширение с параметром "&Вместо" и дописал текст запроса, получилось вот это:
&Вместо("НоменклатураОбработкаПолученияДанныхВыбора")
Процедура Мод_НоменклатураОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Получим структуру возможных полей отбора справочника номенклатуры
СтруктураРеквизитов = ЗначениеНастроекПовтИсп.РеквизитыСправочника("Номенклатура");
Запрос = Новый Запрос;
СтрокаПоиска = Параметры.СтрокаПоиска;
УсловиеОтбора = "ИСТИНА";
Для Каждого КлючИЗначениеОтбора Из Параметры.Отбор Цикл
Если СтруктураРеквизитов.Свойство(КлючИЗначениеОтбора.Ключ) Тогда
УсловиеОтбора = УсловиеОтбора + "
| И СпрНоменклатура." + КлючИЗначениеОтбора.Ключ + " В (&" + КлючИЗначениеОтбора.Ключ + ")";
Запрос.УстановитьПараметр(КлючИЗначениеОтбора.Ключ,КлючИЗначениеОтбора.Значение);
КонецЕсли;
КонецЦикла;
Если НЕ Параметры.Отбор.Свойство("ЭтоГруппа") И Параметры.Свойство("ВыборГруппИЭлементов") Тогда
Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
УсловиеОтбора = УсловиеОтбора + "
| И СпрНоменклатура.ЭтоГруппа";
ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда
УсловиеОтбора = УсловиеОтбора + "
| И НЕ СпрНоменклатура.ЭтоГруппа";
КонецЕсли;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 50
| СпрНоменклатура.Ссылка,
| СпрНоменклатура.Наименование КАК ПредставлениеСовпадения,
| 0 КАК Порядок,
| СпрНоменклатура.Код КАК ПредставлениеНоменклатуры,
| СпрНоменклатура.ЭтоГруппа
|ПОМЕСТИТЬ НоменклатураПоиск
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|ГДЕ
| СпрНоменклатура.Наименование ПОДОБНО &СтрокаПоиска
| И &УсловиеОтбора
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 50
| СпрНоменклатура.Ссылка,
| СпрНоменклатура.Код,
| 1,
| СпрНоменклатура.Наименование,
| NULL
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|ГДЕ
| СпрНоменклатура.Код ПОДОБНО &СтрокаПоиска
| И &УсловиеОтбора
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 50
| СпрНоменклатура.Ссылка,
| СпрНоменклатура.Артикул,
| 2,
| СпрНоменклатура.Наименование,
| NULL
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|ГДЕ
| СпрНоменклатура.Артикул ПОДОБНО &СтрокаПоиска
| И &УсловиеОтбора
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 50
| СпрНоменклатура.Ссылка,
| СпрНоменклатура.Значение,
| 3,
| СпрНоменклатура.Свойство.Наименование,
| NULL
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК СпрНоменклатура
|ГДЕ
| СпрНоменклатура.Значение ПОДОБНО &СтрокаПоиска
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураПоиск.Ссылка,
| МИНИМУМ(НоменклатураПоиск.Порядок) КАК Порядок
|ПОМЕСТИТЬ НоменклатураПоПорядку
|ИЗ
| НоменклатураПоиск КАК НоменклатураПоиск
|
|СГРУППИРОВАТЬ ПО
| НоменклатураПоиск.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 50
| НоменклатураПоиск.Ссылка КАК Ссылка,
| НоменклатураПоиск.Порядок КАК Порядок,
| НоменклатураПоиск.ПредставлениеСовпадения КАК ПредставлениеСовпадения,
| НоменклатураПоиск.ПредставлениеНоменклатуры КАК ПредставлениеНоменклатуры
|ИЗ
| НоменклатураПоПорядку КАК НоменклатураПоПорядку
| ЛЕВОЕ СОЕДИНЕНИЕ НоменклатураПоиск КАК НоменклатураПоиск
| ПО НоменклатураПоПорядку.Ссылка = НоменклатураПоиск.Ссылка
| И НоменклатураПоПорядку.Порядок = НоменклатураПоиск.Порядок
|
|УПОРЯДОЧИТЬ ПО
| Порядок,
| ПредставлениеСовпадения,
| ПредставлениеНоменклатуры";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора" ,УсловиеОтбора);
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + СтрокаПоиска + "%");
ДанныеВыбора = Новый СписокЗначений;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстЗначения = СокрП(Выборка.ПредставлениеСовпадения) + " (" + Выборка.ПредставлениеНоменклатуры + ")";
ЗначениеСписка = Новый Структура;
ЗначениеСписка.Вставить("Значение", Выборка.Ссылка);
//ЗначениеСписка.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
ДанныеВыбора.Добавить(ЗначениеСписка, ТекстЗначения);
КонецЦикла;
КонецПроцедуры
И Вуаля, теперь в документах ввод по строке можно осуществлять по дополнительным реквизитам:
Где (SKU) является дополнительным реквизитом справочника "Номенклатура"
Разработано и протестировано на платформе:
1С:Предприятие 8.3 (8.3.19.1351)
Управление торговлей, редакция 11 (11.4.6.188)
P.S. Не судите строго, я не так давно начал всем этим заниматься и очень много чего не знаю. но если кому-то это пригодится как пример - замечательно, ну а если нет, то нет.
Если у вас, более опытных, есть какие-либо замечания или советы, буду рад почитать ваши комментарии!
Всем добра!