物料收发明细、收发汇总报表统计二开库存单据方法原创
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) )
推荐阅读