1с обработкаполученияданныхвыбора не срабатывает
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования!
В 1С 8.3 по умолчанию настройки справочника номенклатуры такие:
При такой настройке, механизм поиска в справочнике номенклатуры работает так:
- в документе вводим первые символы Пета и видим такой результат подсказки:
Но, такой поиск не удобен и менеджеры захотели подбирать номенклатуру по артикулу, например 1320
Для этого изменим настройки указав поиск по Любой части и включив полнотекстовый поиск:
Сохраняем конфигурацию и в режиме предприятие обновляем Полнотекстовый поиск: Меню - Все функции - Стандартные - Управление полнотекстовый поиском
После этого пробуем в документе выполнить поиск по 1320 и видим:
Все Менеджеры пищат как дети на новогодней елке!
Пока писал эту статью нашел в интернете другое решение для платформы 8.2:
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ОбработкаПолученияДанныхВыбора(<ДанныеВыбора>, <Параметры>, <СтандартнаяОбработка>)
В модуле менеджера справочника "Номенклатура" пишем:
В обработчике - ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбраблтка) для нас важны все три параметра. В первый "ДанныеВыбора" мы загружаем наш список номенклатуры, полученный по нашему алгоритму. Из параметра "Параметры" мы получим значение введенное пользователем, а третьему параметру "СтандартнаяОбработка" мы должны поставить значение "Ложь"(отключаем стандартный алгоритм системы).
В результате одной небольшой процедурой мы полностью решили поставленную задачу.
Чтобы использовать ввод по строке в документах нужно на уровне справочника указать поля по которым будет использоваться ввод по строке. По умолчанию это предопределенные реквизиты "Наименование" и "Код".
Для переопределения события ввода по строке в модуле менеджера документа (в котором собственно и будем творить бардак) создаем событие
ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
В этом модуле можно определить новый массив для данных выбора
"Параметры" - Содержит параметры выбора.
Их можно дополнительно настроить в обработчике события.
Структура, в которой обязательно должны содержаться следующие ключи:
- СтрокаПоиска (SearchString) - строка, используемая при поиске данных, Неопределено - осуществляется быстрый выбор;
- Отбор (Filter) - отбор, используемый при поиске данных;
- ВыборГруппИЭлементов (ChoiceFoldersAndItems) - указывается использование групп и элементов (только для иерархических данных); тип ИспользованиеГруппИЭлементов;
- СпособПоискаСтроки (StringSearchMode) - указывается способ поиска при вводе по строке; тип СпособПоискаСтрокиПриВводеПоСтроке; параметр может отсутствовать;
- ПолнотекстовыйПоиск (FullTextSearch) - указывается необходимость использования полнотекстового поиска при вводе по строке; тип - ПолнотекстовыйПоискПриВводеПоСтроке; параметр может отсутствовать;
- РежимПолученияДанныхВыбора (ChoiceDataGettingMode) - указывает режим запуска поиска. Тип РежимПолученияДанныхВыбораПриВводеПоСтроке; параметр может отсутствовать.
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &Наименование");
Запрос.УстановитьПараметр("Наименование", "%" + Параметры.СтрокаПоиска + "%");
// Конструкция "%" + Параметры.СтрокаПоиска + "%" показывает что в начале и в конце строки
//может быть неопределенное количество символов
//Выгружаем таблицу в массив чтобы потом загрузить ее в данные выбора
Массив = Таблица.ВыгрузитьКолонку("Ссылка");
ДанныеВыбора = Новый СписокЗначений; // Переопределяем данные выбора т.к. по
//умолчанию они имею тип - "неопределено"
СтандартнаяОбработка = Ложь; //ключевое вырожение отлючает стандартное выполнение
//и позволяет рабртать новому алгоритму
Читайте также: