小型制造企业ERP全新设计理念
由销售订单开始,销售订单一下,结合现有实际库存,如果库存足够,生成销售出库单,如果库存不足,则生成一个生产计划单,生产计划审核生成物料需求明细,根据现有原料库存来做,如果库存足够,则生成生产领料单,如果原料库存不足,则自动生成采购订单。
每一个销售订单利润可以分析,这又要涉及到价格,采购和供应商之间有个供应商采购价格,到时候采购订单上的价格,自动根据供应商的价格,在采购订单菜单上增加一个核算价格按钮来赋值上去,如果没有核算的价格,提示供应商的这个物料价格还没有做记录。客户直接在采购订单上填后,保存后自动记录这次供应商的价格。如果价格有不一样的,自动记录到供应商价格表中,这样到时候又可以形成供应商历史价格表。销售订单价格也是类似。
有了这些数据,我们就可以自动在物料上的利润跟他们算出。
还有就是单据之间的选单,下推。期间控制
仓库部分流程包括,盘点盘盈单,仓库调拨单,内部报废单
1.单据界面如下的一个物料界面
那么我们设计要达到如下几个功能:
1.物料编码自动,根据您选择的物料组,自动以物料组代码+5位自动增长的流水号。
2.子表有采购价格管理,和销售价格管理两个子表,那么我们可以在物料权限组增加两个相应的权限如查看物料采购价格,查看物料销售价格。这样不同权限人进来要自动屏蔽他不能看到的数据。
3.因为我们在物料采购价格管理表有引用往来单位,销售价格管理也引用了往来单位,我们看往来单位设计如下,
用了两个字段来控制,一个是IsCustomer是否客户,一个是IsSupply是否供应商,这样用来表示是否供应商,是否客户。那么我们在物料采购管理控件中,往来单位中就要控制在这里只能输是供应商的才能输入进来或者点文本按钮的时候跳出的结果全是供应商的,把是客户的往来单位资料屏蔽掉。
4物料一览表左边是一个物料组的树,我们选中其中一个物料组,希望点击新增的时候自动把物料组带到物料界面,这样物料新增界面的时候物料组是有值的。
5.如何上传图片,只要物料实体增加对附件主表引用,然后图片控件绑定到这个引用列,菜单上增加一个上传按钮,预设操作选择PictureFile
用下面的代码就可以实现:
/// <summary> /// 物料一览表界面 /// </summary> class MatList : Jeez.Runtime.Base.General.frmList { /// <summary> /// 重载一览表的上方菜单操作事件 /// </summary> /// <param name="BillOperateType"></param> /// <param name="BillID"></param> /// <param name="ParentID"></param> /// <returns></returns> protected override Jeez.Runtime.Base.General.BillUI OperateBill(Jeez.Runtime.Base.General.BillOperateType BillOperateType, int BillID, int ParentID) { //如果点的是一览表的新增 if (BillOperateType == Jeez.Runtime.Base.General.BillOperateType.New) { Mat ab = (Mat)base.OperateBill(BillOperateType, BillID, ParentID); if (CurTreeNode != null) { EntityObject eoP = CurTreeNode.Tag as EntityObject; if (eoP != null) { ab.eoMatGroup = eoP; } ab.SetValue(); } return ab; } else return base.OperateBill(BillOperateType, BillID, ParentID); } } /// <summary> /// 物料新增界面 /// </summary> class Mat : Jeez.Runtime.Base.General.BillUI { public EntityObject eoMatGroup;//物料组 private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txMatGroup;//界面控件上的物料组控件 private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txMatBianHao;//界面上物料的代码控件 private Jeez.Control.JeezGrid.JeezGrid gridCG;//采购价格Grid private Jeez.Control.JeezGrid.JeezGrid gridXS;//销售价格Grid private Jeez.Control.JeezUltraTabControl.JeezUltraTabControl pagecontrol1 = null; private int isSelect = 0;//0表示选择的第一页,1表示鼠标点击采购价格2表示鼠标点击了销售价格子表 public override bool LoadUI() { bool b = base.LoadUI(); if (b) { txMatGroup = base.GetControlByName("JeezTextBox3") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox; txMatGroup.ValueChanged += new EventHandler(txMatGroup_ValueChanged); txMatBianHao = base.GetControlByName("JeezTextBox1") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox; gridCG = base.GetControlByName("JeezGrid2") as Jeez.Control.JeezGrid.JeezGrid; gridCG.AfterCellActivate += new EventHandler(gridCG_AfterCellActivate); gridXS = base.GetControlByName("JeezGrid3") as Jeez.Control.JeezGrid.JeezGrid; gridXS.AfterCellActivate += new EventHandler(gridXS_AfterCellActivate); pagecontrol1 = base.GetControlByName("JeezTabControl1") as Jeez.Control.JeezUltraTabControl.JeezUltraTabControl; pagecontrol1.SelectedTabChanged += new Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventHandler(pagecontrol1_SelectedTabChanged); } return b; } void pagecontrol1_SelectedTabChanged(object sender, Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventArgs e) { isSelect = e.Tab.Index; } void gridCG_AfterCellActivate(object sender, EventArgs e) { gridCG.AutoDropdownListFilter = "";//如果有多列的话,这里设置为空 if (gridCG.ActiveCell.Column.Key == "RefUnitID") { //只能选择供应商的往来单位 gridCG.AutoDropdownListFilter = string.Format("IsSupply=1"); } } void gridXS_AfterCellActivate(object sender, EventArgs e) { gridXS.AutoDropdownListFilter = "";//如果有多列的话,这里设置为空 if (gridXS.ActiveCell.Column.Key == "RefUnitID") { //只能选择客户的往来单位 gridXS.AutoDropdownListFilter = string.Format("IsCustomer=1"); } } protected override void ShowUISelectedForm(object sender, int EntityID, ArrayList RunTimeFilter) { //如果是往来单位表 if (EntityID == 1000000008) { ArrayList ar = new ArrayList(); if (isSelect == 1) { //过滤只有供应商的往来单位 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 { //过滤只有客户的往来单位 Jeez.Runtime.Base.General.RunTimefilterDefine fd; fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzRefUnit.IsCustomer}", 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); } } /// <summary> /// 实现物料自动编号功能,物料编码为物料组编码前缀加上5位流水号 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void txMatGroup_ValueChanged(object sender, EventArgs e) { if (txMatGroup.Tag != null && (int)txMatGroup.Tag != 0) { if (this.entityobject == null) //只有新增的时候需要对他进行编号 { txMatBianHao.PropertyPage.Value = BuildBianhao(); } } } string BuildBianhao() { string Before = txMatGroup.PropertyPage.Value.Split('-')[0].Trim(); ; EntityObjectFactory eofMat = EntityObjectFactory.GetInstance(objContext, 1000000004); EntityObjectList eol = eofMat.Find("MatGroupID={0}", (int)txMatGroup.Tag); //流水号设置为5位 string strcount = "00001"; int count = eol.Count + 1; int icountlength = count.ToString().Length; string renshujiequ = strcount.Substring(0, 5 - icountlength); string a2 = renshujiequ + count.ToString(); return Before + a2; } /// <summary> /// 将物料一览表中的选中的物料组传递到物料新增界面,让物料新增界面的物料组的值自动设置为物料一览表中选中的物料组 /// </summary> public void SetValue() { if (eoMatGroup != null) { txMatGroup.Tag = eoMatGroup.PrimaryKeyValue; txMatGroup.VALUE = eoMatGroup.ToString(); } } protected override void BillUI_Load(object sender, EventArgs e) { base.BillUI_Load(sender, e); InitByDefine(); } /// <summary> /// 根据角色设置价格单元格的可见隐藏 /// </summary> void InitByDefine() { if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_Mat_CGMoney")) { this.gridCG.Visible = false; // this.gridCG.Rows.Band.Columns["Danjia"].Hidden = true; } if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_Mat_XSMoney")) { this.gridXS.Visible = false; // this.gridCG.Rows.Band.Columns["Danjia"].Hidden = true; } } protected override void LoadEntityDataToControl() { base.LoadEntityDataToControl(); InitByDefine(); } }
总结:单据界面开发步骤,第一先设计实体,再界面选择自动生成,再定义后台扩展代码。
欢迎有兴趣的朋友下载我们平台,下载地址:http://www.jeez.com.cn/upfiles/jbfsetuppro.rar 体验我们平台快速开发的乐趣
李先生 平台销售经理
电话:0755-28181927
手机:18988763421 18129502059
QQ:180315586 420977542(加我为好友在线为您演示)
官网:www.jeez.com.cn
平台介绍:www.jeez.com.cn/jbf
平台下载地址:http://www.jeez.com.cn/upfiles/jbfsetuppro.rar
(下载即可有3个月免费试用)
联系电话:13826519021 18988763421 QQ:180315586 420977542 (加我注明极致软件即可)
平台销售经理:李先生
将互联网时代的管理软件做到极致!
==================================================================