其他单据参与【预计量统计】原创
金蝶云社区-圣杰
圣杰
9人赞赏了该文章 5313次浏览 未经作者许可,禁止转载编辑于2020年12月13日 16:30:51

如果想统计二开单据的预计出/入,需要二开插件来完成!具体步骤如下:

1. 继承抽象基类:AbstractExpectQtyPlugin

该抽象基类位于Kingdee.K3.Core.ExpectQty命名空间下。主要定义了以下方法和属性:

protected AbstractExpectQtyPlugIn(string expectType, string billname)
{
    this.ExpectType = expectType;
    this.BillName = billname;
}

/// <summary>
/// 预计类型:OUT/IN
/// </summary>
public string ExpectType { get; set; }

/// <summary>
/// 单据标识
/// </summary>
public string BillName { get; set; }

/// <summary>
/// 上下文,使用属性注入
/// </summary>
public Context Context { get; set; }

/// <summary>
/// 预计量参数,使用属性注入
/// </summary>
public ExpectQtySystemParameter ExpectSystemParameter { get; set; }

/// <summary>
/// 获取当前单据的预计出/入设置
/// </summary>
public ExpectQtySystemParameter.ExpectQtyBillSetting CurrentExpectQtyBillSetting
{
  get
  {
  return this.ExpectSystemParameter.ExpectOutQtyBillSettings
  .Concat(this.ExpectSystemParameter.ExpectInQtyBillSettings)
  .FirstOrDefault(billSetting => billSetting.ExpectType.EqualsIgnoreCase(this.ExpectType) 
  && billSetting.Bill.EqualsIgnoreCase(this.BillName));
  }
}

/// <summary>
/// 提供预计量查询SQL
/// </summary>
/// <returns></returns>
protected abstract string PrepareExpectQtyQuerySql();

继承该抽象基类时,需要在构造函数中指定,ExpectTypeBillName。其中ExpectType用于指定该单据是统计预计出还是预计入,分别对应OUTIN(大写);BillName即单据标识(大小写敏感,和BOS IDE上定义的单据标识保持一致)。

2. 方法重载

按以上所述,根据预计类型ExpectType重载对应的方法。该方法的重载,主要是构造查询SQL,按照指定的表结构查询指定的列即可。需要查询以下列:

FTYPE VARCHAR(10) DEFAULT ' ',--统计类型【OUT\IN】
FBILLNAME VARCHAR(36) DEFAULT ' ',--单据标识(大小写敏感,必须与单据上定义的标识一致)
FTABLENAME VARCHAR(36) DEFAULT ' ',--所在表名(大小写敏感,必须与单据上定义的标识一致)
FBILLNO VARCHAR(36) DEFAULT ' ', --单据编号
FBILLTYPEID VARCHAR(36) DEFAULT '', --单据类型
FSRCBILLNO VARCHAR(36) DEFAULT ' ', --源单编号
FSOENTRYID INT DEFAULT 0, --原始订单分录
FDOCUMENTSTATUS CHAR(1) DEFAULT '0',--单据状态
FID INT DEFAULT 0,--单据内码
FENTRYID VARCHAR(36) DEFAULT 0, --分录内码
FBILLSEQ INT DEFAULT 0, --分录行号
FMASTERID INT DEFAULT 0,--物料编码(需要关联T_BD_MATERIAL,查询FMASTERID)
FBASEUNITID INT DEFAULT 0, --基本计量单位
FBASEQTY AS FSTOCKBASEQTY,--基本单位数量(库存单位)
FSTOCKORGID INT DEFAULT 0,--库存组织
FSTOCKID INT DEFAULT 0,--仓库
FSTOCKLOCID INT DEFAULT 0,--仓位
FAUXPROPID INT DEFAULT 0,--辅助属性
FMTONO VARCHAR(50) DEFAULT ' ',--计划跟踪号
FBOMID INT DEFAULT 0,--BOM版本
FLOT INT DEFAULT 0,--批号
FLOT_TEXT NVARCHAR(30) DEFAULT ' ',--批号文本
FPRODUCEDATE DATETIME DEFAULT '19910101',--生产日期
FEXPIRYDATE DATETIME DEFAULT '19910101',--过期日期
FSTOCKSTATUSID INT DEFAULT 0,--库存状态
FOWNERTYPEID VARCHAR(36) DEFAULT ' ',--货主类型
FOWNERID INT DEFAULT 0,--货主
FKEEPERTYPEID VARCHAR(36) DEFAULT ' ',--保管者类型
FKEEPERID INT DEFAULT 0--保管者

其中FTYPEFBILLNAME,与定义的ExpectTypeFBillName属性保持一致即可(大小写敏感)。若对应列为空,则按对应列字段类型,给予默认值即可。

注意所有数量字段,需要按基本单位查询!!!

3. 举例说明(其他出库单,统计预计出)

namespace Kingdee.K3.SCM.Business.DynamicForm.ExpectQty
{
     [Description("其他出库单预计出统计插件")]
    public class MisdilveryExpectQtyPlugIn : AbstractExpectQtyPlugIn
    {
         public MisdilveryExpectQtyPlugIn()
             : base("OUT", "STK_MisDelivery")
         { }

         protected override string PrepareExpectOutQtyQuerySql()
         {
             string sql = @"
SELECT 'OUT' FTYPE,
'STK_MisDelivery' FBILLNAME, --来源单据
'T_STK_MISDELIVERY' FTABLENAME, --所在表名
TSTM.FBILLNO, --单据编号
TSTM.FBILLTYPEID,--单据类型
TSTMER.FSRCBILLNO, --源单编号
0 AS FSOENTRYID,--订单分录
TSTM.FDOCUMENTSTATUS AS FDOCUMENTSTATUS, --状态
TSTM.FID, --单据内码
TSTME.FENTRYID AS FENTRYID, --分录内码
TSTME.FSEQ AS FBILLSEQ, --行号
TBM.FMASTERID AS FMASTERID, --物料
TSTME.FBASEUNITID AS FBASEUNITID, --基本计量单位
(CASE WHEN TSTM.FSTOCKDIRECT ='RETURN' THEN 0-TSTME.FBASEQTY ELSE TSTME.FBASEQTY END) AS FSTOCKBASEQTY, --基本单位数量(退货方向取负)
TSTM.FStockOrgID AS FSTOCKORGID, --发货组织
TSTME.FSTOCKID AS FSTOCKID, --出货仓库
TSTME.FSTOCKLOCID AS FSTOCKLOCID, --出货仓位
TSTME.FAUXPROPID AS FAUXPROPID,--辅助属性
TSTME.FMTONO AS FMTONO, --计划跟踪号
TSTME.FBOMID AS FBOMID, --BOM编码
TSTME.FLOT AS FLOT, --批号ID
TSTME.FLOT_TEXT AS FLOT_TEXT, --批号文本
TSTME.FPRODUCEDATE AS FPRODUCEDATE, --生产日期
TSTME.FEXPIRYDATE AS FEXPIRYDATE, --到期日期

CASE
WHEN TSTME.FSTOCKSTATUSID > 0 THEN
TSTME.FSTOCKSTATUSID
ELSE
10000
END AS FSTOCKSTATUSID, --库存状态
TSTME.FOWNERTYPEID AS FOWNERTYPEID, --货主类型
TSTME.FOWNERID AS FOWNERID, --货主
' ' AS FKEEPERTYPEID, --保管者类型
0 AS FKEEPERID --保管者
       
       
  FROM T_STK_MISDELIVERY TSTM
 INNER JOIN T_STK_MISDELIVERYENTRY TSTME
    ON TSTME.FID = TSTM.FID
 INNER JOIN T_BD_MATERIAL TBM
    ON TBM.FMATERIALID = TSTME.FMATERIALID
 LEFT JOIN T_STK_MISDELIVERYENTRY_R TSTMER
 ON TSTME.FENTRYID = TSTMER.FENTRYID

 WHERE TSTM.FDOCUMENTSTATUS <> 'Z'
   AND TSTM.FDOCUMENTSTATUS <> 'C' --统计单据状态不为暂存状态和审核状态(审核状态的出库单已经出库啦)
   AND TSTM.FCANCELSTATUS = 'A' --单据未取消且未关闭   
";
             return sql;
         }
    }
}

查询条件中,可以根据业务,添加相关的过滤条件。比如排除已关闭、已作废的单据状态等。

写好sql,请务必在数据库中执行,以确定是否执行有误,并再三确认查询列是否缺失。

4. 参数设置

  1. 打开预计可发量参数
  2. 根据统计的预计可发量类型,选择对应的【预计出/入单据】
  3. 在插件绑定中,输入自定义预计可发量查询插件的完全限定名。
  4. 选择统计的单据,勾选统计的时点(单据状态),若插件配置正确,即可成功启用。
  5. 根据业务需求,配置预计出\入计算公式
插件绑定插件绑定


赞 9