Несмотря на то, что полнотекстовый поиск на платформе 8.3 был анонсирован разработчиками достаточно давно (с платформы 8.3.5), в типовых конфигурациях активно он не применялся. В последних релизах Бухгалтерии предприятия 3.0 во многих списках разработчики включили полнотекстовый поиск. Для моих пользователей это оказалось шоком - программа перестала искать.
Конечно, полнотекстовый поиск работает, но пользователи, не видя окна "Найти" путаются. Обычный сценарий использования: Начинают ввод с клавиатуры, в процессе ввода появляется окно "Найти", где указано поле, в котором будет осуществлен поиск, искомый текст и режим поиска "По части строки".
По нажатию на кнопку ввода список отфильтровывается, над списком появляется строка состояния поиска. Пользователь сам определяет, в каком поле и что он ищет. Новый поиск начинает работать сразу же при вводе и действует на все поля, отображенные в списке. Отдельное окно не появляется, цветом подсвечиваются все совпадения поисковых слов.
Несколько дней мы жили с новым поиском. Пользователи мучались, жаловались, саботировали. Жалобы не прекращались, руководством было поставлено задание "сделать все как было".
С чего начать? Нужно понять, чем отличаются формы друг от друга. Выгрузил исходные коды конфигурации с новым поведением поиска и со старым и сравнил исходники форм.
За функциональность нового полнотекстового поиска отвечает дополнение элемента формы с типом "Строка поиска". Стало понятно, что искать. Нашел статью на ИТС 7.3.1.5. Поиск в динамическом списке. Изучение этой статьи привело к выводу, что новый вариант работы поиска зависит от двух факторов: 1. У формы должно быть вышеуказанное дополнение элемента формы, 2. Динамический список на форме должен иметь свойство "ПоложениеСтрокиПоиска" не равное "Нет".
По идее, достаточно при создании на сервере формы присвоить свойству списка "ПоложениеСтрокиПоиска" значение "ПоложениеСтрокиПоиска.Нет", однако не со всеми формами это срабатывало, в некоторых случаях новый поиск продолжал работать. Программно удалить не созданные программно элементы формы мы не можем, однако можно управлять видимостью. Если у элемента формы "ДополнениеСтрокаПоиска" убрать видимость, полнотекстовый новый поиск так же перестает работать. В ходе экспериментов родился следующий код, который я поместил в общем модуле:
Процедура ОтключениеНовогоПоискаВСписках(Форма) Экспорт
Список = Форма.Элементы.Найти("Список");
Если Список = Неопределено Тогда
Возврат;
КонецЕсли;
Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет;
ДополнениеСтрокаПоиска = Форма.Элементы.Найти("ДополнениеСтрокаПоиска");
Если НЕ ДополнениеСтрокаПоиска = Неопределено Тогда
ДополнениеСтрокаПоиска.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
В процедуру "ОтключениеНовогоПоискаВСписках" нужно передать исправляемую форму. Но как же это сделать для всех форм сразу?
Первое решение - вручную исправить необходимые формы в конфигураторе с помощью редактора форм. От этого решения сразу отказался - долго и муторно, и обновлять потом конфигурацию сложно.
Второе решение - при открытии формы вызывать процедуру, которая будет программно отключать новый поиск. Процедуру можно вызывать из какой-либо другой процедуры, запуск которой уже прописан во всех формах, в этом случае при дальнейших обновлениях нам нужно будет только следить за этой процедурой - чтобы она не изменилась. Я выбрал ОбщийМодуль.УправлениеПечатью, в котором имеется:
ПриСозданииНаСервере(Форма, МестоРазмещенияКомандПоУмолчанию, ОбъектыПечати ) Экспорт
Эта процедура вызывается при создании на сервере формы для заполнения команд печати. В этой процедуре пишем код, вызывающий нашу функцию отключения нового поиска в списках:
МойОбщийМодуль.ОтключениеНовогоПоискаВСписках(Форма);
Бухгалтера наслаждаются старым поиском, а мы готовимся к тому моменту, когда режим совместимости "Бухгалтерии предприятия 3.0" позволит нам перенести этот функционал в расширение.