直接sql账表通过按钮快捷查询原创
4人赞赏了该文章
1031次浏览
编辑于2021年09月20日 19:12:29
实现功能:根据单据头字段(创建日期和物料编码)直接查询账表数据,其中单据的创建日期小于字段创建日期的值,单据物料等于字段物料编码的值。
创建直接sql账表,命名为“单据A直接sql报表”,sql脚本带两个关键字“创建日期”和“物料编码”,使用分隔容器分隔,单据头增加日期,基础资料字段和查询按钮字段,如下图:
编写表单插件BillASqlReportPlugIn 并注册,具体代码参考最后如下图:
运行效果,如下图:
插件代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using Kingdee.BOS.Core; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Report.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Model.Report; using Kingdee.BOS.Web.Report.SQLReport; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Orm.DataEntity; namespace Kingdee.BOS.TestPlugIn.BillFormPlugin { [HotUpdate] [Description("单据ASql帐表插件")] public class BillASqlReportPlugIn : AbstractSysReportPlugIn { //创建日期 private string _createDate = string.Empty; //物料编码 private DynamicObject _mNumberObj = null; //是否为单据查询 private bool _isSearch = false; /// <summary> /// 按钮点击事件 /// </summary> /// <param name="e"></param> public override void ButtonClick(ButtonClickEventArgs e) { if (e.Key.EqualsIgnoreCase("FBtnSearch")) //查询 { _isSearch = true; base.ButtonClick(e); var reportModel = this.Model as SQLReportModel; //直接sql帐表对应的Model var reportForm = this.View.BillBusinessInfo.GetForm() as SysReportForm; //表单 //帐表创建日期值 _createDate = ObjectUtils.Object2String(reportModel.DataObject["FCreateDate"]); if (!string.IsNullOrWhiteSpace(_createDate)) { //给关键字段创建日期赋值 var sqlRow = reportModel.FilterParameter.SQLFilterRows.FirstOrDefault(x => x.FilterField.KeyWord.EqualsIgnoreCase("#FDate#")); sqlRow.Value = _createDate; } //物料编码数据包 _mNumberObj = reportModel.DataObject["FNumber"] as DynamicObject; if (_mNumberObj != null) { var mNumber = ObjectUtils.Object2String(_mNumberObj["Number"]);//物料编码 if (!string.IsNullOrWhiteSpace(mNumber)) { //给关键字段物料编码赋值 var sqlRow = reportModel.FilterParameter.SQLFilterRows.FirstOrDefault(x => x.FilterField.KeyWord.EqualsIgnoreCase("#物料编码#")); sqlRow.Value = mNumber; } } //最后刷新整个页面 this.View.Refresh(); } } /// <summary> /// 数据绑定后事件 /// </summary> /// <param name="e"></param> public override void AfterBindData(EventArgs e) { base.AfterBindData(e); //如果单据头查询 if (_isSearch) { this.Model.SetValue("FCreateDate", _createDate); this.Model.SetValue("FNumber", _mNumberObj); _isSearch = false; } else //把过滤方案中的过来条件数据赋值给报表单据头中的字段 { var reportModel = this.Model as SQLReportModel; var sqlRow = reportModel.FilterParameter.SQLFilterRows.FirstOrDefault(x => x.FilterField.KeyWord.EqualsIgnoreCase("#FDate#")); this.Model.SetValue("FCreateDate", sqlRow.Value); var sqlRow2 = reportModel.FilterParameter.SQLFilterRows.FirstOrDefault(x => x.FilterField.KeyWord.EqualsIgnoreCase("#物料编码#")); this.Model.SetItemValueByNumber("FNumber", sqlRow2.Value,0); } } } }
推荐阅读