forum.bitel.ru http://forum.bitel.ru/ |
|
API для добавления прихода к договору (CRM) http://forum.bitel.ru/viewtopic.php?f=19&t=9443 |
Страница 1 из 2 |
Автор: | Mikola [ 15 июл 2014, 17:21 ] |
Заголовок сообщения: | API для добавления прихода к договору |
Судя по описанию bitel.billing.server.contract.bean.BalanceUtils нет возможности добавлять приход. Единственное что приходит в голову это обновление таблици contract_balance. Каким образом добавить приход к договору используя API BGBilling? |
Автор: | Phricker [ 15 июл 2014, 17:23 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
PaymentManager |
Автор: | stark [ 15 июл 2014, 17:53 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
Для какой версии ? Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils Вот тут есть пример. Только там еще нужно событие кинуть в конце Код: EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) ); EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) ); В 6.1 желательно уже по-другому делать. |
Автор: | skyb [ 15 июл 2014, 18:56 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
stark писал(а): Для какой версии ? так для 6.1 желательно с примерами
Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils Вот тут есть пример. Только там еще нужно событие кинуть в конце Код: EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) ); EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) ); В 6.1 желательно уже по-другому делать. |
Автор: | Phricker [ 15 июл 2014, 19:11 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
viewtopic.php?p=76033#p76033 |
Автор: | stark [ 15 июл 2014, 22:22 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
Phricker писал(а): http://forum.bitel.ru/viewtopic.php?p=76033#p76033 Нет..я имел ввиду вообще добавлять платеж через Web-сервис и думать об всех этих утилсах и событиях, пусть само внутри делается. |
Автор: | Phricker [ 15 июл 2014, 22:23 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
А тогда пример ))) Что-то на ночь глядя не соображу. |
Автор: | stark [ 15 июл 2014, 22:26 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): ]так для 6.1 желательно с примерами http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html Метод paymentUpdate. |
Автор: | Mikola [ 16 июл 2014, 10:29 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
stark писал(а): Для какой версии ? Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils Вот тут есть пример. Только там еще нужно событие кинуть в конце Код: EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) ); EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) ); В 6.1 желательно уже по-другому делать. Используем версию 6.0. Спасибо! То, что доктор прописал! |
Автор: | skyb [ 16 июл 2014, 15:29 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
stark писал(а): skyb писал(а): ]так для 6.1 желательно с примерами http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html Метод paymentUpdate. а, просто методы изменились? |
Автор: | stark [ 16 июл 2014, 17:01 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): stark писал(а): skyb писал(а): ]так для 6.1 желательно с примерами http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html Метод paymentUpdate. а, просто методы изменились? Нет ..Это новый сервис, его не было в 6.0. Теперь платеж можно добавить так: Код: ServerContext context = ServerContext.get(); PaymentService paymentService = context.getService( PaymentService.class, INET_MODULE_ID ); Payment payment = new Payment(); .... paymentService.updatePayment( payment, null); И не нужны никакие PaymentManager, BalanceUtils и EventProcessor. Теперь это все внутри само делается. |
Автор: | skyb [ 11 мар 2015, 08:01 ] | ||
Заголовок сообщения: | Re: API для добавления прихода к договору | ||
что то не заводится Код: ServerContext context = ServerContext.get(); PaymentService paymentService = context.getService( PaymentService.class, 0 ); Payment p = new Payment(); p.setContractId(contract.getId()); p.setComment("Создан автоматически системой, при создании договора"); p.setTypeId(6); p.setUserId(0); p.setSum(new BigDecimal (balance)); paymentService.updatePayment(p, null); Код: Сервер: вер. 6.1.1044 / 27.02.2015 16:23:14
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_80-ea
|
Автор: | stark [ 11 мар 2015, 12:59 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): что то не заводится Код: ServerContext context = ServerContext.get(); PaymentService paymentService = context.getService( PaymentService.class, 0 ); Payment p = new Payment(); p.setContractId(contract.getId()); p.setComment("Создан автоматически системой, при создании договора"); p.setTypeId(6); p.setUserId(0); p.setSum(new BigDecimal (balance)); paymentService.updatePayment(p, null); Код: Сервер: вер. 6.1.1044 / 27.02.2015 16:23:14 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_80-ea Потому что такого метода нет. Есть такой. |
Автор: | skyb [ 12 мар 2015, 10:44 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
а можно примером, а то чет всеравно не взлетает ![]() |
Автор: | stark [ 12 мар 2015, 11:42 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): а можно примером, а то чет всеравно не взлетает ![]() что именно не взлетает ? Ошибка какая-то выдается ? Какая ? |
Автор: | dimOn [ 12 мар 2015, 13:23 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): а то чет всеравно не взлетает по предоставленной информации можно скзать - что-то неправильно делаете
![]() |
Автор: | skyb [ 12 мар 2015, 13:52 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
Код: ServerContext context = ServerContext.get(); PaymentService paymentService = context.getService( PaymentService.class, 0 ); Payment p = new Payment(); p.setContractId(contract.getId()); p.setComment(""); p.setTypeId(6); p.setUserId(0); p.setSum(new BigDecimal (balance)); java.util.List<java.lang.Integer> pmt = paymentService.paymentUpdate(p, null); Чет мне здается я херню какую то пишу |
Автор: | skn [ 12 мар 2015, 13:58 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
и что этот код выдает? |
Автор: | dimOn [ 12 мар 2015, 14:22 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
На каждый вопрос нужно задавать несколько дополнительных вопросов чтоле? Что не работает то? Стектрейс где? |
Автор: | Phricker [ 12 мар 2015, 14:44 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
Вложение:
|
Автор: | skyb [ 12 мар 2015, 20:26 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
платеж добавился, спасибо старку, так же он сказал как правильно подавать инфу, я ж как, че сказали (когда не знаю) то и делаю. всем спасибо |
Автор: | skyb [ 02 апр 2015, 13:23 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
не закончили ))) Код: import bitel.billing.common.TimeUtils; import bitel.billing.server.contract.ContractRemover; import bitel.billing.server.contract.bean.Contract; import bitel.billing.server.contract.bean.ContractManager; import bitel.billing.server.contract.bean.ContractParameterManager; import bitel.billing.server.contract.bean.ContractPattern; import bitel.billing.server.contract.bean.ContractPatternManager; import bitel.billing.server.contract.bean.ContractTariff; import bitel.billing.server.contract.bean.ContractTariffManager; import bitel.billing.server.contract.bean.PaymentManager; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.contract.balance.common.PaymentService; import ru.bitel.bgbilling.kernel.contract.balance.common.bean.Payment; import ru.bitel.bgbilling.kernel.event.EventProcessor; import ru.bitel.bgbilling.kernel.event.events.ContractTariffUpdateEvent; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.kernel.tariff.server.event.ContractTariffChangedEvent; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import bitel.billing.server.phone.bean.ClientItem; import bitel.billing.server.phone.bean.ClientItemManager; import bitel.billing.server.util.PswdGen; import bitel.billing.server.voiceip.bean.VoiceIpLoginManager; import bitel.billing.server.voiceip.bean.VoiceIpLogin; import java.util.Set; import java.util.HashSet; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.sql.ResultSet; import java.sql.Statement; public class schedulerBase extends GlobalScriptBase { @Override public void execute(Setup setup1, ConnectionSet connectionSet2) throws Exception { int parent = 2;// категория ресурса предка int source = 1;// код источника int Tcid = -1; int VOICEIP_MID = 3; String hostname = ""; String port = ""; String username = ""; String password = ""; String dbname = ""; Connection con = connectionSet2.getConnection(); ContractManager cm = new ContractManager(con); ClientItemManager cim = new ClientItemManager(con, 5); Setup setup = Setup.getSetup(); ServerContext context = new ServerContext(setup, 5, 0); ContractTariffManager ctm = new ContractTariffManager(con); ContractParameterManager cpm = new ContractParameterManager(con); Calendar calndar = Calendar.getInstance(); Class.forName("org.postgresql.Driver"); Connection c = DriverManager.getConnection("jdbc:postgresql://" + hostname + ":" + port + "/" + dbname, username, password); c.setAutoCommit(false); System.out.println("Opened database successfully"); Statement stmt = c.createStatement(); String query = "SELECT notification_id, status, tariff_id, template_id, balance, billing_lock_datetime, contract_number, number FROM billing.notification WHERE status = 'N'"; ResultSet rs = stmt.executeQuery(query); while (rs.next()) { int id = rs.getInt(1); String status = rs.getString(2); int tariff_id = rs.getInt(3); //int tariff_id = 7; int template_id = rs.getInt(4); //int template_id = 3; BigDecimal balance = rs.getBigDecimal(5); // BigDecimal balance = new BigDecimal ("23"); Date billing_lock_datetime = rs.getTimestamp(6); String contract_number = rs.getString(7); String number = rs.getString(8); // int person_id = rs.getInt(6); int person_id = 1; ContractPattern pattern = new ContractPatternManager(con) .getPattern(template_id); System.out.println("ID = " + id); System.out.println("status = " + status); System.out.println("tariff_id = " + tariff_id); System.out.println("template_id = " + template_id); System.out.println("balance = " + balance); System.out.println("billing_lock_datetime = " + billing_lock_datetime); System.out.println("contract_number = " + contract_number); System.out.println("number = " + number); System.out.println(""); Statement uStmt = c.createStatement(); Statement dStmt = c.createStatement(); Contract contract = cm.createFromPattern(template_id, ContractPatternManager.getContractTitle(con, pattern, calndar), calndar, PswdGen.generatePassword(7, "0123456789")); cpm.updateStringParam(contract.getId(), VATS_ID, Integer.toString(person_id), 0); if (balance != null) { print("debug after if != null balance " + balance); ServerContext contextb = ServerContext.get(); PaymentService paymentService = contextb.getService( PaymentService.class, 0); Payment p = new Payment(); p.setContractId(contract.getId()); p.setComment("Создан автоматически системой, при создании договора"); p.setTypeId(6); p.setUserId(0); p.setDate(new Date()); p.setSum(balance); java.util.List<java.lang.Integer> pmt = paymentService.paymentUpdate(p, null); print("balance update " + balance); } print("title " + contract.getTitle() + "\n"); int cid = contract.getId(); // int cid = 1; String update_status = "UPDATE notification SET status = 'P' WHERE notification_id = " + id; String uBilling_lock_datetime = "UPDATE notification SET billing_lock_datetime = '" + TimeUtils.convertDateToTimestamp(new Date()) + "' WHERE notification_id = " + id; String uContract_number = "UPDATE notification SET contract_number = '" + contract.getTitle() + "' WHERE notification_id = " + id; uStmt.executeUpdate(update_status); uStmt.executeUpdate(uBilling_lock_datetime); uStmt.executeUpdate(uContract_number); c.commit(); String setNumber = " SELECT cid, nru.date2 FROM number_resource_5 AS nr " + " LEFT JOIN number_resource_use_5 AS nru ON nru.resource_id = nr.id " + " WHERE (nru.date2 IS NULL OR nru.date2 < NOW()) AND number = '"+number+"'"; PreparedStatement contractPs = con.prepareStatement(setNumber); ResultSet contractRs = contractPs.executeQuery(); while (contractRs.next()) { Tcid = contractRs.getInt(1); Date date2 = contractRs.getDate(2); print ("Tcid " + Tcid); if (Tcid > 0 && date2 != null ) { ClientItem newPhone = new ClientItem(); newPhone.setContractId(contract.getId()); newPhone.setDate1(calndar); newPhone.setType(1); newPhone.setSourceId(1); ArrayList<String> phoneNumber = new ArrayList<String>(); phoneNumber.add(number); newPhone.setClientNumbers(phoneNumber); cim.realUpdate(0, newPhone, true, context, true ); cim.updateClientItem(newPhone); // создание логина voiceip VoiceIpLoginManager lm = new VoiceIpLoginManager(con, VOICEIP_MID); VoiceIpLogin login = new VoiceIpLogin(); login.setCid( contract.getId() ); login.setStatus( true ); login.setPswd( "" ); login.setDate1( calndar.getTime() ); login.setComment( "" ); login.setType(1); // login = lm.addLogin( login, Setup.getSetup().getModuleSetup( VOICEIP_MID ) ); //установка алиаса Set aliases = new HashSet(); aliases.add( number + "-100" ); lm.updateAliases( login.getId(), aliases ); print("phone add "); } else if (Tcid <= 0 ) { ClientItem newPhone = new ClientItem(); newPhone.setContractId(contract.getId()); newPhone.setDate1(calndar); newPhone.setType(1); newPhone.setSourceId(1); ArrayList<String> phoneNumber = new ArrayList<String>(); phoneNumber.add(number); newPhone.setClientNumbers(phoneNumber); cim.realUpdate(0, newPhone, false, context, true ); cim.updateClientItem(newPhone); // создание логина voiceip VoiceIpLoginManager lm = new VoiceIpLoginManager(con, VOICEIP_MID); VoiceIpLogin login = new VoiceIpLogin(); login.setCid( contract.getId() ); login.setStatus( true ); login.setPswd( "" ); login.setDate1( calndar.getTime() ); login.setComment( "" ); login.setType(1); // login = lm.addLogin( login, Setup.getSetup().getModuleSetup( VOICEIP_MID ) ); //установка алиаса Set aliases = new HashSet(); aliases.add( number + "-100" ); lm.updateAliases( login.getId(), aliases ); print("phone add "); } else if (Tcid > 0 && date2 == null) { print("Ошибка, номер занят "); } } java.util.List<java.lang.String> ltp = pattern.getTariffPlanList(); print("Befor TP " + ltp); if (ltp == null || ltp.isEmpty()) { print("TP "); ContractTariff t = new ContractTariff(); t.setContractId(cid); t.setDate1(calndar); t.setTariffPlanId(tariff_id); t.setComment("Тариф назначился скриптом при создании договора в" + new Date()); ctm.updateContractTariff(t); EventProcessor.getInstance().publishAfterCommit( new ContractTariffUpdateEvent(0, cid, t, true)); EventProcessor.getInstance().publishAfterCommit( new ContractTariffChangedEvent(cid)); } ContractRemover cr = new ContractRemover(setup1, con, null); //cr.deleteContract(cid); String update_status_down = "UPDATE notification SET status = 'D' WHERE notification_id = " + id; dStmt.executeUpdate(update_status_down); c.commit(); dStmt.close(); System.out.println("balance = " + balance); rs.close(); stmt.close(); c.close(); System.out.println("Operation done successfully"); } } ошибка вылетает такая Код: 04-02/09:51:04 INFO [pool-2-thread-1] CommonKernelEventProcessor - Process event cid:0; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 0; scid: -1; userId: 0; timestamp: 1427957464415 04-02/09:51:04 INFO [pool-2-thread-1] CommonKernelEventProcessor - Process event cid:279; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 279; scid: -1; userId: 0; timestamp: 1427957464454 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Can't call commit when autocommit=true 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.contract.balance.server.PaymentServiceImpl.paymentUpdate(PaymentServiceImpl.java:241) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.firstTelecom.global.schedulerBase.execute(schedulerBase.java:147) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:88) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:55) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:76) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at java.lang.Thread.run(Thread.java:745) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - Caused by: java.sql.SQLException: Can't call commit when autocommit=true 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:925) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:922) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1741) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.commit(PoolGuardConnectionWrapper.java:74) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.contract.balance.server.PaymentServiceImpl.paymentUpdate(PaymentServiceImpl.java:218) 04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - ... 9 more 04-02/09:51:04 INFO [pool-2-thread-1] GlobalScriptTimer - Task finished time=121 ms. падает вот тут Код: java.util.List<java.lang.Integer> pmt = paymentService.paymentUpdate(p, null);
|
Автор: | dimOn [ 02 апр 2015, 13:29 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
c.commit(); там же написано англицским по белому зачем там коммиты то? блин у меня половина сообщения пропала ![]() |
Автор: | skyb [ 02 апр 2015, 13:32 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
dimOn писал(а): нет полагаю вот здесь: c.commit(); там же написано англицским по белому зачем там коммиты то? так а в начале написано c.setAutoCommit(false); записывать изменения нехотел если нет комитов |
Автор: | dimOn [ 02 апр 2015, 13:40 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
так не для того коннекшена ругается же, непонятно пока. autocommit=true ставится для родного коннекшена как раз, тока непонятно кто его коммитит суммон Amir |
Автор: | skyb [ 02 апр 2015, 13:44 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
dimOn писал(а): так не для того коннекшена ругается же, непонятно пока. autocommit=true ставится для родного коннекшена как раз, тока непонятно кто его коммитит суммон Amir комит закоментил, ошибка та же |
Автор: | dimOn [ 02 апр 2015, 13:46 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
да не в нём дело, возможно, нопейсал уже. |
Автор: | stark [ 02 апр 2015, 14:16 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
Из планировщика падает. Комитим мы его сами в сервисе, а в планировщике атокомит включен. Подумаем что с этим делать. Если бы по событию этот скрипт запускался или вручную, то проблемы бы не было. Проблема именно в планировщике. Можно как вариант эту задачу поправить так чтобы они con-он с autocommit =false передавала. Наверное так и исправим, чтобы работало как при запуске глобального скрипта вручную. Правда боязно за вас, вы там в скриптах наворотите, а комиттов ставить не будете и там будут большие транзакции, которые будут вызывать deadlock-и на mysql. Представленный скрипт, кстати, яркий пример этого, тут никто не вызывает у нашего connection-а commit и все 100500 договоров создавать будет в одной транзакции(хотя в данном случае paymentUpdate будет комитить как раз ![]() |
Автор: | skyb [ 02 апр 2015, 17:44 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
stark а подскажи что делать в данном скрипте чтоб он заработал? а то он не работает толком |
Автор: | stark [ 03 апр 2015, 00:25 ] |
Заголовок сообщения: | Re: API для добавления прихода к договору |
skyb писал(а): stark а подскажи что делать в данном скрипте чтоб он заработал? а то он не работает толком пока ничего, проблема с нашей стороны..Как исправим - надо крипт оптимизировать(пока можно начать рефакторинга и вытащить общий код в функцию, чтобы потом в нескольких местах не исправлять). |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |