ММ, вроде на месте.
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.service.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import bitel.billing.server.npay.*;
import bitel.billing.common.*;
import bitel.billing.common.KernelConst; 
import java.util.*;
import java.mysql.*;
import bitel.billing.server.npay.Calculator; 
 
NPAY_MID = 2;
limit = 0d;
print ("Payment added");
cid = event.getContractID();
// округляем день (на 00:00:00) платежа
egt = event.getGenerateTime();
df = egt.clone();
df.clear();
df.set(egt.get(Calendar.YEAR), egt.get(Calendar.MONTH), egt.get(Calendar.DAY_OF_MONTH));
// получаем день, предыдущий платежу
dt = df.clone();
dt.roll(Calendar.DAY_OF_YEAR, -1); 
// получаем дату начала месяца
db = df.clone();
db.set(Calendar.DAY_OF_MONTH, 1);
ps = con.prepareStatement( "SELECT gr FROM contract WHERE id=?" );
ps.setInt ( 1, cid);
rs = ps.executeQuery(); 
gr = 0;
if (rs.first())
{
gr = rs.getInt( 1 );
}
// если договор принадлежит к группе "Приостановлен по балансу", или "С пониженным лимитом" то определяем размер абонплаты для снятия и сравниваем с балансом после платежа
if( gr == 2 || gr == 8)
{
  DateNow = new GregorianCalendar();
  ContractStatusManager statusManager  = new ContractStatusManager(con);
  status = statusManager.getStatus(cid, DateNow);
  contract_status = KernelConst.CONTRACT_STATUS_ACTIVE; 
  if (status != null)
   {
   contract_status = status.getStatus ();
   }
  if (contract_status == null)
   {
   contract_status = KernelConst.CONTRACT_STATUS_ACTIVE;
   };
 ctm = new ContractTariffManager(  con );
 csm   = new ContractServiceManager( con );
 cu   = new ContractUtils( con );
 cman = new ContractManager( con );
 cn   = cman.getContractByID( cid );
 tts = cman.getRealtimeTariffTreeSet( cid, df, "npay", NPAY_MID, true );
 msu = new ModuleAndServiceUtils( con );
 bu  = new BalanceUtils( con );
 // получаем текущий баланс (с учетом данного платежа)
 balance = bu.getBalance(new Date(), cid );
 limit = cn.getBalanceLimit();
 //limit = Double.parseDouble(limit);
 fbm = cn.getFakeBalanceMode();
 bm = cn.getBalanceMode();
 //print ( "balance = "+balance );
 //print ( "limit = "+limit );
 //print ( "fbm = "+fbm+"; bm = "+bm );
 totalCost = 0d;
 // получаем список услуг
 serviceList  = csm.getContractServiceList( cid, df );
 for( Iterator it = serviceList.iterator(); it.hasNext(); )
  {
  service = (ContractService)it.next();
  sid = service.getServiceID();        
  mid = msu.getService(sid).getModuleId();
 //print ( "Service.title "+msu.getService(sid).getTitle() );
 //print ( "Module.title "+msu.getModule(mid).getTitle() );
 // Если услуга относится к модулю "NPay"
  if( mid == NPAY_MID )
   {
    print ("sid" + sid );
    // считаем сумму абонплаты
    // перебор тарифов в порядке позиций сначала персональных, потом глобальных
     for( TariffModuleTree tree : tts.getTreeList( df ) )
     {
      req = new TariffRequest();
      req.setRequestParam( "action", "calculate" );
      req.setRequestParam( "sid", sid );
      // считаем абонплату пропорционально количеству дней до конца месяца(действует для тарифов "Пропорционально периоду")
      // всего дней в месяце
      req.setRequestParam( "month_days", df.getActualMaximum(Calendar.DAY_OF_MONTH) ); 
      // всего дней до конца месяца
      req.setRequestParam( "period_days", df.getActualMaximum(Calendar.DAY_OF_MONTH) - df.get(Calendar.DAY_OF_MONTH) + 1 );
      tree.processRequest( req );
      cost = (Double) req.getResponseParam( "cost" );                
      print ( "cost:" + cost );
     if( req.wasAccepted() && cost != null )
     {
      print( cost );
      totalCost += cost;
      break;
     }
   }
   }
  } 
   print ("TotalCost = " + totalCost);
   print ("Balance = "+ balance);
// если денег на продление услуг хватает, то меняем группу договора, запускаем перерасчет абонплаты
 if ( balance > (totalCost * 7))
 {
  ContractStatus status = new ContractStatus(); 
  status.setContractId(cid); 
  status.setDate1(DateNow); 
  status.setStatus(KernelConst.CONTRACT_STATUS_ACTIVE); 
  status.setComment("Активирован по поступлению платежа");
  statusManager.changeStatus(status, 0);
  psup = con.prepareStatement( "UPDATE contract SET gr=1 WHERE id=?" );
  psup.setInt ( 1, cid);
  psup.executeUpdate();
 /* Calendar cal = Calendar.getInstance();
  calculator.setCid( cid ); 
  calculator.setExecutingTime( cal );
  calculator.initTask( bgSetup, 0, "mid=" + NPAY_MID ); 
  calculator.startTask();*/
 }
}
Скопипастил все, как есть, кусок перенаслений закоменчен до разбора. setCids пробовал менять на setCid, т.к. описалово класса не нашел в API и тыкался вслепую. Спасибо за отклик.