При работе с маркированными товарами в системе 1С:Управление нашей фирмой (УНФ) разработчики часто сталкиваются с проблемой: стандартные механизмы поиска по штрихкоду, успешно работающие с EAN-13, оказываются бессильны перед длинными кодами маркировки DataMatrix. В этой статье мы разберем, почему классический поиск через регистры сведений не подходит для этих целей, и как правильно реализовать обработку кодов с использованием современных библиотек интеграции.
Рассмотрим типовую процедуру, которую часто пытаются адаптировать программисты. Она основывается на поиске точного соответствия считанной строки в регистре ШтрихкодыНоменклатуры. Проанализируем пример такого кода:
&НаСервереБезКонтекста
Процедура ПолучитьДанныеПоШтрихКодам(СтруктураДанные)
// Преобразование весовых штрихкодов
Для каждого ТекШтрихкод Из СтруктураДанные.МассивШтрихкодов Цикл
РегистрыСведений.ШтрихкодыНоменклатуры.ПреобразоватьВесовойШтрихкод(ТекШтрихкод);
КонецЦикла;
ДанныеПоШтрихКодам = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьДанныеПоШтрихкодамВМассиве(СтруктураДанные.МассивШтрихкодов);
// ... дальнейшая логика сопоставления ...
КонецПроцедуры
Проблема заключается в самой структуре кода маркировки (ГИС МТ «Честный Знак»). Он содержит не только GTIN (идентификатор товара), но и серийный номер, ключ проверки и «криптохвост». Пример типичного кода: 0104670177315778215tO=EEHgnILo.... Поскольку криптохвост уникален для каждой единицы продукции, хранить такие строки целиком в регистре штрихкодов невозможно и бессмысленно. Система должна уметь «отсекать» лишнее и искать товар только по GTIN, встроенному в этот длинный код.
Для корректной работы в современных конфигурациях на базе БСП и БИС следует использовать специализированный программный интерфейс. Вместо прямого запроса к таблицам базы данных, мы обратимся к модулю ШтрихкодированиеОбщегоНазначенияИС. Этот модуль берет на себя всю сложность парсинга DataMatrix, отделение идентификаторов применения (AI) и сопоставление их с базой 1С.
Рассмотрим основной алгоритм действий для реализации этой задачи.
Прежде чем отправить код на сервер, нам необходимо правильно инициализировать структуру параметров. Это критически важно, так как система должна понимать контекст операции. Выясним, какие параметры обязательны:
// На клиентской стороне в обработчике сканирования
ПараметрыСканирования = ШтрихкодированиеОбщегоНазначенияИСКлиент.ПараметрыСканирования(ЭтотОбъект);
// Важная настройка: отключаем проверку средствами ККТ, если мы просто ищем товар в форме
ПараметрыСканирования.Вставить("ТребуетсяПроверкаСредствамиККТ", Ложь);
Использование функции ПараметрыСканирования позволяет автоматически собрать необходимые данные о текущем окне и настройках торгового оборудования. Параметр ТребуетсяПроверкаСредствамиККТ со значением Ложь избавляет нас от лишних вызовов драйвера кассового аппарата при обычном подборе товара.
Теперь проанализируем процесс обработки самого кода. Основная функция ОбработатьВводШтрихкода является универсальной точкой входа. Она автоматически определяет тип считанного кода (будь то EAN-13, весовой товар или GS1 DataMatrix).
// Вызов основной процедуры обработки
РезультатОбработкиШтрихкода = ШтрихкодированиеОбщегоНазначенияИС.ОбработатьВводШтрихкода(
ЭтотОбъект,
ШтрихкодКоличество,
КэшированныеЗначения,
ПараметрыСканирования
);
Разберем подробнее используемые переменные:
После того как библиотека распознала код, нам необходимо применить эти данные к нашему документу или форме. Для этого вызывается процедура послеобработки:
ПослеОбработкиШтрихкодовСервер(
РезультатОбработкиШтрихкода,
КэшированныеЗначения,
ПараметрыСканирования
);
Внутри этой процедуры система выполняет следующие действия:
Запасы или Товары.Проанализировав оба подхода, можно выделить ключевые преимущества использования ШтрихкодированиеОбщегоНазначенияИС перед самописными запросами:
Во-первых, поддержка стандартов GS1. Библиотека правильно обрабатывает спецсимволы-разделители (например, FNC1), которые часто встречаются в кодах маркировки, но «проглатываются» или искажаются при неправильной настройке сканера.
Во-вторых, автоматическое выделение GTIN. Вам не нужно писать регулярные выражения для извлечения 14 цифр кода товара из длинной строки. Система сделает это сама и выполнит поиск в регистре ШтрихкодыНоменклатуры именно по очищенному GTIN.
В-третьих, работа с упаковками. Если отсканирован код транспортной упаковки (агрегированный код), система сможет автоматически «раскрыть» его и найти все вложенные товары, если это предусмотрено логикой документа.
Для успешного решения задачи получения товара по QR-коду (DataMatrix) в УНФ, мы рекомендуем отказаться от прямого чтения регистра штрихкодов. Вместо этого следует использовать цепочку вызовов модулей интеграции с ИС. Это гарантирует стабильную работу программы при обновлении конфигурации и корректную обработку любых типов маркированной продукции.
Не забывайте также настраивать торговое оборудование (сканеры) в режиме эмуляции COM-порта или использовать современные драйверы, поддерживающие передачу данных в формате Base64, чтобы избежать потери спецсимволов при передаче длинных строк в 1С.