Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Перестает работать сканер штрихкодов при открытии дополнительной формы

Перестает работать сканер штрихкодов при открытии дополнительной формы
Я
   Birmingem
 
08.10.19 - 12:16
Имеется небольшая самописная конфигурация, управляемые формы.
В ней документ "Реализация", в котором вводится товар с помощью сканера штрихкодов. В форме использую ВнешнееСобытие. Для работы со сканером использую драйвер Атол.
Все нормально работает.

Но теперь попросили сделать скидки по дисконтным картам. У дисконтных карт есть свои штрихкоды (ШК).
Сделал справочник "Дисконтные карты". У справочника сделал отдельную форму для ввода штрихкода и поиска элемента справочника по этому штрихкоду.
В этой форме только одно поле "Штрихкод". Предполагается, что ШК можно ввести как сканером так и вручную. И будет найден элемент с таким ШК.

В  форме документа, для ввода ШК диск.карты, сделал  кнопку, которая открывает эту форму справочника.

Теперь в чем проблема:
Если нажать кнопку и в поле "Штрихкод" ввести ШК вручную, все нормально работает. Элемент находится и подставляется куда надо.
Если же нажать кнопку и в поле "Штрихкод" попытаться "пикнуть" сканером, ничего не происходит. Сканер пикает, т.е. штрихкод считал, но в поле "Штрихкод" ничего не появляется.
И главное, после такого неудачного сканирования, после закрытия формы справочника, перестает срабатывать ВнешнееСобытие. Т.е. сканером "пикаю", звук считывания ШК издается, но на форме документа ничего не происходит, и в отладчике в процедуру ВнешнееСобытие не заходит.

Лечится только после перезапуска 1С.

Такое ощущение, что открытие дополнительной формы и "пиканье" сканером после этого, сбивает работу драйвера Атол.

Подскажите пожалуйста, в чем может быть причина и как решить?
 
 
   Birmingem
 
1 - 08.10.19 - 12:51
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если ВводДоступен() Тогда
        Если Источник = "BarCodeScaner" Тогда
            
            ПараметрыОповещения = Новый Структура;
            ПараметрыОповещения.Вставить("ПроцессОтладки",Ложь);
            ПараметрыОповещения.Вставить("ТекстПриЗавершении","Выполнен метод Атола: DeleteEvent");
            
            Оповещение = Новый ОписаниеОповещения("ЗавершениеМетодаАтол", ЭтотОбъект, ПараметрыОповещения);
            
            глСканерШк.НачатьВызовDeleteEvent(Оповещение);
            
            глСканерШк.НачатьУстановкуDataEventEnabled(,1);
            
            ШтрихКод = СокрЛП(Данные);

        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
   Birmingem
 
2 - 08.10.19 - 12:54
Отдельную форму справочника для ввода ШК диск.карты открываю так:

Процедура ВводДкПоШтрихкоду(Команда)
    ДопПараметры = Новый Структура("ШтрихкодЧего","ДисконтнаяКарта");
    Оповещение = Новый ОписаниеОповещения("ВводПоШтрихкодуЗавершение",ЭтотОбъект,ДопПараметры);
    ОткрытьФорму("Справочник.ДисконтныеКарты.Форма.ФормаВводШтрихкода",,ЭтотОбъект,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);    
КонецПроцедуры
   Birmingem
 
3 - 08.10.19 - 17:09
Если же нажать кнопку и в поле "Штрихкод" попытаться "пикнуть" сканером, ничего не происходит. Сканер пикает, т.е. штрихкод считал, но в поле "Штрихкод" ничего не появляется.
   ejikbeznojek
 
4 - 08.10.19 - 17:43
Ты пикаешь в отдельной форме?
Внешнее событие там есть?
   Birmingem
 
5 - 08.10.19 - 18:37
Да, открываю отдельную форму справочника и там пикаю.
Внешнего события там нет. Там всего одно поле. Хочется чтобы штрихкод в этом поле и появился, как будто его ручками забили.
   Birmingem
 
6 - 08.10.19 - 20:05
В отдельной открываемой форме справочника сделал внешнее событие. Штрихкод сканируется, дисконт.карта определяется.

Но теперь другая проблема.
После того как пикнул ШК диск.карты, сработало внешнее событие, форма справочника закрылась. Но тут же срабатывает внешнее событие формы документа, и ищет по этому ШК товар, естественно не находит.

Как форме документа дать понять, что это внешнее событие из другой формы и не надо его обрабатывать?
   Злопчинский
 
7 - 09.10.19 - 02:45
сброс сканера после сканирования дисконта есть?
   НичегоНеПонятно
 
8 - 09.10.19 - 04:40
>>Но тут же срабатывает внешнее событие формы документа
Вот это вот "Если ВводДоступен() Тогда" в форме документа где срабатывает второй раз есть?
   Birmingem
 
9 - 09.10.19 - 11:10
(7)Нет. Отключать сканер, потом снова подключать - что-то совсем некрасиво. А какого нибудь метода вроде ЗавершитьСканирование в Атоле не нашел.
(8)Да, ВводДоступен() в форме документа есть. И он дает Истина.

Перерыл инет, нашел информацию по процедуре ВнешнееСобытие. Оказывается, эта процедура будет по-очереди срабатывать у всех открытых в данный момент форм. Это так в 1С заложено.

Выход нашел такой.
У меня в форме справочника, в процедуре ВнешнееСобытие происходило закрытие формы при удачном нахождении диск.карты по ШК, сразу.
Просто вынес это закрытие формы наружу процедуры ВнешнееСобытие, и все.
ВнешнееСобытие второй раз, в форме документа тоже срабатывает, но теперь ВводДоступен() дает Ложь.
   Birmingem
 
10 - 14.10.19 - 08:41
Но все таки остается вопрос.
Почему, если из формы документа (где есть ВнешнееСобытие) открыть любую другую форму, где нет ВнешнееСобытие, и пикнуть туда сканером, сканер перестает работать вообще, даже если закрыть эту форму и вернуться в форму документа?
Может кто нибудь объяснить причину?
   Birmingem
 
11 - 16.10.19 - 08:38
Но все таки остается вопрос.
Почему, если из формы документа (где есть ВнешнееСобытие) открыть любую другую форму, где нет ВнешнееСобытие, и пикнуть туда сканером, сканер перестает работать вообще, даже если закрыть эту форму и вернуться в форму документа?
Может кто нибудь объяснить причину?
   МимохожийОднако
 
12 - 16.10.19 - 08:42
Посмотри библиотеки подключаемого оборудования от 1С для примера.
   Birmingem
 
13 - 16.10.19 - 08:44
(12)Своя проблему я решил.
Вопрос теоретический. Почему так происходит?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.