powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача маркировки товара в драйвер ККМ Штрих-М
25 сообщений из 40, страница 1 из 2
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002000
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Имеется модуль для работы с драйвером ККТ Штрих-М на Дельфи. Все нормально работает, пробиваются чеки, закрывается смена и т.д.
Теперь возникла надобность передавать маркировку при пробитии табачных изделий.
Может кто внятно подсказать как это сделать? Какие методы использовать? В мануале к драйверу написано совершенно непонятно, либо не для тех, кто в танке.
Использовать FnAcceptMarkingCode или FNBindMarkingItem, либо вообще FNSendItemCodeData...

Кто сталкивался?
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002015
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aidynchik, хз как с табаком, но с лекарствами маркировку делаю так

Код: pascal
1.
2.
3.
4.
    FDriver.Driver.MarkingType := 17485;
    FDriver.Driver.GTIN := copy(Ch.SGTIN, 1, 14);
    FDriver.Driver.SerialNumber := copy(Ch.SGTIN, 15, 13);
    FDriver.Driver.FNSendItemCodeData();
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002022
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

целиком будет вот так, правильно я понимаю? а что такое Ch, что он из себя представляет?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
FDriver.Driver.Price := 150;
FDriver.Driver.Quantity := 4;
FDriver.Driver.FNOperation;
FDriver.Driver.MarkingType := 17485;
FDriver.Driver.GTIN := copy(Ch.SGTIN, 1, 14);
FDriver.Driver.SerialNumber := copy(Ch.SGTIN, 15, 13);
FDriver.Driver.FNSendItemCodeData();
FDriver.Driver.FNCloseCheckEx;
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002028
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aidynchik, да, так. Ch - просто моя структура данных, Ch.SGTIN - это просто строка, где записан SGTIN лекарства, у вас тут будет свой код табачной продукции
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002031
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

Получается не нужно его как-то там раскладывать, разбивать.
Просто отсканировал через 2D-сканер и отправил на драйвер? Ну кроме как вырезать символы по 14ый и с 14го
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002041
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aidynchik, как раз таки надо! Сканируем DataMatrix и парсим его. Я передаю на драйвер уже результат парсинга. Я не знаю специфики табачки, говорю только за лекарства. В лекарствах 2 первые символа DataMatrix - служебные, потом 14 символов - GTIN, потом еще 2 символа пропускаем, потом 13 символов - Serial number. Потом идет криптохвост. То есть для лекарств
Код: pascal
1.
2.
3.
4.
    FDriver.Driver.MarkingType := 17485;
    FDriver.Driver.GTIN := GTIN из DataMatrix;
    FDriver.Driver.SerialNumber := SerialNumber из DataMatrix;
    FDriver.Driver.FNSendItemCodeData();


Как для табачки, я хз. Читайте спецификацию, на сайте ЧЗ наверняка все есть. Еще возможно у вас MarkingType другой
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002392
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

огромное спасибо, очень помогли...
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002558
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нашел решение, можешь здесь выложить. Вдруг кому-то ещё пригодится.
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002693
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010
В лекарствах 2 первые символа DataMatrix - служебные, потом 14 символов - GTIN, потом еще 2 символа пропускаем, потом 13 символов - Serial number. Потом идет криптохвост. То есть для лекарств

Не совсем так. Надо говорить о группах: группа 01 - это GTIN, 14 символов. То есть при парсинге марки находим группу 01, дальше 14 цифр будут GTIN. Еще есть группа 21, это серийный номер, 13 символов. GTIN+SERIAL_NUMBER - есть SGTIN у нас. Далее могут присутствовать группы 17 - срок годности, 6 символов. И может присутствовать группа 10 - серийный номер. Не тот, который серийный номер из SGTIN, а тот, который мы привыкли видеть всех упаковках лекарств. Они называют его BATCH. Он произвольной длины, поэтому должен завершаться кодом GS (#29). Есть еще группы 91, 92, 24, и еще что-то. В самом общем случае группы могут стоять где угодно, хотя я не видел, чтобы 01 не был первым. А вот группа 21 встречается в разных местах, поэтому надо парсить целиком.

Однако, на сайте ЧЗ есть документ, где утверждается, что впредь должны быть только группы 01 и 21, и только в этом порядке, дальше криптохвост, и тогда Ваш алгоритм верный. Однако на практике это не так пока.

Причем GTIN - Это не всегда EAN13 с упаковки плюс ведущий первый символ (0 или 1 на практике). GTIN может быть совсем другим, поэтому фарм.поставщики начали передавать эти GTIN в параллель с EAN13.

Это я сейчас о лекарствах. У табачки всё просто: первые 14 символов марки - это типа GTIN, далее 7 символов - уникальный код, типа SERIAL_NUMBER. Символы 2-14, вроде как, всегда везде совпадали с EAN13 на упаковке.

Насчет как засунуть в драйвер Штрих-М именно табачку - сам не совал, у меня у табачных клиентов атолы стоят, там раньше были 8 драйверы, сейчас 10-е. Там иначе загоняю, но про лекарства в штрихе могу сказать, что один из способов у меня точно так же реализован, а именно: MarkingType := $444D, потом заполнение GTIN и SerialNumber и выполнение FNSendItemCodeData; Отличие от лекарств только в длине SerialNumber: 7 в табачке и 13 в лекарствах, наверное, должно работать.
Правда я этот способ и в лекарствах только тестировал, а на практике пользуюсь другим, когда GTIN переводим в бинарный формат, серийный номер - в HEX-формат, слепляем их, впереди суем строку '444D', потом два варианта:

Либо полученную HEX-строку дополняем еще префиксом '8A041500' и передаем в Driver.TLVDataHex и выполняем FNSendTLVOperation.

Либо разделяем Hex-символы этой строки пробелами и делаем

TagNumber := 1162;
TagType := 9;
TagValueBinHex := НАША_HEX_СТРОКА;
FNSendTagOperation;

Вот это рабочий вариант. Скорее всего, и с табачкой всё получится. Именно так я сделал по аналогии с АТОЛ-м, где в 8 версии можно было только закодировать строку для тэга 1162 ,а в 10 они сделали один супер-бупер просто метод, потом объявили устаревшим, и он дает неверный префикс, хоть и работает, а новый супер-бупер метод работает, туда тупо марку суешь, само парсится, но чтобы он работал у тебя на кассе, ты подпишись к ним на абон.плату плиз. Я воспользовался методом, который работал и в ATOL8, проблем нет.
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002771
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

о, а можно чуть-чуть поподробнее с Атол 8, пожалуйста? Потому что я уже начал переписывать на ДТО 10, но если можно обойтись малой кровью, не переходя на 10-ку.
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002814
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik
V.Borzov,

о, а можно чуть-чуть поподробнее с Атол 8, пожалуйста? Потому что я уже начал переписывать на ДТО 10, но если можно обойтись малой кровью, не переходя на 10-ку.


Подскажи, где посмотреть пример работы с последними драйверами штрих-м из дельфи?
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002817
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik
V.Borzov,

о, а можно чуть-чуть поподробнее с Атол 8, пожалуйста? Потому что я уже начал переписывать на ДТО 10, но если можно обойтись малой кровью, не переходя на 10-ку.

Так же хекс-строка с пробелами
надо только задать сперва StreamFormat
Код: pascal
1.
2.
3.
4.
DriverObj.StreamFormat := 5;
DriverObj.AttrNumber := 1162;
DriverObj.AttrValue := <HEX_STR_VALUE>;
DriverObj.WriteAttribute;


Ну и надо это сделать ДО EndItem

Но 10-ку пили, ибо атоловские кассы будут переводиться на 5-ую платформу, а с ней 8-ка не умеет работать.
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40002820
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собираем HEX-строку для табачки:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  // перевод всех символов первой части (GTIN) кода марки в бинарный формат, потом в hex-формат
  GTIN := copy(BarcodeValue,1,14);
  GTIN := IntToHex(StrToInt64(GTIN),6);
  GTIN := StrPadLeft(GTIN,12,'0');
                                    
  // перевод всех символов второй части (SERIAL) в hex-формат
  SERIAL := copy(BarcodeValue,15,7);
  SERIAL := StringOfChar(' ',Length(SERIAL) * 2);
  BinToHex(PansiChar(SERIAL),PansiChar(SERIAL),Length(SERIAL));

  StrValue := '0005'+GTIN+SERIAL; 

   // пробелы расставим
   for i := 1 to length(StrValue) div 2 -1 do  insert(' ',StrValue,i*2+i);


В АТОЛ8 было так:
Код: pascal
1.
2.
3.
4.
   Atol8.StreamFormat := 5; 
   Atol8.AttrNumber := 1162;
   Atol8.AttrValue := StrValue;
   Atol8.WriteAttribute;


У меня сейчас появились сомнения насчет актуальности префикса 0005. Возможно, сейчас уже 444D должно быть, но клиент пока не жаловался...

В 10-ке используем просто:
Код: pascal
1.
Atol10.SetParamStrHex(1162,StrValue)


Для лекарств это тоже применимо, но префикс точно 444D, и SERIAL будет длиной 13 символов, и как разбирать код марки: иначе.
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40003743
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

вот именно, что их нет... в комплекте с драйвером старинные примеры, которые не обновлялись.
Только в интернете по форумам искать
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40003744
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

да, конечно 10ку пилить буду, просто сейчас вопрос стоит срочняком
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40003745
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

большое спасибо! Очень выручили
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40003892
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,
по штрихам вот я у себя насохранял ссылок разных, пока допиливал под маркировки:

https://infostart.ru/1c/articles/1192569/
https://docs.google.com/document/d/1m3gHyKvM0gBMPgpzG-1cFsfVDnecouCtzQBJVDooGuM/edit#heading=h.z4tw3du13anc
https://forum.shtrih-m-partners.ru/index.php?topic=33714.0
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40003947
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У атола с этим получше, всё-таки
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Передача маркировки товара в драйвер ККМ Штрих-М
    #40133717
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, подскажите - имеет ли значение очередность передачи тегов (лекарства)? К примеру я передаю 1261 непосредственно перед 2107, но эта скотина не передается, при этом 2107 передается. 1260 тоже не передается, но сначала хочу хотя бы с 1261 разобраться. Передаю также как и до 1.2 передавал составные теги. Единственная мысль сейчас - возможно имеет значение очередность и 1261 нужно передавать в строго определенном месте - после определенного тега и до определенного тега?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
           //тег 1261 начало
           FDriver.Driver.TagNumber := 1261;
           FDriver.Driver.FNBeginSTLVTag();
           my_TagID := FDriver.Driver.TagID;

           FDriver.Driver.TagID := my_TagID;
           FDriver.Driver.TagNumber := 1262;
           FDriver.Driver.TagType := ttString;
           FDriver.Driver.TagValueStr := '020';
           FDriver.Driver.FNAddTag();

           FDriver.Driver.TagID := my_TagID;
           FDriver.Driver.TagNumber := 1263;
           FDriver.Driver.TagType := ttString;
           FDriver.Driver.TagValueStr := '14.12.2018';
           FDriver.Driver.FNAddTag();

           FDriver.Driver.TagID := my_TagID;
           FDriver.Driver.TagNumber := 1264;
           FDriver.Driver.TagType := ttString;
           FDriver.Driver.TagValueStr := '1556';
           FDriver.Driver.FNAddTag();

           FDriver.Driver.TagID := my_TagID;
           FDriver.Driver.TagNumber := 1265;
           FDriver.Driver.TagType := ttString;
           FDriver.Driver.TagValueStr := 'tm=mdlp&sid='+ MD + '&';
           FDriver.Driver.FNAddTag();

           FDriver.Driver.FNSendSTLVTag();
           //тег 1261 конец

           //тег 2107 начало
           FDriver.Driver.TagNumber  := 2107;
           FDriver.Driver.FNBeginSTLVTag();
           FDriver.Driver.TagType := ttByte;
           FDriver.Driver.TagValueInt := 0;
           FDriver.Driver.FNAddTag();
           FDriver.Driver.FNSendSTLVTag();
           //тег 2107 конец


...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40133731
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

ничего, что 1261 - это атрибут чека а не позиции?
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40133741
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747,
Дак и передаю как атрибут чека, по крайней мере аналогично 2107, который передается. Что не так делаю?
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40133792
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде разобрался, подскажите сейчас все нужные теги есть?
И что все таки по их последовательности? Имеет ли она значение?
К примеру 1261 вроде как должен быть после 1059 - но насколько это критично?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
КАССОВЫЙ ЧЕК
1209,ВЕРСИЯ ФФД:4 (1.2)
1041,ФН:9960440301930ZZZ
1037,РН ККТ:0001765108059ZZZ
1018,ИНН:ZZZ
1040,ФД:27
1012,ДАТА, ВРЕМЯ:13.02.2022 0:18:00
1077,ФП:1764633ZZZ (3104692E2ZZZ)
1038,СМЕНА:4
1042,НОМЕР ЧЕКА ЗА СМЕНУ:16
1054,ПРИЗН. РАСЧЕТА:1 (Приход)
1020,ИТОГ:10.00
1203,ИНН КАССИРА:ZZZ
1261,ОТРАСЛ. РЕКВ. ЧЕКА:
 1262,ИД. ФОИВ:020
 1263,ДАТА ДОК. ОСН.:14.12.2018
 1264,НОМЕР ДОК. ОСН.:1556
 1265,ЗНАЧ. ОТР. РЕКВ.:tm=mdlp&sid=00000000172ZZZ&
1059,ПРЕДМ. РАСЧЕТА:
 1030,НАИМЕН. ПРЕДМ. РАСЧЕТА:УГОЛЬ АКТИВИРОВАННЫЙ ТАБ 0,25 №10
 1079,ЦЕНА ЗА ЕД. ПРЕДМ. РАСЧ.:10.00
 1023,КОЛ-ВО ПРЕДМ. РАСЧЕТА:1.000000
 2108,МЕРА КОЛ-ВА ПРЕДМ. РАСЧ.:0
 1043,СТОИМ. ПРЕДМ. РАСЧЕТА:10.00
 1199,СТАВКА НДС:6
 1214,ПРИЗН. СПОСОБА РАСЧ.:4
 1212,ПРИЗН. ПРЕДМЕТА РАСЧ.:1
 1163,КТ:
  1305,КТ GS1.М:0104601669002600212yHp5nNXcxZZZ
 1260,ОТРАСЛ. РЕКВ. ПРЕДМ. РАСЧ.:
  1262,ИД. ФОИВ:020
  1263,ДАТА ДОК. ОСН.:14.12.2018
  1264,НОМЕР ДОК. ОСН.:1556
  1265,ЗНАЧ. ОТР. РЕКВ.:tm=mdlp&sid=00000000172ZZZ&
 2102,РЕЖ. ОБРАБОТКИ КМ:0
 2106,РЕЗ-Т ПРОВ. СВЕД. О ТОВ.:15
1021,КАССИР:Зав. аптекой ZZZ
1031,НАЛИЧНЫМИ:0.00
1081,БЕЗНАЛИЧНЫМИ:10.00
1215,ПРЕДВАРИТЕЛЬНАЯ ОПЛАТА (АВАНС):0.00
1216,ПОСЛЕДУЮЩАЯ ОПЛАТА (КРЕДИТ):0.00
1217,ИНАЯ ФОРМА ОПЛАТЫ:0.00
1060,САЙТ ФНС:www.nalog.gov.ru
1187,МЕСТО РАСЧЕТОВ:Аптека "ZZZ"
1105,СУММА БЕЗ НДС:10.00
1048,НАИМЕН. ПОЛЬЗ.:ООО "ZZZ"
1009,АДР.РАСЧЕТОВ:ZZZ
1055,СНО:4 (УДМР)
2107,РЕЗ-ТЫ ПРОВ. СВЕД О МАРК. ТОВ:0


...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40133797
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

Не припоминаю в ФФД требований к порядку следования тегов, только к их наличию.
Хотя мог и пропустить что...
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40134501
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин опять шляпа - вроде с тегами более менее разобрался, но вылезла другая трабла - при тестировании КМ сохранял в notepad ++, все было ок. А в самой проге символы GS не считываются в Memo. Как побороть? Или искуственно вставлять, высчитав номер позиции в строке, он ведь постоянный? Delphi 2007 если что. Может в настройках сканера дело? Хотя в notepad ++ ведь правильно считывается
...
Рейтинг: 0 / 0
Передача маркировки товара в драйвер ККМ Штрих-М
    #40134505
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и собственно при копипасте с notepad++ в memo в проге тоже эти символы не теряются
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача маркировки товара в драйвер ККМ Штрих-М
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]