自动产生的成本调整单增加二开字段原创
金蝶云社区-飞龙在天V
飞龙在天V
16人赞赏了该文章 941次浏览 未经作者许可,禁止转载编辑于2020年12月23日 18:17:56

       采购入库核算或者出库成本核算过程中,产生的成本调整单可能包含一些源单信息,本文以出库核算过程中自动产生的出库成本调整单来携带销售出库单客户字段为例,介绍怎样把源单的相关的信息携带到成本调整单上面,其他类型的调整单原理也是一样,可以参照处理。

       一、打开BOS IDE,拓展单据成本调整单,添加客户字段;

3.png

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

         自动生成的调整单会调用保存操作,因此再保存操作之后,根据源单单据去更新对应的二开字段。

         重写AfterExecuteOperationTransaction方法,在此方法里面更新对应的客户字段。此处如果是更新其他的单据上的字段,可以根据实际单据标识来调整过滤信息。

4.png

        三、在成本调整单保存操作上配置第二步新增的插件。

5.png



附录代码:

     [Description("二开-保存时更新调整单客户字段")]
    public class AdjustBillSave : 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();
            UpdateCustomerId(billIds);
        }

        /// <summary>
        /// 根据单据内码更新调整单客户字段
        /// </summary>
        /// <param name="billIds"></param>
        private void UpdateCustomerId(List<long> billIds)
        {
            StringBuilder sqlStr = new StringBuilder();
            sqlStr.AppendFormat(" merge into T_HS_ADJUSTMENTBILLENTRY T ");
            sqlStr.AppendFormat(" using (select T1.FENTRYID,T3.FCUSTOMERID ");
            sqlStr.AppendFormat(" from T_HS_ADJUSTMENTBILLENTRY T1 ");
            sqlStr.AppendFormat(" inner join T_SAL_OUTSTOCKENTRY T2 on T1.FSRCENTRYID = T2.FSRCENTRYID ");
            sqlStr.AppendFormat(" inner join T_SAL_OUTSTOCK T3 on T2.FID = T3.FID ");
            sqlStr.AppendFormat(" where T1.FID in ({0}) and FSRCBILLID <> 0 and T3.FCUSTOMERID <> 0 and FSRCBILLTYPEID  ", string.Join(",", billIds));
            sqlStr.AppendFormat(" in (select FBILLTYPEID from T_BAS_BILLTYPE where  FBILLFORMID = 'SAL_OUTSTOCK')) T0 ");
            sqlStr.AppendFormat(" on T.FENTRYID = T0.FENTRYID ");
            sqlStr.AppendFormat(" when matched then update set T.F_KD_CUSTOMERID = T0.FCUSTOMERID ");

            DBUtils.Execute(this.Context, sqlStr.ToString());
        }
    }


赞 16