BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2024, 00:44

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 05 июн 2015, 14:56 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Здравствуйте!
Для выгрузки счетов из биллинга в 1с использую bitel.billing.server.bill.action.ActionBill
После выгрузки в таблице bill_data планирую ставить у счёта unload_status = 1 (как я понял этот параметр для этого создан)
Так, вот, подскажите, пожалуйста, можно как-нибудь выгружать счета, у которых unload_status = 0(только те, которые раньше не выгружались), дабы не передавать и не парсить очень большую XML? В самом ActionBill принимается некий параметр из запроса unloadType. Но далее он нигде не применяется и его передача в запросе никак не влияет на результат.
Подскажите, пожалуйста, как быть?

Клиент: вер. 6.0 сборка 1380 от 14.05.2015 13:24:14


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 13:13 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Неужели только собственный экшен писать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 15:41 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
в хелпдеск


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 16:09 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Вы хотите сказать, что в стандартной поставке этот функционал не реализован и нужно заказывать доработку через HD?

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 16:42 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
неизвестно , лень разбираться с этим в рамках форума.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 19:31 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
в экшене передаётся unload_type но не используется, всё верно.
почему-неизвестно. таким же образом оно и далее не используется.
для bill оно и не обновляется никогда (для invoice вроде всё полноценно работает)
по всей видимости это ошибка или лишний код (т.е. для bill сразу не предусматривалось), я записал в ближайшее время посмотреть, но если надо срочно - пишите в HD

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:07 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Всё верно, для invoice работает корректно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:12 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
vkulakov писал(а):
Вы хотите сказать, что в стандартной поставке этот функционал не реализован и нужно заказывать доработку через HD?


какой именно функционал?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:17 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Этот параметр вообще какой-то непонятный. Что где откуда и для чего он и где его концы в клиенте биллинга, и почему не доделано - неизвестно.
Возможно, его сделали когда-то именно для связи с какими-то внешними системами. Но как минимум с 2007 года его никто не трогал и никто про него не спрашивал.
Что делать с ним - непонятно. Пока думаю, что сделать надо работающий фильтр, раз он там предусмотрен и оставить заметку для дальнейших разборов.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:33 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
На вики есть статья о том, как его выставлять, значит кто-то, да задавался) Действительно, фильтр - самый необходимый функционал для работы с ним на данный момент.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:39 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
К стати в статье очень смущает строчка
"Данную функцию исполняет стандартный акшен: bitel.billing.server.bill.action.ActionSetPayed",
которую добавил Admin и выделил красным...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 20:54 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Steper писал(а):
На вики есть статья о том, как его выставлять, значит кто-то, да задавался) Действительно, фильтр - самый необходимый функционал для работы с ним на данный момент.

А вы спросите автора - Cromeshnic.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 21:04 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
А про это я вообще не понял:
Цитата:
"Данную функцию исполняет стандартный акшен: bitel.billing.server.bill.action.ActionSetPayed


Почему это ActionSetPayed? Это пометка счета оплаченным. Это поле в этом action-е никак не трогается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 21:11 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
stark писал(а):
А про это я вообще не понял:
Цитата:
"Данную функцию исполняет стандартный акшен: bitel.billing.server.bill.action.ActionSetPayed


Почему это ActionSetPayed? Это пометка счета оплаченным. Это поле в этом action-е никак не трогается.

Так и я о том же... А автор этой строки Admin...


Последний раз редактировалось Steper 08 июн 2015, 21:13, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 21:12 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Это ошибочная строка добавлена

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 21:14 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
вы на вики отменяли сначала, обратно зачем-то вернули

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 июн 2015, 21:15 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
dimOn писал(а):
вы на вики отменяли сначала, обратно зачем-то вернули

Я новичок тут, смотрю - ерунда написана - убрал, потом посмотрел - админ писал, подумал, может чего я не понимаю, отменил :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 июн 2015, 13:01 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
выложится вскоре.
там значения этого параметра в экшене 1, 2, 3 если что:
Код:
    public static final int UT_NOTUNLOADED = 1;
    public static final int UT_UNLOADED = 2;
    public static final int UT_ALL = 3;

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 июн 2015, 16:11 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Спасибо!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 июн 2015, 21:31 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Возник ещё один вопрос: есть необходимость загружать все невыгруженные счета, а не за какой-то определённый месяц. Но при удалении из запроса параметров "m" и "y" запрос ничего не возвращает. Даже если указываю &from=14.06.2015
&until=16.06.2015&date_type=1. Такой способ вроде бы работал до обновления. Похоже, что теперь при отсутствии параметров y и m неверно формируется SQL.

P.S. Мне кажется, что если
Код:
if ((period.getDateFrom() != null) && (period.getDateTo() != null))
{
   date = "(" + tDate + ">=? AND " + tDate + "<=?)AND(";
}
   else if ((period.getDateFrom() != null) && (period.getDateTo() == null))
{
   date = "(" + tDate + ">=?)AND(";
}
   else if ((period.getDateFrom() == null) && (period.getDateTo() != null))
{
   date = "(" + tDate + "<=?)AND(";
}
query.append(date);
if ((yy > 0) && (mm >= 0))
{
   query.append("yy=? AND mm=?)");
}

поменять на
Код:
if ((period.getDateFrom() != null) && (period.getDateTo() != null))
{
   date = "(" + tDate + ">=? AND " + tDate + "<=?)";
}
   else if ((period.getDateFrom() != null) && (period.getDateTo() == null))
{
   date = "(" + tDate + ">=?)";
}
   else if ((period.getDateFrom() == null) && (period.getDateTo() != null))
{
   date = "(" + tDate + "<=?)";
}
query.append(date);
if ((yy > 0) && (mm >= 0))
{
   query.append("AND(yy=? AND mm=?)");
}

То всё должно заработать


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 июн 2015, 22:13 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
т.е. если указать unload_status, то вываливается ошибка? вроде проверял...
завтра с утра проверю ещё раз.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 12:45 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Нет, ошибка вываливается, когда НЕ указаны параметры "m" и "y" (месяц и год).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 13:29 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
нет, там перед этим кодом что вы цитировали стоит:
Код:
query.append( " WHERE (" );

это совсем неправильно:
Код:
if ((period.getDateFrom() != null) && (period.getDateTo() != null))
{
   date = "(" + tDate + ">=? AND " + tDate + "<=?)";
}
   else if ((period.getDateFrom() != null) && (period.getDateTo() == null))
{
   date = "(" + tDate + ">=?)";
}
   else if ((period.getDateFrom() == null) && (period.getDateTo() != null))
{
   date = "(" + tDate + "<=?)";
}

потому что тут собирается date, обратите внимание, а не query.
последние изменения это не сломали, я проверил ещё раз, так всегда было, потому исправляться не будет. Потому что непонятно что нужно исправить, там переписать весь огромный запрос надо, и в 6.0 по крайней мере это безумие.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 14:27 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Думаю, много переписывать не нужно. Можно попробовать заменить такой код:
Код:
if ((yy > 0) && (mm >= 0))
{
    query.append("yy=? AND mm=?)");
}

на такой
Код:
if ((yy > 0) && (mm >= 0))
{
    query.append("yy=? AND mm=?)");
} else {
    query.append("1=1)");
}

т. е., если месяц и год не указаны, то условие yy=? AND mm=? заменится на 1=1, которое всегда true.

Костыль, конечно, но никаких побочных эффектов быть не должно.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 14:57 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Прошу прощения за настойчивость, но получение счетов без обязательной привязки к дате или хотя бы без обязательной привязке к конкретному месяцу - очень нужный и довольно разумный функционал.

Код:
String date = "("; //скобки на условие с датими открываются в любом случае
String tDate;
if (dateType == 1)
{
   tDate = "create_dt";
}
else
{
   tDate = "pay_dt";
}

//далее будет добавлено условие с периодом только если указан хотябы один атрибут из запроса (&from=) или (&until=)
//соответственно строка перетирается, но скобка всё равно будет открыта "AND("
if ((period.getDateFrom() != null) && (period.getDateTo() != null))
{
   date = "(" + tDate + ">=? AND " + tDate + "<=?)AND(";
}
   else if ((period.getDateFrom() != null) && (period.getDateTo() == null))
{
   date = "(" + tDate + ">=?)AND(";
}
   else if ((period.getDateFrom() == null) && (period.getDateTo() != null))
{
   date = "(" + tDate + "<=?)AND(";
}
query.append(date); //тут добавляем наше условие к запросу
               //итого на этом этапе мы имееем или просто "WHERE ((" в случае, если нет переода
               //или WHERE ((create_dt >=? AND create_dt <=?)AND(
               // т.е. скобка в любом случае останется открыта, ожидая, что её закроет следующий if


// собственно закрываем скобку, при условии, что указан месяц и год, без указания - ошибка синтаксиса               
if ((yy > 0) && (mm >= 0))
{
   query.append("yy=? AND mm=?)");
}
// ну и соответственно далее следует код, который начинается с "AND", занчит условие какое-то должно быть обязательно, инчаче - ошибка синтаксиса


vkulakov написал простое решение, возможно можно добавить пару else if для выборки счетов только по году или месяцу, например
Код:
if ((yy > 0) && (mm >= 0))
{
    query.append("yy=? AND mm=?)");
} else if (yy > 0) {
    query.append("yy=?)");
} else if (mm >= 0) {
    query.append("mm>=?)");
} else {
    query.append("1=1)");
}


P.S. прошу прощения за предложение с ошибкой в прошлом посте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 15:33 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
слишком много переписывать в 6.0 - неправильно, ну вариант vkulakov теоретически возможен
именно что там получается местами лишняя скобка, т.к. не расчитывалось что не придёт ни даты ни год-месяц

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2015, 16:49 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
А зачем тогда проверки для yy и mm, если не расчитывалось, что они не придут???

Может исправите? Тем более в соседней ветке точно править нужно и обновление выкладывать.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 июн 2015, 16:12 
Не в сети

Зарегистрирован: 14 янв 2015, 20:50
Сообщения: 32
Карма: 0
Ребят, ну серьёзно, данный баг сильно искусственно ограничивает возможности модуля. Нет возможности выгрузить счета кроме как за один конкретный месяц, в таблице куча параметров, а всё замыкается на месяце выставления. Не говоря уже о том, что при отсутствие параметра выскакивает эксепшен, который никак не обрабатывается, несмотря на то, что проверка этого параметра присутствует.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 июн 2015, 16:52 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Исправлено. будет в следующем обновлении.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 июн 2015, 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
данный баг сильно искусственно ограничивает возможности модуля
Это даже близко не является багом. Вы просто используете экшен способом, которым не предусматривалось

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.122s | 76 Queries | GZIP : On ]