Написать работающий учебный обработчик поиска по двум карточкам

Учебные задачи

Полная экспортная процедура фильтрует Книгу и Ручку по строке поиска. Отдельная процедура проверяет результат без настройки интерфейса.

Где и как запускать

Полный код клиентского неглобального общего модуля УчебныйГлобальныйПоиск. Не вставляйте его внутрь обработчика формы и не ставьте Сервер вместо клиентского флага.

Подготовка

  1. Используйте отдельную пустую учебную конфигурацию УчебнаяКонфигурацияСинтаксиса и учебного пользователя. Не устанавливайте этот поиск в рабочую УТ/КА2/УНФ: пример намеренно оставляет в плане только собственный обработчик.

  2. Создайте общий модуль УчебныйГлобальныйПоиск: Глобальный=Ложь, Клиент (управляемое приложение)=Истина, Сервер=Ложь. Вставьте в него полный код урока собственного обработчика. Он работает только с константами и не обращается к базе.

  3. Создайте собственную управляемую обработку с командами НастроитьУчебныйПоиск, НачатьУчебныйПоиск, ВосстановитьПоиск. Вставьте полный модуль формы из последнего урока и назначьте эти обработчики команд.

  4. Запускайте в поддерживаемом клиенте 8.5.1.1343. Сначала настройте поиск, затем начните, дождитесь результата и восстановите исходные настройки до закрытия формы. Не выполняйте восстановление сразу после НачатьПоиск: он только начинает операцию.

Процедура НайтиУчебныеКниги(СтрокаПоиска, РезультатыПоиска, ДополнительныеПараметры) Экспорт
    Искомое = НРег(СокрЛП(СтрокаПоиска));
    Если ПустаяСтрока(Искомое) Тогда
        Возврат;
    КонецЕсли;
    Префикс = "guide-";
    Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
        ПереданныйПрефикс = Неопределено;
        Если ДополнительныеПараметры.Свойство("Префикс", ПереданныйПрефикс) Тогда
            Если ТипЗнч(ПереданныйПрефикс) <> Тип("Строка") Тогда
                ВызватьИсключение "Префикс должен быть строкой";
            КонецЕсли;
            Префикс = ПереданныйПрефикс;
        КонецЕсли;
    КонецЕсли;
    Если СтрНайти(НРег("Книга"), Искомое) > 0 Тогда
        РезультатыПоиска.Добавить(Префикс + "book", "Книга", Новый Картинка, "УчебныеКниги", "Учебный экземпляр: количество 3");
    КонецЕсли;
    Если СтрНайти(НРег("Ручка"), Искомое) > 0 Тогда
        РезультатыПоиска.Добавить(Префикс + "pen", "Ручка", Новый Картинка, "УчебныеКниги", "Учебный экземпляр: количество 1");
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьУчебныйПоиск() Экспорт
    Результаты = Новый РезультатГлобальногоПоиска;
    НайтиУчебныеКниги(" КНИ ", Результаты, Новый Структура("Префикс", "guide-"));
    Сообщить(Результаты.Количество() = 1);
    Книга = Результаты.Найти("guide-book");
    Если Книга = Неопределено Тогда
        ВызватьИсключение "Тест учебной книги не прошёл";
    КонецЕсли;
    Сообщить(Книга.Представление = "Книга");
    ПустойПоиск = Новый РезультатГлобальногоПоиска;
    НайтиУчебныеКниги("   ", ПустойПоиск, Неопределено);
    Сообщить(ПустойПоиск.Количество() = 0);
    Ручки = Новый РезультатГлобальногоПоиска;
    НайтиУчебныеКниги("руч", Ручки, Неопределено);
    Сообщить(Ручки.Найти("guide-pen") <> Неопределено);
КонецПроцедуры

Разбор по шагам

  1. Сигнатура экспортной процедуры точно соответствует обработчику элемента плана: СтрокаПоиска, РезультатыПоиска, ДополнительныеПараметры. Выходная коллекция дополняется, не заменяется новой.

  2. СокрЛП убирает края, НРег делает регистронезависимую проверку. Ищем подстроку в двух собственных названиях, не используем SQL, полнотекстовый индекс или бизнес-остатки.

  3. Пустая строка возвращает ноль собственных результатов. Параметр Префикс необязателен, но при наличии обязан быть строкой; проверка Свойство предшествует использованию.

  4. ПроверитьУчебныйПоиск создаёт отдельную коллекцию для каждого запроса. Вызовите её из клиентского обработчика собственной формы: УчебныйГлобальныйПоиск.ПроверитьУчебныйПоиск().

  5. Это минимальный собственный поиск с реальными платформенными карточками, а не поиск настоящего товара в одной из предоставленных конфигураций.

Как проверить результат

  1. Четыре проверки дают Истина: КНИ находит Книгу, пробелы ничего не находят, руч находит Ручку.

  2. Замените Префикс на Число: процедура выдаёт объясняющую ошибку типа, не формирует некорректный ключ.

Ожидаемый результат

Подготовлен полный обработчик с проверками и детерминированными собственными результатами.

На что обратить внимание

  1. Не заменяйте существующий план рабочего поиска одним учебным обработчиком.

  2. Этот учебный фильтр не заменяет полнотекстовый поиск с правами, ранжированием и поиском по реальным данным.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.