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;//明细gridprivate 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.IDleft join jzJiliangdanwei c on a.JiliangdanweiID=c.ID left join jzWareHouse w on w.ID=a.WareHouseIDwhere 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));}elsehtMaterial[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);}elsehtMaterial[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;elsereturn 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;}elsereturn 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 (加我注明极致软件即可)

平台销售经理:李先生

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

转载于:https://www.cnblogs.com/Jeez_JBF/p/ERP18.html

如何利用极致业务基础平台构建一个通用企业ERP之十四生产任务单设计相关推荐

  1. 如何利用极致业务基础平台构建一个通用企业ERP之十六物料进出明细报表的设计...

    1.做ERP经常要做很多分析报表,因为老板喜欢看的就是报表,利用极致业务基础平台做报表很简单,只要会写sql即可. 本篇我们介绍一个物料进出明细报表的设计,设计报表我们先设计过滤界面,如下所示: 在该 ...

  2. 如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计

    接着篇幅2,我们现在要该设计一个启用期间管理了,启用期间管理,主要为方便管理,比如一些历史的单据,不允许他反审核去修改,作假.也不允许操作者在录入以前历史的单据. 期间管理我们框架提供了一个期间表,这 ...

  3. 如何用极致业务基础平台做一个通用企业ERP系列之二一览表培训

    接着上一篇博客,我们进行往来单位一览表设计如下: 可以看到我们设计的时候,将客户和供应商用两个字段来解决,这样基本可以解决那些往来单位有可能即是供应商又是客户的情况.当然因为这里不是主要做客户关系管理 ...

  4. 如何利用极致业务基础平台主界面容器工具配置出漂亮的业务系统

    1.经过前面的大致设计,我们进销存基础资料就做好了.如下图: 因为中间太空洞了,所以我们可以将右边一些功能,放在中间空白区域,这只要在该界面上设置界面显示方式为ShowBoth即可,这样中间右边都可以 ...

  5. 基于SOA的组件化业务基础平台[转]

    转自https://www.ibm.com/developerworks/cn/webservices/1111_xiaojg_soa/index.html 业务基础平台是业务逻辑和基础架构平台之间的 ...

  6. 基于 SOA 的组件化业务基础平台

    基于 SOA 的组件化业务基础平台 原文:基于 SOA 的组件化业务基础平台 前言 业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 "应用软件的业务描述和操作系统平台.软件基 ...

  7. “软件业务基础平台”是工业软件突破口

    中国移动.中石油.中石化.中国银行.宝钢.上汽.一汽等等,越来越多中国企业成为影响全球行业市场的重要力量.中国有巨大的行业市场,中国工业领域有巨大的企业信息化需求,如此巨大的行业信息化需求市场,应该孕 ...

  8. 极致业务基础开发平台

    深圳极致软件公司,面向.net开发工程师,推出极致业务基础开发平台,可以免费下载,终身免费使用.可以免费设计数据库,免费定义数据实体,设计业务流程.以及强大的工作流和协同办公功能. 不用写代码,免费开 ...

  9. ezStudio,易用高效的业务基础平台开发工具

    摘要 本文从业务基础平台谈起,引申出与业务基础平台息息相关的开发工具,通过对国内外开发工具现状与未来趋势的描述,引导读者对开发工具有一个较为全面的了解.最后对清华同方ezONE(易众)业务基础平台中的 ...

最新文章

  1. 解决微信H5获取SDK授权报错提示errMsg: “config:fail,Error: 系统错误,错误码:63002,invalid signature [20200908 22:17:17][]“
  2. IDP申请直到软件上架流程 - iOS
  3. Facebook 正在研究新型 AI 系统,以自我视角与世界进行交互
  4. mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法
  5. python excel 自动化-简直出神入化,教你用Python控制Excel实现自动化办公
  6. OpenCASCADE:形状愈合之修复工具
  7. XML4跨浏览器兼容
  8. 浅谈游戏自动寻路A*算法
  9. Java数据类型以及变量的定义
  10. NET中解决KafKa多线程发送多主题的问题
  11. IDEA创建第一个Spring Boot项目
  12. codeforces 463C. Gargari and Bishops 解题报告
  13. 蓝桥杯入门训练Fibonacci数列
  14. left join on、where后面的条件的区别
  15. UltraISO 创建的虚拟光驱更改盘符
  16. java常见数据算法_冒泡排序
  17. 恶意混时间你不敢管,却要吓唬全体员工?
  18. script 标签中引用asp文件不显示的原因
  19. 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
  20. matlab 函数semilogy()

热门文章

  1. Linux创建用户和密码相关的命令useradd、groupadd、passwd和userdel应用
  2. Android 手机录制wav格式音频文件实现
  3. Android Studio之高德地图实现定位和3D地图显示
  4. 车载网络测试 - 车载以太网 - 传统配置方法(Channel Base)
  5. memory compression关闭,亲测有效
  6. SpringBootTest遇到的问题----Field userMapper in xxx.service.UserService required a bean of type
  7. 硕盟 HDMI转VGA 笔记本台式主机HDMI转VGA显示器转接头
  8. 剖析 SPI 在 Spring 中的应用
  9. guido正式对外发布python版本的年份_Guido van Rossum正式对外发布Python版本的年份是:______。...
  10. 杰理之 高低速(HSB/LSB)时钟硬件模块【篇】