科目余额表核算维度名称显示优化原创
72人赞赏了该文章
284次浏览
编辑于2024年07月12日 18:56:31
当前官方出品的科目余额表,当显示核算维度名称时,由于没有显示维度名称,只是简单的将各已录入维度值的名称用“/”分隔,用户无法准备分辨出具体维度对应的维度值,尤其是科目挂多个维度且当中间的维度未录入时,维度值和维度之间的对应关系就很难确定。如下图所示:
为了解决这一问题,这里提供一个科目余额表扩展插件,使用该插件后,核算维度名称列的显示如下图所示:
中括号“[]”中包含了具体的维度名称,多个维度之间用分号“;”分隔,且按对应科目上指定维度的顺序排列,“/”前面分别是维度值编码和维度值名称,支持未录入维度的标识显示,这样就完整包含的对应科目所有维度信息,可以很方便的分辨维度信息。对于通过API获取科目余额表数据的情况,拿到上述数据后,亦可以很方便对字段内容进行分解,得到具体的维度数据。
以下是为科目余额表指定新插件的方法:
将下载的插件的dll文件放到系统Bin目录下,注册时选择该dll文件,并勾选对应的插件名。保存后生效。
注意,由于平台不支持为账表挂多个插件,因此,注册新插件后,必须取消原插件的启用。如下图所示:
插件源码如下:
namespace MyKingdee.K3.Assembly.ServicePlugIn { /// <summary> /// 科目余额表扩展服务端插件 /// </summary> [Description("科目余额表扩展服务端插件")] public class AccountBalanceExt : Kingdee.K3.FIN.GL.App.Report.AccountBalanceService { /// <summary> /// 构建报表数据临时表 /// </summary> /// <param name="filter"></param> /// <param name="tableName"></param> public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { base.BuilderReportSqlAndTempTable(filter, tableName); //查询完成后自定义功能扩展 AfterQuery(this.Context, filter,tableName); } /// <summary> /// 查询完成后自定义功能扩展 /// </summary> /// <param name="ctx"></param> /// <param name="filter"></param> /// <param name="tempTable"></param> private void AfterQuery(Context ctx,IRptParams filter, string tempTable) { DynamicObject dyobj = filter.FilterParameter.CustomFilter; //过滤条件 if (dyobj == null) return; //显示核算维度字符串名称 var ShowDetailItem =dyobj.GetValue<bool>(AccountBalanceFilterField.CONST_FBillHead.ORM_SHOWDETAIL, false); if (ShowDetailItem) { //得到科目和维度组合ID List<Tuple<long, long>> lstDetailIDAccount = new List<Tuple<long, long>>(); var strSql = string.Format("SELECT DISTINCT FACCTID FACCOUNTID,FDETAILID FROM {0} WHERE FACCTID>0 AND FDETAILID>0", tempTable); using (var reader = DBUtils.ExecuteReader(ctx, strSql)) { while (reader.Read()) { var tup = Tuple.Create<long, long>(Convert.ToInt64(reader["FACCOUNTID"]), Convert.ToInt64(reader["FDETAILID"])); lstDetailIDAccount.Add(tup); } } if (lstDetailIDAccount.Count > 0) { //得到所有维度组合字符串名称 var dctName = GetDetailIdName(ctx, lstDetailIDAccount); //将字符串名称写入临时表 var strFlexTableName = GetFlexTableName(ctx, dctName); //关联临时表,将字符串名称写入最终BOS临时表中的核算维度名称字段中,以便最后显示 var strUpdateSql = string.Format(@"MERGE INTO {0} T0 USING {1} T1 ON T0.FACCTID=T1.FACCOUNTID AND T0.FDETAILID=T1.FDETAILID WHEN MATCHED THEN UPDATE SET T0.FDETAILNAME=T1.FFLEXNAME; ", tempTable, strFlexTableName); DBUtils.Execute(ctx, strUpdateSql); //及时删除用到的中间临时表 CommonFunction.DropTempTable(ctx, new List<string>() { strFlexTableName }, true); } } } //......完整源码请见附件 } }
希望上面的内容对你有用。
科目余额表核算维度名称列显示优化插件源码.zip(3.74KB)
推荐阅读