Привет Всем!
"Обувное" направление для меня редкость, поэтому прошу извинить за тугодумие:
Игорь Столяров писал(а): 15 Июнь 2020, 23:15
Нюанс действительно есть.
Если посмотреть описание формата строки с кодом маркировки GS1 (Yandex покажи !) - то в нём поля переменной длины должны
завершаться символом Chr(29), которые в Вашем примере отсутствует (например для поля после "21") … потому что его сожрал сканер.
Игорь, спасибо за совет!
Но что смущает - судя по инф-и найденной через поиск Yandex и приведенной на
https://infostart.ru/journal/news/uchet ... i_1209448/
и имеющемуся там изображению (картинка, не текст) примера формирования кода
есть непонятные моменты
я решил проверить разрядность и здесь привожу, уже разобранный по-символьно пример этой марки, сдвинув разряды чтобы удобнее было посчитать кол-во символов,
вижу противоречие(!), там на сайте написано, что исходя из спецификации GS в штриховой код DataMatrix включается:
<FNC1> + 01 + GTIN (14 знаков) + 21 + серийный номер (13 знаков) + <GS> + 91 + ключ проверки (14 знаков) + <GS> + 92 + криптоподпись (88 знаков)
но после 91, на картинке, ключ проверки явно не "14 знаков", а только 4
похоже, что на сайте
https://infostart.ru/journal/news/uchet ... i_1209448/
опечатка

!!! - ключ проверки 4-знака !!! а не 14-ть как у них написано (блин,столько времени потерял пока не увидел в на другом сайте)
далее, вроде бы все понятно - для наглядности, можно значение сканированной обувной марки поместить в LOC:str_Scan и сформировать LOC:Mark для дальнейшего использования в качестве содержимого кода маркировки в чеке
LOC:str_Scan = '010290000078733921%lRRHWM+"1mlj918029920GEgJiDhTthbw8VtvhOSaSMtn1A7KHKrVPMSo503W5mCjopv75VR9H4RG33M68brXZxYmj6MCwpHNShPyImpVg=='
(правда, видимо, пример имеющегося у меня сканированного обувного кода, был сформирован без лидирующего признака FNC1)
! в первый SUB включаем 31 символ с учетом '01' и '21'
! во второй SUB включаем 31 символ с учетом '91'
! в третий SUB включаем 90 символов с учетом '92'
LOC:Mark = SUB(LOC:str_Scan, 1, 31) & CHR(29) & SUB(LOC:str_Scan, 32, 6) & CHR(29) & SUB(LOC:str_Scan, 38, 90)
тут идут ранее разные аттрибуты чека (название, кол-во и т.п.), а потом собственно код маркировки
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_MCT_OTHER)
SELF.SetParamByteArray(LIBFPTR_PARAM_MARKING_CODE, CLIP(SELF.AtolStrToByte(LOC:Mark)))
if libfptr_registration(SELF.fptr) = LIBFPTR_ERROR
SELF.GetError
end
Прошу прокомментировать - это правильный вариант передачи маркировки обуви?
Спасибо