ДТО 10.4.5. Формирование тега 1162, для передачи кодов марки табачной продукции |
Здравствуйте, гость ( Вход | Регистрация )
С 3 августа 2017 восстановление лицензий производится ТОЛЬКО через СервисДеск
Просьба обращаться к партнерам компании для оформления заявок в СД
![]() ![]() |
ДТО 10.4.5. Формирование тега 1162, для передачи кодов марки табачной продукции |
![]()
Сообщение
#1
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 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. Вопрос: правильно ли мы передаем код в чистом виде в драйвер или необходимо какое-то дополнительное преобразование? |
|
|
![]()
Сообщение
#2
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
По ссылке у меня ничего не открывается
Вопрос только почему отбросил 01 из марки? В целом методика верная (под текущие реалии) -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#3
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 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 знаков, ошибка будет. |
|
|
![]()
Сообщение
#4
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
С блока сигарет считали марку 0104600266011725212095134931209513424010067290 ШК странный чутка Почему одни цифры? Фотку datamatrix покажите -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#5
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 3.11.2010 Из: Новокузнецк Пользователь №: 22 732 ![]() |
![]() Только такую марку нашли |
|
|
![]()
Сообщение
#6
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
![]() Только такую марку нашли Скурите этот блок и не показывайте никому эту дичь Новые марки совершенно иные по содержанию -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#7
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 3.11.2010 Из: Новокузнецк Пользователь №: 22 732 ![]() |
Если возможно, дайте, пожалуйста пример содержания марки, у нас ни в одном магазине их пока нет
|
|
|
![]()
Сообщение
#8
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
Если возможно, дайте, пожалуйста пример содержания марки, у нас ни в одном магазине их пока нет Наш образец на конференции уже куда-то ушёл Кто-то скурил кусок целофана ) -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#9
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 3.11.2010 Из: Новокузнецк Пользователь №: 22 732 ![]() |
![]() Это правильная марка? Ее содержание: 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 Это правильный алгоритм? |
|
|
![]()
Сообщение
#10
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
Алгоритм верный
Пачка тоже старая - там нет МРЦ в коде Но МРЦ не передаётся в тег 1162 -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#11
|
|
Прохожий Группа: Новички Сообщений: 9 Регистрация: 3.11.2010 Из: Новокузнецк Пользователь №: 22 732 ![]() |
Все понятно. Спасибо за помощь.
|
|
|
![]()
Сообщение
#12
|
|
Прохожий Группа: Пользователи Сообщений: 35 Регистрация: 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<uchar> 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); ведь метод libfptr_util_form_nomenclature уже и так передает тег 1162 в Атол, а тот код, что дальше только для проверки но не для передачи тега 1162 (тк там вызываются только get методы)? |
|
|
![]()
Сообщение
#13
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 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; nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE); 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); fptr.setParam(1162, nomenclatureCode); fptr.registration; -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#14
|
|
Прохожий Группа: Пользователи Сообщений: 35 Регистрация: 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; nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE); 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); fptr.setParam(1162, nomenclatureCode); fptr.registration; 1. Да - но тут в коде процедуры для работы как с COM-объектом, а мне нужна работа через библиотеку DLL fptr10.dll. 2. И можно ли как-то обойтись без методов вроде libfptr_get_param_bytearray libfptr_set_param_bytearray (не понимаю, как эти процедуры импортировать на Delphi из DLL) а использовать метод libfptr_get_param_str и самому шифровать GTIN и Serial по специальному алгоритму в Base64? Как тогда будет выглядеть код для передачи тега 1162? |
|
|
![]()
Сообщение
#15
|
|
![]() Тех.поддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 46 986 Регистрация: 25.9.2008 Из: Москва Пользователь №: 14 717 ![]() |
я вам привел код, написанный на делфи
скрин показать? ![]() -------------------- Внимание партнерам компании! Новый формат оказания технической поддержки ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ еще 9% ответов ТУТ P.S.: уважайте труд наших писателей - читайте мануалы |
|
|
![]()
Сообщение
#16
|
|
Прохожий Группа: Пользователи Сообщений: 35 Регистрация: 28.11.2016 Пользователь №: 129 222 ![]() |
я вам привел код, написанный на делфи скрин показать? ![]() Так Вы привели код для работы с Атол 10 через COM (OLE) объект. А у меня работа с Атол 10 идет через DLL-библиотеку fptr10.dll - соответственно код будет другим. Там нет процедур вроде fptr.setParam зато есть методы 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; {external 'fptr10.dll';} Tlibfptr_set_param_str = procedure(libfptr_handle: THandle; param_id: integer; const value: PWideChar); cdecl; {external 'fptr10.dll';} вот и хочу понять - какой код писать с помощью этих процедур и можно ли обойтись методами 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. |
|
|
![]()
Сообщение
#17
|
|
Магистр слова ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Специалисты Сообщений: 4 667 Регистрация: 15.8.2012 Пользователь №: 57 857 ![]() |
Так Вы привели код для работы с Атол 10 через COM (OLE) объект. А у меня работа с Атол 10 идет через DLL-библиотеку fptr10.dll - соответственно код будет другим. ... В общем, мой код для продаж, возврата, отчетов с гашением итд через библиотеку fptr10.dll работает уже год - но не поддерживает тег 1162. Хотелось бы понять как передавать тег 1162, не переписывая весь код на OLE методы, а работая точно также через библиотеку fptr10.dll - но передавая правильно тег 1162. Через тест драйвер сделайте регистрацию чека в JSON, а потом в логе подсмотрите как драйвер всё это транслирует в нативные вызовы. |
|
|
![]()
Сообщение
#18
|
|
Прохожий Группа: Пользователи Сообщений: 35 Регистрация: 28.11.2016 Пользователь №: 129 222 ![]() |
Через тест драйвер сделайте регистрацию чека в JSON, а потом в логе подсмотрите как драйвер всё это транслирует в нативные вызовы. А если я из 29-символьного набора 98765432101234ABC123400004444, который поступает на компьютер при сканировании выделю GTIN, Serial, обработаю результат и зашифрую его в Base64 - можно будет результат передать командой libfptr_set_param_str(Kassa, 1162, 'AAVZ055/GXJBQkMxMjM0') (то есть передать тег 1162 как обычный строковый тег) не прибегая к непонятным командам вроде libfptr_get_param_bytearray ? ? P. S. 29-значный код: 98765432101234ABC123400004444 GTIN: 98765432101234 Serial: ABC1234 Tabak2Tag1162: 000559D39E7F197241424331323334 Base64: AAVZ055/GXJBQkMxMjM0 |
|
|
![]()
Сообщение
#19
|
|
Участник ![]() ![]() Группа: Специалисты Сообщений: 141 Регистрация: 25.3.2015 Пользователь №: 116 446 ![]() |
Можете и так, только никаких base64 - нужен обычный байтовый массив
-------------------- ДТО10
|
|
|
![]()
Сообщение
#20
|
|
Прохожий Группа: Пользователи Сообщений: 35 Регистрация: 28.11.2016 Пользователь №: 129 222 ![]() |
Можете и так, только никаких base64 - нужен обычный байтовый массив А как передать байтовый массив с помощью libfptr_set_param_str то есть с помощью функции передачи строки? так и передавать в виде строки libfptr_set_param_str(Kassa, 1162, '000559D39E7F197241424331323334') ? |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 14.12.2019, 22:46 |