Как сформировать чек коррекции Атол ДТО10

Опубликовано Valery - чт, 06/16/2022 - 20:15


Алгоритм выполнения скрипта в ДТО10

Так как я довольно часто сталкиваюсь с такими операциями, как коррекция чека, то пришел к золотому решению - делать чек коррекции полностью контролируемым. Все дело в том, что ДТО (тест драйвера торгового оборудования) не всегда корректно отрабатывает данную операцию - точнее, где нибудь, но забудешь галочку поставить, или тип операции выбрать. Особенно, если этих самых, чеках коррекций надо сделать много.

При неправильно сформированном чеке коррекции отменить его уже невозможно, то есть права на ошибку нет. Поэтому более правильно будет самостоятельно контролировать операцию формирования чека коррекции - это позволит избежать ошибок (недочетов).

Предлагаемый вариант - это скрипт, он прозрачен и понятен, поэтому гораздо более удобен, чем если формировать чек коррекции на вкладке "Чек". Скрипт для формирования чека коррекции запускаем со вкладки "Скрипты драйвера". Скрипт был найден на просторах интернета, а значит 100% гарантии, что он гарантировано удовлетворяет требования ФНС/ФФД - нет, однако даже опытный инспектор ФНС вряд ли сможет сказать как правильно сделать чек коррекции, поэтому будем полагаться на собственный вариант прочтения ФФД.

Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();
Fptr.setParam(1178, new Date("2021-09-01T00:00:00"));
Fptr.setParam(1177, "Служебная записка");
Fptr.utilFormTlv();
correctionInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE); Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL_CORRECTION);
Fptr.setParam(1173, 0);
Fptr.setParam(1174, correctionInfo);
Fptr.openReceipt();
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_NO);
Fptr.registration();
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH); Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_SUM, 1.00);
Fptr.payment();
Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 1.00);
Fptr.receiptTotal();
Fptr.closeReceipt();


Результат выполнения скрипта для прошивки 7942 (ФФД 1.05) и ДТО 10.9.0.5

Для прошивки 7942 (ФФД 1.05) и ДТО 10.9.0.5 получится вот такой результат и соответственно, тест драйвера возвращает такую ошибку [148] Ошибка программирования реквизита 1174 (Неверный формат команды). Что вполне логично, ибо тег 1174 не заполнен полностью. Тут три варианта решения проблемы: - обновить прошивку ККТ Атол до 5.8.20, - откатить ДТО на 10.8.1.0 или ниже, - добавить в скрипт полностью заполненный тег 1174 , то есть добавить строку Fptr.setParam(1179, "0");

Рабочий вариант вышеприведенного скрипта для ФФД 1.05 прошивки 7942 и ДТО 10.9.0.5 - будет выглядеть так:

Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();
Fptr.setParam(1178, new Date("2021-09-01T00:00:00"));
Fptr.setParam(1177, "Служебная записка");
Fptr.setParam(1179, "0");
Fptr.utilFormTlv();
correctionInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE); Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL_CORRECTION);
Fptr.setParam(1173, 0);
Fptr.setParam(1174, correctionInfo);
Fptr.openReceipt();
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_NO);
Fptr.registration();
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH); Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_SUM, 1.00);
Fptr.payment();
Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 1.00);
Fptr.receiptTotal();
Fptr.closeReceipt();

Результатом выполнения скрипта, станет вот такой чек


Результат выполнения исправленного скрипта для прошивки 7942 (ФФД 1.05) и ДТО 10.9.0.5

Теги