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

Ошибка 409 [Некорректный код маркировки] : Маркировка

23.11.2024 3:36


26.06.2024 15:57
Цитата:
me722 Чек первый с маркировкой на кассе? Фискальный накопитель новый? Обновите ключи проверки ФН. Можно прям из драйвера.
Чек первый. Фискальник - МГМ
26.06.2024 16:00
Цитата:
me722 В первом логе попытка проверки при уже запущенной проверке. Как следствие не добавляется код в таблицу.
В тест драйвере отменяю проверку. Потом в своей программе запускаю проверку. Всё равно в лог сыпется ошибка "401 [Процедура проверки КМ уже запущена]"
Если в тест драйвере отменяю проверку, потом делаю "Начать проверку", то всё проходит нормально. В моей программе не пойму почему не запускается проверка.

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_PROCESSING_MODE, 0);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_SEND_TO_SERVER, false);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_FORM_REQUEST, false);

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

// isRequestSent = fptr.getParamBool(IFptr.LIBFPTR_PARAM_IS_REQUEST_SENT); // КМ был отправлен на сервер bool
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
RaiseException(
CustomException.Create(
'Товар '+IntToStr(check[i].GetGoods().GetId())+' не прошёл проверку в Честном знаке. Замените товар.'#13+
'Описание ошибки: ' + errorDescription
)
);
end;
fptr.acceptMarkingCode;
26.06.2024 19:59
Цитата:
nikolasiii В тест драйвере отменяю проверку. Потом в своей программе запускаю проверку. Всё равно в лог сыпется ошибка "401 [Процедура проверки КМ уже запущена]"
Если в тест драйвере отменяю проверку, потом делаю "Начать проверку", то всё проходит нормально. В моей программе не пойму почему не запускается проверка.

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_PROCESSING_MODE, 0);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_SEND_TO_SERVER, false);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_FORM_REQUEST, false);

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

// isRequestSent = fptr.getParamBool(IFptr.LIBFPTR_PARAM_IS_REQUEST_SENT); // КМ был отправлен на сервер bool
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
RaiseException(
CustomException.Create(
'Товар '+IntToStr(check[i].GetGoods().GetId())+' не прошёл проверку в Честном знаке. Замените товар.'#13+
'Описание ошибки: ' + errorDescription
)
);
end;
fptr.acceptMarkingCode;
Попробуйте у себя в самом начале перед проверкой тоже сделать cancel_marking_code_validation, как в драйвере.
fptr.cancelMarkingCodeValidation()

Правка: me722, 26.06.2024 20:02
26.06.2024 20:29
уже пробовал. не помогает.
26.06.2024 20:57
Цитата:
nikolasiii уже пробовал. не помогает.
А можно ещë раз попробовать и лог приложить. Интересно, в чëм ошибка.
И можно значение Вашей переменной timeout

Правка: me722, 26.06.2024 21:05
27.06.2024 14:04
Добрый день дорогие форумчане!
У меня всё получилось.
Большое спасибо всем за участие.
Формат КМ: 0102900001398183215;yD0VzGfDGOj<#$1D>91FFD0<#$1D>92dGVzdK9sDt9fdiOmOBn+z9JbU9YVVCaqLT7kYOhrVgw=
где <#$1D> это разделитель GS (29 или 1D)
В кассовом аппарате ничего не делал.
status 1 - при реализации; 3 - при возврате.

Этот код вставляется первым, до инициализации тегов, связанных с товаром

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_PROCESSING_MODE, 0);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_SEND_TO_SERVER, false);
fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_NOT_FORM_REQUEST, false);

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
if validationResult <> 15
then begin
RaiseException(
CustomException.Create(
'Товар '+IntToStr(checkPos.GetGoods().GetId())+' не прошёл проверку в Честном знаке. Замените товар.'#13+
'Описание ошибки: ' + errorDescription
)
);
end;

fptr.acceptMarkingCode;
27.06.2024 14:07
Цитата:
me722 А можно ещë раз попробовать и лог приложить. Интересно, в чëм ошибка.
И можно значение Вашей переменной timeout
timeout = 60
В логе код успешно проходил проверку.
Он удалялся из таблицы КМ. До сих пор сомнительно понимаю как это дело всё работает. Но на данном этапе заработало.
Часовой пояс GMT +3, время: 03:36.

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