Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > Сканеры штрихкода

DataMatrix: не сканирует или неправильно передаёт данные сканер. 1С и другие программы не принимают просканированный код. : Сканеры штрихкода

28.03.2024 13:18


01.02.2021 13:36
pavel_k
 
Тему создал для того, чтобы все вопросы связанные со сканированием DataMatrix обсуждать здесь.
Перед тем, как задать вопрос, настоятельно рекомендую ознакомиться с информацией ниже.

GS1 DataMatrix:
СТРУКТУРА DATAMATRIX

Для маркировки товаров используется штриховой код GS1 DataMatrix. Он позволяет кодировать идентификационные ключи системы GS1, а также любую дополнительную информацию о товаре (вес, срок годности, номер серии, номер партии, дата изготовления).
С введением обязательной маркировки — формировать, печатать и проверять коды GS1 DataMatrix необходимо уметь практически в каждой организации.
Как правильно сформировать GS1 DataMatrix:



GS1 DataMatrix
  1. ASCII 232 (FNC1).
  2. (01) Код продукта (GTIN).
  3. (21) Серийный номер.
  4. Разделитель групп данных ASCII 29 (GS).
  5. (91) Ключ проверки, предоставляемый оператором системы в составе кода проверки.
  6. Разделитель групп данных ASCII 29 (GS).
  7. Электронную подпись, предоставляемую оператором системы в составе кода проверки, 88 символов (цифры, строчные и прописные буквы латинского алфавита, а также специальные символы) — крипто хвост.
*При формировании используется таблица символов Base64

В соответствии с требованиями , в начало получаемой строки кода необходимо добавлять признак символики – ASCII232 (так называемый FNC1).
FNC1 — специальный символ, который указывает, что закодированная последовательность является штрихкодом GS1. В случае отсутствия этого символа технические средства не распознают код правильно и не смогут его корректно обработать.
В конце полей переменной длины необходимо использовать специальные символы GS1 — разделители. Они нужны для того чтобы идентифицировать отдельные блоки штрихкода. В качестве разделителей допустимо использовать либо символ ASCII 29 (GS).
Обращаем ваше внимание, что использовать FNC1 в качестве разделителя — настоятельно не рекомендуется, так как теряется порядок учета полей.
Визуально в подписи DataMatrix кода такие разделители не отображаются.
Важно. Приложение Честный Знак может распознавать различные виды DataMatrix. Даже QR-коды. Тот факт, что код распознался и информация о товаре отобразилась, не является показателем, что DataMatrix сформирован правильно и имеет структуру GS1 DataMatrix.
Оператор ЦРПТ выпустили пояснение, как правильно генерировать коды. Из-за большого числа кодов с ошибками они признали коды без FNC1 валидными, но, все-таки, рекомендуют генерировать GS1 DataMatrix.
К сожалению, достаточно большой процент DataMatrix кодов от субъектов приходит с ошибками.
Когда Коды Маркировки заказаны и сгенерированы, их можно забрать через API в текстовом виде, в ТХТ как файл с текстом.
Если открыть файл в notepad++(блокнот), можно увидеть строки такого вида. Серым цветом выделены скрытые символы разделители ASCII 29 в виде <0x1d>. В последующем эти символы при печати должны быть преобразованы в разделители строк формата GS1 DataMatrix



Аналогично если забираете в ТХТ формате, то никогда, ни при каких обстоятельствах, не следует открывать и сохранять его в excel. В excel есть функция автосохранения. В момент сохранения excel может самым непредсказуемым образом видоизменить ваши коды. Рекомендуем использовать notepad++(блокнот) для просмотра кодов.
При преобразовании перед печатью полученные Коды Маркировки могут приобрести следующий вид:




Третий код — невалидный (у него отсутствуют разделители GS).

Несмотря на то, что при подготовке файла к печати или генерации GS1 DataMatrix, для работы с системой через личный кабинет или API используется оригинальный Код Маркировки содержащий скрытые символы разделители ASCII 29 в виде <0x1d>

ГЕНЕРАЦИЯ

В постановлении правительства РФ 860 указан ГОСТ, согласно которому необходимо формировать DataMatrix. Так же в ППР 860 указано обязательное использование идентификаторов применения. Обратите внимание, что в стандарте DataMatrixнет понятия «идентификаторы применения». Они есть только в стандарте GS1 DataMatrix. Основное различие: в GS1 DataMatrix первый символ должен быть FNC1. Символ GS не должен стоять на первом месте в DataMatrix, только FNC1.
FNC1 нельзя просто взять и добавить в строку как GS. Его должна добавлять программа, генерирующая DataMatrix.

Предлагаем разработчикам программного обеспечения ознакомится с собранными ссылками по тематике формирования GS1 DataMatrix и использовать данный опыт для доработки учетных систем:
  • Ссылка 3

Основные ошибки, которые допускаются при формировании GS1 DataMatrix:
  1. в начале не вставлен FNC1 (1 специальный символ);
  2. вместо спецсимвола FNC1 в начале вставлен текст «FNC1» (4 символа);
  3. вместо спецсимвола FNC1 в начале вставлен GS;
  4. не вставлены разделители групп данных GS после полей переменной длины (например, после серийного номера);
  5. разделители групп данных вставлены не туда, где они должны быть (например, после поля (01) GTIN, которое имеет фиксированную длину и не требует в конце разделителя);
  6. вместо спецсимвола GS вставлен текст «GS»;
  7. используются программы или алгоритмы для печати, которые непоправимо искажают информацию (например, удаляют из кода символы, которые они считают лишними. Зачастую это арифметические символы, скобки и т.п.).

Источник:
25.11.2021 15:32
ГогиГоги
 
Есть 1с-аптека. каким то образом (до меня) загружены в базу коды медикаментов (могу предположить или от поставщика или с честного знака, до конца не врубился, откуда они должны идти). подключаю сканер Idzor2200 посредством эмуляции ком порта. сканер работает, что в блокнот, что в тест сканера 1с-оборудование. Но сканит с о всеми кодами начало 01 и в строке по тексту GS, а в базе код начинается с 04, пропущен 01 и далее отсутствуют GS.Вопрос: надо как то настраивать сканер или править коды в бд 1с???
25.11.2021 17:17
MWWRuza
 
Если сканер в режиме эмуляции ком-порта, то он не должен сканировать в блокнот....
25.11.2021 17:26
MWWRuza
 
А по сути, он и должен сканировать полноценно, полный код. Что там у Вас в базе - х.з., нам отсюда не видно... Но, "04" это скорее всего, начало от GTIN, по сути это EAN с нулем впереди, типа "046***********"... По идее, нормально написанный софт должен сам разбирать строку со сканера, и где нужно, полный код использовать, где надо, его-же, но без криптохвоста, а где надо, вообще из него только EAN вырезать.
25.11.2021 17:38
ГогиГоги
 
нормально написанный софт? продукт 1с по, ходу вашего выступления, таким не является? GTIN =01
Надо в 1с:
048102010024080000003403971
а выдаёт со сканера:
010481020100240821000000340397191EE0792rJoSggU2zzCKdyDNqk2+r859aYwaApllOuCI7opVJfM=
что в принципе, по описанию в статье об датаматрикс, и есть правильный код
прим: жирным выделил "ненужные хвосты"
25.11.2021 18:50
student
 
Цитата:
ГогиГоги прим: жирным выделил "ненужные хвосты"
это не ненужные хвосты :) это часть стандарта, т.е. то что приведено это полный, корректный шк, который софтина должна разложить на нужные части, если она этого не умеет, то значит это не совсем правильная для вашего случая софтина (ну или она не настроена правильно)
так что, то что вам надо в 1с, разбирайте в самой 1с - сканер он как чучка с анекдота "о чем вижу о том и пою" и ему фиолетово где жтин и все остальное - шк это набор циферок...
26.11.2021 07:11
Mtirt
 
Исходя из всего написаного выше, могу повторно сделать вывод - сканер работает в режиме эмуляции клавиатуры.
Вам нужно перевести его в режим эмуляции com-порта (при работе в этом режиме в блокнот сканировать не должно).
26.11.2021 12:18
pavel_k
 
Цитата:
ГогиГоги нормально написанный софт? продукт 1с по, ходу вашего выступления, таким не является? GTIN =01
Надо в 1с:
048102010024080000003403971
а выдаёт со сканера:
010481020100240821000000340397191EE0792rJoSggU2zzCKdyDNqk2+r859aYwaApllOuCI7opVJfM=
что в принципе, по описанию в статье об датаматрикс, и есть правильный код
прим: жирным выделил "ненужные хвосты"
Выше уже написали, что 1С должна сама разложить получаемые данные со сканера на требуемые вам символы из ШК.
Для сканеров Honeywell я выкладывал тут на форуме настроечный ШК, который вытягивает из DataMatrix только GTIN и КиЗ.
Можно ли также настроить Idzor2200 не знаю. Обратитесь к производителю.
26.11.2021 13:10
MWWRuza
 
Цитата:
ГогиГоги нормально написанный софт? продукт 1с по, ходу вашего выступления, таким не является?
Ну, почему такие выводы? Сам по себе 1С нормальный софт, но, это "пластилин", из которого все кому не лень лепят что им нужно... В данном случае нудно говорить не об 1С, а об конфигурации для аптеки на ее основе... И опять-же, она может быть "нормальная", но не обновлена до того релиза, который это умеет или недонастроена, как правильно выше Олег(student) заметил.

Цитата:
ГогиГоги GTIN =01
Надо в 1с:
048102010024080000003403971
Не-а... GTIN в данном случае - 04810201002408.
01, это код, который показывает, что это такое вообще. По нему в принципе, программа должна понимать, что это код маркировки и дальше что с ним делать.

PS А вообще, попробуйте все-таки перевести сканер в режим эмуляции COM(в блокнот при этом он сканировать не должен!), может и проблема решится сама - дело в том, что разбор ШК маркировки может быть реализован в программе только в той ветке алгоритма, которая от "ВнешнегоСобытия" начинается... А "ВнешнееСобытие" генерит только сканер в режиме COM, клавиатурный сканер просто сует строку символов как будто ее набрали с клавиатуры, при чем в то поле, где стоит курсор. Есть конечно в 1С вариант драйвера, который ловит последовательность символов с клавиатурного сканера, и если первые символы соответствуют настроенным в драйвере(префикс, в самом сканере тоже должен быть настроен), то генерится то-же "ВнешнееСобытие", и дальше алгоритм идет по той-же ветке.., Но ИМХО, это "костыль", и правильно настроить это не проще, а может и сложнее, чем перевести сканер в режим COM. Имеет смысл только для тех сканеров, которые принципиально нельзя в режим COM перевести.
19.01.2022 12:54
_urok_
 
вопрос по маркировки молочной продукции
вернее по сканеру, сканер Voyager1450g2dHR считывает марку без скрытого символа разделителя ASCII 29
сканирую в нотепад++
получаю либо так
0104607005273284215!!bIz93LfNw
либо с настройками вот так 0104607005273284215!!bIz[GS]93LfNw "GS] не скрытый"

и вообще сканер должен считывать скрытые символы, как правильно ?
всем добра


(0,01Мб)
Часовой пояс GMT +3, время: 13:18.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.