其他单据参与【预计量统计】原创
10人赞赏了该文章
5,745次浏览
编辑于2020年12月13日 16:30:51
摘要由AI智能服务提供
本文介绍了如何使用二开插件来统计二开单据的预计出/入量。首先,需继承AbstractExpectQtyPlugin抽象基类,并在构造函数中指定单据类型(ExpectType)和单据标识(BillName)。接着,根据预计类型重载PrepareExpectQtyQuerySql方法,构造查询SQL语句以查询指定列。示例展示了如何为“其他出库单”统计预计出量。最后,通过设置预计可发量参数和插件绑定来启用统计功能。
有用
反馈
如果想统计二开单据的预计出/入,需要二开插件来完成!具体步骤如下:
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();
继承该抽象基类时,需要在构造函数中指定,ExpectType
和BillName
。其中ExpectType
用于指定该单据是统计预计出还是预计入,分别对应OUT
和IN
(大写);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--保管者
其中FTYPE
和FBILLNAME
,与定义的ExpectType
和FBillName
属性保持一致即可(大小写敏感)。若对应列为空,则按对应列字段类型,给予默认值即可。
注意所有数量字段,需要按基本单位查询!!!
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. 参数设置
- 打开预计可发量参数
- 根据统计的预计可发量类型,选择对应的【预计出/入单据】
- 在插件绑定中,输入自定义预计可发量查询插件的完全限定名。
- 选择统计的单据,勾选统计的时点(单据状态),若插件配置正确,即可成功启用。
- 根据业务需求,配置预计出\入计算公式
赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!