电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

【插件开发笔记】获取最新存货核算单价

来源:金蝶云社区作者:金蝶2024-09-162

【插件开发笔记】获取最新存货核算单价

前文:以下SQL是用于获取最新的存货核算表各出库核算及入库核算单价,不包含成本调整单的金额【不知道什么原因 反正没取到。。。所以请视业务场景使用】。

PS:取数SQL日期部分存在一个小BUG 代码部分已经修复

  1. 获取最新存货核算出库单价

    image.webp

  2. 获取最新存货核算采购单价

    image.webp



        /// <summary>

        /// 获取出库单价

        /// </summary>

        /// <returns></returns>

        public Dictionary<Int64, Decimal> QuerySoPrice(Dictionary<Int64, List<DynamicObject>> MasterIds,Context this_Con)

        {

            string sql = @"select B.FMATERIALID ,FNUMBER, SUM(FCurrentOutAmount ) FCurrentOutAmount ,SUM(FOutStockQty) FOutStockQty,B.FYEAR,MAX(B.FPERIOD) FPERIOD 

                                    from (select FMATERIALID,MAX(FYEAR)FYEAR

                                        from (select DIM.FMATERIALID,SUM(FOutStockQty)  FOutStockQty, FYEAR

                                                    from   T_HS_OUTACCTG AG

                                                    inner join T_HS_INIVBALANCE_H BAL on AG.FID = BAL.FID

                                                    inner join T_HS_CALDIMENSIONS CAL  on AG.FDIMENSIONID = CAL.FDIMENSIONID

                                                    inner join T_HS_INIVSTOCKDIMENSION DIM on BAL.FDIMEENTRYID = DIM.FENTRYID

                                                    inner join T_ORG_ACCOUNTSYSTEM sy on  CAL.Facctsystemid  =sy. FACCTSYSTEMID 

                                                    inner join T_FA_ACCTPOLICY fa  on fa.FACCTPOLICYID=cal.FACCTPOLICYID

                                                where  sy.fisdefault='1' and fa.fisdefault='1'and bal.FEndInitKey='1' and bal.FOutStockQty<>0 

                                                GROUP BY FMATERIALID  , FYEAR

                                                ) a where  FOutStockQty<>0 GROUP BY FMATERIALID  )A

                                        left join (select DIM.FMATERIALID ,ma.FNUMBER, bal.FCurrentOutAmount,bal.FOutStockQty,FYEAR,FPERIOD

                                                    from   T_HS_OUTACCTG AG

                                                        inner join T_HS_INIVBALANCE_H BAL on AG.FID = BAL.FID

                                                        inner join T_HS_CALDIMENSIONS CAL  on AG.FDIMENSIONID = CAL.FDIMENSIONID

                                                        inner join T_HS_INIVSTOCKDIMENSION DIM on BAL.FDIMEENTRYID = DIM.FENTRYID

                                                        inner join T_ORG_ACCOUNTSYSTEM sy on  CAL.Facctsystemid  =sy. FACCTSYSTEMID 

                                                        inner join T_FA_ACCTPOLICY fa  on fa.FACCTPOLICYID=cal.FACCTPOLICYID

                                                        left join T_BD_MATERIAL MA ON MA.FMATERIALID=DIM.FMATERIALID

                                                    where  sy.fisdefault='1' and fa.fisdefault='1'and bal.FEndInitKey='1' 

                                                            and bal.FOutStockQty<>0 ) b 

                                                        on a.FMATERIALID=b.FMATERIALID and a.FYEAR=b.FYEAR 

                                                WHERE b.FMATERIALID IN (SELECT FID FROM table(fn_StrSplit(@MaterialIds,',',1)))

                                            GROUP BY B.FMATERIALID ,FNUMBER,B.FYEAR";

            SqlParam param = new SqlParam("@MaterialIds", KDDbType.udt_inttable, MasterIds.Keys.ToArray());

            var SoPriceList = DBUtils.ExecuteDynamicObject(this_Con, sql, null, null, System.Data.CommandType.Text, param);

            //var SoPriceList = DBUtils.ExecuteDynamicObject(this_Con, sql);


            // 对已经取得的物料库存数据,按物料进行分组,以便后面在循环中,快速取到本物料的信息

            Dictionary<Int64, Decimal> SoPrice = new Dictionary<Int64, Decimal>();

            foreach (var Price in SoPriceList)

            {

                long materialMasterId = Convert.ToInt64(Price["FMATERIALID"]);

                Decimal FCurrentOutAmount = Convert.ToDecimal(Price["FCurrentOutAmount"]);

                Decimal FOutStockQty = Convert.ToDecimal(Price["FOutStockQty"]);

                if (SoPrice.ContainsKey(materialMasterId) == false)

                {

                    if (FOutStockQty == 0)

                    {

                        SoPrice.Add(materialMasterId, 0);

                    }

                    else

                    {

                        Decimal PriceXX = FCurrentOutAmount / FOutStockQty;

                        SoPrice.Add(materialMasterId, PriceXX);

                    }

                }

            }

            return SoPrice;

        }



        /// <summary>

        /// 获取入库单价

        /// </summary>

        /// <returns></returns>

        public Dictionary<Int64, Decimal> QueryPoPrice(Dictionary<Int64, List<DynamicObject>> MasterIds, Context this_Con)

        {

            string sql = @"select B.FMATERIALID ,FNUMBER, SUM(FCurrentInAmount ) FCurrentInAmount ,SUM(FCurrentInQty) FCurrentInQty,B.FYEAR,MAX(B.FPERIOD)FPERIOD 

                                    from (select FMATERIALID,MAX(FYEAR)FYEAR

                                        from (select DIM.FMATERIALID,SUM(FCurrentInQty)  FCurrentInQty, FYEAR

                                                    from   T_HS_OUTACCTG AG

                                                    in

【插件开发笔记】获取最新存货核算单价

前文:以下SQL是用于获取最新的存货核算表各出库核算及入库核算单价,不包含成本调整单的金额【不知道什么原因 反正没取到。。。所以请视...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信