forum.bitel.ru http://forum.bitel.ru/ |
|
Ошибка при снятие отчета с гашением http://forum.bitel.ru/viewtopic.php?f=28&t=12550 |
Страница 1 из 1 |
Автор: | Antonavt [ 20 июл 2017, 19:02 ] |
Заголовок сообщения: | Ошибка при снятие отчета с гашением |
В данный момент при снятие отчета с гашением через биллинг получаю следующую ошибку: Код: ru.bitel.bgbilling.common.BGException: Error! KKM says: Снятие отчета прервалось at ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils.ZReport(CashCheckUtils.java:80) at CashCheckCloseDay.execute(CashCheckCloseDay.java:36) at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38) at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83) at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:109) at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:61) at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:80) at ru.bitel.bgbilling.kernel.task.server.TaskBase.startTask(TaskBase.java:141) at bitel.billing.server.task.TaskBaseRunner.executeTask(TaskBaseRunner.java:76) at bitel.billing.server.task.bean.RunTask.run(RunTask.java:47) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Отчет снимаю с помощью кода из вики При этом отчет на кассе нормально печатается и смена закрывается. После чего нормально могу заново открыть смену и печатать чеки. При снятие отчета с гашением через драйвер для работы с ККТ(Смена открывается через биллинг), смена закрывается и не отображается никаких ошибок. Может кто помочь с решением данной проблемы? |
Автор: | dimOn [ 20 июл 2017, 19:08 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
Это проблема соответствия описания в протоколе атола с реальным положением дел, уже сталкивались. Вот заметка, которую писали им и не получили ответа, может быть у вас получится: Цитата: В общем, техническая процедура там такая:
1) входим в режим 3.0 2) запускаем отчёт 3) ждём пока режим 3.2 ("Идет печать Z-отчета или контрольной ленты") не сменится на какой-то другой 4) далее проверяем что у нас сейчас состояние 7.1 ("Идет обнуление таблиц и гашение операционных регистров") если это не так - то какая-то ошибка по-любому, там есть всякие ошибки детектируются - механика, бумага итд, если ничего из этого, то пишем "Снятие отчета прервалось" Так велит протокол (и реализация 10 лет назад и по состоянию на 3.1 от 05.2017) Так вот, у вас после 3.2 судя по логам сразу становится режим 3.0, что и приводит к такой ошибке. Наверное, вам надо спросит в АТОЛе, рассказав что я выше написал. Почему так получается. В новом описании протокола добавлена такая ремарка: Если ФН переполнен, то ККТ не переходит в состояние 7.1: после состояния 3.2 идет состояние 3.0. при большом количестве сменных записей в ФН время снятия суточного отчета с гашением на некоторых ККТ может увеличиваться. Но это не ваш случай всё же. У вас нормально снимается отчёт. НО есть подозрение, что режим 7.1 просто очень быстро у вас проскакивает, наоборот, т.к. ККМ новый и быстро гасится. НО тогда описание алгоритма в протоколе некорректное, и надо бы дописать там заметку, т.к. там вообще указано "(рекомендуемая частота опроса – 2 раза / сек.)", а делается у нас даже чаще, но всё равно ВОЗМОЖНО происходит такое: - проверяется режим, видим что 3.2 - ждём ещё допустим 200 мс, в этот момент кончается режим 3.2, начинается 7.1, быстро проходит, и возвращается в 3.0 (оно туда вроде как и должно вернуться) - проверяется режим видим что не 3.2, но и не 7.1 и рисуется ошибка, хотя отчёт уже снялся давно Хотелось бы сначала услышать комментарии АТОЛа |
Автор: | Antonavt [ 21 июл 2017, 13:29 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
Понятно, спасибо за ответ. Офтопомо еще один вопрос, может кто сталкивался и решал. Касса не дает делать возвраты если не было платежей НАЛИЧНЫМИ в смену. То есть если проводить чек прихода с ЭЛЕКТРОННЫМ платежом, а потом попытаться напечатать чек возврат то касса сругается на то что в ней нет денег для возврата. Если же напечатать чек прихода с НАЛИЧНЫМ платежом, то можно печатать чеки возвратов столько сколько захочешь. У нас к примеру наличных платежей нет, есть идеи решения данной проблемы? |
Автор: | dimOn [ 23 июл 2017, 15:53 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
А возвраты электронными вообще можно делать в принципе? А для возврата вы ставите тоже тип платежа в ККМ нужный (электронный). Или вы хотите возвраты делать наличкой? Ну так нельзя кажется, потому что в протоколе там написано явно что да, должно быть достаточное кол-во денег для возврата. Но я думал это только для каждого типа оплаты отдельно считается. Ну это наверное всё же к АТОЛу тоже вопрос. |
Автор: | Antonavt [ 24 июл 2017, 10:07 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
Электронный возврат как раз начинает проходить после того как сделаешь платеж наличными. Спасибо за ответ, будем писать в атол. |
Автор: | dimOn [ 24 июл 2017, 12:57 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
тогда непонятно с этим вообще в протоколе написано, что это можно отключить, но как-то частично. вот смотрите: Цитата: О контроле наличности: При регистрации покупки ККТ производит контроль наличности, то есть должно выполняться неравенство: X <= Пр – Пк – Вз + Взп + Вн – Вп, где X ‒ размер регистрируемой покупки (расхода); Пр - сумма регистраций продаж (приходов), оплаченных наличными, за смену; Пк - сумма регистраций покупок (расходов), оплаченных наличными, за смену + промежуточная сумма текущего чека покупки (расхода); Вз сумма возвратов продаж (приходов), оплаченных наличными, за смену; Взп сумма возвратов покупок (расходов), оплаченных наличными, за смену + промежуточная сумма текущего чека покупки (расходов); Вн сумма внесений денег в кассу за смену; Вп‒ сумма выплат денег из кассы за смену. ККТ позволяет отключить эту проверку (неравенство может нарушаться) с единственным ограничением: ККТ запрещает закрывать наличными чек, в котором присутствуют регистрации без проверки наличности, если после этого нарушится неравенство (при этом в ПК включен данный чек): 0 <= Пр – Пк – Вз + Взп + Вн – Вп. [!] ККТ позволяет отключить контроль наличности только в том случае, если для типов оплаты 2, 3 и 4 настроена возможность отключения контроля наличности (смотрите Т2Р1П3 .. П5). Все сказанное о контроле наличности справедливо и для регистрации возврата. Отличие лишь в том, что: в первом выражении: X = размер регистрируемого возврата; Вз = сумма возвратов продаж, оплаченных наличными, за смену + промежуточная сумма текущего чека (возврата продажи); Взп = сумма возвратов покупок, оплаченных наличными, за смену + промежуточная сумма текущего чека (возврата покупки); во втором выражении данный чек включен не в Пк, а в Вз. тут поэтому непонятно почему при контроле наличности любого типа тут пишется везде "оплаченных наличными", зачем это так вообще делается - непотяно, это надо в АТОЛе спросить, видимо. |
Автор: | dimOn [ 24 июл 2017, 13:01 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
но вообще написано как будто речь именно для закрытия чека с типом налички. вы точно ставите нужный тип платежа для возвратов (в дин.коде, и для нового интерфейса причём)? |
Автор: | Antonavt [ 26 июл 2017, 11:41 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
Я пробовал по разному, в метод check.setPaymentType(number) подставлял следующие значения: 1. Открыл смену, ставим в приходе тип 1(наличка) то возврат с типом 1 и 2 проходит. 2. Открыл смену, ставим в приходе тип 2(электронный) то возврат с типом 1 и 2 НЕ проходит. Не совсем понял фразу Цитата: для нового интерфейса Я использовал код из примеров wiki Возник еще один вопрос про добавление в чек инфы про валюту? Код: check.addString("Валюта клиента: " + currency) Вот таким образом я конечно могу напечатать, но на сайте ОФД отображается что платежи приходят в рублях всегда(мы с помощью параметров добавили в биллинг многовалютность), это мне к ОФД нужно обращаться? |
Автор: | dimOn [ 26 июл 2017, 12:27 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
вообще непонятно, на вики вроде нет кода который может вам помочь сделать возврат давайте сначала начнём: как вы делаете возврат? не через кнопку "возврат" в админке, надеюсь? через добавление расхода/возврата на договор же? тогда там надо делать через CheckMaker, не через CheckBuilder , но через CheckBuilder он и не даст вам возврат сделать. но и на вики про CheckMaker вроде нет. это смущает. (или вы про скрипты для автоплатежей? но как тогда и к чему вы прикрутили) и дайте просто все свои дин.коды для чека |
Автор: | dimOn [ 26 июл 2017, 12:27 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
про валюты: в ККТ вообще нигде не передаётся инфа о валюте, там нет таких возможностей даже, ККТ настраивается на определённую, насколько я понимаю. если это так, то тогда это настраивается в ККТ, но, емнип, они все рублёвые, это надо потому в ОФД спросить , наверное (ИМХО, потому наверно должно быть два ККТ и по типу платежа или как-то ещё печатать на определённом,но это не точно) (ну и всё что вы пишете в addString в ОФД вообще не передаётся, на всякий случай скажу) |
Автор: | dimOn [ 26 июл 2017, 12:28 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
ну и вот это: Цитата: ставим в приходе тип 1(наличка) то возврат с типом 1 и 2 проходит как понять? в каком ещё приходе? и как вы делаете возврат приходом? upd а, кажется, понял, типа сначала приход делаете с наличкой/электронным, а потом делаете возврат ну тогда код покажите, да |
Автор: | Antonavt [ 26 июл 2017, 12:38 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
Все делаю через клиент биллинга через добавление расхода/возврата на договор. Код: Код: public class TurborenderCheck extends CheckMaker {
@Override public void addPayment(Payment payment, Check check, Printer printer) throws BGException { ParamWorker pw = new ParamWorker(_con); String customerEmail = pw.getParam(payment.getContractTitle(), "mail"); Pattern mailPattern = Pattern.compile("<(.+)>"); Matcher mailMatcher = mailPattern.matcher(customerEmail); if(mailMatcher.find()) customerEmail = mailMatcher.group(1); check.setPaymentType(2); // ставим ТИП ПЛАТЕЖА ККМ: 1 - нал, 2,3,4 - безнал или какой-то другой тип оплаты check.setTax(0); // ставим ТИП НАЛОГА ККМ: 0 - по номеру секции (в атолах), N - какой-то другой на выбор check.setOnlyElCheck(true); // "только электронный чек" check.setCustomerEmail(customerEmail); int paymentDep = 1; // отдел, используется ниже в addPayment // добавляем параметр договора //int PARAM_ID = 3; //ContractParameterManager bgParamMan = new ContractParameterManager( con ); //String paramVal = bgParamMan.getStringParam( event.getContractID(), PARAM_ID ); // check.addString( "Какой-то параметр договора: " + paramVal ); String currency = pw.getParam(payment.getContractTitle(), "currency"); if(currency == null || currency.equals("")) currency = "RUB"; check.addString("Валюта клиента: " + currency); check.addPayment(payment.getSumma(), "Оплата услуг по договору " + payment.getContractTitle(), paymentDep); } @Override public void endCreate(Set<Integer> cids, Check check, Printer printer) throws BGException { super.endCreate(cids, check, printer); } @Override public void addPaymentRefund(Payment payment, Check check, Printer printer) throws BGException { ParamWorker pw = new ParamWorker(_con); String customerEmail = pw.getParam(payment.getContractTitle(), "mail"); Pattern mailPattern = Pattern.compile("<(.+)>"); Matcher mailMatcher = mailPattern.matcher(customerEmail); if(mailMatcher.find()) customerEmail = mailMatcher.group(1); check.setPaymentType(2); // ставим ТИП ПЛАТЕЖА ККМ: 1 - нал, 2,3,4 - безнал или какой-то другой тип оплаты check.setTax(0); // ставим ТИП НАЛОГА ККМ: 0 - по номеру секции (в атолах), N - какой-то другой на выбор check.setOnlyElCheck(true); // "только электронный чек" check.setCustomerEmail(customerEmail); int paymentDep = 1; // отдел, используется ниже в addPayment // добавляем параметр договора //int PARAM_ID = 3; //ContractParameterManager bgParamMan = new ContractParameterManager( con ); //String paramVal = bgParamMan.getStringParam( event.getContractID(), PARAM_ID ); // check.addString( "Какой-то параметр договора: " + paramVal ); String currency = pw.getParam(payment.getContractTitle(), "currency"); if(currency == null || currency.equals("")) currency = "RUB"; check.addString("Валюта клиента: " + currency); check.addPayment(payment.getSumma(), "Возврат по договору " + payment.getContractTitle(), paymentDep); } @Override public void endCreateRefund(int cid, Check check, Printer printer) throws BGException { super.endCreateRefund(cid, check, printer); } } |
Автор: | dimOn [ 26 июл 2017, 16:23 ] |
Заголовок сообщения: | Re: Ошибка при снятие отчета с гашением |
ну вообще вроде всё правильно тогда у вас, вопросы к АТОЛу наверно теперь остаются только скорее всего это как-то отключается в настройках в одной из таблиц ККТ, по ним у нас нет информации подробной это можно убрать, там пустые методы просто: @Override public void endCreate(Set<Integer> cids, Check check, Printer printer) throws BGException { super.endCreate(cids, check, printer); } @Override public void endCreateRefund(int cid, Check check, Printer printer) throws BGException { super.endCreateRefund(cid, check, printer); } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |