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

Получить исходящий остаток
http://forum.bitel.ru/viewtopic.php?f=19&t=9336
Страница 1 из 1

Автор:  skyb [ 09 июн 2014, 06:59 ]
Заголовок сообщения:  Получить исходящий остаток

Не могу найти возможность получить исходящий остаток, не помесячно, а самый последний. Нашел метод
Код:
public java.math.BigDecimal getBalance(java.util.Date time,
                              int cid)
Получение исходящего остатка договора на требуемый месяц, либо последний предыдущий.
Parameters:
time - месяц
cid - код договора

Но вот тут не понял
Цитата:
Получение исходящего остатка договора на требуемый месяц, либо последний предыдущий.
что это значит? и подойдет ли мне

Автор:  dimOn [ 09 июн 2014, 11:00 ]
Заголовок сообщения:  Re: Получить исходящий остаток

раз нужно за текущий месяц, то нужно указать текущий месяц

Автор:  dimOn [ 09 июн 2014, 11:00 ]
Заголовок сообщения:  Re: Получить исходящий остаток

далее всё написано: если за него не будет ещё движений, то покажется за последний предыдущий.

Автор:  skyb [ 09 июн 2014, 11:20 ]
Заголовок сообщения:  Re: Получить исходящий остаток

мне не за текущий, мне исходящий остаток у абонента нужно видеть и не важно когда было последний раз движение по балансу. А что значит "последний предыдущий"?

Автор:  Phricker [ 09 июн 2014, 12:04 ]
Заголовок сообщения:  Re: Получить исходящий остаток

Что значит не за текущий. Ты смотришь на исходящий остаток сегодня? Значит это текущий месяц.
А если за текущий месяц не было движений по балансу выведет за последний в котором было движение.

Автор:  skyb [ 09 июн 2014, 12:28 ]
Заголовок сообщения:  Re: Получить исходящий остаток

а, ну это и нада.

Автор:  skyb [ 09 июн 2014, 12:47 ]
Заголовок сообщения:  Re: Получить исходящий остаток

в вывод попадают строчки
Код:
SUM 476.35
SUM 476.35
SUM 476.35
SUM 476.35
SUM 476.35
SUM 0.00
SUM 0.00
SUM 39.78
SUM 39.78
SUM 39.78
SUM 39.78
SUM 39.78
SUM 30.10
SUM 30.10
SUM 30.10
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00
SUM 0.00

ясно понятно что это все по одному договору несколько записей, а мне нужен именно текущий исходящий остаток

Автор:  dimOn [ 09 июн 2014, 12:49 ]
Заголовок сообщения:  Re: Получить исходящий остаток

в какой ещё вывод попадают? метод возвращает один конкретный java.math.BigDecimal

Автор:  Phricker [ 09 июн 2014, 12:54 ]
Заголовок сообщения:  Re: Получить исходящий остаток

Код покажи то

Автор:  skyb [ 09 июн 2014, 12:57 ]
Заголовок сообщения:  Re: Получить исходящий остаток

Код:
public void fillReport( con, filter, bitel.billing.server.reports.BGCSVReport.ReportResult result )
{

        Calendar month = filter.getCalendarParam( "month" );
        String yyyy = TimeUtils.format ( month, "yyyy" );
        String mm = TimeUtils.format ( month, "MM" );
        BalanceUtils bu = new BalanceUtils (con);
       Date date2 = TimeUtils.convertCalendarToDate(filter.getCalendarParam( "month" ) );
       
        contractGroups = filter.getStringParam( "contractGroups" );
        PreparedStatement ps = con.prepareStatement( "SELECT c.id, c.title, c.comment, cb.summa1 + cb.summa2 - (cb.summa3 + cb.summa4), c.date2 FROM contract AS c " +
        " LEFT JOIN contract_balance AS cb ON cb.cid=c.id " +
//        " WHERE gr&(" + contractGroups + ")>0 AND cb.summa1 + cb.summa2 - (cb.summa3 + cb.summa4) > 0 AND c.date2 IS NOT NULL AND cb.yy = " + yyyy + " AND cb.mm = " + mm );
        " WHERE gr&(" + contractGroups + ")>0 AND cb.summa1 + cb.summa2 - (cb.summa3 + cb.summa4) > 0 AND c.date2 IS NOT NULL ORDER BY c.title");
        data = new ArrayList( 1000 );
        ResultSet rs = ps.executeQuery();
        while ( rs.next() )
                {
                        int contractId = rs.getInt(1);
                        BigDecimal sum = bu.getBalance(date2,contractId);
                        print("SUM " + sum);
                        String title = rs.getString(2);
                        String comment = rs.getString(3);
                        BigDecimal summa = rs.getBigDecimal(4);
                        closedDate = rs.getString(5);
                        map = new HashMap();
                        map.put( "title", title );
                        map.put( "comment", comment );
                        map.put( "summa", sum );
                        map.put( "closedDate", closedDate );
                        data.add( map );

                }
        result.setData( data );
}

Автор:  stark [ 09 июн 2014, 13:02 ]
Заголовок сообщения:  Re: Получить исходящий остаток

а зачем выбирать из contract_balance ? Да там много строк . Видимо из contract надо выбирать . Какая цель то ? какие договора нужно выбрать ?

Либо сразу из базы выбирать:

Цитата:
Получение балансов за конкретный месяц(без темповой таблицы, запрос может долго выполнятся )

SELECT balance.* FROM contract_balance AS balance
INNER JOIN
(
SELECT cid, max( yy * 12 + ( mm - 1 ) ) % 12 + 1 AS mm,
FLOOR( max(yy * 12 + ( mm - 1 ) ) / 12 ) AS yy
FROM contract_balance WHERE ( ( yy * 12 ) + mm ) <= ( ( 12 * <year> ) + <mm> ) GROUP BY cid

) AS dump
ON dump.cid =balance.cid AND balance.yy = dump.yy AND balance.mm=dump.mm



http://wiki.bitel.ru/index.php/%D0%A0%D ... 1%81%D1%8B

Автор:  dimOn [ 09 июн 2014, 13:14 ]
Заголовок сообщения:  Re: Получить исходящий остаток

выше же метод API есть. решили, что он полностью подходит.

тут же в цикле он вызывается кучу раз для разных параметров , вот и вывод соответствующий. не очень понятно в чём вопрос на данный момент
Код:
                        BigDecimal sum = bu.getBalance(date2,contractId);
                        print("SUM " + sum);

Автор:  skyb [ 09 июн 2014, 14:42 ]
Заголовок сообщения:  Re: Получить исходящий остаток

цель получить текущий исходящий остаток у договоров в определенных группах, при условии что последние движение по балансу может быть в любом месяце

Автор:  stark [ 09 июн 2014, 14:47 ]
Заголовок сообщения:  Re: Получить исходящий остаток

skyb писал(а):
цель получить текущий исходящий остаток у договоров в определенных группах, при условии что последние движение по балансу может быть в любом месяце


Код:
query = "select * from where <условие по группе >";
...
  //для каждого contractId
  BigDecimal sum = bu.getBalance(date2,contractId);
  print("SUM " + sum);                     


Автор:  skyb [ 09 июн 2014, 15:39 ]
Заголовок сообщения:  Re: Получить исходящий остаток

stark так а чего у меня какая то фигня получилась? )

Автор:  stark [ 09 июн 2014, 16:11 ]
Заголовок сообщения:  Re: Получить исходящий остаток

skyb писал(а):
stark так а чего у меня какая то фигня получилась? )




Чтобы было в запросе, то и получилось. В запросе было -вывести все балансы за все месяцы. LEFT JOIN на contract_balance . если не понятно, то долго объяснять :)

Автор:  skyb [ 09 июн 2014, 17:29 ]
Заголовок сообщения:  Re: Получить исходящий остаток

да понял что джойн нафиг ненужен )))) фрикер подсказал, меняж направить иногда, а там я сам...заработался блин

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