Часто при доработке конфигурации 1С:Розница 2.3 возникает задача создать в Рабочем месте кассира (РМК) новую кнопку, открывающую произвольную форму с полем для ввода штрихкода. Однако при сканировании штрихкода ничего не происходит: данные не появляются в поле, а система никак не реагирует. Давайте разберем эту ситуацию и выясним причину, а также рассмотрим несколько рабочих способов решения проблемы.
Проанализируем ситуацию: почему типовое оборудование перестает работать в новом окне, хотя в самом РМК всё функционирует исправно. Вот основные причины:
Рассмотрим подробнее классический подход, при котором мы инициализируем сканер штрихкода непосредственно в новой форме при помощи процедур общих модулей Библиотеки подключаемого оборудования. Это то самое решение, которое чаще всего применяют программисты.
Чтобы заставить форму реагировать на сканер, добавим вызовы служебных процедур в стандартные обработчики событий нашей формы:
НастроитьПодключаемоеОборудование.ВнешнееСобытие перехватываем данные от драйвера сканера.Посмотрим на пример кода, который необходимо разместить в модуле вашей новой формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодключаемоеОборудованиеРТВызовСервера.НастроитьПодключаемоеОборудование(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные);
КонецПроцедуры
Важное примечание: чтобы конфигурация поняла, что данное окно должно работать именно со сканером, в реквизиты формы обычно требуется добавить строковый реквизит ПоддерживаемыеТипыПодключаемогоОборудования и задать ему значение СканерШтрихкода.
Платформа 1С имеет ограничения: она не умеет одновременно получать данные от одного COM-порта в нескольких независимых окнах без конфликтов. Постоянное программное отключение и подключение сканера (как в первом решении) при быстром переключении окон может приводить к сбоям или замедлению работы интерфейса. Разберем альтернативный вариант.
Если оборудование уже успешно инициализировано в основном окне РМК, не пытайтесь захватывать его в новой форме. При сканировании РМК часто рассылает полученные данные платформенным методом Оповестить. Вам достаточно перехватить эту рассылку:
ОбработкаОповещения.Если мы хотим максимально упростить задачу и вовсе отказаться от вызовов БПО в новой форме, переведите сканер в режим работы «Клавиатура». Проанализируем по шагам, как это настроить:
Строка).ТекущийЭлемент.ПриИзменении.Когда кассир сканирует товар, устройство само «введет» цифры в активное поле и сымитирует нажатие клавиши Enter. Это мгновенно вызовет событие ПриИзменении. В этом обработчике вы сможете программно забрать считанный текст, выполнить ваш алгоритм, а затем очистить поле, подготовив его для следующего сканирования.