销售订单预收款查询功能的扩展
业务场景:
有一些情况下在查询二开的收款单自定义字段,需要打开收款单才能查看,客户希望能在打开预收款查询时也能显示这些自定义的字段,并且能通过查询预收款明细双击打开对应的收款单。
我们就先来看看系统预置的表单样式
这里大家可以看到,在收款单明细里面是不能双击打开收款单,也不能看到我们自定义的字段的
小伙伴们,那下面跟着我一起动手操作起来吧!!!
第一步,需要打开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
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);
}
}
}
结果展示
销售订单预收款查询功能的扩展
本文2024-09-16 19:06:03发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-26392.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf