刚开始做AX就发现,对于有主从表关系的窗体,从表的金额,数量等字段不能很直观的看到他们的汇总值。也许就是自己太懒了, 安慰自己,要学会适应软件。好了,这件事件就不了了之了。再后来。。。客户真的有这种需求了。没办法,那就做吧。
刚开始做AX就发现,对于有主从表关系的窗体,从表的金额,数量等字段不能很直观的看到他们的汇总值。也许就是自己太懒了, 安慰自己,要学会适应软件。好了,这件事件就不了了之了。再后来。。。客户真的有这种需求了。没办法,那就做吧。
怎么实现呢?又是个问题,如果把当前从表的QUERY循环一次,总觉得会影响效率,而且个人感觉通用性不是很好,于是乎憋了半天,向周围的高人请教请教,学习学习,写个静态方法出来,和大家一起来研究研究,希望各位领导提出好的建议和意见。

Code
//根据聚集方式返回数据集
static public common GetSelectionfieldCommon(formdatasource _formdatasource,Container _Container,selectionfield _fieldtype)
{
queryrun _queryrun;
query _query;
int x;
common _common;
_queryrun = new queryrun(_formdatasource.queryRun().pack());
_query = new query();
_query = _queryrun.query();
for (x = 1; x <= conlen(_Container); x++)
{
_query.dataSourceNo(1).addSelectionField(conpeek(_Container,x),_fieldtype);
}
if (_queryrun.next())
{
_common = _queryrun.get(_query.dataSourceNo(1).table());
}
else
{
_common = _formdatasource.queryRun().get(_formdatasource.table());
// _common = _formdatasource.
}
return _common ;
}
该方法稍微做了点扩展,可以对选定的字段做汇总,找最大,最小值,求平均值。。。。
大概介绍一下参数:参数一 ,从FORM端传入要做处理的datasource.
参数二 。 对要做汇总的字段打个包,放在一个CONTAINER里传过来
参数三 。 要做数据处理的类型(汇总,平均值等)。
传出一条记录,这条记录里面就是我们想要的了,然后在FORM里面我们想怎么显示就怎么显示好了。下面做个小的调用例子。高手就可以略过了

Code
void clicked()
{
AAAALIDAN AAAALIDAb;
container aa;
super();
aa += fieldnum(AAAALIDAN,Real1);
aa += fieldnum(AAAALIDAN,Real2);
AAAALIDANa = aaaclass::GetSelectionfieldCommon(AAAALIDAN_ds,aa,selectionfield::Sum);
AAAALIDAn_ds.refresh();
}