IPB

Здравствуйте, гость ( Вход | Регистрация )

> Восстановление лицензий

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

2 страниц V   1 2 >  
Добавить ответ в эту темуОткрыть тему
ДТО 10.4.5. Формирование тега 1162, для передачи кодов марки табачной продукции
юниверс
сообщение 20.3.2019, 6:28
Сообщение #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.

Вопрос: правильно ли мы передаем код в чистом виде в драйвер или необходимо какое-то дополнительное преобразование?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 20.3.2019, 8:11
Сообщение #2


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

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



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

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


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
юниверс
сообщение 20.3.2019, 9:10
Сообщение #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 знаков, ошибка будет.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 20.3.2019, 10:48
Сообщение #4


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

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



Цитата(юниверс @ 20.3.2019, 6:28) *
С блока сигарет считали марку 0104600266011725212095134931209513424010067290

ШК странный чутка
Почему одни цифры? Фотку datamatrix покажите


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
юниверс
сообщение 20.3.2019, 10:58
Сообщение #5


Прохожий


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



Прикрепленный файл  842a63f4_6a08_4113_8582_c4fbe63fa6fe.jpeg ( 79.08 килобайт ) Кол-во скачиваний: 99

Только такую марку нашли
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 20.3.2019, 11:02
Сообщение #6


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

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



Цитата(юниверс @ 20.3.2019, 10:58) *
Прикрепленный файл  842a63f4_6a08_4113_8582_c4fbe63fa6fe.jpeg ( 79.08 килобайт ) Кол-во скачиваний: 99

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

Скурите этот блок и не показывайте никому эту дичь
Новые марки совершенно иные по содержанию


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
юниверс
сообщение 20.3.2019, 11:29
Сообщение #7


Прохожий


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



Если возможно, дайте, пожалуйста пример содержания марки, у нас ни в одном магазине их пока нет
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 20.3.2019, 12:08
Сообщение #8


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

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



Цитата(юниверс @ 20.3.2019, 11:29) *
Если возможно, дайте, пожалуйста пример содержания марки, у нас ни в одном магазине их пока нет

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

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


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
юниверс
сообщение 22.3.2019, 7:03
Сообщение #9


Прохожий


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



Прикрепленный файл  2019_02_14_00852.png ( 366.54 килобайт ) Кол-во скачиваний: 61


Это правильная марка? Ее содержание: 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

Это правильный алгоритм?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 22.3.2019, 7:41
Сообщение #10


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

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



Алгоритм верный
Пачка тоже старая - там нет МРЦ в коде
Но МРЦ не передаётся в тег 1162


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
юниверс
сообщение 22.3.2019, 7:54
Сообщение #11


Прохожий


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



Все понятно. Спасибо за помощь.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Горчаков Иван
сообщение 26.6.2019, 1:35
Сообщение #12


Прохожий


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



Цитата(юниверс @ 22.3.2019, 7:54) *
Все понятно. Спасибо за помощь.


Пытаюсь передать тег 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 методы)?

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 26.6.2019, 8:49
Сообщение #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.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Горчаков Иван
сообщение 26.6.2019, 13:31
Сообщение #14


Прохожий


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



Цитата(АТОЛ: Царюков Роман @ 26.6.2019, 8:49) *
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?





Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 26.6.2019, 13:35
Сообщение #15


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

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



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

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


--------------------

ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Горчаков Иван
сообщение 26.6.2019, 14:31
Сообщение #16


Прохожий


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



Цитата(АТОЛ: Царюков Роман @ 26.6.2019, 13:35) *
я вам привел код, написанный на делфи

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


Так Вы привели код для работы с Атол 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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Средних Вл...
сообщение 28.6.2019, 10:28
Сообщение #17


Магистр слова
********

Группа: Специалисты
Сообщений: 4 667
Регистрация: 15.8.2012
Пользователь №: 57 857



Цитата(Горчаков Иван @ 26.6.2019, 14:31) *
Так Вы привели код для работы с Атол 10 через COM (OLE) объект. А у меня работа с Атол 10 идет через DLL-библиотеку fptr10.dll - соответственно код будет другим.
...
В общем, мой код для продаж, возврата, отчетов с гашением итд через библиотеку fptr10.dll работает уже год - но не поддерживает тег 1162. Хотелось бы понять как передавать тег 1162, не переписывая весь код на OLE методы, а работая точно также через библиотеку fptr10.dll - но передавая правильно тег 1162.

Через тест драйвер сделайте регистрацию чека в JSON, а потом в логе подсмотрите как драйвер всё это транслирует в нативные вызовы.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Горчаков Иван
сообщение 29.6.2019, 16:28
Сообщение #18


Прохожий


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



Цитата(АТОЛ: Средних Владимир @ 28.6.2019, 10:28) *
Через тест драйвер сделайте регистрацию чека в 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


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Беликов Ал...
сообщение 29.6.2019, 16:30
Сообщение #19


Участник
**

Группа: Специалисты
Сообщений: 141
Регистрация: 25.3.2015
Пользователь №: 116 446



Можете и так, только никаких base64 - нужен обычный байтовый массив


--------------------
ДТО10
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Горчаков Иван
сообщение 29.6.2019, 22:03
Сообщение #20


Прохожий


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



Цитата(АТОЛ: Беликов Александр @ 29.6.2019, 16:30) *
Можете и так, только никаких base64 - нужен обычный байтовый массив


А как передать байтовый массив с помощью

libfptr_set_param_str

то есть с помощью функции передачи строки?

так и передавать в виде строки

libfptr_set_param_str(Kassa, 1162, '000559D39E7F197241424331323334')

?

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

2 страниц V   1 2 >
Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 14.12.2019, 22:46
 Яндекс цитирования  Rambler's Top100