合同履约成本分配结果增加二开字段原创
金蝶云社区-飞龙在天V
飞龙在天V
6人赞赏了该文章 1,418次浏览 未经作者许可,禁止转载编辑于2022年07月25日 15:12:54

       合同履约成本分配后会生成合同履约成本分配结果,结果中包含一些销售出库单和应付单的常用字段信息,但有时候对于不同用户来说常用的关键字段不一样,携带的字段还不够,也有可能需要携带单据上的二开字段,这个时候就可以通过简单的二开来解决此问题。本文以携带销售出库单上的“承运商”字段为例,介绍怎样把销售出库单的相关的信息携带到合同履约成本分配结果上面,其他字段(包括二开添加到单据的字段,也包括需要携带应付单上的字段)原理也是一样,可以参照处理。

      一、打开BOS IDE,拓展合同履约成本分配结果,在单据体添加“承运商”字段

       字段类型需要和源单的字段类型一致,新加字段时中间加入开发商标识,避免字段冲突。

2.png

       二、增加二开保存插件,继承操作服务插件基类AbstractOperationServicePlugIn

        分配合同履约成本时会调用保存操作,因此再保存操作之后,根据源单单据去更新对应的二开字段。

        重写AfterExecuteOperationTransaction方法,在此方法里面更新对应的供应商字段。此处如果是更新其他的单据上的字段,可以根据实际单据标识来调整过滤信息。销售出库单的单据内码FSTOCKBILLID,单据分录内码FStockEntryId,应付单的单据内码FAPBILLID,单据分录内码FAPENTRYID,根据内码字段匹配关联单据所需字段更新。此例子中是更新承运商,字段在单据头,只需要使用到销售出库单的单据内码FSTOCKBILLID匹配即可。(此处需要注意,更新时使用批量处理,切勿每个单或者每行分录去执行sql更新,数据库是稀缺资源,如果大量执行sql,会导致此功能很慢,严重时可能导致系统卡死)。

        [W@0[PQ65NNVU6G%)~D{YOU.png

       三、在合同履约成本分配结果的分配操作上配置第二步新增的插件

         配置完成后,清理缓存,再分配合同履约成本,就可以携带二开字段了。

}S7VX7U1KZCGD2W6WC)DP}T.png


附录代码:

    [Description("二开-合同履约成本保存时更新携带二开字段")]
    public class ContractCompResultSave : AbstractOperationServicePlugIn
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            if (e.DataEntitys == null || e.DataEntitys.Length == 0)
            {
                return;
            }
            var billIds = e.DataEntitys.Select(i => Convert.ToInt64(i["ID"])).ToList();

            UpdateCarrierID(billIds);
        }

        /// <summary>
        /// 根据单据内码更新承运商字段
        /// </summary>
        /// <param name="billIds"></param>
        private void UpdateCarrierID(List<long> billIds)
        {
            if (billIds == null || billIds.Count == 0)
            {
                return;
            }
            StringBuilder sqlStr = new StringBuilder();
            sqlStr.AppendFormat(" merge into T_HS_CONTRACTCOMPENTRY T0 ");
            sqlStr.AppendFormat(" using (select     T1.FENTRYID,T2.FCARRIERID ");
            sqlStr.AppendFormat("        from       T_HS_CONTRACTCOMPENTRY T1 ");
            sqlStr.AppendFormat("        inner join T_SAL_OUTSTOCK T2 on T1.FSTOCKBILLID = T2.FID ");
            sqlStr.AppendFormat("        where      T1.FID in({0})) T ",string.Join(",", billIds));
            sqlStr.AppendFormat(" on T0.FENTRYID = T.FENTRYID ");
            sqlStr.AppendFormat(" when matched then ");
            sqlStr.AppendFormat("   update set T0.F_KDS_CARRIERID = T.FCARRIERID ");
            DBUtils.Execute(this.Context, sqlStr.ToString());
        }
    }


图标赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!