forum.bitel.ru
http://forum.bitel.ru/

Получение невыгруженных счетов из биллинга.
http://forum.bitel.ru/viewtopic.php?f=14&t=10588
Страница 1 из 2

Автор:  Steper [ 05 июн 2015, 14:56 ]
Заголовок сообщения:  Получение невыгруженных счетов из биллинга.

Здравствуйте!
Для выгрузки счетов из биллинга в 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

Автор:  Steper [ 08 июн 2015, 13:13 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Неужели только собственный экшен писать?

Автор:  skn [ 08 июн 2015, 15:41 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

в хелпдеск

Автор:  vkulakov [ 08 июн 2015, 16:09 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Вы хотите сказать, что в стандартной поставке этот функционал не реализован и нужно заказывать доработку через HD?

Автор:  stark [ 08 июн 2015, 16:42 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

неизвестно , лень разбираться с этим в рамках форума.

Автор:  dimOn [ 08 июн 2015, 19:31 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

в экшене передаётся unload_type но не используется, всё верно.
почему-неизвестно. таким же образом оно и далее не используется.
для bill оно и не обновляется никогда (для invoice вроде всё полноценно работает)
по всей видимости это ошибка или лишний код (т.е. для bill сразу не предусматривалось), я записал в ближайшее время посмотреть, но если надо срочно - пишите в HD

Автор:  Steper [ 08 июн 2015, 20:07 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Всё верно, для invoice работает корректно.

Автор:  skn [ 08 июн 2015, 20:12 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

vkulakov писал(а):
Вы хотите сказать, что в стандартной поставке этот функционал не реализован и нужно заказывать доработку через HD?


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

Автор:  dimOn [ 08 июн 2015, 20:17 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Этот параметр вообще какой-то непонятный. Что где откуда и для чего он и где его концы в клиенте биллинга, и почему не доделано - неизвестно.
Возможно, его сделали когда-то именно для связи с какими-то внешними системами. Но как минимум с 2007 года его никто не трогал и никто про него не спрашивал.
Что делать с ним - непонятно. Пока думаю, что сделать надо работающий фильтр, раз он там предусмотрен и оставить заметку для дальнейших разборов.

Автор:  Steper [ 08 июн 2015, 20:33 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

На вики есть статья о том, как его выставлять, значит кто-то, да задавался) Действительно, фильтр - самый необходимый функционал для работы с ним на данный момент.

Автор:  Steper [ 08 июн 2015, 20:39 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

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

Автор:  stark [ 08 июн 2015, 20:54 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Steper писал(а):
На вики есть статья о том, как его выставлять, значит кто-то, да задавался) Действительно, фильтр - самый необходимый функционал для работы с ним на данный момент.

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

Автор:  stark [ 08 июн 2015, 21:04 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

А про это я вообще не понял:
Цитата:
"Данную функцию исполняет стандартный акшен: bitel.billing.server.bill.action.ActionSetPayed


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

Автор:  Steper [ 08 июн 2015, 21:11 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

stark писал(а):
А про это я вообще не понял:
Цитата:
"Данную функцию исполняет стандартный акшен: bitel.billing.server.bill.action.ActionSetPayed


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

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

Автор:  dimOn [ 08 июн 2015, 21:12 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Это ошибочная строка добавлена

Автор:  dimOn [ 08 июн 2015, 21:14 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

вы на вики отменяли сначала, обратно зачем-то вернули

Автор:  Steper [ 08 июн 2015, 21:15 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

dimOn писал(а):
вы на вики отменяли сначала, обратно зачем-то вернули

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

Автор:  dimOn [ 09 июн 2015, 13:01 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

выложится вскоре.
там значения этого параметра в экшене 1, 2, 3 если что:
Код:
    public static final int UT_NOTUNLOADED = 1;
    public static final int UT_UNLOADED = 2;
    public static final int UT_ALL = 3;

Автор:  Steper [ 09 июн 2015, 16:11 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Спасибо!

Автор:  Steper [ 16 июн 2015, 21:31 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Возник ещё один вопрос: есть необходимость загружать все невыгруженные счета, а не за какой-то определённый месяц. Но при удалении из запроса параметров "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=?)");
}

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

Автор:  dimOn [ 16 июн 2015, 22:13 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

т.е. если указать unload_status, то вываливается ошибка? вроде проверял...
завтра с утра проверю ещё раз.

Автор:  Steper [ 17 июн 2015, 12:45 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Нет, ошибка вываливается, когда НЕ указаны параметры "m" и "y" (месяц и год).

Автор:  dimOn [ 17 июн 2015, 13:29 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

нет, там перед этим кодом что вы цитировали стоит:
Код:
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 по крайней мере это безумие.

Автор:  vkulakov [ 17 июн 2015, 14:27 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Думаю, много переписывать не нужно. Можно попробовать заменить такой код:
Код:
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.

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

Автор:  Steper [ 17 июн 2015, 14:57 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Прошу прощения за настойчивость, но получение счетов без обязательной привязки к дате или хотя бы без обязательной привязке к конкретному месяцу - очень нужный и довольно разумный функционал.

Код:
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. прошу прощения за предложение с ошибкой в прошлом посте.

Автор:  dimOn [ 17 июн 2015, 15:33 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

слишком много переписывать в 6.0 - неправильно, ну вариант vkulakov теоретически возможен
именно что там получается местами лишняя скобка, т.к. не расчитывалось что не придёт ни даты ни год-месяц

Автор:  vkulakov [ 17 июн 2015, 16:49 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

А зачем тогда проверки для yy и mm, если не расчитывалось, что они не придут???

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

Автор:  Steper [ 18 июн 2015, 16:12 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Ребят, ну серьёзно, данный баг сильно искусственно ограничивает возможности модуля. Нет возможности выгрузить счета кроме как за один конкретный месяц, в таблице куча параметров, а всё замыкается на месяце выставления. Не говоря уже о том, что при отсутствие параметра выскакивает эксепшен, который никак не обрабатывается, несмотря на то, что проверка этого параметра присутствует.

Автор:  stark [ 18 июн 2015, 16:52 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Исправлено. будет в следующем обновлении.

Автор:  dimOn [ 19 июн 2015, 15:39 ]
Заголовок сообщения:  Re: Получение невыгруженных счетов из биллинга.

Цитата:
данный баг сильно искусственно ограничивает возможности модуля
Это даже близко не является багом. Вы просто используете экшен способом, которым не предусматривалось

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/