Как настроить тег 1162

Как настроить тег 1162

С 3 августа 2017 восстановление лицензий производится ТОЛЬКО через СервисДеск
Просьба обращаться к партнерам компании для оформления заявок в СД

Начинающий

Группа: Пользователи
Сообщений: 82
Регистрация: 28.11.2016
Пользователь №: 129 222

Интегрировали программное обеспечение с ККМ Атол 30Ф под управлением Атол ДТО 10.

1) Имеем код маркировки обуви, выданный сканером штрих-кодов:

2) Извлеваем из него GTIN и Serial

gtin: «02900000280250»
serial: «HEFWeTXudLfd:»

Кстати, GTIN должен быть 14 символов, а Serial 13 символов — все верно?

3) Передаем данные GTIN и Serial Атолу, Атол распечатывает чек

fptr.setParam(fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_SHOES)
fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, ‘02900000280250’)
fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, ‘HEFWeTXudLfd:’)
fptr.utilFormNomenclature
mbKodTovara = fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(1162, mbKodTovara)

На бумажном чеке, распечатанном Атолом, отображается код товара:

В лог-файле Атол ДТО 10 отображается следующее:

.
2020.01.28 14:38:59.415 T:00001ADC INFO [Transport] recv 55 01 00 (3 bytes total)
2020.01.28 14:38:59.415 T:00001ADC INFO [Transport] send 92 00 01 (3 bytes total)
2020.01.28 14:38:59.418 T:00001ADC INFO [Transport] recv 55 9B 00 (3 bytes total)
2020.01.28 14:38:59.418 T:00001ADC ERROR [FiscalPrinter] Код ошибки ККТ — 009Bh
2020.01.28 14:38:59.419 T:00001ADC ERROR [FiscalPrinter] Объекту 0x003DE720 присвоен код ошибки 82 [Чек открыт — операция невозможна]
2020.01.28 14:39:09.404 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_NOMENCLATURE_TYPE (65695) = 3
2020.01.28 14:39:09.404 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_GTIN (65696) = 02900000280250
2020.01.28 14:39:09.404 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_SERIAL_NUMBER (65559) = HEFWeTXudLfd:
2020.01.28 14:39:09.404 T:00001ADC INFO [FiscalPrinter] libfptr_util_form_nomenclature()
2020.01.28 14:39:09.539 T:00001ADC INFO [FiscalPrinter] 1162 (1162) = 15 20 02 A3 35 7C 8E BA 48 45 46 57 65 54 58 75 64 4C 66 64 3A
2020.01.28 14:39:09.559 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = Шлепки домашние мужские Alfox
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 300
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = 0
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] > 1212 (1212) = 1
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] > 1214 (1214) = 4
2020.01.28 14:39:09.569 T:00001ADC INFO [FiscalPrinter] libfptr_registration()
.

Вроде данные о теге 1162, распечатанном на чеке, совпадают.

4) Проверяем, что ушло в ОФД, там отображается, что вместе с продажей товара была передана маркировка

(как я понимаю, это то же самое, что распечаталось на чеке, толкьо закодированное алгоритмом Base64Encode)

На чеке, который пришел на электронную почту из ОФД, отображается то же самое:

1) Правильно ли мы извлекли gtin и serial на шаге 2?

2) Правильно ли передался тег 1162 в ОФД? Как мы можем понять, правильно ли он передался? Если ККМ Атол не выдал ошибок при пробитии чека — значит, этого достаточно и тег 1162 передан правильно?

Как проконтролировать, правильно ли передается маркировка в ОФД?

3) Содержит ли маркировка какие-либо символы с контрольными суммами — чтобы в случае передачи неверного gtin/serial генерировалась ошибка кассы и ОФД или в качестве gtin и serial можно передавать произвольные символы и это никак не контролируется?

Источник

Как настроить тег 1162

С 3 августа 2017 восстановление лицензий производится ТОЛЬКО через СервисДеск
Просьба обращаться к партнерам компании для оформления заявок в СД

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

Работа с драйвером из 1С через Com объект.
С блока сигарет считали марку 0104600266011725212095134931209513424010067290
Разбираем ее по правилам https://www.garant.ru/products/ipo/prime/doc/72089916/:
01 ИД GTIN, далее 14 знаков GTIN: 04600266011725.
21 ИД Serial, далее 7 знаков serial: 2095134.

Формируем коды в соответствии с документацией на драйвер.
fptr.setParam(fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, «04600266011725»);
fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, «2095134»);
fptr.utilFormNomenclature();
nomenclatureCode = fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
рез = fptr.setParam(1162, nomenclatureCode);

В чеке, который пришел в ОФД код товара выглядит следующим образом: AAUELxU4tE0yMDk1MTM0.

Вопрос: правильно ли мы передаем код в чистом виде в драйвер или необходимо какое-то дополнительное преобразование?

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

По ссылке у меня ничего не открывается
Вопрос только почему отбросил 01 из марки?

В целом методика верная (под текущие реалии)

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

Постановление Правительства РФ от 28 февраля 2019 г. № 224(https://www.garant.ru/products/ipo/prime/doc/72089916/)

37. Средство идентификации потребительской упаковки содержит код маркировки, включающий в себя 4 группы данных, из которых первые 3 группы образуют код идентификации потребительской упаковки, при этом:
первая группа обязательных данных идентифицируется кодом применения AI = ′01′ и содержит код товара (14 цифр) групповой упаковки;
вторая группа обязательных данных идентифицируется кодом применения AI = ′21′ и содержит индивидуальный серийный номер (7 символов) групповой упаковки;

Я так понял что коды применения не входят, просто служат для определения состава данных. Если не отбрасывать 01, тогда получится GTIN 16 знаков, ошибка будет.

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

842a63f4_6a08_4113_8582_c4fbe63fa6fe.jpeg ( 79.08 килобайт ) Кол-во скачиваний: 119

Только такую марку нашли

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

842a63f4_6a08_4113_8582_c4fbe63fa6fe.jpeg ( 79.08 килобайт ) Кол-во скачиваний: 119

Только такую марку нашли

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

Наш образец на конференции уже куда-то ушёл

Кто-то скурил кусок целофана )

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

2019_02_14_00852.png ( 366.54 килобайт ) Кол-во скачиваний: 69

Это правильная марка? Ее содержание: 00000046186195Xp4k=xyAQDPtFEa
Как ее разбирать?
Если брать первые 14 символов как GTIN: 00000046186195
следующие 7 как Serial: Xp4k=xy
Дальше непонятно что такое AQDPtFEa

Передаем в драйвер без преобразований:
fptr.setParam(fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, «00000046186195»);
fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, «Xp4k=xy»);
fptr.utilFormNomenclature();
мбКодТовара = fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(1162, мбКодТовара);

В ОФД код товара: AAUAAALAvtNYcDRrPXh5

Это правильный алгоритм?

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

Группа: Новички
Сообщений: 14
Регистрация: 3.11.2010
Из: Новокузнецк
Пользователь №: 22 732

Начинающий

Группа: Пользователи
Сообщений: 82
Регистрация: 28.11.2016
Пользователь №: 129 222

Пытаюсь передать тег 1162, используя Атол 10 и DLL fptr10.dll, в документации код следующий (что не совпадает с примером, который Вы подтвердили, что он верный — в частности после выполнения метода libfptr_util_form_nomenclature не вызывается никаких методов, содержащих слово set в названии, а только get):

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_TOBACCO);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L»98765432101234″);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L»ABC1234″);
libfptr_util_form_nomenclature(fptr);

std::vector nomenclatureCode;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
if (size > nomenclatureCode.size())
<
nomenclatureCode.resize(size);
libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
>

В связи с этим вопросы:

1) Все ли в документации правильно, как правильно передать тег 1162, используя Атол 10 на Delphi?

2) Можно ли ограничиться таким кодом

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_TOBACCO);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L»98765432101234″);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L»ABC1234″);
libfptr_util_form_nomenclature(fptr);

уже и так передает тег 1162 в Атол, а тот код, что дальше только для проверки но не для передачи тега 1162 (тк там вызываются только get методы)?

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

fptr.setParam(fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, ‘98765432101234’);
fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, ‘ABC1234’);
fptr.utilFormNomenclature;

fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, ‘товар1’);
fptr.setParam(1212, 5);
fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, pr);
fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 1);
fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT0);
fptr.setParam(fptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, True);

Начинающий

Группа: Пользователи
Сообщений: 82
Регистрация: 28.11.2016
Пользователь №: 129 222

fptr.setParam(fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, ‘98765432101234’);
fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, ‘ABC1234’);
fptr.utilFormNomenclature;

fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, ‘товар1’);
fptr.setParam(1212, 5);
fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, pr);
fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 1);
fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT0);
fptr.setParam(fptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, True);

1. Да — но тут в коде процедуры для работы как с COM-объектом, а мне нужна работа через библиотеку DLL fptr10.dll.

2. И можно ли как-то обойтись без методов вроде
libfptr_get_param_bytearray
libfptr_set_param_bytearray

(не понимаю, как эти процедуры импортировать на Delphi из DLL)

а использовать метод

и самому шифровать GTIN и Serial по специальному алгоритму в Base64? Как тогда будет выглядеть код для передачи тега 1162?

Тех.поддержка

Группа: Администраторы
Сообщений: 54 685
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717

я вам привел код, написанный на делфи

скрин показать?

Начинающий

Группа: Пользователи
Сообщений: 82
Регистрация: 28.11.2016
Пользователь №: 129 222

я вам привел код, написанный на делфи

скрин показать?

Так Вы привели код для работы с Атол 10 через COM (OLE) объект. А у меня работа с Атол 10 идет через DLL-библиотеку fptr10.dll — соответственно код будет другим.

Там нет процедур вроде

зато есть методы

DTOX_SHARED_EXPORT void DTOX_SHARED_CCA libfptr_set_param_int(libfptr_handle handle, int param_id, uint value);
DTOX_SHARED_EXPORT void DTOX_SHARED_CCA libfptr_set_param_str(libfptr_handle handle, int
param_id, const wchar_t *value);

которые я переделал на Delphi

Tlibfptr_set_param_int = procedure(libfptr_handle: THandle; param_id, value: integer); cdecl;
Tlibfptr_set_param_str = procedure(libfptr_handle: THandle; param_id: integer; const value: PWideChar); cdecl;

вот и хочу понять — какой код писать с помощью этих процедур и можно ли обойтись методами

libfptr_set_param_int libfptr_set_param_str — не прибегая к bytearray (который непонятно — правильно ли я конвертировал из С++ в Delphi):

DTOX_SHARED_EXPORT void DTOX_SHARED_CCA libfptr_set_param_bytearray(libfptr_handle handle, int param_id, const uchar *value, int size);
—>
Tlibfptr_set_param_bytearray = procedure(libfptr_handle: THandle; param_id: integer; const value: PWideChar; size: integer); cdecl;

DTOX_SHARED_EXPORT int DTOX_SHARED_CCA libfptr_get_param_bytearray(libfptr_handle handle, int param_id, uchar *value, int size);
—>
Tlibfptr_get_param_bytearray = function(libfptr_handle: THandle; param_id: integer; var value: PWideChar; size: integer): integer; cdecl;

В общем, мой код для продаж, возврата, отчетов с гашением итд через библиотеку fptr10.dll работает уже год — но не поддерживает тег 1162. Хотелось бы понять как передавать тег 1162, не переписывая весь код на OLE методы, а работая точно также через библиотеку fptr10.dll — но передавая правильно тег 1162.

Источник

Читайте также:  Редми не работает диктофон
Оцените статью