|
![]() |
Царьков Валерий |
Как спозиционировать курсор на искомом элементе?
Способ первый: сканер в разрыв клавиатуры
Способ второй: эмуляция подбора
Как спозиционировать курсор на искомом элементе.
Допустим, мы желаем искать элемент справочника по штрих-коду и устанавливить курсор на найденный элемент. Я на практике опробовал два способа.
Способ первый: сканер в разрыв клавиатуры.
Этот способ применялся довольно давно, в v.7.5, когда еще не было штатной процедуры ОбработкаВнешнегоСобытия(). Принцип действия простой до безобразия. Сканер возвращал считанный код в виде последовательности символов, заменяя клавиатуру при вводе штрих-кода. Исходя из этих возможностей, доработаем конфигурацию.
1.Для элемента справочника создаем реквизит "ШтрихКод" и вставляем его в форму списка
2.Перепрограммируем сканер на ввод только считанной последовательности без префиксов и постфиксов
3.Открываем форму справочника и отключаем иерархический список (для поиска по всему справочнику).
4.Для поиска элемента в открытой форме списка достаточно установить курсор в поле "ШтрихКод" и просканировать штрих-код образца.
Примечание. Этот способ предполагает наличие только одного штрих-кода у каждого элемента справочника. На практике все слегка отличается...
Способ второй: эмуляция подбора.
С выходом в свет v.7.7 задача изменилась. Появилась возможность отслеживать внешнее событие при помощи процедуры ОбработкаВнешнегоСобытия().
Расмотрим для примера поиск элемента справочника "Номенклатура" по штрих-коду из подчиненного справочника "Единицы"
Допустим для подключения сканера в голобальном модуле описывается
Перем глСканер Экспорт; // Переменная для работы со сканером
В модуме формы списка справочника описываем процедуру для поиска элемента по штрих-коду
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Результат)
Если Событие="BarCodeValue" Тогда
Спр=СоздатьОбъект("Справочник.Единицы");
Спр.НайтиПоРеквизиту("ШтрихКод",Данные,1);
АктивизироватьОбъект(Спр.Владелец);
КонецЕсли;
КонецПроцедуры
Если в справочнике "Единицы" есть элемент с штрих-кодом образца, то курсор автоматически установится на искомый элемент номенклатуры (владелец найденной единицы). Но чтобы это сработало, нам нужно открыть форму списка как подбор из другой формы. А если мы желаем открывать это форму как основную из меню: "Справочники\Номенклатура"?.. Придется создать обработку, которая будет выполнять открытие формы справочника в режиме подбора. Назовем ее "ОткрСпр".
Внешний вид обработки абсолютно не важен, нам ничего не потребуется: ни реквизитов, ни кнопок. Однако, нужно вставить хоть что-нибудь, например текст: "Откратие подбора по справочнику". Вот текст модуля:
Процедура ПриОткрытии()
Парам=Форма.Параметр;
ОткрытьФорму("Справочник."+Парам,"Справочник: "+Парам, ,1);
СтатусВозврата(0);
КонецПроцедуры
Имя справочника передается процедуре в качестве параметра. Это сделано для того, чтобы иметь возможность открывать различные справочники. Таким образом, обработка открывает множественный выбор из списка справочника, а сама при этом не открывается.
Теперь настроим меню. В качестве объекта вместо справочника "Номенклатура" нужно указать "задача"