模糊查询时显示库存量 C#(此插件只适用没有批次管理)原创
金蝶云社区-疯狂的石头
疯狂的石头
10人赞赏了该文章 655次浏览 未经作者许可,禁止转载编辑于2022年06月24日 20:19:39

image.png

思路:

  1. 物料上增加一个文本字段,例如“即时库存”。 

  2. 模糊查询参数配置设置可以查询显示 "即时库存” 。

  3. 需要的单据或者基类单据编写表单插件实现AfterQuickGetData方法,根据传入的数据获取即时库存并更新数据包。

image.png

using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Orm.DataEntity;
namespace YZJ.YCTD.BusinessPlugIn.yzj.yctd.Sale
{
    [Kingdee.BOS.Util.HotUpdate]
    [System.ComponentModel.Description("模糊查询时显示库存量")]
    public class Test : AbstractDynamicFormPlugIn
    {
        public override void AfterQuickGetData(AfterQuickGetDataEventArgs e)
        {
            base.AfterQuickGetData(e);
            if (e.FieldKey.EqualsIgnoreCase("FMATERIALID") && e.DataSource != null && e.DataSource.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var item in e.DataSource)
                {
                    sb.Append(item[e.FieldKey].ToString());
                    sb.Append(',');
                }
                string masterIds = sb.ToString().TrimEnd(',');
                string sql = @" SELECT b.FMATERIALID,UnitL.FNAME,SUM(a.FBASEQTY) FBASEQTY
                FROM T_STK_INVENTORY a
                INNER JOIN T_BD_MATERIAL b ON a.fmaterialid = b.fmasterid
                AND a.FSTOCKORGID = b.FUSEORGID
                INNER JOIN dbo.T_BD_UNIT_L UnitL ON UnitL.FUNITID=a.FBASEUNITID
                WHERE b.FMATERIALID IN (" + masterIds + ") AND a.FISEFFECTIVED = '1' AND a.FBASEQTY <> 0 " +
               "GROUP BY b.FMATERIALID,UnitL.FNAME";
                DynamicObjectCollection datas = DBUtils.ExecuteDynamicObject(this.Context, sql);
                if (datas == null || datas.Count < 0)
                    return;
                foreach (var item in e.DataSource)
                {
                    DynamicObject MyWhere = datas.Where(t => t["FMATERIALID"].ToString() == item["FMATERIALID"].ToString()).FirstOrDefault();
                    if (MyWhere == null)
                        continue;
                    string FBASEQTY = MyWhere["FBASEQTY"].ToString();
                    string Flot = MyWhere["FNUMBER"].ToString();
                    item["F_SD_InvQty"] = FBASEQTY;
                }
            }
        }
    }
}



图标赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0