物料收发明细、收发汇总报表统计二开库存单据方法原创
金蝶云社区-fengyj
fengyj
13人赞赏了该文章 1,274次浏览 未经作者许可,禁止转载编辑于2023年11月17日 11:45:40

         由于业务需要,二开新增了一张库存单据,需要在物料收发明细、物料收发汇总中也能统计得到该单据,以便能真实的看到库存发生的变化。

         以下做一个简要的二开说明。

         标准产品中预留了相应的接口供二开实现,第一步是继承基类,实现取数SQL,伪代码如下:

/// <summary>
/// 新增库存单据取数,需继承基类 AbstractStockDetailGetData
/// </summary>
public class NewBillGetDataReport : AbstractStockDetailGetData
{
	public override void InitialFullField()
	{
		base.InitialFullField();
	}

	public override void GetFullSql(List<SqlObject> lstSql)
	{
		//构建获取单据数据的SQL,需要构建收入/发出SQL以及期初SQL
		//把数据插入到平台临时表base.tmpFullTbl中,
		/*相关注意字段:
		 * FORDERBY:0 单据行数据,-200 期初数据
		 * FSTOCKIO:O 发出,I 收入
		*/
		
		//单据数据
		StringBuilder sbSql = new StringBuilder();
		sbSql.AppendLine(base.GetInsertSql());//INSERT INTO 语句,已包含base.tmpFullTbl表
		sbSql.AppendLine("SELECT [具体字段] FROM [对应数据表]");
		sbSql.AppendLine("WHERE [过滤条件]");

		lstSql.Add(new SqlObject(sbSql.ToString(), new List<SqlParam>()));

		//是否取期初数据
		if (base.IncludeQcData)
		{
			sbSql.Clear();
			sbSql.AppendLine(base.GetInsertQcSql());//INSERT INTO 语句
			//注意FORDERBY、FSTOCKIO两种字段的值,
			//期初数据都为FSTOCKIO="I",出库单数量写为 sum(0-baseQty)
			sbSql.AppendLine("SELECT [具体字段] FROM [对应数据表]");
			sbSql.AppendLine("WHERE [过滤条件]");
			sbSql.AppendLine(base.GetGroupbyQcSql());
			lstSql.Add(new SqlObject(sbSql.ToString(), new List<SqlParam>()));
		}
	}
}


         第二步需要注册插件(如果是修改已有的单据,比如对销售出库单取数进行二开,则只需要修改FLCASSNAME即可),注册方式是在数据表中登记该插件,并将此插件部署到应用服务器Bin目录下,报表取数时通过反射的方式加载此插件,注意每个字段说明,方式如下:

INSERT INTO T_BAS_UPDATESTOCKRPTSET
        ( FID ,
          FBILLFORMID ,
          FRPTTYPE ,
          FCLASSNAME
        )
VALUES  ( 100001 , -- FID - int,建议10万起步的ID
          '单据FOMRID' , -- FBILLFORMID - varchar(36)
          '应用该单据的报表FORMID' , -- FRPTTYPE - varchar(50)
          '插件完整路径,格式:命名空间.类名,组件名'  -- FCLASSNAME - varchar(255)
        )


赞 13