forum.bitel.ru http://forum.bitel.ru/ |
|
Безналичный платеж. Штрих-фр-к http://forum.bitel.ru/viewtopic.php?f=28&t=10229 |
Страница 1 из 1 |
Автор: | Yarlan Zey [ 26 фев 2015, 10:33 ] |
Заголовок сообщения: | Безналичный платеж. Штрих-фр-к |
Чек печатается с помощью скрипта поведения check.setPaymentType(2); check.addPayment( summa.floatValue(), "Оплата услуг ", 0 ); смена типа платежа от 1 до 4 ничего не дает (в чеке в любом случае бьется как наличные) обновление до BGCashcheckServer_6.0_350 тоже не помогло используем ru.bitel.frk.driver.shtrih2.Driver Сервер: вер. 6.0 сборка 1830 от 09.02.2015 18:40:58 ru.bitel.bgbilling.plugins.cashcheck вер. 6.0 сборка 124 от 21.08.2014 15:20:46 //свежее на сайте для 6.0 не выложено хочется печатать чеки с надписью "плат.карта" вместо "наличные" |
Автор: | zavndw [ 26 фев 2015, 11:41 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
вроде же дин кодом выводится нужный вид чеков |
Автор: | dimOn [ 26 фев 2015, 14:01 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
как я сказал уже, тип платежа задаётся однозначно через setPaymentType. полноценно сделано было в августе 2014 как раз. сервер печати должен быть не старее этой же даты. вы обновлялись BGCashcheckServer_6.0_350 НЕ до варианта _old, надеюсь ? |
Автор: | dimOn [ 26 фев 2015, 14:03 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
zavndw писал(а): вроде же дин кодом выводится нужный вид чеков там не только надпись имеет значение, там разные типы сумм считаются разными счётчиками. и безнал надо отдельно по-правильному указывать, иначе нал в кассе не сойдётся как минимум, как максимум будут проблемы с учётными органами. |
Автор: | dimOn [ 26 фев 2015, 14:04 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
Цитата: смена типа платежа от 1 до 4 ничего не дает (в чеке в любом случае бьется как наличные) тип ведь ещё внутри железки настраивается отдельно. может оно передаётся, но там настроено всё как наличное? это проверяли?
|
Автор: | Yarlan Zey [ 26 фев 2015, 14:17 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
dimOn писал(а): как я сказал уже, тип платежа задаётся однозначно через setPaymentType. полноценно сделано было в августе 2014 как раз. сервер печати должен быть не старее этой же даты. вы обновлялись BGCashcheckServer_6.0_350 НЕ до варианта _old, надеюсь ? не old вы можете глянуть есть ли в том билде этот функционал? или только в 6.1 уже? |
Автор: | dimOn [ 26 фев 2015, 15:08 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
я проверял, там точно есть, это было сделано 2014-08-18 для версий начиная с 5.2 кстати, учтите, что setPaymentType задаётся для чека, а не для позиции в чеке. т.е. если два раза зададите - используется второе указание, ну это понятно. скрипт весь вообще покажите. если у вас не динкод, а скрипт поведения - то оба (на позицию и на завершение формирования) |
Автор: | Yarlan Zey [ 26 фев 2015, 15:16 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
Код: import bitel.billing.server.util.*; import ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent; import bitel.billing.server.contract.bean.Payment; import bitel.billing.server.contract.bean.*; import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*; import ru.bitel.bgbilling.plugins.cashcheck.common.Printer; import ru.bitel.bgbilling.kernel.plugin.server.*; import ru.bitel.bgbilling.common.BGMessageException; import bitel.billing.common.BGException; import ru.bitel.bgbilling.kernel.plugin.server.BGPluginServer; import ru.bitel.billing.server.script.bean.ScriptMachineManager; import org.w3c.dom.*; import javax.servlet.http.HttpSession; import java.math.BigDecimal; import ru.bitel.frk.client.CmdProtocolClient; import java.util.Arrays; import java.util.List; import java.sql.Connection; import ru.bitel.billing.server.admin.bean.AddressUtils; /* Скрипт печати чека при добавлении платежа. Вешается на событие PaymentEvent ("приход платежа"). В данной версии отслеживается тип платежа и реакция происходит на какой-то из них. В зависимости от типа платежа печатается на определённый регистратор и определённого вида чек. Используется настройка регистратора из конфига плагина CashCheck. Также печатается только для определённых групп юзеров биллинга. Внимание: 1) очередь печати чеков игнорируется. 2) настройки маппинга платежей на принтеры из конфига плагина игнорируются. Это означает, что ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы на тот тип платежей, которые здесь печатаются автоматом в конфиге плагина НЕ БЫЛО маппинга на принтер. Иначе все эти платежи помимо распечатки тут попадут также и в очередь, будут мешаться и смогут быть повторно распечатаны. Также при добавлении прихода в клиенте биллинга нельзя ставить галочку "печатать чек", иначе печать чека будет инициирована ДВАЖДЫ. Отсутствие маппинга спасёт и в этом случае - напечатать чек по галочке (как и из очереди) станет невозможно. Скрипт написан для версии 5.0 */ /** * Здесь список всех юзеров, для которых сработает автопечать при приходе платежа. */ final static int[] USERS ={1,21}; /** * Здесь выборка принтера по типу платежа. Берутся настройки из конфига плагина. */ // параметры регистратора: номер (из конфига плагина) и пароль, заполняются в методе int FR_ID; String FR_PASS; private boolean changePrinter( int paymentTypeId ) { switch( paymentTypeId ) { case 13: FR_ID = 1; FR_PASS = "03"; return true; default: return false; } } /** * формируем объект-чек. * Добавляются сколько-то строк и одна только addPayment, ведь платёж у нас тут всегда один * и позиция, стало быть, тоже всегда одна */ private Check makeCheck( Payment payment, int paymentTypeId, Connection con ) { switch( paymentTypeId ) { case 13: BigDecimal summa = payment.getSumma(); int cid = payment.getContractID(); Check check = new Check(); check.addString( " " ); int paycode = (1000000000 + cid); //check.addString( "Телематические услуги связи(Интернет)" ); //check.addString( "Договор №: " + payment.getContractTitle() ); // догогор вытаскиваем Contract contract = new ContractManager( con ).getContractById( cid ); if( contract != null ) { check.addString( "Договор №: " + contract.getTitle() ); check.addString( "Код для оплаты в терминалах: " + paycode ); } else { check.addString( "Договор неизвестный (ошибка)" ); } // параметр вытаскиваем int PARAM_ID = 3; //ContractParameterManager bgParamMan = new ContractParameterManager( con ); //String paramVal = bgParamMan.getStringParam( cid, PARAM_ID ); //check.addString( "ФИО/Организация: "); //check.addString( paramVal ); //check.addString( " " ); check.addString( "Ваш текущий баланс: " + (new BalanceUtils( con )).getBalance( new Date(), cid ).toPlainString() ); check.setPaymentType(2); check.addPayment( summa.floatValue(), "Оплата услуг ТК Фиалка через POS-терминал", 0 ); return check; default: return null; } } public void onEvent( event, setup, con, conSlave ) { PaymentEvent paymentEvent = (PaymentEvent)event; Payment payment = paymentEvent.getPayment(); Arrays.sort( USERS ); if( Arrays.binarySearch( USERS, payment.getUserID() ) >=0 ) { print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment should be automatically printed!" ); int paymentTypeId = payment.getPaymentTypeID(); if( changePrinter( paymentTypeId ) ) { print( "CashCheck Autoprint: paymentTypeId="+paymentTypeId+", payment should be automatically printed!" ); // Получаем плагин, принтер менеджер и сам принтер пытаемся получить BGPluginServer plugin = BGPluginManagerServer.getManager().getPlugin( "ru.bitel.bgbilling.plugins.cashcheck" ); Element rootNode = null; HttpSession session = null; PrinterManager printerManager = new PrinterManager( plugin, rootNode ); Map printers = printerManager.getPrinterMap(); Printer printer = printers.get( FR_ID ); if ( printer == null ) { error( "CashCheck Autoprint: ККМ не настроен" ); return; } // код похож на тот, что в экшене печати чека, но в отличие от него тут мы // ничего не чекаем в очереди. надо озаботиться, чтобы в очередь не попадало. Check check = makeCheck( payment, paymentTypeId, con ); if( check != null ) { String clientsumma = check.getPaymentsum().toPlainString(); // запрос к серверу печати CmdProtocolClient client = new CmdProtocolClient( printer.getAddress(), printer.getPort() ); try { client.connect(); boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} ); if( result == false ) { error( "CashCheck Autoprint: Ошибка! ККМ сказала: " + client.getReply() ); return; } print( "CashCheck Autoprint: check was printed!" ); } catch( ConnectException e ) { error( "CashCheck Autoprint: Ошибка обмена с сервером печати ККМ: " + e.getMessage() ); } finally { try{client.disconnect();}catch( ConnectException e ){} } } else { print( "CashCheck Autoprint: makeCheck: paymentTypeId="+paymentTypeId+", payment NOT printed!" ); } } else { print( "CashCheck Autoprint: changePrinter: paymentTypeId="+paymentTypeId+", payment NOT printed!" ); } } else { print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment NOT printed!" ); } } висит на событии приход платежа |
Автор: | dimOn [ 26 фев 2015, 15:31 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
так, стопп. а на формирование чека нет вообще скриптов, получается? просто авто на платёж формируется чек сразу? ну в таком случае всё верно, с этого и надо было начинать, что у вас ручками формируются запросы. тип платежа передаётся вместе с суммой: Код: boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} ); -> Код: boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma + (check.getPaymentType() != -1 ? (";" + check.getPaymentType()) : ""), check.getPlines()} );
|
Автор: | Yarlan Zey [ 26 фев 2015, 15:52 ] |
Заголовок сообщения: | Re: Безналичный платеж. Штрих-фр-к |
проблема решена |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |