Здравствуйте!
Не могу понять в чём дело.
В ЧЗ КМ в обороте. Пока что использую тестовый ЛК, который crptech
Код маркировки: 0102900001398183215;yD0VzGfDGOj91FFD092dGVzdK9sDt9fdiOmOBn+z9JbU9YVVCaqLT7kYOhrVgw=
Пишу программу в Delphi 2006
Код
mark := check[i].getGoods().GetMark();
if (length(mark) > 0)
then begin
if (Copy(mark,1,2) = '01') and
(Copy(mark,17,2) = '21')
then begin
status := 2;
mark := StringReplace(mark,#$1D,'',[rfReplaceAll]);
mark := copy(mark,1,31) + chr(29) + copy(mark,32,6) + chr(29) + copy(mark,38,length(mark));
// Запускаем проверку КМ
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE_TYPE, fptr.LIBFPTR_MCT12_AUTO);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
fptr.beginMarkingCodeValidation;
dtBegin := Now;
// Дожидаемся окончания проверки и запоминаем результат
while True
do begin
fptr.getMarkingCodeValidationStatus;
if fptr.getParamBool(fptr.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY)
then break;
if Now - dtBegin > timeout
then break;
end;
validationResult := fptr.getParamInt(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); // Результат проверки сведений о товаре (тег 2106) int
error := fptr.getParamInt(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_ERROR); // Ошибка онлайн проверки int
errorDescription := fptr.getParamString(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_ERROR_DESCRIPTION); // Описание ошибки онлайн проверки string
if error <> 0
then begin
fptr.declineMarkingCode;
RaiseException(
CustomException.Create(
'Товар '+IntToStr(check[i].GetGoods().GetId())+' не прошёл проверку в Честном знаке. Замените товар.'#13+
'Описание ошибки: ' + errorDescription
)
);
end;
fptr.acceptMarkingCode;
end
else mark := '';
end;
.... Добавляю инфу по товару
itemType := 1;
if deviceFfdVersion >= 120
then begin
//ед.измерения
fptr.setParam(fptr.LIBFPTR_PARAM_MEASUREMENT_UNIT, fptr.LIBFPTR_IU_PIECE); // штуки. в версии драйвера ККТ 1.2 - обязательно
addToLog('E589F79E95B04B8DBCF41719CD36F98C');
itemType := 32; // - товар не имеющий код маркировки
if (length(mark) > 0)
then begin
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
itemType := 33 // - товар имеющий код маркировки
end;
end;
// Признак предмета расчета
fptr.setParam(1212, itemType);
resCode := fptr.registration;
------------------------------------------------------------------------
В итоге получаю:
409 [Некорректный код маркировки]"