|
Тег 1162 (маркировка шин) | ☑ | ||
---|---|---|---|---|
0
55reg
11.11.20
✎
15:45
|
Драйвер 10.5, Атол 11Ф, прошивка 7942 (вроде можно сразу кидать марку в Base64 или HEX)
Передаю марку сразу в <GoodCodeData ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока("44 4D 02 A3 35 A1 50 33 3B 5A 68 44 76 3D 72 64 2C 4B 6B 3E 70")); или ЗаписьXML.ЗаписатьАтрибут("MarkingCode",XMLСтрока("RE0CozWhUDM7WmhEdj1yZCxLaz5w")); ККТ не печатает - пишет ошибка что мол не заполнен GTIN - ок - заполняю, далее ошибка SerialNumber - заполнил. Все печатает но на чеке выводит КТ 0000 02900002689075 ;ZhDv=rd,Kk>p - в ОФД FSACozWhUDM7WmhEdj1yZCxLaz5w! вместо RE0CozWhUDM7WmhEdj1yZCxLaz5w! Явно это из за не верного StampType (как мне кажется). Первые 3 символа не верные почему то (FSA а должно быть RE0) - в каких бы я сочетаниях не не передавал параметры! Уже как только не тасовал эти параметры! ЗаписьXML.ЗаписатьАтрибут("StampType",XMLСтрока("17485")); // и указывал 444D и 44 4D, 1520 все равно в ОФД не верный Base64! (еще раз - у меня Шины) ЗаписьXML.ЗаписатьАтрибут("GTIN",XMLСтрока("02900002689075")); ЗаписьXML.ЗаписатьАтрибут("SerialNumber",XMLСтрока(";ZhDv=rd,Kk>p")); //ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока("44 4D 02 A3 35 A1 50 33 3B 5A 68 44 76 3D 72 64 2C 4B 6B 3E 70")); ЗаписьXML.ЗаписатьАтрибут("MarkingCode",XMLСтрока(СокрЛП("RE0CozWhUDM7WmhEdj1yZCxLaz5w"))); Попробовал из драйвера напечатать чек и о чудо все передалось как нужно! Марку указал в HEX - ОФД отобразилось в Base64! Что за траблы то такие!!! Уже голову сломал - что ей надо!! Буду благодарен за любую подсказку! |
|||
1
55reg
11.11.20
✎
15:46
|
Не верно в теме написал Тег 1162 конечно )) Да же голова опухла c этими марками
|
|||
2
55reg
11.11.20
✎
16:51
|
В общем может кому то пригодится - поставил драйвер Атол 10.8.0.0 на прошивке 7942 и все корректно передалось. Еще проверю можно ли в HEX передать MarkingCode... Так как уже работает парсер входящая Марка в HEX.
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData"); ЗаписьXML.ЗаписатьАтрибут("StampType",XMLСтрока("17485")); ЗаписьXML.ЗаписатьАтрибут("GTIN",XMLСтрока("02900002689075")); ЗаписьXML.ЗаписатьАтрибут("SerialNumber",XMLСтрока(";ZhDv=rd,Kk>p")); ЗаписьXML.ЗаписатьАтрибут("MarkingCode",XMLСтрока("RE0CozWhUDM7WmhEdj1yZCxLaz5w")); ЗаписьXML.ЗаписатьКонецЭлемента(); Всем удачи! |
|||
3
55reg
11.11.20
✎
16:56
|
Да, в HEX то же работает )))
|
|||
4
FormatC
11.11.20
✎
16:59
|
Вот добрый человек, поделился инфой. Спасибо тебе!
|
|||
5
Olga_Om
30.11.20
✎
22:21
|
Добрый день, подскажите, а что кодирует в hex и base64? Какие данные кода маркировки? Я уже какие только куски кода маркировки не кодировала, не получается RЕ0 в base64 получить!
Либо в hex: 44 4d Далее кодируем gtin в hex Далее serial number в hex и всё это + и в marking kode ? Очень жду ответа. Спасибо. |
|||
6
MWWRuza
гуру
30.11.20
✎
23:29
|
+(5) Я вот тоже не понимаю - а зачем "ЗаписьXML.ЗаписатьАтрибут("MarkingCode",XMLСтрока("RE0CozWhUDM7WmhEdj1yZCxLaz5w"));" - ???
Уже-же передан тип марки, GTIN, СерияНомер... Разве этого не достаточно для формирования тега 1162? Зачем еще код марки передавать? Может наоборот, достаточно код марки правильно передать, и первые три параметра не нужны, драйвер/микропрограмма(прошивка) сами разберут ее и сформируют тег 1162 - поясните плиз... |
|||
7
Olga_Om
01.12.20
✎
04:17
|
(6) код марки - это полностью считанные код сканером? Или что туда передавать нужно, другими словами из чего формируется markingkode, не подскажете?
|
|||
8
zelyak
01.12.20
✎
04:44
|
GTIN + Код
|
|||
9
Mafiozaa
01.12.20
✎
04:54
|
(7) Передавать нужно GTIN который равен 14 символам и SerialNumber который равен 13 символам, тоесть перед отправкой нужно считанный код маркировки разбить на две части, которые равны 27 символам, остальное просто опустить
|
|||
10
Mafiozaa
01.12.20
✎
04:55
|
Неправильно выразился не 27 символам а 14+13 (в две переменных, строковых)
|
|||
11
Olga_Om
01.12.20
✎
06:25
|
(9) что входит в понятие „код„? 44 4d?
|
|||
12
Olga_Om
01.12.20
✎
07:16
|
Получаю код в формате hex 44 4D 04 31 61 85 E4 49 50 6D 4F 65 64 46 49 33 6A 66 22 65 5F (настоящая шина, не используйте, пожалуйста)
передаю в markingkode, чек выходит, буквы М нет, в ОДФ неверный формат тега 1162 Код товара E3 8E 03 D3 8D F5 EB 5F 39 13 8E 3D E7 4E 83 E0 5E B9 EB 8E 3A E3 DD F7 E8 0E BA DB 6E B9 E4 Уже не знаю куда рыть дальше.... |
|||
13
Olga_Om
01.12.20
✎
07:17
|
при кодировки из hex в base64 не получаю RE0.... никак!
|
|||
14
Olga_Om
01.12.20
✎
07:36
|
(9) Разбиваю, получаю.
Далее что? Как из этого получить base64 с началом REO??? как кодируется каждая часть? вторую часть кода в base64 я понимаю, это серийный номер, но что первые 6 символов - не понятно совершенно! |
|||
15
DmVl76
01.12.20
✎
08:02
|
(14) В типовых
Процедура СформироватьДвоичныеДанныеДляЧисла(ДанныеМаркировки, Знач ЗначениеЧисла = Неопределено, Знач ЗначениеСтроки = Неопределено) Префикс = ПрефиксКодированияРеквизита(ДанныеМаркировки.ТипИдентификатораТовара); Тело = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Тело); ЗаписьДанных.ЗаписатьЦелое64(Число(ЗначениеЧисла), ПорядокБайтов.BigEndian); Если Не ПустаяСтрока(ЗначениеСтроки) Тогда ЗаписьДанных.ЗаписатьСимволы(ЗначениеСтроки); КонецЕсли; ЗаписьДанных.Закрыть(); Тело.Перейти(0, ПозицияВПотоке.Начало); ЗаписьДанных = Новый ЗаписьДанных(Тело); ЗаписьДанных.ЗаписатьЦелое16(Префикс, ПорядокБайтов.BigEndian); ЗаписьДанных.Закрыть(); ДанныеМаркировки.РеквизитКодаТовараHEX = Тело.ЗакрытьИПолучитьДвоичныеДанные(); ДанныеМаркировки.РеквизитКодаТовара = Base64Строка(ДанныеМаркировки.РеквизитКодаТовараHEX); КонецПроцедуры Для обуви,шин,одежды префикс=17845, ЗначениеЧисла-GTIN в числовом формате, значение строки - серийный номер Нам нужно ДанныеМаркировки.РеквизитКодаТовара Если без структуры то как-то так Функция СформироватьДвоичныеДанныеДляЧисла(Префикс,Знач ЗначениеЧисла = Неопределено, Знач ЗначениеСтроки = Неопределено) Тело = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Тело); ЗаписьДанных.ЗаписатьЦелое64(Число(ЗначениеЧисла), ПорядокБайтов.BigEndian); Если Не ПустаяСтрока(ЗначениеСтроки) Тогда ЗаписьДанных.ЗаписатьСимволы(ЗначениеСтроки); КонецЕсли; ЗаписьДанных.Закрыть(); Тело.Перейти(0, ПозицияВПотоке.Начало); ЗаписьДанных = Новый ЗаписьДанных(Тело); ЗаписьДанных.ЗаписатьЦелое16(Префикс, ПорядокБайтов.BigEndian); ЗаписьДанных.Закрыть(); РеквизитКодаТовараHEX = Тело.ЗакрытьИПолучитьДвоичныеДанные(); Возврат Base64Строка(РеквизитКодаТовараHEX); КонецФункции ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(СформироватьДвоичныеДанныеДляЧисла(17845,466000025632,"Yui8rTd%haswe"))); |
|||
16
Olga_Om
01.12.20
✎
08:40
|
(15) Возврат Base64Строка(РеквизитКодаТовараHEX); возвращает пустоту....
|
|||
17
DmVl76
01.12.20
✎
09:12
|
(15) А какие параметры передаете? Я вот точно то что в примере передал Сообщить(СформироватьДвоичныеДанныеДляЧисла(17845,466000025632,"Yui8rTd%hasweц")) возвратилось "RbUAbH/EGCBZdWk4clRkJWhhc3dl"
|
|||
18
DmVl76
01.12.20
✎
09:18
|
Префикс не 17845, а 17485
|
|||
19
DmVl76
01.12.20
✎
09:29
|
(16) Вы не строкой случайно 44 4D 04 31 61 85 E4 49 50 6D 4F 65 64 46 49 33 6A 66 22 65 5F передаете? Это должны быть двоичные данные
|
|||
20
Olga_Om
01.12.20
✎
09:43
|
Всем ОГРОМНЕЙШЕЕ СПАСИБО! Получилось у меня, ребята! Передавала GTIN с лидирующим нулем, отсюда и проблема была.
|
|||
21
MWWRuza
гуру
01.12.20
✎
11:48
|
И все-таки, по вопросу в (6) - передача КТ в виде трех отдельных полей, разбирая ШК марки программой, и одним кодом без разбора на поля, рассчитывая на дальнейшее кодирование драйвером и софтом кассы, это разве не взаимоисключающие методы кодирования 1162 - ? Поясните пожалуйста...
|
|||
22
Olga_Om
09.12.20
✎
08:12
|
Всем опять здравствуйте! Возникла очередная проблема. Данные передаю в ОФД в HЕХ, там они тоже отображаются в HEX, но при передачи в четный знак, в ответ приходит вот что: failed to decode product code RE2FYWGF48dqRVpNdWRFKWw5SE0n : decoded gtin is over 14 digits: 146653294486471"}},"data":{"productCodes":["RE2FYWGF48dqRVpNdWRFKWw5SE0n"
Почему уходит RE2 а не REO Откуда в gtin он находит 14 цифр, когда передаю я 13? а если отбросить лидирующие нули, то и того меньше.... Притом в HEX из примера так же возвращает ошибку. Как из HEX мне код в base64 всё же преобразовать, если base64строка в 8.2 не отрабатывает.... |
|||
23
Olga_Om
09.12.20
✎
08:17
|
хм... нет я передаю 14, а он преобразует в 15.
|
|||
24
Olga_Om
09.12.20
✎
08:21
|
и base64строка кодирует, но как-то не так, в общем, я не понимаю где искать ошибку....
|
|||
25
Olga_Om
09.12.20
✎
09:03
|
И REO уже получаю, а в ответе ЧЗ приходит RE2 что за ерунда, вообще не понимаю!
|
|||
26
NikeArz
09.12.20
✎
10:41
|
(25) Функция ПолучитьРеквизитКодаТовара_82(ВрКодТовара) //Для 8.2
мбКодТовара = ВрКодТовара; //Получаем из строки байтов двоичные данные Попытка ТипhexBinary = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary"); ДвоичныеДанные = ФабрикаXDTO.Создать(ТипhexBinary,мбКодТовара); Исключение Возврат ""; КонецПопытки; //Кодируем их в BASE64 Попытка СтрКод = Base64Строка(ДвоичныеДанные.Значение); Исключение Возврат ""; КонецПопытки; Возврат СтрКод; КонецФункции Процедура ПолучитьРеквизитКодаТовараHEX_82(ДанныеМаркировки, мМРЦ = "") //Для 8.2 //В штрихкоде марки нас интересуют первые 14 символов - GTIN и вторые 7 - серия ГТИН = ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы; Если НЕ ЗначениеНеЗаполнено(мМРЦ) Тогда Серия = ДополнитьСерийныйНомерТабачнойПродукции(ДанныеМаркировки.СерийныйНомер, мМРЦ); Иначе Серия = ДанныеМаркировки.СерийныйНомер; КонецЕсли; Префикс = ПрефиксКодированияРеквизита(ДанныеМаркировки.ТипИдентификатораТовара); //GTIN преобразуем в число, получаем строку байтов (HEX на самом деле), добиваем до 6 байтов Попытка ПрефиксБайтами = ""; Пока Префикс > 0 Цикл ПрефиксБайтами = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Префикс%16 + 1, 1) + ПрефиксБайтами; Префикс = Цел(Префикс/16) ; КонецЦикла; Исключение //Возврат ""; Возврат; Конецпопытки; Попытка ГТИНЧислом = Число(ГТИН); ГТИНБайтами = ""; Пока ГТИНЧислом > 0 Цикл ГТИНБайтами = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ГТИНЧислом%16 + 1, 1) + ГТИНБайтами; ГТИНЧислом = Цел(ГТИНЧислом/16) ; КонецЦикла; Исключение //Возврат ""; Возврат; Конецпопытки; Пока СтрДлина(ГТИНБайтами)<12 Цикл ГТИНБайтами = "0"+ГТИНБайтами; КонецЦикла; //Серию преобразуем в байты посимвольно старым методом - через временный файл ИмяФ = ПолучитьИмяВременногоФайла("txt"); Т = Новый ТекстовыйДокумент(); Т.УстановитьТекст(Серия); Т.Записать(ИмяФ,КодировкаТекста.ANSI); ДД = Новый ДвоичныеДанные(ИмяФ); СерияБайтами = Строка(ДД); СерияБайтами = СтрЗаменить(СерияБайтами," ",""); УдалитьФайлы(ИмяФ); мКодТовара = ПрефиксБайтами+ГТИНБайтами+СерияБайтами; ВрКодТовара = мКодТовара; МассивБайт = ""; Пока СтрДлина(мКодТовара)>0 Цикл МассивБайт = МассивБайт+" "+Лев(мКодТовара,2); мКодТовара = Сред(мКодТовара,3); КонецЦикла; ДанныеМаркировки.РеквизитКодаТовараHEX = СокрЛП(МассивБайт); ДанныеМаркировки.РеквизитКодаТовара = ПолучитьРеквизитКодаТовара_82(ВрКодТовара); КонецПроцедуры Это работает в 8.2 |
|||
27
Olga_Om
09.12.20
✎
11:53
|
(26) ДополнитьСерийныйНомерТабачнойПродукции - неизвестно что за функция, у нас база самописная, там этого нет. И ПрефиксКодированияРеквизита так же...
Обнаружила, что часть кодов кодируется верно, а часть нет. |
|||
28
NikeArz
09.12.20
✎
12:20
|
(27) Да самописная.
Функция ДополнитьСерийныйНомерТабачнойПродукции(мСерийныйНомер, мМРЦ) Экспорт Результат = мСерийныйНомер + мМРЦ; Пока СтрДлина(Результат) < 13 Цикл Результат = Результат + Символ(32); // Дополняем знаками «20h» в конце (пробелами справа) до 13 байт КонецЦикла; Возврат Результат; КонецФункции |
|||
29
NikeArz
09.12.20
✎
12:23
|
(27)
Функция ПрефиксКодированияРеквизита(Знач ТипыИдентификаторовТовараККТ) Экспорт; Если ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8 Тогда Результат = 17672; // 45h 08h - Код товара в формате EAN-8, UPC-E. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN13 Тогда Результат = 17677; // 45h 0Dh - Код товара в формате EAN-13, UPC-A. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеITF14 Тогда Результат = 18702; // 49h 0Eh - Код товара в формате EAN-13, UPC-A. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1 Тогда Результат = 17485; // 44h 4Dh - Код товара в формате GS1 Data Matrix или Data Matrix маркировки. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха Тогда Результат = 21062; // 52h 46h - Код товара средства идентификации мехового изделия. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2 Тогда Результат = 50452; // C5h 14h - Код товара в кодировке ЕГАИС 2.0 в формате PDF417. ИначеЕсли ТипыИдентификаторовТовараККТ = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3 Тогда Результат = 50462; // C5h 1Eh - Код товара в кодировке ЕГАИС 3.0 в формате Data Matrix. Иначе Результат = 0; // 00h 00h - Код товара, который не распознан. КонецЕсли; Возврат Результат; КонецФункции |
|||
30
Olga_Om
09.12.20
✎
12:44
|
(29) Спасибо большое! Попробую, отпишусь
|
|||
31
Olga_Om
09.12.20
✎
13:24
|
не совсем понятно, как дополнять hex нулевыми байтами, нули проставляются спереди? проставляем их когда уже перевели полное число в hex или только gtin?
|
|||
32
hugo
11.12.20
✎
11:15
|
(2) Добрый день.
ЗаписьXML.ЗаписатьАтрибут("StampType",XMLСтрока("17485")); Опечатка? Вроде должно передаваться "1520"? |
|||
33
vis_tmp
19.02.21
✎
13:02
|
(28) Вместо цикла:
Результат = Лев(Результат + " ", 13); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |