1/6用友股份-LE支持服务业务本部产品方案--《查询引擎数据加工-折行余额设置》建立日期:2013-07-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-CP-2013-05392/6文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围内部员工伙伴客户发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-07-01用友NC产品支持部V1.0版本领域模块备注3/6目录查询引擎数据加工-折行余额设置..........................................................................44/6查询引擎数据加工-折行余额设置设置方法:首先由查询获得结果集。查询ID选择本查询。5/6折行余额。生成以下代码。借方发生列AA对应查询中选择字段的别名,贷方发生列BB对应查询中选择字段的别名,余额列CC对应查询中选择字段的别名。java.math.BigDecimalye=newjava.math.BigDecimal(0.0);ds.first();while(ds.inBounds()){java.math.BigDecimaljf=ds.getBigDecimal("AA");java.math.BigDecimaldf=ds.getBigDecimal("BB");ye=ye.add(jf).subtract(df);ds.setBigDecimal("CC",ye);ds.next();}setDataSet(ds);折行合计,根据公司主键变化,重新计算合计。StorageDataSetds=ModelUtil.getQueryResult_Sql("AA1",getHashParam(),getEnvInfo().getAccountDsn());6/6java.math.BigDecimalye=newjava.math.BigDecimal(0.0);ds.first();Stringoldcorp="";Stringnewcorp="";while(ds.inBounds()){newcorp=ds.getString("pk_corp");//pk_corp合计重新计算开关取值,根据实际替换if(!newcorp.equals(oldcorp)){oldcorp=newcorp;ye=newjava.math.BigDecimal(0.0);}java.math.BigDecimaljf=ds.getBigDecimal("AAA");java.math.BigDecimaldf=ds.getBigDecimal("BBB");ye=ye.add(jf).subtract(df);ds.setBigDecimal("CCC",ye);ds.next();}setDataSet(ds);pk_corp需要排序。添加上面红色代码,到相应的位置就可以实现。红色部分代码是我添加的,至于会不会产生其他的影响,如果数量巨大,会不会使内存溢出,我没有测试过。