|
Перестает работать сканер штрихкодов при открытии дополнительной формы | ☑ | ||
---|---|---|---|---|
0
Birmingem
08.10.19
✎
12:16
|
Имеется небольшая самописная конфигурация, управляемые формы.
В ней документ "Реализация", в котором вводится товар с помощью сканера штрихкодов. В форме использую ВнешнееСобытие. Для работы со сканером использую драйвер Атол. Все нормально работает. Но теперь попросили сделать скидки по дисконтным картам. У дисконтных карт есть свои штрихкоды (ШК). Сделал справочник "Дисконтные карты". У справочника сделал отдельную форму для ввода штрихкода и поиска элемента справочника по этому штрихкоду. В этой форме только одно поле "Штрихкод". Предполагается, что ШК можно ввести как сканером так и вручную. И будет найден элемент с таким ШК. В форме документа, для ввода ШК диск.карты, сделал кнопку, которая открывает эту форму справочника. Теперь в чем проблема: Если нажать кнопку и в поле "Штрихкод" ввести ШК вручную, все нормально работает. Элемент находится и подставляется куда надо. Если же нажать кнопку и в поле "Штрихкод" попытаться "пикнуть" сканером, ничего не происходит. Сканер пикает, т.е. штрихкод считал, но в поле "Штрихкод" ничего не появляется. И главное, после такого неудачного сканирования, после закрытия формы справочника, перестает срабатывать ВнешнееСобытие. Т.е. сканером "пикаю", звук считывания ШК издается, но на форме документа ничего не происходит, и в отладчике в процедуру ВнешнееСобытие не заходит. Лечится только после перезапуска 1С. Такое ощущение, что открытие дополнительной формы и "пиканье" сканером после этого, сбивает работу драйвера Атол. Подскажите пожалуйста, в чем может быть причина и как решить? |
|||
1
Birmingem
08.10.19
✎
12:51
|
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если ВводДоступен() Тогда Если Источник = "BarCodeScaner" Тогда ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("ПроцессОтладки",Ложь); ПараметрыОповещения.Вставить("ТекстПриЗавершении","Выполнен метод Атола: DeleteEvent"); Оповещение = Новый ОписаниеОповещения("ЗавершениеМетодаАтол", ЭтотОбъект, ПараметрыОповещения); глСканерШк.НачатьВызовDeleteEvent(Оповещение); глСканерШк.НачатьУстановкуDataEventEnabled(,1); ШтрихКод = СокрЛП(Данные); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
2
Birmingem
08.10.19
✎
12:54
|
Отдельную форму справочника для ввода ШК диск.карты открываю так:
Процедура ВводДкПоШтрихкоду(Команда) ДопПараметры = Новый Структура("ШтрихкодЧего","ДисконтнаяКарта"); Оповещение = Новый ОписаниеОповещения("ВводПоШтрихкодуЗавершение",ЭтотОбъект,ДопПараметры); ОткрытьФорму("Справочник.ДисконтныеКарты.Форма.ФормаВводШтрихкода",,ЭтотОбъект,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры |
|||
3
Birmingem
08.10.19
✎
17:09
|
Если же нажать кнопку и в поле "Штрихкод" попытаться "пикнуть" сканером, ничего не происходит. Сканер пикает, т.е. штрихкод считал, но в поле "Штрихкод" ничего не появляется.
|
|||
4
ejikbeznojek
08.10.19
✎
17:43
|
Ты пикаешь в отдельной форме?
Внешнее событие там есть? |
|||
5
Birmingem
08.10.19
✎
18:37
|
Да, открываю отдельную форму справочника и там пикаю.
Внешнего события там нет. Там всего одно поле. Хочется чтобы штрихкод в этом поле и появился, как будто его ручками забили. |
|||
6
Birmingem
08.10.19
✎
20:05
|
В отдельной открываемой форме справочника сделал внешнее событие. Штрихкод сканируется, дисконт.карта определяется.
Но теперь другая проблема. После того как пикнул ШК диск.карты, сработало внешнее событие, форма справочника закрылась. Но тут же срабатывает внешнее событие формы документа, и ищет по этому ШК товар, естественно не находит. Как форме документа дать понять, что это внешнее событие из другой формы и не надо его обрабатывать? |
|||
7
Злопчинский
09.10.19
✎
02:45
|
сброс сканера после сканирования дисконта есть?
|
|||
8
НичегоНе Понятно
09.10.19
✎
04:40
|
>>Но тут же срабатывает внешнее событие формы документа
Вот это вот "Если ВводДоступен() Тогда" в форме документа где срабатывает второй раз есть? |
|||
9
Birmingem
09.10.19
✎
11:10
|
(7)Нет. Отключать сканер, потом снова подключать - что-то совсем некрасиво. А какого нибудь метода вроде ЗавершитьСканирование в Атоле не нашел.
(8)Да, ВводДоступен() в форме документа есть. И он дает Истина. Перерыл инет, нашел информацию по процедуре ВнешнееСобытие. Оказывается, эта процедура будет по-очереди срабатывать у всех открытых в данный момент форм. Это так в 1С заложено. Выход нашел такой. У меня в форме справочника, в процедуре ВнешнееСобытие происходило закрытие формы при удачном нахождении диск.карты по ШК, сразу. Просто вынес это закрытие формы наружу процедуры ВнешнееСобытие, и все. ВнешнееСобытие второй раз, в форме документа тоже срабатывает, но теперь ВводДоступен() дает Ложь. |
|||
10
Birmingem
14.10.19
✎
08:41
|
Но все таки остается вопрос.
Почему, если из формы документа (где есть ВнешнееСобытие) открыть любую другую форму, где нет ВнешнееСобытие, и пикнуть туда сканером, сканер перестает работать вообще, даже если закрыть эту форму и вернуться в форму документа? Может кто нибудь объяснить причину? |
|||
11
Birmingem
16.10.19
✎
08:38
|
Но все таки остается вопрос.
Почему, если из формы документа (где есть ВнешнееСобытие) открыть любую другую форму, где нет ВнешнееСобытие, и пикнуть туда сканером, сканер перестает работать вообще, даже если закрыть эту форму и вернуться в форму документа? Может кто нибудь объяснить причину? |
|||
12
Мимохожий Однако
16.10.19
✎
08:42
|
Посмотри библиотеки подключаемого оборудования от 1С для примера.
|
|||
13
Birmingem
16.10.19
✎
08:44
|
(12)Своя проблему я решил.
Вопрос теоретический. Почему так происходит? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |