Цитата: 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, в чеке [М+]