Форум OlegON > Программы и оборудование для автоматизации торговли > Маркировка

При чтении программой на Delphi неправильный код : Маркировка

21.11.2024 22:56


25.02.2023 11:25
Всем привет.
Возникла проблема.
Проверка кода маркировки возвращает 5.
Код какой читается сканером: '0104607042503221215iRJYR930GA+'
Код какой отправляется: mark := '0104607042503221215iRJYR' + #29 + '930GA+';
Сам код написан на Delphi и взят из мануала, и с кодом из мануала всё проверка проходит.
Где изъян?
Буду благодарен любому совету.

Кусок кода:
// Запускаем проверку КМ
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE_TYPE, KKM.LIBFPTR_MCT12_AUTO);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE, mark);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
KKM.setParam(KKM.LIBFPTR_PARAM_QUANTITY, 1.000);
KKM.setParam(KKM.LIBFPTR_PARAM_MEASUREMENT_UNIT, KKM.LIBFPTR_IU_PIECE);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
KKM.beginMarkingCodeValidation;

// Дожидаемся окончания проверки и запоминаем результат
while True do
begin
KKM.getMarkingCodeValidationStatus;
if KKM.getParamBool(KKM.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) then
break;
end;
validationResult := KKM.getParamInt(KKM.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);
25.02.2023 11:34
sT; // Результат // KKM.sE := Result; KKM.sE := 5;

Проблема может быть в том, что отправляемый код не соответствует тому, что вводится сканером. Убедитесь, что оба кода полностью совпадают, и попробуйте еще раз.
Если это не помогло, проанализируйте код, который используется для проверки. Возможно, вы допустили программную ошибку. Возможно, для проверки КМ нужно добавить дополнительные проверки, такие как проверка формата кода, валидация цифр и т. д.
25.02.2023 11:46
Написано чуть больше, чем ничего... что это за объект такой KKM? Где код на Delphi, который калечит штрихкод?
Вот еще для затравки: https://olegon.ru/showthread.php?t=35162
25.02.2023 12:19
Цитата:
OlegON Написано чуть больше, чем ничего... что это за объект такой KKM? Где код на Delphi, который калечит штрихкод?
Я весь код писать не буду, ибо он длинный , а инициализация проходит и печать чека тоже. Не проходит только проверка.

var
KKM : OleVariant;
mark, mark0, mark1 : String;
validationResult : Integer;

Begin
KKM := CreateOleObject('AddIn.Fptr10'); // было FPrnM45

//mark := '0104607042503221215iRJYR930GA+'; - код, какой считался с упаковки сканером. Спецсимволов нет
//На самом деле он со спец символами, и выглядит <GS>0104607042503221215iRJYR<GS>930GA+ (считано смартфоном)

// Вот так его преобразую
mark0 := Copy(mark, 1, 24);
mark1 := Copy(mark, 25, 6);
mark := mark0 + #29 + mark1;

status := 2;

// Запускаем проверку КМ
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE_TYPE, KKM.LIBFPTR_MCT12_AUTO);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE, mark);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
KKM.setParam(KKM.LIBFPTR_PARAM_QUANTITY, 1.000);
KKM.setParam(KKM.LIBFPTR_PARAM_MEASUREMENT_UNIT, KKM.LIBFPTR_IU_PIECE);
KKM.setParam(KKM.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
KKM.beginMarkingCodeValidation;

// Дожидаемся окончания проверки и запоминаем результат
while True do
begin
KKM.getMarkingCodeValidationStatus;
if KKM.getParamBool(KKM.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) then
break;
end;
// Тут получаем 5, вместо 15
validationResult := KKM.getParamInt(KKM.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);

// Подтверждаем реализацию товара с указанным КМ
KKM.acceptMarkingCode;


В логе драйвера код выглядит так:
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] < LIBFPTR_PARAM_JSON_DATA (65645) = ""
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = 256
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104607042503221215iRJYR930GA+"
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = 2
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_MEASUREMENT_UNIT (65851) = 0
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2023.02.25 13:08:40.963 T:000074EC INFO [FiscalPrinter] libfptr_begin_marking_code_validation()

В результате в чеке [M-]

На этом же форуме смотрел аналогичный лог: https://olegon.ru/showthread.php?t=37674
Там Marking_code похож на мой (тоже 31 символ)
2022.12.21 12:00:07.468 T: T:00000578 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104607098562449215lPNir93gur7"
Но у него возвращает 15.

Если поставить код из мануала mark := '014494550435306821QXYXSALGLMYQQ' + #29 + '91EE06' + #29 + '92YWCXbmK6SN8vvwoxZFk7WAY8WoJNMGGr6Cgtiuja04c=';
то всё проходит. validationResult = 15, в чеке [М+]
25.02.2023 12:32
Посмотри, я выше ссылку привел... Думаю, это оно.
25.02.2023 12:41
Вот если есть код 0104607005273284215!!bIz93LfNw,
я его преобразую в код: 0104607005273284215!!bIz<GS>93LfNw
И именно этот преобразованный
25.02.2023 12:46
Или к этому коду надо добавить ещё что-то? По мануалу код ни разу не 31 символ.
Вот такой.
'014494550435306821QXYXSALGLMYQQ' + #29 + '91EE06' + #29 + '92YWCXbmK6SN8vvwoxZFk7WAY8WoJNMGGr6Cgtiuja04c=';
А у молочки он:
'0104607098562449215lPNir' + #29 + '93gur7'
25.02.2023 13:12
Цитата:
gr1047 я его преобразую в код: 0104607005273284215!!bIz<GS>93LfNw
И именно этот преобразованный
не надо преобразовывать - используй как есть если GS1 есть в марке, если нет то вставляй сам GS1 но не как <GS> а именно как символ
25.02.2023 13:14
А может это быть это связано с тем что ЧЗ у нас тестовый контур?
25.02.2023 13:16
Цитата:
student не надо преобразовывать - используй как есть если GS1 есть в марке, если нет то вставляй сам GS1 но не как <GS> а именно как символ
Так и делаю. И нифига. Возвращает всё равно 5.
Часовой пояс GMT +3, время: 22:56.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.