zoukankan      html  css  js  c++  java
  • 如何利用极致业务基础平台构建一个通用企业ERP之十四生产任务单设计

    1.生产任务单界面设计如下:

     

    要求实现功能如下:

    1.生产任务单可以由销售订单选取而产生。

    2.生产任务单可以下推领料。生产完后可以下推成品入库。

    3.自动根据BOM计算此次生产所需要的原料。

    代码如下:

    客户端代码:

     /// <summary>
        /// 生产任务单
        /// </summary>
        class Product : Jeez.MulEntityInput.BaseBillUI
        {
            //控件声明定义
            private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txWLDW;//往来单位
            private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txOrg;//组织机构
            private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txDept;//部门
            private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txEmployee;//业务员
            private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txBibie;//币别
            private Jeez.Control.JeezNumberTextBox.JeezNumberTextBox txRat;//汇率
    
            private Jeez.Control.JeezUltraCalendarCombo.JeezUltraCalendarCombo dtDate;//日期
    
    
    
            private Jeez.Control.JeezGrid.JeezGrid gridZY;//明细grid
            private Jeez.Control.JeezUltraTabControl.JeezUltraTabControl pagecontrol1 = null;//下方页框控件
            private Jeez.Control.JeezGrid.JeezGrid gridKucun;//库存 
            private Jeez.Control.JeezGrid.JeezGrid gridNeed;//库存 
            private bool isLoading = true;
            //定义几个初始化常见的值
          
            private bool isSelect = true;//是否选单
    
            public static int j = 0;//因为导入可能连续导入所以用来计数,而且还有可能
    
            /// <summary>
            /// 加载控件,以及控件相关事件定义
            /// </summary>
            /// <returns></returns>
            public override bool LoadUI()
            {
                bool b = base.LoadUI();
                if (b)
                {
                    txWLDW = base.GetControlByName("JeezTextBox5") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                 
                    txOrg = base.GetControlByName("JeezTextBox3") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                    txDept = base.GetControlByName("JeezTextBox4") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                    txEmployee = base.GetControlByName("JeezTextBox6") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                    txBibie = base.GetControlByName("JeezTextBox8") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
    
                    txRat = base.GetControlByName("JeezNumberTextBox1") as Jeez.Control.JeezNumberTextBox.JeezNumberTextBox;
               
                    dtDate = base.GetControlByName("JeezCalendarCombo1") as Jeez.Control.JeezUltraCalendarCombo.JeezUltraCalendarCombo;
                    pagecontrol1 = base.GetControlByName("JeezTabControl1") as Jeez.Control.JeezUltraTabControl.JeezUltraTabControl;
                    gridZY = base.GetControlByName("JeezGrid1") as Jeez.Control.JeezGrid.JeezGrid;
                    gridKucun = base.GetControlByName("gridKucun") as Jeez.Control.JeezGrid.JeezGrid;
                    gridNeed = base.GetControlByName("JeezGrid2") as Jeez.Control.JeezGrid.JeezGrid;
                    pagecontrol1.SelectedTabChanged += new Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventHandler(pagecontrol1_SelectedTabChanged);
    
                    
                    gridZY.AfterCellUpdate += new CellEventHandler(gridZY_AfterCellUpdate);
                }
                return b;
            }
           
    
            /// <summary>
            /// 更改Grid的构建方式
            /// </summary>
            /// <param name="CTL"></param>
            /// <param name="EOL"></param>
            /// <param name="IsDeleteChildEntity"></param>
            protected override void FillGridDataToEntity(Jeez.ControlManager.ControlHelper CTL, EntityObjectList EOL, bool IsDeleteChildEntity)
            {
                base.FillGridDataToEntity(CTL, EOL, false);
            }
    
            /// <summary>
            /// 设置默认值
            /// </summary>
            void InitByDefineOrder()
            {
                
    
            }
    
     
            /// <summary>
            /// 页框轮换点击事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void pagecontrol1_SelectedTabChanged(object sender, Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventArgs e)
            {
    
                if (e.Tab.Index == 2)
                {
                    //如果点的是第二个页框,用来显示即时库存
                    if (gridKucun != null)
                    {
                        StringBuilder strMatID = new StringBuilder();
                        strMatID.Append("(0");
                        foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in gridNeed.Rows)
                        {
                            if (row.Cells["matid"].Value.ToString() != "")
                            {
                                //获取物料
                                EntityObject eoMat = base.GetRefEntityObjectByGridEntityCol(gridNeed, row.Cells["matid"]);
                                strMatID.Append(string.Format(",{0}", (int)eoMat.PrimaryKeyValue));
                            }
                        }
                        strMatID.Append(")");
    
                        DataTable dt = new DataTable();
                        DataSet ds = new DataSet();
    
                        Jeez.Core.NativeQueryCommand cmd;
                        Jeez.Core.INativeQuery quary = Jeez.Login.RemoteCall.GetNativeQuery();
                        cmd = new NativeQueryCommand();
                        cmd.CommandText = string.Format(@"select b.Number as 物料代码,b.Name as 物料名称,c.Name as 计量单位,
    sum(a.Many) as 总数量,sum(a.UseMany) as 订单占用数量,sum(a.CUseMany) as 出库占用数量,sum(a.Many)-sum(a.CUseMany)  as 可用数量 
    from jzNowKucun a left join jzMat b on a.MatID=b.ID
                         left join jzJiliangdanwei c on a.JiliangdanweiID=c.ID 
                         left join jzWareHouse w on w.ID=a.WareHouseID
    
    
    where a.MatID in {0} and w.OrganizationID={1} group by b.Number,b.Name,c.Name", strMatID,(int)txOrg.Tag);
                        try
                        {
    
                            dt = quary.GetDataTable(this.objContext.ConnectionString, cmd);
    
                            ds = new System.Data.DataSet();
                            ds.Tables.Add(dt);
                            gridKucun.DataSource = ds.Tables[0];
                            gridKucun.FixCol = 3;
                        }
                        catch (Exception ex)
                        {
                            Jeez.Common.UI.MsgBox.Show(ex.Message.ToString());
                        }
    
                    }
                }
    
    
            }
            /// <summary>
            /// 设置菜单控件状态
            /// </summary>
            public override void SetMenuStatus()
            {
                base.SetMenuStatus();
    
            }
            /// <summary>
            /// 保存前检查事件
            /// </summary>
            /// <returns></returns>
            protected override bool BeforeSaveCheck()
            {
                bool b = base.BeforeSaveCheck();
                if (b)
                {
                    Hashtable hs = new Hashtable();
                    int i = 0;
                    foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in this.gridZY.Rows)
                    {
                        if (row.Cells["matid"].Value.ToString() != "")
                        {
                            if (!hs.Contains(row.Cells["MatID"].Value))
                            {
                                hs.Add(row.Cells["MatID"].Value, row.Cells["MatID"].Value);
                            }
                            i++;
                        }
                    }
                    if (hs.Count != i)
                    {
                        Jeez.Common.UI.MsgBox.Show("录入的物料有重复!");
                        return false;
    
                    }
                    
    
                }
                return b;
            }
    
            /// <summary>
            /// 指定服务端调用的类
            /// </summary>
            /// <param name="ServerDllName"></param>
            /// <param name="ServerClassName"></param>
            protected override void SetInvokeBusiLogicName(out string ServerDllName, out string ServerClassName)
            {
                ServerDllName = "FolyerERPServer.dll";
                ServerClassName = "FolyerERPServer.FolyerERPServer_SCM.ProductServer";
            }
            /// <summary>
            /// 新增事件
            /// </summary>
            protected override void AddNew()
            { 
                base.AddNew();
                if (this.entityobject == null)
                {
                    InitByDefine();
                }
            }
    
    
             
            /// <summary>
            /// 单元格值变化事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void gridZY_AfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
            {
                if (!isLoading)
                    return;
                //下推过程中以下推传过来的数据为主,不然会被冲掉
                if (UserData != null)
                    return;
                if (!isSelect)
                    return;
                 
            }
             
            /// <summary>
            /// 弹出窗体事件,
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="EntityID"></param>
            /// <param name="RunTimeFilter"></param>
            protected override void ShowUISelectedForm(object sender, int EntityID, ArrayList RunTimeFilter)
            {
                //如果是往来单位表
                if (EntityID == EntityIDEnum.RefUnit)
                {
                    ArrayList ar = new ArrayList();
                    //过滤只有客户的往来单位
                    Jeez.Runtime.Base.General.RunTimefilterDefine fd;
    
                    fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzRefUnit.IsSupply}", 0, 0, Jeez.FormProperty.FilterDefineCompare.Equals, Jeez.FormProperty.FilterDefineLogic.NONE, 1);
    
                    ar.Add(fd);
    
                    base.ShowUISelectedForm(sender, EntityID, ar);
    
    
                }
                else
                {
                    base.ShowUISelectedForm(sender, EntityID, RunTimeFilter);
                }
            }
    
            protected override void BillUI_Load(object sender, EventArgs e)
            {
    
                base.BillUI_Load(sender, e);
                if (this.entityobject == null)
                {
                    //公共的初始化值
                    InitByDefine();
    
                }
    
            }
            /// <summary>
            /// 将实体数据banding到控件上的事件
            /// </summary>
            protected override void LoadEntityDataToControl()
            {
                isLoading = false;
                base.LoadEntityDataToControl();
                isLoading = true;
                InitByDefineOrder();
    
            }
            /// <summary>
            /// 自定义初始化控件上的一些值
            /// </summary> 
            void InitByDefine()
            {
                
                //实现自动将当前登录用户所对应的职员信息的部门,组织机构,本身职员信息填充到界面上的三个控件减少输入
                EntityObjectFactory eofEmployee = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.Employee);
                EntityObject eoEmp = eofEmployee.FindFirst("SysUserID={0}", Jeez.Login.Environment.UserID);
                if (eoEmp != null && txEmployee != null)
                {
    
                    txEmployee.Tag = eoEmp.PrimaryKeyValue;
                    txEmployee.VALUE = eoEmp.ToString();
    
                    txOrg.Tag = eoEmp.GetRelatedObject("OrganizationID").PrimaryKeyValue;
                    txOrg.VALUE = eoEmp.GetRelatedObject("OrganizationID").ToString();
    
    
                    txDept.Tag = eoEmp.GetRelatedObject("DepartMentID").PrimaryKeyValue;
                    txDept.VALUE = eoEmp.GetRelatedObject("DepartMentID").ToString();
                }
    
                ////默认登录的时候往来单位ID获取
                EntityObjectFactory eofInnit = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.SystemInit);
                
                EntityObject eoInit = eofInnit.FindFirst("ID>0");
                if (eoInit != null)
                {
                    EntityObject eoBibie = eoInit.GetRelatedObject("CurrencyID");
                    if (eoBibie != null)
                    {
                        txBibie.Tag = eoBibie.PrimaryKeyValue;
                        txBibie.VALUE = eoBibie.ToString();
                        txRat.PropertyPage.Value = 1.0m;
                        //BibieID = (int)eoBibie.PrimaryKeyValue;
                    }
    
                    EntityObject eoWLDW = eoInit.GetRelatedObject("RefUnitID");
    
    
                    if (eoWLDW != null)
                    {
                        txWLDW.Tag = eoWLDW.PrimaryKeyValue;
                        txWLDW.VALUE = eoWLDW.ToString();
    
                       
                    }
                }
                this.gridZY.RowCount = 5;//默认设置5行
            }
    
    
            /// <summary>
            /// 菜单事件的扩展
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            /// <param name="Tool"></param>
            public override void ResponseMenuToolClickEvent(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e, object Tool)
            {
                Jeez.FormProperty.JeezTool tool = Tool as Jeez.FormProperty.JeezTool;
                if (tool == null) return;
                this.Cursor = Jeez.Common.UI.Waitcursor.WaitCursor;
                switch (tool.Name)
                {
                        //物料BOM拆解
                    case "toolBomDepart":
                        BomDepart();
                        break;
                    case "toolNextLingliao":
    
                        NextBill("jzProductNeed", "ProductNeedID", "jzLingliaoDetail", "ProductID", EntityFormIDEnum.内部领料单2);
                        
                        break;
                    case "toolNextRuku":
                        NextBill("jzProductDetail", "ProductDetailID", "jzProductRukuDetail", "ProductID", EntityFormIDEnum.成品入库单2);
                        
                        break;
    
                    case "toolUpBill":
    
                        UpBill(EntityFormIDEnum.销售订单一览表3, "jzSaleOrder");
                        break;
                    default:
                        break;
                }
                base.ResponseMenuToolClickEvent(sender, e, Tool);
                this.Cursor = Jeez.Common.UI.Waitcursor.Default;
            }
            /// 选单功能
            /// </summary>
            /// <param name="UpEntityFormID">选取的目标一览表ID</param>
            /// <param name="upTableName">选取的单据父表名称</param>
            public void UpBill(int UpEntityFormID, string upTableName)
            {
    
                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in gridZY.Rows)
                {
                    if (row.Cells["MatID"].Value.ToString() == "")
                    {
                        base.DeleteRow();
                    }
                }
                isSelect = false;
                 
                    SaleOrderList f;
                    ArrayList ar = new ArrayList();
    
    
                    f = base.ShowForm(EntityFormIDEnum.销售订单一览表3, ar, null) as SaleOrderList;
    
                    f.FormClosing += new FormClosingEventHandler(fList_FormClosing);
                 
    
            }
            void fList_FormClosing(object sender, FormClosingEventArgs e)
            {
                int UpDeailEntityID = 0;
                string UpTableEntityID = "";
                string UpTableDetailID = "";
    
                SaleOrderList f = sender as SaleOrderList;
                UpDeailEntityID = EntityIDEnum.SaleOrderDetail;
                UpTableEntityID = "SaleOrderID";
                UpTableDetailID = "SaleOrderDetailID";
    
                if (f != null && f.CurrentGrid != null && f.CurrentGrid.Selected.Rows.Count != 0)
                {
    
                    EntityObject eoOrg = null;
                    EntityObject eoSupier = null;
                    EntityObject eoBibie = null;
                    int i = 0;
                    Hashtable hs = new Hashtable();
                    foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in f.CurrentGrid.Selected.Rows)
                    {
                        //以下只是做判断是否满足选单条件
                        if (!(bool)BaseFunc.IsNull(row.Cells["IsCheck"].Value, false))
                        {
                            Jeez.Common.UI.MsgBox.Inform(string.Format("第{0}行没有审核", row.ListIndex + 1));
                            return;
                        } 
                        EntityObjectFactory eofDetail = EntityObjectFactory.GetInstance(this.objContext, UpDeailEntityID);
                        EntityObject eoDetail = eofDetail.FindFirst("ID={0}", row.Cells["DetailID"].Value);//获取子表对象
                        EntityObject eob = eoDetail.GetRelatedObject(string.Format(@"{0}", UpTableEntityID));//获取父表实体
                        if (eob != null)
                        {
                            if (eoOrg != null && eoOrg.PrimaryKeyValue.ToString() != eob.GetProperty("OrganizationID").ToString())
                            {
                                Jeez.Common.UI.MsgBox.Inform(string.Format("选择的组织机构不一致"));
                                return;
                            }
                            eoOrg = eob.GetRelatedObject("OrganizationID");
    
    
                            if (eoBibie != null && eoBibie.PrimaryKeyValue.ToString() != eob.GetProperty("CurrencyID").ToString())
                            {
                                Jeez.Common.UI.MsgBox.Inform(string.Format("选择的币别不一致"));
                                return;
                            }
                            eoBibie = eob.GetRelatedObject("CurrencyID");
                        }
    
    
    
                    }
    
                    foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in f.CurrentGrid.Selected.Rows)
                    {
                        //如果满足选单条件
                        EntityObjectFactory eofDetail = EntityObjectFactory.GetInstance(this.objContext, UpDeailEntityID);
                        EntityObject eoDetail = eofDetail.FindFirst("ID={0}", row.Cells["DetailID"].Value);//获取子表对象
                        //string a = string.Format(@"{0}", UpTableEntityID);
                        EntityObject eoParent = eoDetail.GetRelatedObject(string.Format(@"{0}", UpTableEntityID));//获取父表实体
    
                        if (eoDetail != null)
                        {
                            if (i == 0)
                            {//保证只赋值一次
    
                                txOrg.Tag = eoParent.GetRelatedObject("OrganizationID").PrimaryKeyValue;
                                txOrg.VALUE = eoParent.GetRelatedObject("OrganizationID").ToString();
    
                                txDept.Tag = eoParent.GetRelatedObject("DepartMentID").PrimaryKeyValue;
                                txDept.VALUE = eoParent.GetRelatedObject("DepartMentID").ToString();
    
                                //txWLDW.Tag = eoParent.GetRelatedObject("RefUnitID").PrimaryKeyValue;
                                //txWLDW.VALUE = eoParent.GetRelatedObject("RefUnitID").ToString();
    
                                txBibie.Tag = eoParent.GetRelatedObject("CurrencyID").PrimaryKeyValue;
                                txBibie.VALUE = eoParent.GetRelatedObject("CurrencyID").ToString();
    
                                txRat.PropertyPage.Value = (decimal)eoParent.GetProperty("Rate");
    
                                txEmployee.Tag = eoParent.GetRelatedObject("EmployeeID").PrimaryKeyValue;
                                txEmployee.VALUE = eoParent.GetRelatedObject("EmployeeID").ToString();
                            }
                            //为子Grid赋值
                            this.gridZY.ReadOnly = false;
    
    
                            this.gridZY.InsertRow(this.gridZY.Rows.Count);
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["UpBillNo"].Value = eoParent.GetProperty("BillNo");
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["MatID"].Tag = eoDetail.GetRelatedObject("MatID").PrimaryKeyValue;
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["MatID"].Value = eoDetail.GetRelatedObject("MatID").ToString();
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["JiliangdanweiID"].Tag = eoDetail.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["JiliangdanweiID"].Value = eoDetail.GetRelatedObject("JiliangdanweiID").ToString();
    
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["UpMany"].Value = eoDetail.GetProperty("Many");
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells[UpTableDetailID].Tag = eoDetail.PrimaryKeyValue;
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells[UpTableDetailID].Value = eoDetail.ToString();
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["Date"].Value = eoDetail.GetProperty("Date");
                            this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["Many"].Value = Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m));
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["SMany"].Value = eoDetail.GetProperty("SMany");
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["Danjia"].Value = eoDetail.GetProperty("Danjia");
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["RDanjia"].Value = eoDetail.GetProperty("RDanjia");
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["Amount"].Value = (Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m)) - Convert.ToDecimal(BaseFunc.IsNull(row.Cells["POMany"].Value, 0m))) * (decimal)eoDetail.GetProperty("Danjia");
                            //this.gridZY.Rows[this.gridZY.Rows.Count - 1].Cells["RAmount"].Value = (Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m)) - Convert.ToDecimal(BaseFunc.IsNull(row.Cells["POMany"].Value, 0m))) * (decimal)eoDetail.GetProperty("RDanjia");
    
                            i++;
    
                        }
    
    
                    }
                    //删除空行
                    foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in gridZY.Rows)
                    {
                        if (row.Cells["MatID"].Value.ToString() == "")
                        {
                            base.DeleteRow();
                        }
                    }
    
    
                }
    
    
    
    
                isSelect = true;
            }
             
    
            /// <summary>
            /// 单据下推事件
            /// </summary>
            /// <param name="eoChildTableName">当前单据子表名</param>
            /// <param name="eoChildTableID">当前单据子表与下推单据子表关联字段,即子表实体名添加ID</param>
            /// <param name="nextChildTableName">下推目标单据子表名</param>
            /// <param name="eoTableID">当前单据与父表关联字段,即当前单据父表名实体名添加ID</param>
            /// <param name="NextEntityFormID">下推界面ID</param>
            public void NextBill(string eoChildTableName, string eoChildTableID, string nextChildTableName, string eoTableID, int NextEntityFormID)
            {
                if (this.entityobject == null)
                    return;
                if ((int)this.entityobject.GetProperty("CheckID") == 0)
                {
                    Jeez.Common.UI.MsgBox.Show("单据还未审核!不能下推!");
                    return;
                }
                //判断当前还有多少报价没下推订单
                Jeez.Core.NativeQueryCommand cmd;
                Jeez.Core.INativeQuery quary = Jeez.Login.RemoteCall.GetNativeQuery();
                cmd = new NativeQueryCommand();
                cmd.CommandText = string.Format(@"select a.ID,a.Many-IsNull(b.PoQty,0) as LeftMany 
    from {1} a  
    left join (select {2},isnull(Sum(Many),0) as PoQty from {3} where {2}>0 
    group by {2} ) b on a.id=b.{2}
    where a.{4}={0}", (int)this.entityobject.PrimaryKeyValue, eoChildTableName, eoChildTableID, nextChildTableName, eoTableID);
                try
                {
    
                    DataTable dt = quary.GetDataTable(this.objContext.ConnectionString, cmd);
                    if (dt.Rows.Count > 0)
                    {
                        ArrayList arr = new ArrayList();
                        foreach (DataRow row in dt.Rows)
                        {
                            if (Convert.ToDecimal(BaseFunc.IsNull(row["LeftMany"], 0m)) > 0m)
                            {
                                Hashtable htv = new Hashtable();
                                htv["DetailID"] = row["ID"];
                                htv["Many"] = Convert.ToDecimal(BaseFunc.IsNull(row["LeftMany"], 0m));
                                arr.Add(htv);
                            }
    
                        }
                        Hashtable ht = new Hashtable();
                        ht["DetailList"] = arr;
                        //跳转到销售订单界面
                        if (NextEntityFormID == EntityFormIDEnum.内部领料单2)
                        {
                            SaleOrder f = base.ShowForm(EntityFormIDEnum.内部领料单2, ht) as SaleOrder;
                        }
                        if (NextEntityFormID == EntityFormIDEnum.成品入库单2)
                        {
                            SaleChuku f = base.ShowForm(EntityFormIDEnum.成品入库单2, ht) as SaleChuku;
    
                        }
                         
    
    
    
                    }
                    else
                    {
                        Jeez.Common.UI.MsgBox.Show("单据已经下推完,不能再执行下推!");
                        return;
    
                    }
    
                }
                catch (Exception ex)
                {
                    Jeez.Common.UI.MsgBox.Show(ex.Message.ToString());
                }
    
    
            }
    
            /// <summary>
            /// 物料BOM拆解
            /// </summary>
            void BomDepart()
            {
    
                if (this.entityobject == null)
                {
                    return;
                }
    
                if (gridNeed.ReadOnly)
                    return;
                Hashtable htMaterial = new Hashtable();
                ArrayList arrRow = new ArrayList();
                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in gridZY.Rows)
                {
                    //    //获取表格列引用的实体对象
                    EntityObject eomat = base.GetRefEntityObjectByGridEntityCol(gridZY, row.Cells["MatID"]);
                    if (eomat != null)
                    {
                        Hashtable ht = GetBOMMaterial(objContext, (int)eomat.PrimaryKeyValue, Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m)));
                        if (ht == null || ht.Count == 0)
                        {
                            if (htMaterial.ContainsKey(eomat.PrimaryKeyValue.ToString() + "@" + eomat.GetRelatedObject("jiliangdanweiID").PrimaryKeyValue.ToString()))
                            {
                                htMaterial[eomat.PrimaryKeyValue.ToString() + "@" + eomat.GetRelatedObject("jiliangdanweiID").PrimaryKeyValue.ToString()] = Convert.ToDecimal(htMaterial[eomat.PrimaryKeyValue.ToString() + "@" + eomat.GetRelatedObject("jiliangdanweiID").PrimaryKeyValue.ToString()]) + Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m));
                            }
                            else
                                htMaterial[eomat.PrimaryKeyValue.ToString() + "@" + eomat.GetRelatedObject("jiliangdanweiID").PrimaryKeyValue.ToString()] = Convert.ToDecimal(BaseFunc.IsNull(row.Cells["Many"].Value, 0m));
                        }
                        else
                        {
    
                            foreach (DictionaryEntry de in ht)
                            {
                                if (htMaterial.ContainsKey(de.Key.ToString()))
                                {
                                    htMaterial[de.Key.ToString()] = Convert.ToDecimal(htMaterial[de.Key.ToString()]) + Convert.ToDecimal(de.Value);
                                }
                                else
                                    htMaterial[de.Key.ToString()] = Convert.ToDecimal(de.Value);
                            }
                        }
                    }
    
    
                }
                EntityObjectFactory eof = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.Mat);
                EntityObjectFactory eofUnit = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.jiliangdanwei);
    
                gridNeed.DeleteAllRow();
                //gridNeed.ReadOnly = false;
                foreach (DictionaryEntry de in htMaterial)
                {
                    string key = de.Key.ToString();
                    string[] sArray = key.Split('@');
    
                    string MID = sArray[0];
                    string UID = sArray[1];
                    EntityObject eomat = eof.FindObject(Convert.ToInt32(MID));
                    EntityObject eoUnit = eofUnit.FindObject(Convert.ToInt32(UID));
                    if (eomat != null && eoUnit != null)
                    {
                        gridNeed.InsertRow(gridNeed.Rows.Count);
                        Infragistics.Win.UltraWinGrid.UltraGridRow row = gridNeed.Rows[gridNeed.Rows.Count - 1];
                        row.Cells["MatID"].Tag = eomat.PrimaryKeyValue;
                        row.Cells["MatID"].Value = eomat.ToString();
                        row.Cells["jiliangdanweiID"].Tag = eoUnit.PrimaryKeyValue;
                        row.Cells["jiliangdanweiID"].Value = eoUnit.ToString();
                        row.Cells["Many"].Value = de.Value;
                    }
                }
                // gridNeed.ReadOnly = true;
    
                base.Save();
    
            }
            /// <summary>
            /// 获取物料BOM构成函数
            /// </summary>
            /// <param name="objContent"></param>
            /// <param name="MatID"></param>
            /// <param name="BaseQty"></param>
            /// <returns></returns>
            public  Hashtable GetBOMMaterial(ObjectContext objContent, int MatID, decimal BaseQty)
            {
                objContext = objContent;
                Hashtable htBOMMaterial = new Hashtable();
    
                if (GetBomMaterial(MatID, htBOMMaterial, BaseQty))
                    return htBOMMaterial;
                else
                    return null;
    
            }
            private  bool GetBomMaterial(int MatID, Hashtable htBomMaterial, decimal baseQty)
            {
    
                EntityObject eo = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.MatBom).FindFirst("MatID={0} ", MatID);
    
                if (eo != null)
                {
                    foreach (EntityObject eod in eo.GetChildEntityObjects(EntityIDEnum.MatBomDetail))
                    {
                        int UnitID = (int)eod.GetProperty("jiliangdanweiID");
                        if (!GetBomMaterial((int)eod.GetProperty("MatID"), htBomMaterial, baseQty * (decimal)eod.GetProperty("Many")))
                        {
                            if (htBomMaterial.ContainsKey(eod.GetProperty("MatID").ToString() + "@" + UnitID))
                            {
                                //  Hashtable htMaterial = htBomMaterial[eod.GetProperty("MMatID").ToString()] as Hashtable;
                                htBomMaterial[eod.GetProperty("MatID").ToString() + "@" + UnitID] = Convert.ToDecimal(htBomMaterial[eod.GetProperty("MatID").ToString() + "@" + UnitID]) + baseQty * (decimal)eod.GetProperty("Many");
    
                            }
                            else
                            {
    
                                htBomMaterial[eod.GetProperty("MatID").ToString() + "@" + UnitID] = baseQty * (decimal)eod.GetProperty("Many");
    
                            }
                        }
    
                    }
                    return true;
                }
                else
                    return false;
    
            }
            
    
    
    
    
        }
    

     服务端代码:

     /// <summary>
        /// 生产任务单
        /// </summary>
        class ProductServer : SCMBaseServer
        {
            protected override bool CheckValidate(EntityObject eo, bool IsCheck, ref string strMessage)
            {
                bool b = base.CheckValidate(eo, IsCheck, ref strMessage);
                if (b)
                {
                    if (IsCheck)
                    {//审核执行自己的业务逻辑
    
                    }
                    else
                    {
    
                        if (!ERPServerFunc.IsNextBill(Context, eo, EntityIDEnum.LingliaoDetail, EntityIDEnum.ProductNeed, "LingliaoID", "ProductNeedID", ref strMessage))
                            return false;
                        if (!ERPServerFunc.IsNextBill(Context, eo, EntityIDEnum.ProductRukuDetail, EntityIDEnum.ProductDetail, "ProductRukuID", "ProductDetailID", ref strMessage))
                            return false;
    
                    }
    
                }
                return b;
            }
    
     
        }
    

    官网:www.jeez.com.cn
    平台介绍:www.jeez.com.cn/jbf  
    平台下载地址:http://www.jeez.com.cn/upfiles/jbfsetuppro.rar

    (下载即可有3个月免费试用)
    联系电话:13826519021 18988763421 QQ:180315586  420977542 (加我注明极致软件即可)

    平台销售经理:李先生 

    将互联网时代的管理软件做到极致!
    ==================================================================

  • 相关阅读:
    定时备份脚本
    NFS+inotify实时同步
    pxe+kickstart自动化安装
    LVS负载均衡DR模式
    Rsync文件同步服务
    NFS文件共享服务
    MySQL-5.5.49安装、多实例、主从复制
    PHP-5.3.27源码安装及nginx-fastcgi配置
    一文解读5G (转)
    一文解读VR/AR/MR (转)
  • 原文地址:https://www.cnblogs.com/Jeez_JBF/p/ERP18.html
Copyright © 2011-2022 走看看