1.销售出库单设计界面如下:

要求实现功能点:

1界面本身和销售订单界面类似,比如一些初始值,可以实现选单,实现下推。

2审核的时候更改即时库存,并生成应收应收清单。

3反审核的时候判断应收清单是否有相应的收款记录,如果没有,则回写即时库存审核前状态,并删除这条应收记录。

客户端代码如下:

 /// <summary>/// 销售出库单/// </summary>class SaleChuku : SCMBaseBill{//控件声明定义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.JeezCurrencyTextBox.JeezCurrencyTextBox txYBMoney;//原币金额private Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox txYBYF;//原币运费private Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox txRMBMoney;//人民币金额private Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox txRMBYF;//人民币运费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 gridBaojiaHistory;//历史报价private bool isLoading = true;//定义几个初始化常见的值private static int BibieID = 0;//默认币别IDprivate static int WLDWID = 0;//默认往来单位IDprivate static bool IsNext = false;//是否下推,下推过来的数据,单价不参与计算/// <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;txYBMoney = base.GetControlByName("JeezCurrencyTextBox1") as Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox;txYBYF = base.GetControlByName("JeezCurrencyTextBox2") as Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox;txRMBMoney = base.GetControlByName("JeezCurrencyTextBox3") as Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox;txRMBYF = base.GetControlByName("JeezCurrencyTextBox4") as Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox;gridZY = base.GetControlByName("JeezGrid1") as Jeez.Control.JeezGrid.JeezGrid;dtDate = base.GetControlByName("JeezCalendarCombo1") as Jeez.Control.JeezUltraCalendarCombo.JeezUltraCalendarCombo;pagecontrol1 = base.GetControlByName("JeezTabControl1") as Jeez.Control.JeezUltraTabControl.JeezUltraTabControl;gridKucun = base.GetControlByName("gridKucun") as Jeez.Control.JeezGrid.JeezGrid;gridBaojiaHistory = base.GetControlByName("gridRefHistory") as Jeez.Control.JeezGrid.JeezGrid;}return b;}protected override void BillUI_Load(object sender, EventArgs e){base.BillUI_Load(sender, e);if (this.entityobject == null){//装载报价单下推过来的数据if (UserData != null && UserData is Hashtable){this.gridZY.RowCount = 0;Hashtable ht = UserData as Hashtable;ArrayList arr = ht["DetailList"] as ArrayList;EntityObjectFactory eof = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.SaleOrderDetail);int i = 0;foreach (Hashtable htv in arr){EntityObject eoChild = eof.FindObject(Convert.ToInt32(htv["DetailID"]));this.gridZY.InsertRow(i);this.gridZY.Rows[i].Cells["UpBillNo"].Value = eoChild.GetRelatedObject("SaleOrderID").GetProperty("BillNO");EntityObject eoOrder = eoChild.GetRelatedObject("SaleOrderID");if (eoOrder != null && i == 0){//保证只执行一次txOrg.Tag = eoOrder.GetRelatedObject("OrganizationID").PrimaryKeyValue;txOrg.VALUE = eoOrder.GetRelatedObject("OrganizationID").ToString();txDept.Tag = eoOrder.GetRelatedObject("DepartMentID").PrimaryKeyValue;txDept.VALUE = eoOrder.GetRelatedObject("DepartMentID").ToString();txWLDW.Tag = eoOrder.GetRelatedObject("RefUnitID").PrimaryKeyValue;txWLDW.VALUE = eoOrder.GetRelatedObject("RefUnitID").ToString();txEmployee.Tag = eoOrder.GetRelatedObject("EmployeeID").PrimaryKeyValue;txEmployee.VALUE = eoOrder.GetRelatedObject("EmployeeID").ToString();txBibie.Tag = eoOrder.GetRelatedObject("CurrencyID").PrimaryKeyValue;txBibie.VALUE = eoOrder.GetRelatedObject("CurrencyID").ToString();txRat.PropertyPage.Value = (decimal)eoOrder.GetProperty("Rate");txYBMoney.PropertyPage.Value = (decimal)eoOrder.GetProperty("Amount");txRMBMoney.PropertyPage.Value = (decimal)eoOrder.GetProperty("RAmount");txYBYF.PropertyPage.Value = (decimal)eoOrder.GetProperty("YAmount");txRMBYF.PropertyPage.Value = (decimal)eoOrder.GetProperty("RYAmount");}this.gridZY.Rows[i].Cells["MatID"].Tag = eoChild.GetRelatedObject("MatID").PrimaryKeyValue;this.gridZY.Rows[i].Cells["MatID"].Value = eoChild.GetRelatedObject("MatID").ToString();this.gridZY.Rows[i].Cells["JiliangdanweiID"].Tag = eoChild.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;this.gridZY.Rows[i].Cells["JiliangdanweiID"].Value = eoChild.GetRelatedObject("JiliangdanweiID").ToString();this.gridZY.Rows[i].Cells["Danjia"].Value = eoChild.GetProperty("Danjia");this.gridZY.Rows[i].Cells["UpMany"].Value = eoChild.GetProperty("Many");this.gridZY.Rows[i].Cells["SMany"].Value = eoChild.GetProperty("SMany");this.gridZY.Rows[i].Cells["Many"].Value = htv["Many"];this.gridZY.Rows[i].Cells["RDanjia"].Value = eoChild.GetProperty("RDanjia");this.gridZY.Rows[i].Cells["Amount"].Value = (decimal)eoChild.GetProperty("Danjia") * (decimal)htv["Many"]; ;this.gridZY.Rows[i].Cells["RAmount"].Value = (decimal)eoChild.GetProperty("Danjia") * (decimal)htv["Many"] *(decimal)eoOrder.GetProperty("Rate"); this.gridZY.Rows[i].Cells["SaleOrderDetailID"].Value = eoChild.PrimaryKeyValue; this.gridZY.Rows[i].Cells["Date"].Value = eoChild.GetProperty("Date"); ;i++;}this.UserData = null;}else{InitByDefineOrder();}}}/// <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.SaleChukuServer";}/// <summary>/// 设置默认值/// </summary>void InitByDefineOrder(){if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg(EntityRightIDEnum.销售出库管理查看价格)){this.gridZY.Rows.Band.Columns["Danjia"].Hidden = true;this.gridZY.Rows.Band.Columns["Amount"].Hidden = true;this.gridZY.Rows.Band.Columns["RDanjia"].Hidden = true;this.gridZY.Rows.Band.Columns["RAmount"].Hidden = true;txRMBMoney.Visible = false;txRMBYF.Visible = false;txYBMoney.Visible = false;txYBYF.Visible = false;}else{this.gridZY.Rows.Band.Columns["Danjia"].Hidden = false;this.gridZY.Rows.Band.Columns["Amount"].Hidden = false;this.gridZY.Rows.Band.Columns["RDanjia"].Hidden = false;this.gridZY.Rows.Band.Columns["RAmount"].Hidden = false;txRMBMoney.Visible = true;txRMBYF.Visible = true;txYBMoney.Visible = true;txYBYF.Visible = true;}}protected override void LoadEntityDataToControl(){base.LoadEntityDataToControl();InitByDefineOrder();}}

View Code

服务端代码如下:

 /// <summary>/// 销售出库服务端类/// </summary>class SaleChukuServer : SCMBaseServer{protected override bool CheckValidate(EntityObject eo, bool IsCheck, ref string strMessage){bool b = base.CheckValidate(eo, IsCheck, ref strMessage);if (b){if (IsCheck){ //审核执行自己的业务逻辑扣库存动作,生成应收清单//更新即时库存表数据EntityObjectList eolDetail = eo.GetChildEntityObjects(EntityIDEnum.SaleChukuDetail);//明细物料EntityObjectFactory eof = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.NowKucun);//库存 foreach (EntityObject eoDetail in eolDetail){EntityObject eoMalUpdate = eof.FindFirst("MatID={0} and WareHouseID={1} and JiliangdanweiID={2} ", eoDetail.GetProperty("MatID"), eoDetail.GetProperty("WareHouseID"), eoDetail.GetProperty("JiliangdanweiID"));float currentQty = 0f;float currentAmount = 0f;if (eoMalUpdate != null){currentQty = float.Parse(eoMalUpdate.GetProperty("Many").ToString());currentAmount = float.Parse(eoMalUpdate.GetProperty("Amount").ToString());if (currentQty >= float.Parse(eoDetail.GetProperty("Many").ToString())){eoMalUpdate.SetProperty("Many", currentQty - float.Parse(eoDetail.GetProperty("Many").ToString()));eoMalUpdate.SetProperty("Amount", currentAmount - float.Parse(eoDetail.GetProperty("Amount").ToString()));if ((currentQty - float.Parse(eoDetail.GetProperty("Many").ToString())) != 0)eoMalUpdate.SetProperty("Danjia", (currentAmount - float.Parse(eoDetail.GetProperty("Amount").ToString())) / (currentQty - float.Parse(eoDetail.GetProperty("Many").ToString())));}}else{strMessage = string.Format("库存里面没有该物料{0},无法出库", eoDetail.GetRelatedObject("MatID").ToString());return false; } }//生成应收清单EntityObjectFactory eofYingshou = EntityObjectFactory.GetInstance(Context, EntityIDEnum.Yingshou);EntityObject eoYingshou = eofYingshou.CreateObject();eoYingshou.SetProperty("OrganizationID", eo.GetProperty("OrganizationID"));eoYingshou.SetProperty("BillNo", eo.GetProperty("BillNo"));eoYingshou.SetProperty("BillID", eo.PrimaryKeyValue);eoYingshou.SetProperty("BillName", "销售出库单");eoYingshou.SetProperty("RefUnitID", eo.GetProperty("RefUnitID"));eoYingshou.SetProperty("Amount", eo.GetProperty("Amount"));eoYingshou.SetProperty("CurrencyID", eo.GetProperty("CurrencyID"));eoYingshou.SetProperty("Rate", eo.GetProperty("Rate"));eoYingshou.SetProperty("YAmount", 0m);eoYingshou.SetProperty("WAmount", eo.GetProperty("Amount"));eoYingshou.SetProperty("Description", "出库单审核自动产生");eoYingshou.SetProperty("WAmount", eo.GetProperty("Amount"));if (eo.GetRelatedObject("EmployeeID")!=null)eoYingshou.SetProperty("EmployeeID", eo.GetRelatedObject("EmployeeID").GetProperty("Name"));eoYingshou.SetProperty("Type", 0);Context.SaveChanges();return true;}else{//反审核执行自己业务逻辑,如果已经下推了,不允许反审核                    if (!ERPServerFunc.IsNextBill(Context, eo, EntityIDEnum.SaleRukuDetail,EntityIDEnum.SaleChukuDetail, "SaleRukuID", "SaleChukuDetailID", ref strMessage))return false;if(!ERPServerFunc.IsExitPOPA(Context,eo,EntityIDEnum.Yingshou,"销售出库单",ref strMessage))return false;if (Convert.ToInt32(eo.GetProperty("UseFlag").ToString()) == 1){strMessage = "库存已经有占用,不允许反审核,请先释放占用在反审核";return false;}eo.SetProperty("UseFlag", 0);//反审核后恢复占用标识
                    Context.SaveChanges();}}return b;}/// <summary>/// 更新价格,从单据上过来的/// </summary>public object UpadatePrice(int entiyID){StringBuilder strResult = new StringBuilder();try{//先获取当前传过来的idEntityObjectFactory eofParent = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.SaleOrder);EntityObject eoParent = eofParent.FindObject(entiyID);EntityObjectList eolChildDetail = eoParent.GetChildEntityObjects(EntityIDEnum.SaleOrderDetail);//获取销售价格表EntityObjectFactory eofSalePrice = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.MatSalePrice);int WLDWID = (int)eoParent.GetRelatedObject("RefUnitID").PrimaryKeyValue;int BIBIEID = (int)eoParent.GetRelatedObject("CurrencyID").PrimaryKeyValue;foreach (EntityObject eoChild in eolChildDetail){int UnitID = (int)eoChild.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;int MatID = (int)eoChild.GetRelatedObject("MatID").PrimaryKeyValue;EntityObject eoSalePrice = eofSalePrice.FindFirst("RefUnitID={0} and CurrencyID={1} and JiliangdanweiID={2} and MatID={3}", WLDWID, BIBIEID, UnitID, MatID);if (eoSalePrice == null){//如果没有价格记录//添加本次价格记录eoSalePrice = eofSalePrice.CreateObject();eoSalePrice.SetProperty("MatID", MatID);eoSalePrice.SetProperty("RefUnitID", WLDWID);eoSalePrice.SetProperty("jiliangdanweiID", UnitID);eoSalePrice.SetProperty("CurrencyID", BIBIEID);eoSalePrice.SetProperty("MinQty", 1.0m);eoSalePrice.SetProperty("Date", eoParent.GetProperty("Date"));eoSalePrice.SetProperty("Danjia", eoChild.GetProperty("Danjia"));eoSalePrice.SetProperty("Description", string.Format("销售订单{0}更新而产生", eoParent.GetProperty("BillNo")));strResult.AppendLine(string.Format(@"物料:{0}单位:{1}:币别:{2}价格更新成功!", eoSalePrice.GetRelatedObject("MatID").ToString(), eoSalePrice.GetRelatedObject("JiliangdanweiID").ToString(), eoSalePrice.GetRelatedObject("CurrencyID").ToString()));}else{strResult.AppendLine(string.Format(@"物料:{0}单位:{1}:币别:{2}价格已经存在,无法更新!", eoSalePrice.GetRelatedObject("MatID").ToString(), eoSalePrice.GetRelatedObject("JiliangdanweiID").ToString(), eoSalePrice.GetRelatedObject("CurrencyID").ToString()));}}Context.SaveChanges();}catch (Exception ex){return ex.Message;}return strResult.ToString();}/// <summary>/// 更新价格,从一览表上过来的/// </summary>public object UpadatePrice(Hashtable ht){StringBuilder strResult = new StringBuilder();try{ArrayList arr = (ArrayList)ht["childID"];int i = arr.Count; ;for (int j = 0; j < i; j++){//先获取当前传过来的idint childID = Convert.ToInt32(arr[j].ToString());EntityObject eoDetail = EntityObjectFactory.GetInstance(Context, EntityIDEnum.SaleOrderDetail).FindObject(childID);//获取销售价格表EntityObjectFactory eofSalePrice = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.MatSalePrice);int WLDWID = (int)eoDetail.GetRelatedObject("SaleOrderID").GetRelatedObject("RefUnitID").PrimaryKeyValue;int BIBIEID = (int)eoDetail.GetRelatedObject("SaleOrderID").GetRelatedObject("CurrencyID").PrimaryKeyValue;int UnitID = (int)eoDetail.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;int MatID = (int)eoDetail.GetRelatedObject("MatID").PrimaryKeyValue;EntityObject eoSalePrice = eofSalePrice.FindFirst("RefUnitID={0} and CurrencyID={1} and JiliangdanweiID={2} and MatID={3}", WLDWID, BIBIEID, UnitID, MatID);if (eoSalePrice == null){//如果没有价格记录//添加本次价格记录eoSalePrice = eofSalePrice.CreateObject();eoSalePrice.SetProperty("MatID", MatID);eoSalePrice.SetProperty("RefUnitID", WLDWID);eoSalePrice.SetProperty("jiliangdanweiID", UnitID);eoSalePrice.SetProperty("CurrencyID", BIBIEID);eoSalePrice.SetProperty("MinQty", 1.0m);eoSalePrice.SetProperty("Date", eoDetail.GetRelatedObject("SaleBaojiaID").GetProperty("Date"));eoSalePrice.SetProperty("Danjia", eoDetail.GetProperty("Danjia"));eoSalePrice.SetProperty("Description", string.Format("销售报价单{0}更新而产生", eoDetail.GetRelatedObject("SaleBaojiaID").GetProperty("BillNo")));strResult.AppendLine(string.Format(@"物料:{0}单位:{1}:币别:{2}价格更改成功!", eoSalePrice.GetRelatedObject("MatID").ToString(), eoSalePrice.GetRelatedObject("JiliangdanweiID").ToString(), eoSalePrice.GetRelatedObject("CurrencyID").ToString()));}else{strResult.AppendLine(string.Format(@"物料:{0}单位:{1}:币别:{2}价格已经存在,无法更新!", eoSalePrice.GetRelatedObject("MatID").ToString(), eoSalePrice.GetRelatedObject("JiliangdanweiID").ToString(), eoSalePrice.GetRelatedObject("CurrencyID").ToString()));}}Context.SaveChanges();}catch (Exception ex){return ex.Message;}return strResult.ToString();}/// <summary>/// 占用库存,从单据上过来的/// </summary>public object UseKucun(int entiyID){//先获取当前传过来的idEntityObjectFactory eofOrder = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.SaleChukuBill);EntityObject eoOrder = eofOrder.FindObject(entiyID);try{if ((int)eoOrder.GetProperty("UseFlag") == 1){return string.Format(@"销售出库单号:{0}库存已经占用,请不要重新占用!", eoOrder.GetProperty("BillNo"));}else if ((int)eoOrder.GetProperty("UseFlag") == 2){return string.Format(@"销售出库单号:{0}库存释放占用,请不要重新占用!", eoOrder.GetProperty("BillNo"));}else{EntityObjectList eolChild = eoOrder.GetChildEntityObjects(EntityIDEnum.SaleChukuDetail);//获取即时库存表EntityObjectFactory eofKucun = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.NowKucun);StringBuilder strResult = new StringBuilder();foreach (EntityObject eoChild in eolChild){int UnitID = (int)eoChild.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;int MatID = (int)eoChild.GetRelatedObject("MatID").PrimaryKeyValue;EntityObject eoKucun = eofKucun.FindFirst("JiliangdanweiID={0} and MatID={1}", UnitID, MatID);if (eoKucun == null){//如果没有库存记录strResult.AppendLine(string.Format(@"{0}在库存中没有记录", eoChild.GetRelatedObject("MatID").ToString()));}else{decimal oldUseflag = (decimal)eoKucun.GetProperty("CUseMany");eoKucun.SetProperty("CUseMany", oldUseflag + (decimal)eoChild.GetProperty("Many"));}}if (strResult.ToString() == ""){   //如果更新成功,则统一占用eoOrder.SetProperty("UseFlag", 1);Context.SaveChanges();}else{return strResult.ToString();}}}catch (Exception ex){return ex.Message;}return string.Format(@"销售出库单号:{0}库存占用成功!", eoOrder.GetProperty("BillNo"));}/// <summary>/// 占用库存,从一览表上过来的/// </summary>public object UseKucun(Hashtable ht){StringBuilder strResult = new StringBuilder();try{ArrayList arr = (ArrayList)ht["childID"];int i = arr.Count; ;for (int j = 0; j < i; j++){//先获取当前传过来的idint childID = Convert.ToInt32(arr[j].ToString());EntityObject eoDetail = EntityObjectFactory.GetInstance(Context, EntityIDEnum.SaleChukuDetail).FindFirst("ID={0}", childID);if (eoDetail != null){string str = (string)UseKucun(Convert.ToInt32(eoDetail.GetProperty("SaleChukuID").ToString()));strResult.AppendLine(str);}}}catch (Exception ex){return ex.Message;}return strResult.ToString();}/// <summary>/// 释放库存,从单据上过来的/// </summary>public object NoUseKucun(int entiyID){//先获取当前传过来的idEntityObjectFactory eofOrder = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.SaleChukuBill);EntityObject eoOrder = eofOrder.FindObject(entiyID);try{if ((int)eoOrder.GetProperty("UseFlag") == 2){return string.Format(@"销售出库单{0}库存已经释放占用,请不要重新释放占用!", eoOrder.GetProperty("BillNo"));}else{EntityObjectList eolChild = eoOrder.GetChildEntityObjects(EntityIDEnum.SaleChukuDetail);//获取即时库存表EntityObjectFactory eofKucun = EntityObjectFactory.GetInstance(this.Context, EntityIDEnum.NowKucun);StringBuilder strResult = new StringBuilder();foreach (EntityObject eoChild in eolChild){int UnitID = (int)eoChild.GetRelatedObject("JiliangdanweiID").PrimaryKeyValue;int MatID = (int)eoChild.GetRelatedObject("MatID").PrimaryKeyValue;EntityObject eoKucun = eofKucun.FindFirst("JiliangdanweiID={0} and MatID={1}", UnitID, MatID);if (eoKucun == null){//如果没有库存记录strResult.AppendLine(string.Format(@"销售出库单{1}:{0}在库存中没有库存记录", eoChild.GetRelatedObject("MatID").ToString(), eoOrder.GetProperty("BillNo"))); ;return strResult.ToString();}else{decimal oldUseflag = (decimal)eoKucun.GetProperty("CUseMany");eoKucun.SetProperty("CUseMany", oldUseflag - (decimal)eoChild.GetProperty("Many"));}}if (strResult.ToString() == ""){   //如果更新成功,则统一释放占用eoOrder.SetProperty("UseFlag", 2);Context.SaveChanges();// int aa = (int)eoOrder.GetProperty("UseFlag");
}else{return strResult.ToString();}}}catch (Exception ex){return ex.Message;}return string.Format(@"销售出库单{0}库存释放占用成功!", eoOrder.GetProperty("BillNo"));}/// <summary>/// 释放库存,从单据上过来的/// </summary>public object NoUseKucun(Hashtable ht){StringBuilder strResult = new StringBuilder();try{ArrayList arr = (ArrayList)ht["childID"];int i = arr.Count; ;for (int j = 0; j < i; j++){//先获取当前传过来的idint childID = Convert.ToInt32(arr[j].ToString());EntityObject eoDetail = EntityObjectFactory.GetInstance(Context, EntityIDEnum.SaleChukuDetail).FindFirst("ID={0}", childID);if (eoDetail != null){string str = (string)NoUseKucun(Convert.ToInt32(eoDetail.GetProperty("SaleChukuID").ToString()));strResult.AppendLine(str);}}}catch (Exception ex){return ex.Message;}return strResult.ToString();}}

View Code

服务端公共方法类

 /// <summary>/// 服务端公共方法/// </summary>class ERPServerFunc{/// <summary>///  判断当前单据是否有下推,如果没有下推,返回true/// </summary>/// <param name="Context">数据实体环境</param>/// <param name="eo">当前单据对象</param>/// <param name="NextEntityChildID">下推目标单据子表实体ID</param>/// <param name="ChildEntityID">当前单据对象子表实体ID</param>/// <param name="RefParent">下推目标单据子表和父表关联ID,ParentID</param>/// <param name="RefDetail">当前单据对象和下推单据对象子表的关联字段</param>/// <param name="strMesssage">返回信息值</param>/// <returns>返回true表示还未下推</returns>static public bool IsNextBill(ObjectContext Context, EntityObject eo, int NextEntityChildID, int ChildEntityID, string RefParent, string RefDetail, ref string strMesssage){EntityObjectFactory eofNext = EntityObjectFactory.GetInstance(Context, NextEntityChildID);foreach (EntityObject eoChild in eo.GetChildEntityObjects(ChildEntityID)){EntityObject eoNext = eofNext.FindFirst(string.Format(@"{0}={1}", RefDetail, (int)eoChild.PrimaryKeyValue));if (eoNext != null){strMesssage = string.Format(@"单据已经下推,不能反审核!先删除下推单据再反审核!下推单号:{0}", eoNext.GetRelatedObject(RefParent).GetProperty("BillNO"));return false;}}return true;}/// <summary>/// 判断是否存在应收应付已经产生收付款动作/// </summary>/// <param name="Context">数据实体环境</param>/// <param name="eo">当前单据对象</param>/// <param name="POPAEntityID">应收或应付实体ID</param>/// <param name="eoTableChineseName">当前单据中文名称</param>/// <param name="strMesssage">返回消息值</param>/// <returns></returns>static public bool IsExitPOPA(ObjectContext Context, EntityObject eo, int POPAEntityID,  string eoTableChineseName, ref string strMesssage){EntityObjectFactory eofPOPA = EntityObjectFactory.GetInstance(Context, POPAEntityID);EntityObject eoPOPA = eofPOPA.FindFirst("BillNO={0} and BillID={1} and BillName={2} ",eo.GetProperty("BillNO"),eo.PrimaryKeyValue,eoTableChineseName);if(eoPOPA!=null){if ((decimal)eoPOPA.GetProperty("YAmount") > 0){strMesssage = string.Format(@"单据已经产生应收应付并已经结算,不允许反审核");return false;}else{eoPOPA.Delete();strMesssage = string.Format(@"反审核成功,并且将单据审核时候产生的应收应付清单记录删除");Context.SaveChanges();return true;}}return true;}//占用库存,释放库存,更新价格,变动库存,生成应收应付}

View Code

极致平台开发十大特点:

1. 一个数据库下可以同时进行N套业务系统开发,开发出来的产品可以根据您客户的需要按模块界面组发布,客户想要啥模块就可以给啥模块。而且一个数据库下开发所有功能,当客户需要从你的人力资源增加客户关系管理模块的时候,你只要做个升级包就可以了。解决企业多个业务系统信息孤岛问题。
2. 智能升级功能,当客户从A模块增加B模块的时候,您只需要做一个升级包即可,给客户升级后,客户原来录入的数据不会有影响,而且所有客户端都是智能感应智能升级,大大节省您的部署成本。
3. 工作流套打报表均可以运行时候自定义,比如费用报销单,您100家客户就有一百种费用报销的流程,套打的格式,用我们平台您只需要设计好这个费用报销单,至于哪个客户走什么流程,完全可以让客户自己去定义,而不需要像传统开发那样,提前在开发中设置好,100个客户就维护100套代码。套打也是如此。
4. 支持数据授权,当您开发多组织架构的系统的时候,我们只要业务单据引用组织机构即可,然后组织机构支持数据授权,这样就可以不需要编写任何一行代码就可以做到,组织与组织之间数据彼此隔离,我想给哪个用户看哪个组织的数据只要给这个用户这个组织的数据权限即可。
5. 支持字段授权,对于一些表的核心字段对用户进行屏蔽直接利用我们平台的字段授权功能即可,比如职员薪酬字段进行字段授权,让有的用户在看职员信息的时候,自动隐藏薪酬的数据。这也是无需编写任何一行代码。
6. 单据界面自动生成,我们开发的时候只要设计好实体,也就是传统开发所说的表结构即可,还可以设置哪些字段是必录,可见,不允许重复,在界面生成的时候,会自动生成一个界面,而且这个界面的增删改查是无需写一行代码的,您只要对您特有业务逻辑编码即可,相对传统开发,你代码量可以节省2/3,开发周期缩短2/3
7.一次开发同时具有单机局域互联网三个版本,客户想要单机就给单机想要互联网版就给互联网版。

8.强大的公式引擎,让您可以灵活设计计算类的项目,比如工资,预算。

9.包含强大的各种控件,比如文本控件支持F8调用,编码名称自动带出。Grid控件支持表头过滤,单元格融合,固定列,表格列,表格行各种公式汇总,复合表头,表格宽度可以自己随意调整,而且关闭后会自动记录之前的宽度。还支持表格列随意调整顺序。

10.平台内置很多基础功能,比如权限管理,用户角色管理,还有实施的一些导入导出工具都能帮助客户大大提高一个项目验收进度。

官网: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/ERP12.html

如何利用极致业务基础平台做一个通用企业ERP之十一销售出库单设计相关推荐

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

    1.生产任务单界面设计如下: 要求实现功能如下: 1.生产任务单可以由销售订单选取而产生. 2.生产任务单可以下推领料.生产完后可以下推成品入库. 3.自动根据BOM计算此次生产所需要的原料. 代码如 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. 业务基础平台产品的现状和发展

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 现在市场上如雨 ...

最新文章

  1. php,http_build_query,乱码
  2. 读取工作流程中的表单物件
  3. 实现一个可管理、增发、兑换、冻结等高级功能的代币
  4. 安卓学习-界面-View的自定义
  5. 区块链在智慧农业中的应用展望
  6. excel引用指定单元格数据_数据、运算符及单元格引用
  7. 【报告分享】元宇宙发展研究报告2.0-清华大学.pdf(附下载链接)
  8. 软工网络15个人作业5--软件工程总结
  9. Module build failed: Error: Couldn't find preset react relative to directory
  10. 2022-2028全球STEAM教育行业调研及趋势分析报告
  11. win2012没有远程桌面授权服务器可以提供许可证 如何远程
  12. JSON对象如何转化为字符串?
  13. CAD 开发 渐变填充
  14. 怎样找一张图片的原图、出处?最全搜图网站+具体案例分享
  15. 平面向量内积坐标公式推导_平面向量内积的坐标运算与距离公式
  16. 计算机程序员带什么手表,程序员只爱格子衫?这些手表程序员也喜欢!
  17. EXCEL,复制内容随时会卡死,经常发生
  18. stm32cubemx读写SDRAM-W9825G6KH
  19. PW5328B的锂电池升压9V芯片方案,设计图
  20. python 类 实例 方法 涉及到的名称定义

热门文章

  1. ajax和jquery教程pdf,ajax和jquery教程pdf
  2. shell命令之 tr
  3. Eclipse下载与安装
  4. 当年上大学时,编程老师让我们用html+CSS实现一个天猫官网
  5. stm32与绝对式编码器的ssi接口进行通信
  6. Python安装包的多种方式
  7. r语言html函数,【R语言】《R语言初学者指南》:函数、自定义函数、循环
  8. GIMP基本功能和教程!
  9. java 加密使长度变短
  10. 南自以太网103规约