Как обещал раньше, опишу поподробнее решение своей проблемы. Времени-то никогда не хватает. А вдруг кому пригодится?
Описание проблемы: Создал новый информационный справочник "Артикулы", только для чтения. Установил все запреты на изменение, какие только 1С 7.7 позволяет.
У пользователей
ФормаСписка этого справочника открыта постоянно (самый популярный справочник).
На рабочем месте кладовщиков на подставке стоит постоянно включенный ручной лазерный сканер штрихкодов Symbol PS/2.
Заметил, что когда курсор находится в
МногострочнойЧасти ФормыСписка, а под сканер попадает какой-либо штрихкод, то в
ФормеСписка выполняется проба произвести быстрый поиск (как при наборе на клавиатуре цифр для поиска), затем ближайшая ячейка становится доступной для редактирвония (как при редактировании в списке) и ее значение заменяется либо на остатки штрихкода, либо на символ клавиши, случайно нажатой пользователем, либо удаляется вообще.
Еще раз повторюсь, никакие запреты ни в коде, ни в свойствах объекта не помогали.
Решение:1. Запрограммировал в ручные сканеры префикс "+++" и суффикс "+++". "Объяснил" это 1С-у.
2.
ПриОткрытии() ФормыСписка установил -
Форма.ТолькоПросмотр(1) Так я полностью защитил элементы справочника.
Но появились новые беды.
- Сканер после штрихкода в конце передает <
Enter> и пользователь при быстром поиске нужного артикула в конце нажимает <
Enter>. При нажатии Enter-а открывается форма элемента, в которой детализируется нужная инфомация.
- <
Enter> после сканера сначала попадает в процедуру
ПриНажатииКнопкиКлавиатуры(), а только потом в процедуру
ОбработкаВнешнегоСобытия(Источник,Событие,Данные).
Пришлось выкручиваться дальше:
3. В предопределенной процедуре FormEx-а
ПриНажатииКнопкиКлавиатуры(КодКлавиши,Альт,Шифт,Контрл,СимвКл,ФСО) прописал необходимые, ставшие недоступными, стандартные обработки нажатия кнопок клавиатуры.
А также начал перехватывать символ "+" при нажатии <
Shift>+<
=> и на цифровой клавиатуре.
Заметил, что при прохождении штрихкода через сканер в этой процедуре надежно можно отловить только эти символы, которые стал накапливать в переменной
чКвоПлюсы. Опытным путем вычислил, что при сканировании штрихкода
чКвоПлюсы всегда равно 2.
Так я стал различать Enter от сканера и от пользователя.
А
чКвоПлюсы обнуляю при открытии формы элемента при помощи замечательного метода
Сервис.УстановитьПеременнуюКонтекста()Возможно все это слишком сложно, но все другие опробованные мною варианты - еще сложнее и не помогают.