销售订单预收款查询功能的扩展原创
金蝶云社区-会飞的猪
会飞的猪
10人赞赏了该文章 579次浏览 未经作者许可,禁止转载编辑于2022年02月03日 15:41:31
封面

业务场景:

       有一些情况下在查询二开的收款单自定义字段,需要打开收款单才能查看,客户希望能在打开预收款查询时也能显示这些自定义的字段,并且能通过查询预收款明细双击打开对应的收款单。

        我们就先来看看系统预置的表单样式

image.png

这里大家可以看到,在收款单明细里面是不能双击打开收款单,也不能看到我们自定义的字段的

小伙伴们,那下面跟着我一起动手操作起来吧!!!

第一步,需要打开BOS,在销售订单菜单集合和列表菜单里面分别新增按钮,这个步骤比较简单,我这里就不详细说明了。不懂的小伙伴可以在论坛里面搜一下,看看怎么新增菜单按钮的文章。

第二步,新增一个动态表单

image.png

表单的样式可以参考系统的收款单明细列表进行增加字段,我这边分别设置了单据编号,业务日期,结算组织,预收款实收金额,订单关联预收单金额,币别,FID和收款项目(FID和收款项目这两个特别重要)

第三步,打开sql,通过查询语句构造出收款明细列表中的数据

SELECT  t1.FBILLNO,t1.FDATE,t1.FSETTLEORGID,t1.FCURRENCYID,t2.FASSTOTALAMOUNTFOR,t2.FASSTOTALAMOUNTFOR AS FASSTOTALAMOUNTFORBYTHISORDER FROM  T_AR_RECEIVEBILL t1

INNER JOIN dbo.T_AR_RECEIVEBILLENTRY t2 ON t1.FID=t2.FID

WHERE t2.FSALEORDERNO='XSDD000021' AND t2.FPURPOSEID=20011

UNION all

SELECT a2.FBILLNO,a2.FDATE,a2.FSETTLEORGID,a2.FCURRENCYID,a1.FASSAMOUNTFOR,a1.FASSAMOUNTFOR AS FASSTOTALAMOUNTFORBYTHISORDER FROM T_AR_ASSSALESORDER a1

INNER JOIN T_AR_RECEIVEBILL a2 ON a1.FENTRYID=a2.FID

INNER JOIN dbo.T_SAL_ORDER a3 ON a1.FASSBILLID=a3.FID

WHERE a3.FBILLNO='XSDD000021'

上面这段语名是和系统预置得到相同的查询,需要的小伙伴可以直接引用

第四步,打开我们的开发工具VS2015

image.png

分别新建三个类,用于表单,列表和打开的动态表单

表单里面的代码如下

namespace Lind.BOS.SCM.Sal.Business.PlugIn

{

    [Description("销售订单表单查询预收款")]

    [Kingdee.BOS.Util.HotUpdate]

    public class SaleOrderForEdit:AbstractBillPlugIn

    {

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            if (e.BarItemKey.Equals("LindReceiveBill"))

            {

                DynamicFormShowParameter dy = new DynamicFormShowParameter();

                dy.FormId = "Lind_RecDetailList";

                var saleorderbillno = Convert.ToString(this.Model.GetValue("FBillNo"));

                dy.CustomParams.Add("FBillNo_is", saleorderbillno);

                this.View.ShowForm(dy);

             }

        }

    }

}

列表里面的代码如下

namespace Lind.BOS.SCM.Sal.Business.PlugIn

{

    [Description("销售订单列表查询预收款")]

    [Kingdee.BOS.Util.HotUpdate]

    public class SaleOrderListEdit:AbstractListPlugIn

    {

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            if(e.BarItemKey.Equals("LindReceiveBill"))

            {

                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;                

                if(selectRows.Count==0)

                {

                    this.View.ShowMessage("请选择一条数据进行预收查询操作!",MessageBoxType.Error);

                }

                else if(selectRows.Count>1)

                {

                    this.View.ShowMessage("只能选择一条数据进行预收查询操作!", MessageBoxType.Error);

                }

                else

                {

                    DynamicFormShowParameter dy = new DynamicFormShowParameter();

                    dy.FormId = "Lind_RecDetailList";

                    var saleorderbillno = Convert.ToString(this.ListModel.GetData(selectRows)[0]["FBillNo"]);

                    dy.CustomParams.Add("FBillNo_is", saleorderbillno);

                    this.View.ShowForm(dy);

                }

            }

        }

    }

}

结果展示的动态表单内容如下

namespace Lind.BOS.SCM.Sal.Business.PlugIn

{

    [Description("收款单列表明细双击联查收款单实体")]

    [Kingdee.BOS.Util.HotUpdate]

    public class ReceiveBillDetailEdit : AbstractDynamicFormPlugIn

    {

        string billNo;

        public override void OnLoad(EventArgs e)

        {

            base.OnLoad(e);

            billNo = this.View.OpenParameter.GetCustomParameter("FBillNo_is").ToString();

            string sql = string.Format(@"/*dialect*/SELECT  t1.FBILLNO,t1.FDATE,t1.FSETTLEORGID,t1.FCURRENCYID,t2.FASSTOTALAMOUNTFOR,t2.FASSTOTALAMOUNTFOR AS FASSTOTALAMOUNTFORBYTHISORDER,t1.FID FROM  T_AR_RECEIVEBILL t1

                                        INNER JOIN dbo.T_AR_RECEIVEBILLENTRY t2 ON t1.FID=t2.FID

                                        WHERE t2.FSALEORDERNO='{0}' AND t2.FPURPOSEID=20011

                                        UNION ALL

                                        SELECT a2.FBILLNO,a2.FDATE,a2.FSETTLEORGID,a2.FCURRENCYID,a1.FASSAMOUNTFOR,a1.FASSAMOUNTFOR AS FASSTOTALAMOUNTFORBYTHISORDER,a1.FENTRYID AS FID FROM T_AR_ASSSALESORDER a1

                                        INNER JOIN T_AR_RECEIVEBILL a2 ON a1.FENTRYID=a2.FID

                                        INNER JOIN dbo.T_SAL_ORDER a3 ON a1.FASSBILLID=a3.FID

                                        WHERE a3.FBILLNO='{0}'

                                        ORDER BY FBILLNO", billNo);


            DynamicObjectCollection dt = DBUtils.ExecuteDynamicObject(this.Context, sql);

            if (dt.Count == 0)

            {

                return;

            }

            else if (dt.Count > 0)

            //对数据进行读取并进行赋值

            {

                Entity entity = this.View.BillBusinessInfo.GetEntity("F_Lind_Entity");

                DynamicObjectCollection rows = this.Model.GetEntityDataObject(entity);

                

                for (int i = 0; i < dt.Count; i++)

                {

                    DynamicObject row = new DynamicObject(entity.DynamicObjectType);

                    entity.SeqDynamicProperty.SetValue(row, i + 1);

                    row["FBillNo"] = Convert.ToString(dt[i]["FBILLNO"]);

                    row["FDate"] = Convert.ToDateTime(dt[i]["FDATE"]);

                    row["FAmount"] = dt[i]["FASSTOTALAMOUNTFOR"];

                    row["FSaleOrderID"] = dt[i]["FASSTOTALAMOUNTFORBYTHISORDER"];

                    row["FID"] = dt[i]["FID"];

                    rows.Add(row);

                    this.Model.SetValue("FOrgId", dt[i]["FSETTLEORGID"], i);

                    this.Model.SetValue("FCurId", dt[i]["FCURRENCYID"], i);

                }

                this.View.UpdateView("FOrgId");

                this.View.UpdateView("FCurId");

            }

        }

        //数据绑定后的字段状态

        public override void AfterBindData(EventArgs e)

        {

            base.AfterBindData(e);

            this.View.GetControl("FBillNo").Enabled = false;

            this.View.GetControl("FDate").Enabled = false;

            this.View.GetControl("FOrgId").Enabled = false;

            this.View.GetControl("FCurId").Enabled = false;

            this.View.GetControl("FAmount").Enabled = false;

            this.View.GetControl("FSaleOrderID").Enabled = false;

            this.View.GetControl("FID").Enabled = false;

            this.View.GetControl("FID").Visible = false;

        }

        //构建双击打开单据的方法

        public override void EntityRowDoubleClick(EntityRowClickEventArgs e)

        {

            base.EntityRowDoubleClick(e);

            BillShowParameter para = new BillShowParameter();

            para.OpenStyle.ShowType = ShowType.Modal;

            para.FormId = "AR_RECEIVEBILL";//打开单据的唯一标识

            para.Width = 1200;//打开单据的宽

            para.Height = 500;//打开单据的高

            para.Status = OperationStatus.VIEW;//打开单据的状态

            para.PKey = this.Model.GetValue("FID", e.Row).ToString();

            para.ParentPageId = this.View.ParentFormView.PageId;

            this.View.ShowForm(para);

        }

    }

}

结果展示

image.png


赞 10