直接sql账表通过按钮快捷查询原创
金蝶云社区-eris
eris
4人赞赏了该文章 1031次浏览 未经作者许可,禁止转载编辑于2021年09月20日 19:12:29

实现功能:根据单据头字段(创建日期和物料编码)直接查询账表数据,其中单据的创建日期小于字段创建日期的值,单据物料等于字段物料编码的值。


  1. 创建直接sql账表,命名为“单据A直接sql报表”,sql脚本带两个关键字“创建日期”和“物料编码”,使用分隔容器分隔,单据头增加日期,基础资料字段和查询按钮字段,如下图:

    image.png

  2. 编写表单插件BillASqlReportPlugIn 并注册,具体代码参考最后如下图:

    image.png

  3. 运行效果,如下图:

    image.png



插件代码:

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);
            }
        }
     }
}


赞 4