При переходе на новые версии программных продуктов, таких как 1С:Розница 3.0 (созданная на архитектуре 1С:УНФ), разработчики часто сталкиваются с тем, что привычные методы работы с оборудованием из версии 2.3 претерпели значительные изменения. Реализация считывания кодов маркировки (КМ) — задача комплексная, требующая не просто получения строки от сканера, но и её корректного разбора в соответствии со стандартами GS1 DataMatrix. В этой статье мы подробно разберем, как интегрировать механизм считывания в вашу внешнюю обработку.
Для начала проанализируем ситуацию: 1С:Розница 3.0 активно использует современные версии Библиотеки подключаемого оборудования (БПО) и Библиотеки интеграции с государственными информационными системами (БИС). В отличие от старых конфигураций, где логика часто была сосредоточена непосредственно в модуле формы, в версии 3.0 она вынесена в специализированные общие модули, а взаимодействие с оборудованием строится на асинхронных вызовах.
Рассмотрим основные этапы реализации задачи:
Чтобы форма вашей обработки «услышала» сканер, её необходимо зарегистрировать в системе подключаемого оборудования. Посмотрим на программный интерфейс, который потребуется реализовать в модуле формы. Нам необходимо добавить реквизиты формы ИспользоватьПодключаемоеОборудование (тип Булево) и ПоддерживаемыеТипыПодключаемогоОборудования (тип Строка).
Разберем код инициализации:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Указываем, какие типы оборудования нам нужны
Элементы.ИспользоватьПодключаемоеОборудование = Истина;
Элементы.ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода";
// Вызов стандартного метода настройки
ПодключаемоеОборудованиеРТ.НастроитьПодключаемоеОборудование(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Инициируем подключение сканера в асинхронном режиме
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, "СканерШтрихкода");
КонецПроцедуры
Выясним, как данные попадают в программу. Когда сканер считывает штрихкод, он генерирует внешнее событие. Нам нужно перехватить его процедурой ВнешнееСобытие. Однако в современных конфигурациях рекомендуется использовать механизм оповещений, так как это обеспечивает более стабильную работу в веб-клиенте и при использовании драйверов нового поколения.
Проанализируем пример обработки события:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если ВводДоступен() Тогда
// Передаем данные в универсальный обработчик БПО
ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные);
КонецЕсли;
КонецПроцедуры
После того как БПО обработает «сырые» данные, она вызовет экспортную процедуру ОповещениеПоискаПоШтрихкоду. Именно здесь начинается самое интересное — работа с кодом маркировки.
Код маркировки молочной продукции представляет собой строку формата GS1 DataMatrix. Просто получить эту строку недостаточно, так как она содержит скрытые символы-разделители (например, FNC1 или GS), которые критически важны для правильного распознавания структуры. Если ваш сканер настроен в режиме эмуляции клавиатуры, эти символы могут быть потеряны, поэтому рекомендуем использовать режим NativeApi или COM-эмуляцию.
Для обработки считанного штрихкода воспользуемся методами библиотеки интеграции с ИС. Рассмотрим пример кода:
&НаКлиенте
Процедура ОповещениеПоискаПоШтрихкоду(Штрихкод, ДополнительныеПараметры) Экспорт
Если ПустаяСтрока(Штрихкод) Тогда
Возврат;
КонецЕсли;
// Определяем, является ли штрихкод кодом маркировки
ПараметрыПроверки = МаркировкаТоваровКлиент.ПараметрыПроверкиКодаМаркировки();
ДанныеШтрихкода = МаркировкаТоваровКлиент.РазобратьШтрихкод(Штрихкод);
Если ДанныеШтрихкода.ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.DataMatrixПолносоставной") Тогда
// Логика обработки кода маркировки
ОбработатьКодМаркировки(Штрихкод, ДанныеШтрихкода);
Иначе
// Обычный поиск товара по EAN-13
ПоискПоОбычномуШтрихкоду(Штрихкод);
КонецЕсли;
КонецПроцедуры
В Рознице 3.0 основные функции по работе с «Честным ЗНАКОМ» вынесены в модули, начинающиеся на ИнтеграцияИС. Если вам необходимо проверить статус кода (например, введен ли он в оборот или не истек ли срок годности для молочки), следует использовать функции модуля ИнтеграцияИСКлиент.
Выясним причину, почему это важно: при продаже или перемещении маркированного товара система должна убедиться, что код валиден. В вашей внешней обработке вы можете вызвать стандартное окно проверки кодов маркировки, которое уже реализовано в типовом решении. Посмотрите, как реализован вызов в типовом документе РасходнаяНакладная или в рабочем месте кассира (РМК). Это лучший шаблон для подражания.
Проанализируем типичные проблемы при разработке таких обработок:
ПриЗакрытии вызывается метод МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы, иначе при повторном открытии порт может быть занят.Начать...). Старый код из Розницы 2.0/2.1 работать не будет.Для поиска нужных процедур в конфигурации используйте глобальный поиск по строке ОбработкаВнешнегоСобытия или ищите вызовы из общего модуля ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. Также полезно изучить модуль ШтрихкодированиеОбщегоНазначения, который отвечает за логику определения типов штрихкодов в Рознице 3.0.
Таким образом, комбинируя стандартные механизмы БПО для подключения железа и методы БИС для парсинга DataMatrix, вы сможете создать надежный инструмент для работы с маркированной продукцией в вашей внешней обработке.