销售订单预收款查询功能的扩展

业务场景:
有一些情况下在查询二开的收款单自定义字段,需要打开收款单才能查看,客户希望能在打开预收款查询时也能显示这些自定义的字段,并且能通过查询预收款明细双击打开对应的收款单。
我们就先来看看系统预置的表单样式

这里大家可以看到,在收款单明细里面是不能双击打开收款单,也不能看到我们自定义的字段的
小伙伴们,那下面跟着我一起动手操作起来吧!!!
第一步,需要打开BOS,在销售订单菜单集合和列表菜单里面分别新增按钮,这个步骤比较简单,我这里就不详细说明了。不懂的小伙伴可以在论坛里面搜一下,看看怎么新增菜单按钮的文章。
第二步,新增一个动态表单

表单的样式可以参考系统的收款单明细列表进行增加字段,我这边分别设置了单据编号,业务日期,结算组织,预收款实收金额,订单关联预收单金额,币别,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

分别新建三个类,用于表单,列表和打开的动态表单
表单里面的代码如下
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
销售订单预收款查询功能的扩展
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



