Example #1
0
        /// <summary>
        /// 递归
        /// </summary>
        /// <param name="code">料号</param>
        /// <param name="strTier"></param>
        /// <param name="TierCount"></param>
        public void Recursion(string code, SOLine soline, string strTier, Decimal Need_Number)
        {
            string LastTier = string.Empty;
            int    Number   = 0;
            //查找条件为:
            //物料清单.母件料品=销售订单行.料品 and状态=已审核 and 生产单位=销售订单行.料品.生产单位 and 当前日期在生效范围内 数据中心组织 生产目的=0.,Bom类型=自制 项目=null
            BOMMaster Master = BOMMaster.Finder.Find("ItemMaster.Code='" + code + "'  and Status=2 and ProductUOM ='" + soline.ItemInfo.ItemID.ManufactureUOM.ID + "' and EffectiveDate <='" + DateTime.Now + "' and DisableDate >='" + DateTime.Now + "' and AlternateType =0  and Org.Code='J001'");//查询物料清单头   1001411156754220

            if (Master != null)
            {
                foreach (BOMComponent item in Master.BOMComponents) //循环物料清单行
                {
                    if (item.BOMMaster.ID == Master.ID)             //单头id=单行BOMMaster
                    {
                        Number++;
                        //创建BOM单头/业务员
                        OrderBomHead BomHead = OrderBomHead.Create();
                        BomHead.OrderLineRow  = soline.DocLineNo;//销售订单行号
                        BomHead.OrderHeadKey  = soline.SO.Key;
                        BomHead.OrderLineKey  = soline.Key;
                        BomHead.Tier          = strTier + "." + Number;
                        LastTier              = BomHead.Tier;
                        BomHead.ParentPartKey = Master.ItemMasterKey;//母件
                        if (Master.ItemMaster != null)
                        {
                            BomHead.SubkeyTypeKey = BOMComponent.Finder.Find("ItemMaster=@ItemMaster", new OqlParam(item.ItemMaster.ID)).ItemMaster.StockCategoryKey;
                        }//item.ComponentType;//.ComponentTypeKey;//.Name;//子项分类 =》库存分类
                        BomHead.SubKeyKey     = item.ItemMasterKey;//子项
                        BomHead.Dosage        = item.UsageQty;//用量  UsageQty
                        BomHead.DosageUnitKey = item.IssueUOMKey;    //用量单位 IssueUOM
                        BomHead.SellNumber    = soline.OrderByQtyPU; //;//销售数量
                        BomHead.SellUnitKey   = soline.PUKey;        //销售单位
                        if (Need_Number != 0)
                        {
                            BomHead.NeedNumber = BomHead.SellNumber * item.UsageQty;//需求数量=母项的需求数量*子项的用量
                            Need_Number        = BomHead.NeedNumber;
                        }
                        else
                        {
                            BomHead.NeedNumber = BomHead.SellNumber * item.UsageQty;//需求数量=销售数量数量*子项的用量
                            Need_Number        = 0;
                        }
                        // BomHead.SupplierType=;//供应类型  物料清单扩展字段
                        // BomHead.SourceType=;//来源类型
                        BomHead.Remark = item.Remark;                                                                                             //备注
                        OrderBomLine BomLine = OrderBomLine.Create(BomHead);
                        BomLine.SubKeyKey = item.ItemMasterKey;                                                                                   //子项
                        long KeyID = item.ID;
                        Operators.EntityKey BuyerKey = BOMComponent.Finder.Find(string.Format("id={0}", KeyID)).ItemMaster.PurchaseInfo.BuyerKey; //业务员
                        if (BuyerKey != null)
                        {
                            BomLine.SalesManKey = BuyerKey;
                            if (BuyerKey.GetEntity().Dept != null && Department.Finder.FindByID(BuyerKey.GetEntity().Dept.ID) != null)
                            {
                                BomLine.DepartmentKey = Department.Finder.FindByID(BuyerKey.GetEntity().Dept.ID).Key;//所属部门
                            }
                        }
                        BomLine.NeedUomKey     = item.IssueUOMKey;   //需求单位   IssueUOM
                        BomLine.ProcurementQty = BomHead.NeedNumber; //采购数量【可改】   集合不能大于需求数量
                        BomLine.NeedNumber     = BomHead.NeedNumber; //需求数量=销售订单数量
                        BomLine.Memo           = item.Remark;        //备注
                        if (item.ItemMaster != null && item.ItemMaster.Code != null)
                        {
                            Recursion(item.ItemMaster.Code, soline, LastTier, Need_Number);//递归
                        }
                    }
                }
            }
        }