Как настроить сканер штрихкодов для нового документа в 1С:Управление торговлей 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При создании произвольного документа в конфигурации «1С:Управление торговлей 11» разработчики часто сталкиваются с ситуацией, когда подключенное торговое оборудование не реагирует на сканирование штрихкода. Если открыта только форма нового документа, события не возникают. Однако стоит открыть рядом любую типовую форму (например, РеализацияТоваровИУслуг), как считывание штрихкода начинает откликаться в созданной форме. Разберем причинно-следственные связи этого поведения и настроим корректное взаимодействие с подсистемой подключаемого оборудования.

Принцип работы подсистемы подключаемого оборудования (БПО)

Проанализируем механику обработки внешних событий в современных типовых решениях на базе управляемых форм. В отличие от старых версий платформ, где событие ВнешнееСобытие обрабатывалось непосредственно в форме документа, в «1С:Управление торговлей 11» применен централизованный подход:

  1. Внешнее событие от устройства перехватывается на уровне модулей приложения.
  2. Глобальный обработчик отправляет оповещение всем открытым формам через механизм Оповестить().
  3. Каждая открытая форма принимает оповещение в процедуре ОбработкаОповещения.
  4. Чтобы событие обработала только та форма, с которой сейчас работает пользователь, используется проверка системной функции ВводДоступен(). Если форма активна, функция возвращает значение Истина.

Если в форме нового документа не выполнены обязательные вызовы по регистрации формы в подсистеме торгового оборудования, торговая система не активирует слушатель устройств для данного окна. Поэтому оповещения не отправляются до тех пор, пока не будет открыта типовая форма, которая инициирует работу оборудования.

Шаг 1. Добавление реквизитов формы

Рассмотрев структуру типовых форм, увидим, что для взаимодействия с БПО формы обязаны содержать служебные реквизиты. Откроем форму созданного документа в режиме конфигуратора и добавим два реквизита формы:

  1. ИспользоватьПодключаемоеОборудование — тип Булево.
  2. ПоддерживаемыеТипыПодключаемогоОборудования — тип Строка (неограниченной длины или фиксированной, достаточно указать перечень типов через запятую).

Шаг 2. Инициализация на сервере

Проанализируем серверную часть подключения. В обработчике события формы ПриСозданииНаСервере необходимо вызвать процедуру настройки подключаемого оборудования из типового общего модуля. Выясним, как это выглядит в коде:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Настройка подсистемы подключаемого оборудования для формы
	ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
	
КонецПроцедуры

Шаг 3. Подключение и отключение оборудования на клиенте

Посмотрим на клиентскую логику. При открытии формы нужно подать команду подсистеме БПО о том, что окно готово принимать данные со сканера, а при закрытии — корректно освободить ресурсы.

Добавим клиентские обработчики ПриОткрытии и ПриЗакрытии в модуль формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// Подключаем оборудование при открытии формы
	МенеджерОборудованияКлиентПереопределяемый.НачатьПодключениеОборудованиеПриОткрытииФормы(ЭтаФорма, "СканерШтрихкода");
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	// Обязательно отключаем оборудование при закрытии
	МенеджерОборудованияКлиентПереопределяемый.НачатьОтключениеОборудованиеПриЗакрытииФормы(ЭтаФорма);
	
КонецПроцедуры

Шаг 4. Обработка полученных данных

Разберем окончательный этап — получение и обработку штрихкода. Для этого в свойствах формы (корень дерева элементов формы) назначаем обработчик события ОбработкаОповещения со стандартным сигналом из трех параметров: (ИмяСобытия, Параметр, Источник).

Напишем код обработки данных с проверкой активности текущей формы:


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// Проверяем, что событие пришло от БПО и текущее окно активно
	Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
		
		Если ИмяСобытия = "СчитанШтрихкод" Тогда
			
			// В переменной Параметр передаются данные штрихкода
			// В зависимости от версии БПО это может быть строка или массив/структура
			ОбработатьШтрихкод(Параметр);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Дополнительные нюансы и возможные проблемы

Если после выполнения всех шагов сканер все равно не реагирует, проанализируем следующие моменты:

  1. Режим работы сканера: Убедимся, что устройство настроено в режиме эмуляции COM-порта или используемый драйвер работает через NativeApi. Если сканер работает в режиме эмуляции клавиатуры (HID) без специализированного драйвера перехвата, платформа 1С не сможет сгенерировать внешнее событие — штрихкод будет вводиться как обычный текст с клавиатуры.
  2. Фокус ввода: При сканировании текстовый курсор не должен редактировать строковое поле. Если активен прямой ввод в текстовом поле, символы вставятся прямо в него.
  3. Настройки рабочего места: Проверим, подключено ли оборудование к конкретному рабочему месту текущего пользователя через раздел администрирования торгового оборудования.
← На главную