- МЕНЮ
 - В избранное
Самые важные новости
 
Царьков Валерий
Поиск в справочнике по образцу

        Как спозиционировать курсор на искомом элементе?
Способ первый: сканер в разрыв клавиатуры
Способ второй: эмуляция подбора

       Как спозиционировать курсор на искомом элементе.
Допустим, мы желаем искать элемент справочника по штрих-коду и устанавливить курсор на найденный элемент. Я на практике опробовал два способа.

        Способ первый: сканер в разрыв клавиатуры.

        Этот способ применялся довольно давно, в v.7.5, когда еще не было штатной процедуры ОбработкаВнешнегоСобытия(). Принцип действия простой до безобразия. Сканер возвращал считанный код в виде последовательности символов, заменяя клавиатуру при вводе штрих-кода. Исходя из этих возможностей, доработаем конфигурацию.
        1.Для элемента справочника создаем реквизит "ШтрихКод" и вставляем его в форму списка
        2.Перепрограммируем сканер на ввод только считанной последовательности без префиксов и постфиксов
        3.Открываем форму справочника и отключаем иерархический список (для поиска по всему справочнику).
        4.Для поиска элемента в открытой форме списка достаточно установить курсор в поле "ШтрихКод" и просканировать штрих-код образца.

        Примечание. Этот способ предполагает наличие только одного штрих-кода у каждого элемента справочника. На практике все слегка отличается...

наверх

        Способ второй: эмуляция подбора.

        С выходом в свет v.7.7 задача изменилась. Появилась возможность отслеживать внешнее событие при помощи процедуры ОбработкаВнешнегоСобытия().
        Расмотрим для примера поиск элемента справочника "Номенклатура" по штрих-коду из подчиненного справочника "Единицы"
        Допустим для подключения сканера в голобальном модуле описывается
Перем глСканер Экспорт; // Переменная для работы со сканером
        В модуме формы списка справочника описываем процедуру для поиска элемента по штрих-коду
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Результат)
        Если Событие="BarCodeValue" Тогда
               Спр=СоздатьОбъект("Справочник.Единицы");
               Спр.НайтиПоРеквизиту("ШтрихКод",Данные,1);
               АктивизироватьОбъект(Спр.Владелец);
        КонецЕсли;
КонецПроцедуры

        Если в справочнике "Единицы" есть элемент с штрих-кодом образца, то курсор автоматически установится на искомый элемент номенклатуры (владелец найденной единицы). Но чтобы это сработало, нам нужно открыть форму списка как подбор из другой формы. А если мы желаем открывать это форму как основную из меню: "Справочники\Номенклатура"?.. Придется создать обработку, которая будет выполнять открытие формы справочника в режиме подбора. Назовем ее "ОткрСпр".
        Внешний вид обработки абсолютно не важен, нам ничего не потребуется: ни реквизитов, ни кнопок. Однако, нужно вставить хоть что-нибудь, например текст: "Откратие подбора по справочнику". Вот текст модуля:
Процедура ПриОткрытии()
        Парам=Форма.Параметр;
        ОткрытьФорму
("Справочник."+Парам,"Справочник: "+Парам, ,1);
        СтатусВозврата(
0);
КонецПроцедуры

        Имя справочника передается процедуре в качестве параметра. Это сделано для того, чтобы иметь возможность открывать различные справочники. Таким образом, обработка открывает множественный выбор из списка справочника, а сама при этом не открывается.
        Теперь настроим меню. В качестве объекта вместо справочника "Номенклатура" нужно указать "задача"


а в качестве формулы "ОткрытьФорму("Обработка.ОткрСпр","Номенклатура").

        Вот так все просто. Чисто внешне ничего не изменилось. Правда есть одна особенность: при нажатии на "Enter" или двойном нажатии на кнопку мыши не происходит автоматического включения режима редактирования (правильно, ведь мы выбираем, а не редактируем список). Но я бы отнес это к преимуществам. Не будет случайного открытия форм элемента при ошибочном нажатии не на ту клавишу. Теперь для редактирования пожалуйста "Shift+Enter", а при сканировании образца продукции курсор установится на нужный элемент

        Поправка. Все течет, все меняется. Программы дорабатываются, ошибки и глюки исправляются. С выходом 19 релиза все это стало неактуальным. Теперь метод: АктивизироватьОбъект() работает без вопросов и в основной форме справочника.

наверх


Обсудить статью на форуме   всего просмотров: 
Используются технологии uCoz


© Царьков Валерий. 12 февраля 2003