|
Подключение Сканера ШК (разрыв клавиатуры) к самописной конфе (упр.формы) | ☑ | ||
---|---|---|---|---|
0
Alex_Kh_ua
08.12.17
✎
18:50
|
Доброго времени суток!!! Ребята, спасайте...
Есть самописная конфигурация на упр. формах и сканер ШК, который работает только в разрыв клавиатуры. Необходимо подключить к конфе. Так, как метод подключения через назначение "Сочетание клавиш" по префиксу (")") не работает по РДП, пытаюсь подключить обработчик событий. Тестировал на стандартной конфигурации УТ3.1 украина(упр.формы, настройка сканера шк как клавиатуры), работало шикарно. Как сделать здесь, ума не приложу. Что сделано: В модуль Управляемого приложения добавлен следующий код. "&НаКлиенте Перем Драйвер; ПриНачалеРаботыСистемы Попытка ПрогИД="AddIn.Scanner"; ПодключитьВнешнююКомпоненту(ПрогИД); Драйвер = Новый (ПрогИД); Сообщить("Компонента для сканера штрих-кодов загружена!"); Исключение Сообщить ("Невозможно подключить внешнюю компоненту!"); КонецПопытки; Попытка ВерсияИзДрайвера = Драйвер.ПолучитьНомерВерсии(); Исключение Сообщить ("Невозможно определить версию драйвера!"); КонецПопытки; Если Лев(СокрЛП(ВерсияИзДрайвера), 5) <> "8.0.8" Тогда Сообщить("Версия драйвера "+ВерсияИзДрайвера+""); //Сообщить ("Версия драйвера не поддерживается. Требуемая версия компоненты 1С:Сканер ШК - 8.0.8!"); КонецЕсли; Если Драйвер.Подсоединить("Сканер штрихкода") <> 0 Тогда Сообщить ("Ошибка (1) при подключении устройства!"); КонецЕсли; //при подключении USB-сканера с эмуляцией COM-порта указывать порт 5 в свойствах виртуального COM-порта в диспетчере устройств //сканер настроить - префикса нет, суффикс - CR Драйвер.БитДанных = 8; Драйвер.Порт = 0; Драйвер.Скорость = 9600; Драйвер.СтопБит = 0; Драйвер.СтопСимвол = 13;//CR - carriage return Драйвер.Префикс = 40; Драйвер.ПрефиксСтрока = "("; Драйвер.ИмяСобытия = "ПолученШтрихкод"; Если Драйвер.Занять(1) = 0 Тогда Драйвер.УстройствоВключено = 1; Драйвер.ПосылкаДанных = 1; Драйвер.ОчиститьВход(); Драйвер.ОчиститьВыход(); Сообщить("Сканер подключен и готов к работе!"); Если Драйвер.УстройствоВключено <> 1 Тогда //Отключить(); Драйвер.УстройствоВключено = 0; Драйвер.Освободить(); Драйвер.Отсоединить(); Сообщить ("Ошибка (2) при подключении устройства!"); КонецЕсли; Иначе //Отключить(); Драйвер.УстройствоВключено = 0; Драйвер.Освободить(); Драйвер.Отсоединить(); Сообщить ("Ошибка (3) при подключении устройства!"); КонецЕсли; " Работает, пишет все ок. далее в этом же модуле добавлены процедуры " Процедура ПередЗавершениемРаботыСистемы(Отказ) Если Драйвер <> Неопределено Тогда Драйвер.УстройствоВключено = 0; Драйвер.Освободить(); Драйвер.Отсоединить(); КонецЕсли; Режим = РежимДиалогаВопрос.ДаНет; Текст = "Закрыть программу?"; Ответ = Вопрос(Текст, Режим, 0); Если Ответ = КодВозвратаДиалога.Нет Тогда Отказ = истина; КонецЕсли; КонецПроцедуры &НаКлиенте Функция ОбработатьСобытие(Данные) Экспорт ШтрихКод = Данные; Драйвер.ПосылкаДанных = 0; Возврат СокрЛП(ШтрихКод); КонецФункции &НаКлиенте Функция СобытиеОбработано() Экспорт Драйвер.ПосылкаДанных = 1; КонецФункции" Фактически весь код модуля перечислен, но внешнее событие не работает в модуле документа |
|||
1
nordbox
08.12.17
✎
19:01
|
НУ дык в отладчике посмотри
или тупо выводи сообщения типа Сообщить(Данные); понапихай где надо и смотри |
|||
2
Сияющий в темноте
08.12.17
✎
19:03
|
ВнешнееСобытие к форме подключил (функция назначается в свойствах формы и получает параметры Источник,Событие,Данные) ?
|
|||
3
Alex_Kh_ua
08.12.17
✎
19:07
|
В модуле формы документа, в эту процедуру не заходит
"&НаСервере Процедура ВнешнееСобытиеНаСервере() да = 1; // Вставить содержимое обработчика. КонецПроцедуры" |
|||
4
Alex_Kh_ua
08.12.17
✎
19:08
|
В предыдущее должно попадать от сюда, но и сюда не попадает...
&НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) ВнешнееСобытиеНаСервере(); КонецПроцедуры |
|||
5
Сияющий в темноте
08.12.17
✎
19:09
|
Внешнее событие у формы задано или просто написано ?
|
|||
6
nordbox
08.12.17
✎
19:09
|
я вот только не знаю что у них там в Украинской версии
в УТ 10.3 это выглядит так // Процедура - обработчик внешнего событие, которое возникает при посылке // внешним приложением сообщения, сформированного в специальном формате. // Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими // обработчик этого события, а затем может быть обработано в процедуре модуля // приложения с именем ОбработкаВнешнегоСобытия(). // // Параметры: // Источник - <Строка> // - Источник внешнего события. // // Событие - <Строка> // - Наименование события. // // Данные - <Строка> // - Данные для события. // Процедура ВнешнееСобытие(Источник, Событие, Данные) Если Не ВводДоступен() Тогда Возврат; КонецЕсли; ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма); КонецПроцедуры // ВнешнееСобытие() |
|||
7
Alex_Kh_ua
08.12.17
✎
19:10
|
Конечно задано :) Создано из свойств формы
|
|||
8
Сияющий в темноте
08.12.17
✎
19:10
|
Префикс у сканера в блокноте тот, который задан ?
|
|||
9
Alex_Kh_ua
08.12.17
✎
19:12
|
"Префикс у сканера в блокноте тот, который задан ?"
Да, тот, который задан "(7622210240200" |
|||
10
Alex_Kh_ua
08.12.17
✎
19:23
|
Я если честно, не понимаю, как дальше 1С (после подключения
dll), понимает, что необходимо запускать внешнее событие? т.к. после выполнения этого кода, " Попытка ПрогИД="AddIn.Scanner"; ПодключитьВнешнююКомпоненту(ПрогИД); Драйвер = Новый (ПрогИД); Сообщить("Компонента для сканера штрих-кодов загружена!"); Исключение Сообщить ("Невозможно подключить внешнюю компоненту!"); КонецПопытки; Попытка ВерсияИзДрайвера = Драйвер.ПолучитьНомерВерсии(); Исключение Сообщить ("Невозможно определить версию драйвера!"); КонецПопытки; Если Лев(СокрЛП(ВерсияИзДрайвера), 5) <> "8.0.8" Тогда Сообщить("Версия драйвера "+ВерсияИзДрайвера+""); //Сообщить ("Версия драйвера не поддерживается. Требуемая версия компоненты 1С:Сканер ШК - 8.0.8!"); КонецЕсли; Если Драйвер.Подсоединить("Сканер штрихкода") <> 0 Тогда Сообщить ("Ошибка (1) при подключении устройства!"); КонецЕсли; //при подключении USB-сканера с эмуляцией COM-порта указывать порт 5 в свойствах виртуального COM-порта в диспетчере устройств //сканер настроить - префикса нет, суффикс - CR Драйвер.БитДанных = 8; Драйвер.Порт = 0; Драйвер.Скорость = 9600; Драйвер.СтопБит = 0; Драйвер.СтопСимвол = 13;//CR - carriage return Драйвер.Префикс = 40; Драйвер.ПрефиксСтрока = "("; Драйвер.ИмяСобытия = "ПолученШтрихкод"; Если Драйвер.Занять(1) = 0 Тогда Драйвер.УстройствоВключено = 1; Драйвер.ПосылкаДанных = 1; Драйвер.ОчиститьВход(); Драйвер.ОчиститьВыход(); Сообщить("Сканер подключен и готов к работе!"); Если Драйвер.УстройствоВключено <> 1 Тогда //Отключить(); Драйвер.УстройствоВключено = 0; Драйвер.Освободить(); Драйвер.Отсоединить(); Сообщить ("Ошибка (2) при подключении устройства!"); КонецЕсли; Иначе //Отключить(); Драйвер.УстройствоВключено = 0; Драйвер.Освободить(); Драйвер.Отсоединить(); Сообщить ("Ошибка (3) при подключении устройства!"); КонецЕсли; " и получения переменной "&НаКлиенте Перем Драйвер; " больше в принципе ничего не происходит. |
|||
11
nordbox
08.12.17
✎
19:29
|
а ты в типовой посмотри
|
|||
12
nordbox
08.12.17
✎
19:33
|
я просто не знаю как у там в украинской версии,
смотри общие модули, оттуда ноги ростут. |
|||
13
Alex_Kh_ua
08.12.17
✎
19:51
|
а все оказалось банальнее, чем я думал...
В модуле управляемого приложения не было процедуры ОбработкаВнешнегоСобытия(Источник, Событие, Данные). При сканировании, выполняется код этой процедуры, а потом переходит в модуль открытого документа в ВнешнееСобытие(Источник, Событие, Данные). Спасибо всем за внимание и подсказки/советы. За аналог была взята статья: v8: v8: подключение ШК |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |