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

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

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

Однако на практике бизнес-процессы клиентов часто требуют возможности сканирования именно в окне подбора — например, для оперативной проверки остатков на разных складах или уточнения характеристик товара перед добавлением в документ. Часто, когда клиент переходит на УТ 11 с УТ 10.3, он ожидает увидеть привычную логику работы справочников. В этой статье мы подробно разберем, как программно вернуть функционал сканера штрихкодов в форму подбора, используя механизмы Библиотеки подключаемого оборудования (БПО).

Анализируем причину проблемы: почему сканер «молчит» в подборе?

Проанализируем ситуацию: почему в форме списка номенклатуры сканер работает, а в форме подбора — нет? Ответ кроется в архитектуре управляемого приложения. Для того чтобы форма начала принимать события от внешнего оборудования (сканера штрихкодов), она должна «подписаться» на эти события через менеджер оборудования. В типовой форме подбора УТ 11 такая подписка отсутствует по умолчанию, так как разработчики предполагают, что пользователь будет сканировать штрихкоды непосредственно в табличную часть документа, хотя многим пользователям была бы полезна привычная иерархия номенклатуры как в УТ 10.3 с возможностью быстрого поиска.

Выясним причину отсутствия реакции: даже если вы добавите в модуль формы процедуру ОбработкаОповещения, платформа не будет передавать в неё данные со сканера, пока менеджер оборудования не зафиксирует, что текущее окно является активным потребителем данных типа «Сканер штрихкода». Для решения этой задачи можно использовать готовое сканирование штрихкодов в форме подбора номенклатуры, которое реализует этот механизм.

Шаг 1. Подключение формы к Библиотеке подключаемого оборудования

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

Посмотрим на пример кода, который необходимо добавить для регистрации формы в системе БПО:


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

Использование метода ПодключитьОборудованиеКоманду из общего модуля МенеджерОборудованияКлиент позволяет форме войти в список активных слушателей. С этого момента платформа начнет перехватывать прерывания от драйвера сканера и направлять их в наше окно.

Шаг 2. Реализация перехвата события сканирования

Теперь разберем, как обработать само событие. Когда луч сканера считывает код, платформа генерирует внешнее событие, которое попадает в процедуру ОбработкаОповещения. Если в форме подбора её нет, её нужно создать. Важно понимать, что в параметрах этой процедуры передается не просто строка со штрихкодом, а структура данных, сформированная драйвером.

Рассмотрим структуру обработки события:


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

Обратите внимание, что в разных версиях БПО имена событий могут отличаться (например, ScanData для новых версий или просто Штрихкод для более старых). Мы рекомендуем проверять оба варианта для универсальности решения.

Шаг 3. Поиск товара по считанному штрихкоду

Проанализируем ситуацию далее: данные получены, но что с ними делать в подборе? Нам нужно найти номенклатуру, соответствующую штрихкоду, и спозиционироваться на ней в динамическом списке. Для удобства работы пользователя часто требуется не только найти товар, но и увидеть остатки и цены в списке номенклатуры как в УТ 10.3, чтобы сразу сориентировать покупателя.

Посмотрим на пример серверной функции поиска:


&НаСервере
Функция НайтиТоварПоШтрихкодуНаСервере(Знач Штрихкод)
    
    // Используем типовой регистр сведений "ШтрихкодыНоменклатуры"
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ШтрихкодыНоменклатуры.Номенклатура КАК Ссылка,
        |	ШтрихкодыНоменклатуры.Характеристика КАК Характеристика
        |ИЗ
        |	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
        |ГДЕ
        |	ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод";
    
    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        
        Возврат Новый Структура("Номенклатура, Характеристика", Выборка.Ссылка, Выборка.Характеристика);
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции

После того как сервер вернул нам ссылку на номенклатуру, на клиенте мы должны выполнить позиционирование. Чтобы форма стала еще информативнее, можно внедрить дополнительные колонки в подборах номенклатуры, отображающие сам штрихкод или специфические цены — для этого есть обработка вывода штрихкодов и остатков в форме списка УТ, КА, ERP.

Шаг 4. Обязательное отключение оборудования

Важный момент, о котором часто забывают разработчики: при закрытии формы подбора необходимо обязательно разорвать связь со сканером. Если этого не сделать, события сканера могут продолжать поступать в «несуществующую» (закрытую) форму, что приведет к ошибкам в сеансе пользователя или некорректной работе сканера в основном документе.

Добавим обработчик закрытия:


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

Дополнительные рекомендации по реализации

Рассмотрим несколько нюансов, которые помогут сделать решение более стабильным:

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

Таким образом, мы выяснили, что ограничение на использование сканера в подборе — это лишь методологическое решение 1С, которое легко обходится с помощью нескольких строк кода и правильного обращения к функциям Библиотеки подключаемого оборудования. Следуя этим шагам, вы сможете обеспечить клиенту привычный и удобный интерфейс работы с товарами.

← На главную