вот что получается без crm:
Код:
package ru.skyb.scripts.global;
 
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import java.sql.*;
import java.util.*;
import java.util.Date;
 
import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.bean.*;
 
public class archive extends GlobalScriptBase {
   @Override
   public void execute(Setup setup1, ConnectionSet connectionSet2)
         throws Exception {
 
      Connection con = connectionSet2.getConnection();
      Calendar calendar = Calendar.getInstance();
      GregorianCalendar nowDate = (GregorianCalendar) calendar.clone();// клонируем
                                                         // дату
                                                         // для
                                                         // дальнейшей
                                                         // работы
      nowDate.get(Calendar.DATE);
      GregorianCalendar sqlDate = (GregorianCalendar) calendar.clone();
      Date dateSql = TimeUtils.convertCalendarToSqlDate(sqlDate);
      Date dateNow = TimeUtils.convertCalendarToDate(nowDate);// переводим
                                                // дату в тип
                                                // Date с типа
                                                // Calendar
      String query = "select id from contract where gr&(1<<3)>0";
      PreparedStatement contractPs = con.prepareStatement(query);
      ResultSet contractRs = contractPs.executeQuery();
      int cid;
      int i = 0;
      while (contractRs.next()) {
         cid = contractRs.getInt(1);
 
         ContractManager contract = new ContractManager(con);
         Contract ct = contract.getContractById(cid);
         /*
          * getLastBalanceMonth public
          * java.util.Date getLastBalanceMonth(Contract contract) возращает
          * самый старший месяц, за который есть данные по Балансу
          */
         BalanceUtils bu = new BalanceUtils(con);
    BigDecimal summa5 = bu.getBalance(nowDate.getTime(), cid);
    if (contract_balance == null) {
            continue;
         }
         // ==========================close==============================//
         int mounth = TimeUtils.monthsDelta(contract_balance,dateNow);
 
      if (mounth > 3 )
      {
         print ("Контракт с сидом " + cid);
         cpu = new ContractParamUtils( con );
         cpu.setGroup( cid, 19 );
         i++;
    //это добавит группу
      }
   }
    print("кол-во " +i );
    contractRs.close();
    contractPs.close();   
}
как ее грамотно прикрутить=)