Как реализовать считывание кодов маркировки «Честный ЗНАК» во внешней обработке для 1С:Розница 3.0

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

При переходе на новые версии программных продуктов, таких как 1С:Розница 3.0 (созданная на архитектуре 1С:УНФ), разработчики часто сталкиваются с тем, что привычные методы работы с оборудованием из версии 2.3 претерпели значительные изменения. Реализация считывания кодов маркировки (КМ) — задача комплексная, требующая не просто получения строки от сканера, но и её корректного разбора в соответствии со стандартами GS1 DataMatrix. В этой статье мы подробно разберем, как интегрировать механизм считывания в вашу внешнюю обработку.

Анализ архитектурных особенностей Розницы 3.0

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

Рассмотрим основные этапы реализации задачи:

  1. Подключение оборудования при открытии формы обработки.
  2. Перехват события сканирования штрихкода.
  3. Идентификация типа штрихкода (обычный EAN-13 или код маркировки).
  4. Парсинг (разбор) кода маркировки для выделения GTIN и серийного номера.
  5. Проверка статуса кода в системе «Честный ЗНАК» (ГИС МТ).

Шаг 1. Инициализация и подключение оборудования

Чтобы форма вашей обработки «услышала» сканер, её необходимо зарегистрировать в системе подключаемого оборудования. Посмотрим на программный интерфейс, который потребуется реализовать в модуле формы. Нам необходимо добавить реквизиты формы ИспользоватьПодключаемоеОборудование (тип Булево) и ПоддерживаемыеТипыПодключаемогоОборудования (тип Строка).

Разберем код инициализации:


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

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

Шаг 2. Обработка внешнего события сканера

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

Проанализируем пример обработки события:


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если ВводДоступен() Тогда
        // Передаем данные в универсальный обработчик БПО
        ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные);
    КонецЕсли;
КонецПроцедуры

После того как БПО обработает «сырые» данные, она вызовет экспортную процедуру ОповещениеПоискаПоШтрихкоду. Именно здесь начинается самое интересное — работа с кодом маркировки.

Шаг 3. Разбор и валидация кода маркировки

Код маркировки молочной продукции представляет собой строку формата GS1 DataMatrix. Просто получить эту строку недостаточно, так как она содержит скрытые символы-разделители (например, FNC1 или GS), которые критически важны для правильного распознавания структуры. Если ваш сканер настроен в режиме эмуляции клавиатуры, эти символы могут быть потеряны, поэтому рекомендуем использовать режим NativeApi или COM-эмуляцию.

Для обработки считанного штрихкода воспользуемся методами библиотеки интеграции с ИС. Рассмотрим пример кода:


&НаКлиенте
Процедура ОповещениеПоискаПоШтрихкоду(Штрихкод, ДополнительныеПараметры) Экспорт
    
    Если ПустаяСтрока(Штрихкод) Тогда
        Возврат;
    КонецЕсли;

    // Определяем, является ли штрихкод кодом маркировки
    ПараметрыПроверки = МаркировкаТоваровКлиент.ПараметрыПроверкиКодаМаркировки();
    ДанныеШтрихкода = МаркировкаТоваровКлиент.РазобратьШтрихкод(Штрихкод);
    
    Если ДанныеШтрихкода.ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.DataMatrixПолносоставной") Тогда
        // Логика обработки кода маркировки
        ОбработатьКодМаркировки(Штрихкод, ДанныеШтрихкода);
    Иначе
        // Обычный поиск товара по EAN-13
        ПоискПоОбычномуШтрихкоду(Штрихкод);
    КонецЕсли;

КонецПроцедуры

Шаг 4. Работа с библиотекой интеграции (БИС)

В Рознице 3.0 основные функции по работе с «Честным ЗНАКОМ» вынесены в модули, начинающиеся на ИнтеграцияИС. Если вам необходимо проверить статус кода (например, введен ли он в оборот или не истек ли срок годности для молочки), следует использовать функции модуля ИнтеграцияИСКлиент.

Выясним причину, почему это важно: при продаже или перемещении маркированного товара система должна убедиться, что код валиден. В вашей внешней обработке вы можете вызвать стандартное окно проверки кодов маркировки, которое уже реализовано в типовом решении. Посмотрите, как реализован вызов в типовом документе РасходнаяНакладная или в рабочем месте кассира (РМК). Это лучший шаблон для подражания.

Практические советы по отладке

Проанализируем типичные проблемы при разработке таких обработок:

Для поиска нужных процедур в конфигурации используйте глобальный поиск по строке ОбработкаВнешнегоСобытия или ищите вызовы из общего модуля ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. Также полезно изучить модуль ШтрихкодированиеОбщегоНазначения, который отвечает за логику определения типов штрихкодов в Рознице 3.0.

Таким образом, комбинируя стандартные механизмы БПО для подключения железа и методы БИС для парсинга DataMatrix, вы сможете создать надежный инструмент для работы с маркированной продукцией в вашей внешней обработке.

← На главную