Перейти к основному содержимому
Версия: 3.4

Шаблоны штрихкодов номенклатуры (товары и упаковки) в Mobile SMARTS

Использование в Mobile SMARTS шаблонов штрихкода для номенклатуры позволяет вводить в систему нефиксированные штрихкоды, содержащие значимую информацию (например, срок годности товара или его количество).

При сканировании будет производиться сравнение штрихкода на соответствие заданному шаблону и, в случае соответствия, происходить заполнение извлеченных из него данных.

Часто используются шаблоны ШК для весовых товаров, для того чтобы извлекать из них код товара и его количество. Далее по коду ищется сам товар, а количество записывается в документ или выводится на экран для редактирования.

Поиск в офлайне

  1. Не подпадает ли штрихкод под шаблон контейнера или палеты. Если подпадает, то это контейнер (палета или коробка), поиск закончен.

  2. Если это не контейнер, то не подпадает ли штрихкод под общий шаблон штрихкодов номенклатуры? Если подпадает, то из штрихкода вынимаются идентификаторы номенклатуры (код, артикул, GTIN и т.п.) и далее поиск выполняется по этим идентификаторам, а не по всему штрихкоду

  3. Не равен ли штрихкод штрихкоду номенклатуры, коду, артикулу номенклатуры и т.п.?

  4. Если нет, то равен ли он штрихкоду упаковки и не подпадает ли под шаблон штрихкодов индивидуальной упаковки номенклатуры?

Шаги 2,3,4 выполняются до тех пор, пока не будут найдены все подходящие товары. Если на шаге 3 товар нашелся, то упаковки этого же товара на шаге 4 уже не проверяются.

Поиск в онлайне

  1. Не подпадает ли штрихкод под шаблон контейнера или палеты? Если подпадает, то это контейнер (палета или коробка), поиск закончен.

  2. Если это не контейнер, то не подпадает ли штрихкод под общий шаблон штрихкодов номенклатуры? Если подпадает, то из штрихкода вынимаются идентификаторы номенклатуры (код, артикул, GTIN и т.п.) и далее поиск выполняется по этим идентификаторам, а не по всему штрихкоду

  3. Если включен HYDB и приоритетный поиск товара в учетной системе, то поиск идет через вызов ПолучитьТовар.

  4. Если HYDB не включен или в приоритете поиск в Mobile SMARTS, то идет проверка не равен ли штрихкод штрихкоду номенклатуры, коду или артикулу номенклатуры?

  5. Если нет, то равен ли он штрихкоду упаковки и не подпадает ли под шаблон штрихкодов индивидуальной упаковки номенклатуры?

  6. Если вообще ничего не найдено и включен HYDB, то идет поиск в учетной системе через вызов ПолучитьТовар.

В Mobile SMARTS есть два вида шаблонов номенклатуры:

Общие шаблоны штрихкодов номенклатуры​

На практике очень часты случаи, когда требуется задать однотипные шаблоны всем позициям номенклатуры в справочнике.

Такое может потребоваться, когда весь товар, изначально промаркированный EAN-13, при приходе на склад дополнительно маркируется внутренними штрихкодами с дополнительной информацией. Или поставщик сам наносит кроме обычного штрихкода, определяющего номенклатуру, дополнительные штрихкоды с расширенными данными (дата поступления, размер, цвет и т. п.).

Например, на склад поступает товар от поставщика, который маркирует всю свою продукцию двумя штрихкодами, основным EAN13 (в примере, 4891199000041), и дополнительным расширенным штрихкодом (в примере, 48911990000413814082005), содержащим исходный штрихкод и дополнительные данные 38 — размер, 14.08.2005 — дата производства.

панель управления

В таких случаях удобно задавать общие шаблоны, действующие на весь справочник номенклатуры сразу. Могут быть заданы несколько шаблонов, например, для разных поставщиков.

Данный функционал используется только при ручной выгрузке справочников на устройство, и не работает для онлайн-режима. Это связано с тем, что шаблоны штрихкодов используются только в случае, если ШК можно обработать на сервере (а при ручной выгрузке справочники выгружаются сначала на сервер Mobile SMARTS). При работе в онлайн-режиме штрихкод, который считал ТСД, отправляется в учетную систему напрямую, и не может быть обработан на сервере.

Такие шаблоны можно задать прямо через панель управления, в узле конфигурации «Структура номенклатуры» --> «Шаблоны штрихкодов». Правой кнопкой мышки можно можно добавить шаблон штрихкода.

панель управления панель управления

Правила задания общих шаблонов точно такие же, как и шаблонов в упаковках, кроме трех дополнительных полей в шаблоне:

ШаблонОписание
{ProductId:число},

число — количество символов кода товара в штрихкоде

обязательный элемент шаблона (можно заменить с помощью Barcode)
Определяет идентификатор товара в штрихкоде, для поиска в справочнике номенклатуры. Является обязательным параметров в общем шаблоне.

Следует использовать, когда в штрихкод включается уникальный код товара.
{Barcode:число},

число — количество символов кода товара в штрихкоде

обязательный элемент шаблона (можно заменить с помощью ProductId)
Определяет штрихкод товара, для поиска в справочнике номенклатуры. Является обязательным параметров в общем шаблоне.

Следует использовать, когда в штрихкод включается базовый штрихкод товара.
{PackingId:число},

число — количество символов кода упаковки в штрихкоде

необязательный параметр
Позволяет дополнительно определить выемку кода упаковки из штрихкода. Не является обязательным параметром. Если он не задан, то найденный товар выбирается в базовом типе упаковки, при использовании ProductId, или в том типе упаковки, к которой задан штрихкод, при использовании Barcode.

Следует учитывать, что общие шаблоны возможно использовать только в тех случаях, когда внутри сканируемых штрихкодов содержится код или базовый штрихкод товара.

Таким образом, в общем шаблоне обязательно должен быть задан хотя бы один из обязательных элементов {ProductId:число} или {Barcode:число}.

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

Примеры общих шаблонов номенклатуры​

Пример 1 | Поиск товара по коду (Id)​

Исходные данные:

Штрихкод номенклатуры (общим шаблоном): {ProductId:5}{Quantity:3}{ExpiredDate:ddMMyyyy}

В выражении {ProductId:5} цифра «5» означает число символов штрихкода под уникальный код товара.

Сканируемые (вводимые) данные:

Штрихкод: «6789000928122017»

Разбор по шаблону:

6789000928122017 → ProductId = 67890; Quantity = 9; ExpiredDate = 28.12.2017

При вводе штрихкода будет производиться поиск товара по коду «67890», и если он будет найден, то будет выбран товар с этим кодом, в количестве 9 базовых упаковок и проставлена дата конца срока годности 28.12.2017.

Номенклатура:

панель управления

Будет выбрана «Крупа гречневая (упак)», а не весовая, т.к. поиск ведётся по идентификатору (Id) товара.

Значение переменных в сессии:

панель управления

Результат:

панель управления

Пример 2 | Поиск товара по штрихкоду упаковки​

Исходные данные:

Штрихкод номенклатуры (общим шаблоном): {Barcode:5}{Quantity:3}{ExpiredDate:ddMMyyyy}

В выражении {Barcode:5} цифра «5» означает число символов штрихкода.

Сканируемые (вводимые) данные:

Штрихкод: «5179601015102017»

Разбор по шаблону:

5179601015102017 → Barcode = 51796; Quantity = 10; ExpiredDate=15.10.2017

При вводе штрихкода будет производиться поиск товара по штрихкоду упаковки «51796», и если он будет найден, то будет выбран товар с этой упаковкой, в количестве 10 упаковок и проставлена дата конца срока годности 15.10.2017.

Номенклатура:

панель управления

Будет выбрано «Молоко "Домик в деревне"», т.к. поиск ведётся по штрихкоду упаковки товара.

Значение переменных в сессии:

панель управления

Результат:

панель управления

Пример 3 | Товар не найден по общему шаблону​

Исходные данные:

Штрихкод номенклатуры (общим шаблоном): {Barcode:13}{Quantity:3}

В выражении {Barcode:13} цифра «13» означает число символов штрихкода.

Сканируемые (вводимые) данные:

Штрихкоды: «2000020637963015», «20000206379630155»

Разбор по шаблону:

4607060501490005 → Barcode = 4607060501490; Quantity = 5

20000206379630155 → под шаблон не подходит (в ШК 17 символов, а шаблон подходит только для 16 символов ШК) → поиск в справочнике номенклатуры по полному штрихкоду «20000206379630155» → товар не найден.

Результат:

панель управления

Пример 4 | Товар не найден по общему шаблону, но найден по шаблону упаковки​

Исходные данные:

Штрихкод номенклатуры (общим шаблоном): {Barcode:5}{Quantity:3}{ExpiredDate:ddMMyyyy}

Штрихкод упаковки (шаблоном): 2183{Quantity:3}{SSCC:8}

Сканируемые (вводимые) данные:

Штрихкод: «218300912122017»

Разбор по шаблону:

218300912122017 → под шаблон не подходит (в ШК 17 символов, а шаблон подходит только для 16 символов ШК)

В случае если товар не найден по общим шаблонам, то дальше поиск будет вестись по шаблонам упаковки:

218300912122017 → подходит под шаблон 2183{Quantity:3}{SSCC:8} → Quantity = 9; SSCC = 12122017.

Номенклатура:

панель управления

Значение переменных в сессии:

панель управления

Результат:

панель управления

Пример 5 | Совместная работа общих шаблонов и шаблонов упаковки​

Исходные данные:

Товар: «продукт 4»

Штрихкод номенклатуры «кг» (общим шаблоном): {Barcode:13}{ExpDate:ddMMyy}

панель управления

Штрихкод упаковки «кг» (шаблоном): 2112347{Quantity:3.2}{checksum:1}

Сканируемые (вводимые) данные:

Штрихкод: «2112347004457140812»

Разбор по шаблону:

  • Производится поиск товара по штрихкоду (общим шаблоном) «2112347004457».

    «2112347004457140812» =>2112347004457140812 => Barcode = 2112347004457

  • Будет найден «продукт 4» и извлечены данные согласно его персональному шаблону. «2112347004457» => 211234700445 7=> Quantity = 4,45; checksum = 7

  • После этого будет извлечена дата срока годности, согласно общему шаблону

    «2112347004457140812» => 2112347004457 140812=> ExpDate:ddMMyy = 14.08.2012

    панель управления

Результат:

| Штрихкод | Переменная в сессии | Значение | | «2112347004457140812» | {SelectedProduct.Product} | 2112347004457 | | «2112347004457» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity}

{SelectedProduct. checksum } | «продукт 4»

шт

4,45

7 | | «2112347004457140812» | {SelectedProduct.ExpiredDate} | 14.08.2012 |

Пример 6 | Выбор шаблона из нескольких подходящих​

Возможна такая ситуация, когда к отсканированному штрихкоду могут подходить несколько общих шаблонов.

Исходные данные:

Штрихкод номенклатуры (общим шаблоном): {Barcode:13}{SSCC:6}

Штрихкод номенклатуры (общим шаблоном): {Barcode:13}{ExpiredDate:ddMMyy}

Сканируемые (вводимые) данные:

Штрихкод: «2000020497963231117»

Штрихкод будет разобран по первому подходящему общему шаблону:

панель управления

Производится поиск товара по штрихкоду (общим шаблоном {Barcode:13}{SSCC:6}) «2000020497963231117».

2000020497963231117 → Barcode = 2000020497963; SSCC = 231117

Номенклатура:

панель управления

Значение переменных в сессии:

панель управления

Результат:

панель управления

Пример 7 | Поиск товара по общему шаблону в штрихкоде EAN128​

Для штрихкода EAN-128 не нужно создавать какие-то специальные шаблоны со скобочками (цифры в скобочках — это идентификаторы применения, они объясняют, как интерпретировать цифры, идущие следом). Штрихкод EAN-128 распознается общим шаблоном.

(01)04260076865026(11)130902(3304)200000

Реально в штрихкоде EAN-128 символы скобок вокруг идентификаторов НЕ содержатся, а только отображаются при печати для удобства визуального восприятия.

Исходные данные:

Товар: «продукт»

Штрихкод номенклатуры «шт» (общим шаблоном): {Barcode:13}{ExpiredDate:yyMMdd}

Сканируемые (вводимые) данные:

Штрихкод: «010426007686502617130902»

Визуальное отображение штрихкода на этикетке: «(01)04260076865026(17)130902»

Разбор по шаблону:

  • Производится поиск товара по штрихкоду (общим шаблоном) «4260076865026»

    «010426007686502617130902» =>010426007686502617130902=> Barcode = 4260076865026

  • После этого будет извлечена дата срока годности, согласно шаблону

    «010426007686502617130902» =>010426007686502617130902=> ExpiredDate = 02.09.2013

Результат:

| Штрихкод | Переменная в сессии | Значение | | «010426007686502617130902» | {SelectedProduct.Product}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.ExpiredDate} | 4260076865026

«продукт»

«шт»

02.09.2013 |

Шаблоны штрихкода для индивидуальных упаковок номенклатуры​

Справочник номенклатуры Mobile SMARTS двухуровневый, состоит из строк номенклатуры и подчиненных им строк индивидуальных упаковок номенклатуры. Упаковки номенклатуры могут иметь свои поля и свои собственные штрихкоды, в том числе заданные шаблоном.

Штрихкод конкретной номенклатуры не может быть задан шаблоном, для конкретного товара может быть задан только конкретный штрихкод (т.е. Product.Barcode не может содержать шаблон). Если вы хотите задать какой-то один шаблон для всех весовых товаров или для определенных вариантов штрихкода от поставщика, то обратитесь к следующей статье.

А вот упаковка номенклатуры может иметь свой собственный штрихкод, который может не только отличаться от штрихкода самого товара, но и может быть задан шаблоном (т.е. Product.BasePacking.Barcode может содержать шаблон).

Такой шаблон конкретной упаковки номенклатуры описывается в виде:

[###]{шаблон}[#]{шаблон}[###]....

где [###] — некоторое количество фиксированных символов,

а {шаблон} — специальное выражение вида {имя:формат}, где имя задает имя параметра, а шаблон зависит от типа параметра. Если параметр – это строка или число, то в качестве шаблона можно указать количество символов штрихкода, отводимое под параметр.

Примеры:

  • 123EE45{SKU:7}{check}
  • {SSCC:18}
  • 01{Date:DDMMYY}01

В качестве имени (SKU, SSCC, Date) можно использовать как специальные значения, так и что угодно, в том числе и русские названия с пробелами. Все извлеченные из штрихкода значения попадут в обработку, которая попытается найти номенклатуру и затем перенести данные из шаблона в основные или дополнительные переменной [SelectedProduct](/key-variables) (т.е., например, SelectedProduct.SSCC).

При занесении новой строки в документ те переменные, имена которых совпадают с именами колонок в документе, попадут в поля этой новой строки. Т.е. если мы хотим сохранить в документе часть штрихкода, нужно:

  • добавить в типе документа дополнительное поле строки;
  • создать шаблон штрихкода, в котором упоминалось бы наименование этого поля.

Допустимые к использованию шаблоны:

ШаблонОписание
{Quantity:формат},

формат – число, задающее количество символов в штрихкоде или два числа, разделенных точкой (целая и дробная части)
Извлеченное значение заносится в {SelectedProduct.Quantity}

Позволяет извлечь количество сканируемого товара, прямо из штрихкода, избегая его ввода вручную.
{SSCC:число}

{SKU:число},

число – количество символов в штрихкоде.
Извлеченное значение заносится в {SelectedProduct.SSCC}

Позволяет извлекать из штрихкода уникальный номер текущей позиции товара, номер партии и т.п.
{Date:формат},

где формат – строковой формат даты
Извлеченное значение заносится в {SelectedProduct. RegistrationDate}

Позволяет извлекать из штрихкода упаковки дату ее регистрации (например, дату приемки или дату производства).
{ExpDate:формат}

{ExpiredDate:формат},

где формат – строковой формат даты
Извлеченное значение заносится в {SelectedProduct. ExpiredDate}

Позволяет извлекать из штрихкода упаковки дату окончания срока годности товара.
{ПроизвольноеИмя:формат}Извлеченное значение заносится в {SelectedProduct. ПроизвольноеИмя}

Позволяет извлекать произвольные данные из штрихкода. Если было заведено дополнительное поле строки с таким именем, то оно определяет тип извлекаемых данных. Если поле не заведено – то извлекается строка.

Для одной упаковки можно задавать сразу несколько шаблонов. Шаблоны записывают через вертикальную черту «|» без пробелов.

Примеры шаблонов для индивидуальных упаковок​

Шаблоны могут применяться как поодиночке, так и в совокупности.

Пример 1 | Количество из 3-х цифр внутри штрихкода товара​

Исходные данные:

Товар: «Кроссовки белые»

Штрихкод упаковки «пара» (шаблоном): «234{Quantity:3}634987»

В выражении {Quantity:3} цифра «3» означает число символов штрихкода под количество.

Сканируемые (вводимые) данные:

Штрихкоды: «234002634987», «234071634987», «134002634989»

Разбор по шаблону:

«234002634987» => 234002634987=> Quantity = 2

«234071634987» => 234071634987=> Quantity = 71

«134002634989» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «234002634987» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | «Кроссовки белые»

«пара»

2 | | «234071634987» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | «Кроссовки белые»

«пара»

71 | | «134002634989» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | null

null

null

null |

Пример 2 | Вес из 5-ти цифр внутри штрихкода товара​

Исходные данные:

Товар: «Сахарный песок»

Штрихкод упаковки «кг» (шаблоном): «234{Quantity:3.2}4987»

В выражении {Quantity:3.2} цифра «3» означает число символов штрихкода до запятой, цифра «2» означает число символов штрихкода после запятой (например, килограммы и граммы).

Сканируемые (вводимые) данные:

Штрихкоды: «234001864987», «234006254987», «234001864981»

Разбор по шаблону:

«234001864987» => 234001 864987=> Quantity = 1,86

«234006254987» => 234006 254987=> Quantity = 6,25

«234001864557» => не распознан

«23400625498722» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «234001864987» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | «Сахарный песок»

«кг»

1,86 | | «234006254987» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | «Сахарный песок»

«кг»

6,25 | | «234001864557» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | null

null

null

null | | «23400186498722» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity} | null

null

null

null |

Пример 3 | Номер коробки внутри штрихкода товара​

Исходные данные:

Товар: «Мыло душистое»

Штрихкод упаковки «кор» (коробка, шаблоном): 7{SSCC:5}1143576

В выражении {SSCC:5} цифра «5» означает число символов штрихкода под уникальный номер.

Сканируемые (вводимые) данные:

Штрихкоды: «7564821143576», «7564821143876»

Разбор по шаблону:

«7564821143576» => 7564821143576=> SSCC = «56482»

«7564821143876» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «7564821143576» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.SSCC} | «Мыло душистое»

«кор»

«56482» | | «7564821143876» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.SSCC} | null

null

null

null |

Пример 4 | Номер палеты внутри штрихкода товара​

Исходные данные:

Товар: «Мясорубка»

Штрихкод упаковки «кор» (шаблоном): 544332{Quantity:2}{SKU:8}

В выражении {SKU:8} цифра «8» означает число символов штрихкода под уникальный номер.

Сканируемые (вводимые) данные:

Штрихкоды: «5443320105490321», «5543320105490321»

Разбор по шаблону:

«5443326505490321» => 54433265 05490321=> Quantity = 65; SKU = «05490321»

«5543326505490321» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «5443326505490321» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity}

{SelectedProduct.SSCC} | «Мясорубка»

«кор»

65

«05490321» | | «5543326505490321» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity}

{SelectedProduct.SKU} | null

null

null

null

null

Пример 5 | Извлечение размера из штрихкода​

Кроме стандартных полей, из штрихкода могут быть извлечены в {SelectedProduct} любые дополнительные поля.

Исходные данные:

Товар: «Туфли женские»

Штрихкод упаковки «пара» (шаблоном): 4608888{size:2}

В выражении {size:2} цифра «2» означает число символов штрихкода под произвольные данные.

Сканируемые (вводимые) данные:

Штрихкод: «460888838»

Разбор по шаблону:

«460888838» => 460888838=> size = 38

Результат:

| Штрихкод | Переменная в сессии | Значение | | «460888838» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.size} | «Туфли женские»

«пара»

«38» |

Пример 6 | Дата маркировки в дополнительном поле​

Если было заведено дополнительное поле строки с именем «ДатаМаркировки», то оно определяет тип извлекаемых данных.

панель управления

Исходные данные:

Товар: «Пылесос»

Штрихкод упаковки «шт» (шаблоном): 44344{ДатаМаркировки:ddMMyyyy}

В выражении {ДатаМаркировки:ddMMyyyy} «ddMMyyyy» означает формат даты (день, месяц и год).

Сканируемые (вводимые) данные:

Штрихкод: «4434424092008»

Разбор по шаблону:

«4434424092008» => 44344 24092008=> ДатаМаркировки = 24.09.2008

Результат:

| Штрихкод | Переменная в сессии | Значение | | «4434424092008» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.ДатаМаркировки} | «Пылесос»

«шт»

24.09.2008 |

Пример 7 | Контрольная сумма​

Если требуется задать шаблон для штрихкодов, напечатанных в кодировке с контрольной суммой (например, у кода EAN13 последняя цифра – контрольная сумма, вычисляемая по определенной формуле из 12-ти первых, поэтому она не постоянна), то необходимо контрольную сумму также задавать выражением в шаблоне: {любоеимя:1}.

Исходные данные:

Товар: «Рис»

Штрихкод упаковки «кг» (шаблоном): 2112347{Quantity:3.2}{checksum:1}

В выражении {checksum:1} цифра «1» означает число символов штрихкода под произвольные данные.

Сканируемые (вводимые) данные:

Штрихкод: «2112347001865»

Разбор по шаблону:

«2112347001865» => 2112347001 86 5=> Quantity = 1,86; checksum = «5»

Результат:

| Штрихкод | Переменная в сессии | Значение | | «2112347001865» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.Quantity}

{SelectedProduct.checksum} | «Рис»

«кг»

1,86

«5» |

Пример 8 | Извлечение даты регистрации​

Исходные данные:

Товар: «Макароны»

Штрихкод упаковки «упак» (шаблоном): 2183{Date:ddMMyyyy}

В выражении {Date:ddMMyyyy} «ddMMyyyy» означает формат даты (день, месяц и год).

Сканируемые (вводимые) данные:

Штрихкоды: «218325062005», «218335062005»

Разбор по шаблону:

«218325062005» => 2183 25062005=> RegistrationDate = 25.06.2005

«218335062005» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «218325062005» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.RegistrationDate} | «Макароны»

«упак»

25.06.2005 | | «218335062005» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.RegistrationDate} | null

null

null

null |

Пример 9 | Извлечение даты срока годности​

Исходные данные:

Товар: «Печенье»

Штрихкод упаковки «упак» (шаблоном): 43{ExpDate:yyMMdd}21354

В выражении {ExpDate:yyMMdd} «yyMMdd» означает формат даты (год, месяц и день).

Сканируемые (вводимые) данные:

Штрихкоды: «4307110821354», «4307140821354»

Разбор по шаблону:

«4307110821354» =>43 071108 21354=> ExpiredDate = 08.11.2007

«4307140821354» => не распознан

Результат:

| Штрихкод | Переменная в сессии | Значение | | «4307110821354» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.ExpiredDate} | «Печенье»

«упак»

08.11.2007 | | «4307140821354» | {SelectedProduct}

{SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.ExpiredDate} | null

null

null

null |

Пример 10 | Извлечение даты срока годности в совокупности с другими выражениями​

Исходные данные:

Товар: «Молоко»

Штрихкод упаковки «кор» (шаблоном): 11{SKU:6}{ExpDate:ddMMyyyy}{Quantity:3}45

В выражении {ExpDate:ddMMyyyy} «ddMMyyyy» означает формат даты (день, месяц и год).

Сканируемые (вводимые) данные:

Штрихкод: «110102221302200401145»

Разбор по шаблону:

«110102221302200401145» => 11 010222 13022004 01145=> SSCC = «010222»; ExpiredDate = 13.02.2004; Quantity = 11

Результат:

| Штрихкод | Переменная в сессии | Значение | | «110102221302200401145» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.SSCC}

{SelectedProduct.ExpiredDate}

{SelectedProduct.Quantity} | «Печенье»

«кор»

«010222»

13.02.2004

11 |

Возможна такая ситуация, когда к отсканированному штрихкоду могут подходить несколько шаблонов.

Пример 11 | Выбор шаблона из нескольких подходящих​

Исходные данные:

Штрихкод упаковки «шт» (шаблоном):2183{SKU:8} – задан у товара «продукт 1»

Штрихкод упаковки «шт» (шаблоном):2183{ExpDate:ddMMyyyy} – задан у товара «продукт 2»

Сканируемые (вводимые) данные:

Штрихкод: «218323042007»

Обработка этой ситуации настраивается в самом действии выбора номенклатуры.

В случае если в настройках выбора первого найденного товара стоит «Да», то будет автоматически выбран первый найденный товар.

панель управления панель управления панель управления

Разбор по шаблону:

«218323042007» => 2183 23042007=> SSCC = «23042007»

Результат:

| Штрихкод | Переменная в сессии | Значение | | «110102221302200401145» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.SSCC} | «продукт 1»

«шт»

«23042007» |

Если «Нет», то будет предложен выбор из найденных товаров.

панель управления панель управления панель управления

Будут извлечены параметры из шаблона выбранного товара, в данном случае извлекается дата срока годности.

Разбор по шаблону:

«218323042007» => 2183 23042007=> ExpiredDate = 23.04.2007

Результат:

| Штрихкод | Переменная в сессии | Значение | | «110102221302200401145» | {SelectedProduct.Product.Name}

{SelectedProduct.Packing.Name}

{SelectedProduct.ExpiredDate} | «продукт 2»

«шт»

23.04.2007 |

Интерпретация кода EAN-128​

Mobile SMARTS умеет распознавать штрихкоды в кодировке EAN-128 (GS1-128) и имеет встроенный алгоритм их обработки. Таким образом, для сканирования и разбора EAN-128 не нужно добавлять в код конфигурации Mobile SMARTS никаких «если штрихкод содержит скобки», «отрезать от строки первые два символа» и т. п.

Из EAN128 можно извлекать содержимое, которое можно использовать не только в действии выбора номенклатуры, но и в других действиях, подробнее смотрите статью «Объект EAN-128 в Mobile SMARTS.

При сканировании штрихкода EAN-128 (GS1-128) в действии выбора номенклатуры происходит его автоматическая обработка в следующем порядке:

Первичная обработка

Если в действии выбора номенклатуры штрихкод опознан как EAN-128, то в ScannedBarcode попадает отформатированное выражение штрихкода, где идентификаторы заключены в круглые скобки, как это обычно принято при печати на этикетках. Например, при сканировании 0104260076865026111309023304200000 кода в ScannedBarcode попадет (01)04260076865026(11)130902(3304)200000.

Реально в EAN-128 штрихкоде символы скобок вокруг идентификаторов НЕ содержатся, а только отображаются при печати для удобства визуального восприятия.

Кроме ScannedBarcode в сессию добавляется объект c именем EAN128, содержащий данные о распознавании штрихкода, и позволяющий получить доступ к его содержимому в других действиях.

Поиск номенклатуры

После этого начинается поиск товара по идентификаторам AI 02 затем по AI 01 (GTIN глобальный номер товарной продукции, 13 конечных цифр после идентификатора).

Если идентификаторов AI 01 или 02 нет в штрихкоде, то считается, что номенклатура не определена, и создается объект SelectedProduct с неизвестным товаром (аналогично, UnknownProduct.Pack ()).

Если товар найден, то на его основе в сессии создается объект SelectedProduct, как и при поиске по обычному штрихкоду.

Если идентификатор AI 01 или 02 в штрихкоде есть, но товар по штрихкоду не найден, то обработка штрихкода завершается и действие выбора номенклатуры переходит по состоянию «товар не найден».

Заполнение количества товара

После формирования SelectedProduct производится заполнение его количества Quantity из одного из идентификаторов AI30, AI31хх или AI37 (идентификаторы приведены в порядке приоритета).

Если ни одного из этих идентификаторов не содержится в штрихкоде, то количество считается равным 1.

Заполнение срока годности

Кроме самого товара и его веса ведется поиск срока годности товара, если в штрихкоде EAN-128 (GS1-128) есть идентификатор AI 17, то срок годности заносится в переменную SelectedProduct.ExpiredDate.

Заполнение произвольных пользовательских полей

Кроме стандартного заполнения мы можем привязать дополнительные поля строк документа к идентификаторам EAN-128, для автоматического извлечения в них данных, если соответствующий идентификатор есть в отсканированном штрихкоде.

Например, нам необходимо извлекать серийный номер из штрихкода EAN-128 (GS1-128) в какое-то поле (в нашем примере поле «sn»).

Для этого у свойства дополнительного поля (в нашем примере поле «sn») для EanAI необходимо из выпадающего списка выбрать идентификатор применения AI 21 -Серийный номер (Serial Number).

панель управления

При сканировании штрихкода EAN-128 (GS1-128), если в нем указан идентификатор AI 21, данные о серийном номере будут занесены в SelectedProduct со свойством дополнительное поле строки с указанным именем «sn» (в нашем примере). Если идентификатора AI 21 в штрихкоде (кодировка EAN-128) нет, то данные о серийном номере из него не извлекаются.

Если необходимо извлекать из штрихкода EAN-128 (GS1-128) какие-нибудь другие данные, это делается аналогично, извлечению серийного номера, выбирая нужный идентификатор применения AI для соответствующего дополнительного поля.

GTIN​

Существует довольно много кодировок товаров, т.е. способов назначить им номера. Помимо EAN-13 существуют коды EAN-8, UPC-A, UPC-E, UCC-12, UCC-14, ITF-14 и другие для продовольственных товаров, ISBN для книг и т.д. Всё это - различные способы сделать одно и то же — выдать единице товара уникальный номер. GTIN (Global Trade Item Number) — это и есть глобальный код товара в самом общем смысле. Единое обозначение требуется во множестве приложений — например для прайс-листов или в маркировке грузов. Разработчики GTIN поступили очень просто: чтобы получить GTIN, конкрентный код с упаковки товара дополняется лидирующими нулями до 14 цифр. Если мы пользуемся EAN-13, то GTIN будет равен «0|EAN-13» (т.е. «0» и следом EAN-13), а если мы пользуемся EAN-8, то GTIN будет равен «000000|EAN-8», ну и точно так же с другими кодами товара. Предполагается, что кодов товара длиннее 14 цифр не встречается.

Для EAN-128 (GS1-128) в идентификаторах AI 01 и AI 02 GTIN может быть закодирован товар в кодировке EAN-13 (ноль и 13 цифр).

В Mobile SMARTS реализован автоматический поиск номенклатуры по всем вариантам кодировок ШК по нижеописанным алгоритмам:

  1. в случае сканирования ШК кодировки GS1;

    Пример: (01)10000057074365(3103)005040(11)181026(17)190426(10)0002

    Порядок поиска:

    • 57074368 - поиск по EAN8, извлеченному из GTIN.
    • 0000057074368 - поиск по EAN13, извлеченному из GTIN.
    • 000057074368 - поиск по UPC, извлеченному из GTIN.
    • 10000057074365 - поиск по GTIN из штрихкода.
    • 00000057074368 - поиск по базовому GTIN.
    • (01)10000057074365(3103)005040(11)181026(17)190426(10)0002 — поиск по всему отсканированному штрихкоду.
  2. в случае сканирования ШК кодировок EAN-13, UPC или EAN-8.

    Пример: 4650057074361

    Порядок поиска:

    • пропуск, невозможно извлечь — поиск по EAN8, извлеченному из GTIN.
    • 4650057074361 - поиск по EAN13, извлеченному из GTIN.
    • пропуск, невозможно извлечь — поиск по UPC, извлеченному из GTIN.
    • 04650057074361 - поиск по базовому GTIN.
    • 4650057074361 - поиск по всему отсканированному штрихкоду.

Значение отсканированного ШК присваивается переменной BarcodeData. Данный тип переменной позволяет идентифицировать кодировку считанного штрихкода, признак его ввода (вручную или считывание сканером), а также дополнительные данные (например, идентификаторы AI в EAN-128), которые автоматически разбираются внутри этого типа переменной и доступны в виде отдельных свойств такой переменной.

В панели управления платформы Mobile SMARTS версии 3.2 появилась возможность выбирать или отключать возможность расширенного поиска по ШК. Если она отключена - поиск будет производиться только по всему отсканированному штрихкоду.

панель управления
В этой статье