新增报表如何获取产品成本原创
金蝶云社区-请输入昵称___
请输入昵称___
6人赞赏了该文章 342次浏览 未经作者许可,禁止转载编辑于2021年07月26日 10:16:10

 星空中有专门的产品成本核算专题专题(https://vip.kingdee.com/knowledge/specialDetail/43477746610405376)。产品的成本是在标准报表中的《产成品还原对比分析》体现出来,具体的计算公式(https://vip.kingdee.com/article/12105)和计算逻辑(https://vip.kingdee.com/article/10990)社区都有具体的说明。

     但在实际开发中客户可能需要在其他报表上带出产品的成本,这边提供一个临时的解决方案。在成本还原对比分析表,进行扩展,二开一个服务插件。在BuilderReportSqlAndTempTable方法中,根据查询条件的判断,将返回的结果插入到二开自定义的数据表中。然后其他报表就可以获取到产品的成本。

 if (FIsUseDevReport == 1 && FSHOWWAY == "1" && FISSHOWMATERIA == 1 && ISSHOWDETAIL == 1 && GETLASTDATA == 1)
            {
                List<string> sqlArray = new List<string>();
                string sqlStr_temp_del = string.Format(@"/*dialect*/delete from demo 
                where fyear = '{0}'and fmonth = '{1}' ", Year, Period);
                string sqlStr_temp = string.Format(@"/*dialect*/insert into demo(
	                 FYear 
	                ,FMonth 
	                ,FItemModel 
	                ,FMaterialId 
	                ,FItemName 
	                ,FCURRCOSTAMOUNT 
	                ,FMaterialIdChild 
	                ,FChildItemName 
	                ,FCURRUSEDHOUR 
	                ,FCURRPRICE 

                )
                select
	                '{1}' as FYear 
	                ,'{2}' FMonth 
	                ,b.FSPECIFICATION as FItemModel 
	                ,b.FNUMBER as FMaterialId 
	                ,b.FNAME as FItemName 
	                ,a.FCURRCOSTAMOUNT 
	                ,c.FMaterialIdChild 
	                ,c.FChildItemName 
	                ,c.FCURRUSEDHOUR 
	                ,c.FCURRPRICE 
                    
                from {0} a inner join (select b.FSPECIFICATION,a.FMATERIALID,a.FNUMBER,b.FNAME from
                 T_BD_MATERIAL a inner join T_BD_MATERIAL_L b on a.FMATERIALID = b.FMATERIALID and b.FLOCALEID = 2052) b 
                 on a.FPRODUCTID = b.FMATERIALID 
                inner join (
                select
                a.FPRODUCTID 
                ,b.FNUMBER as FMaterialIdChild 
                ,b.FNAME as FChildItemName 
                ,a.FCURRUSEDHOUR 
                ,a.FCURRPRICE 
                from {0} a inner join (select b.FSPECIFICATION,a.FMATERIALID,a.FNUMBER,b.FNAME from T_BD_MATERIAL a 
                inner join T_BD_MATERIAL_L b on a.FMATERIALID = b.FMATERIALID and b.FLOCALEID = 2052) b 
                on a.FMATERIALID = b.FMATERIALID 
                where FMATERIALFIELD_FNAME <> ''
                ) c  on a.FPRODUCTID = c.FPRODUCTID
                where FCOSTITEMID_FNAME = '直接材料' ", tableName, Year, Period);
                sqlArray.Add(sqlStr_temp_del);
                sqlArray.Add(sqlStr_temp);
                if (sqlArray.Count > 0)
                {
                    DBUtils.ExecuteBatch(this.Context, sqlArray, 100);
                }

说明:1.查询过后的报表才会显示成本。2.如果不是全部物料,请在条件里面, 缺少一个条件(比如更新还原表)。

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