湯明偉 鄭柳娟
摘? 要: 本章從某包裝有限公司的個(gè)性化物料采購(gòu)倉(cāng)儲(chǔ)的企業(yè)需求入手,介紹了基于ASP.NET的MVC框架開(kāi)發(fā)的一套B/S結(jié)構(gòu)下的定制化物料采購(gòu)倉(cāng)儲(chǔ)系統(tǒng),將企業(yè)物料采購(gòu)倉(cāng)儲(chǔ)和各生產(chǎn)環(huán)節(jié)通過(guò)互聯(lián)網(wǎng)+的模式結(jié)合起來(lái),為企業(yè)的生產(chǎn)提供了信息化保障,從而有效地規(guī)范了企業(yè)的物料采購(gòu)倉(cāng)儲(chǔ)流程,極大的降低了企業(yè)運(yùn)行成本。
關(guān)鍵詞: 互聯(lián)網(wǎng)+; 物料; 采購(gòu); 倉(cāng)儲(chǔ); MVC; ASP.NET
中圖分類(lèi)號(hào):TP311.52? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ?文章編號(hào):1006-8228(2018)12-44-05
Abstract: This paper starts with the needs of personalized material purchasing and warehousing of a packaging company, introduces a customized material purchasing and warehousing system of B/S structured based on ASP.NET MVC. The system combines material purchasing, warehousing and other production links through Internet plus mode to provide the information guarantee for the enterprise production, which effectively regulates the material purchasing and warehousing process of the enterprise, and greatly reduces the operation cost.
Key words: Internet plus; material; purchase; warehousing; MVC; ASP.NET
0 引言
江蘇申凱包裝高新技術(shù)股份有限公司成立于2002年,2016年銷(xiāo)售額2.77億,注冊(cè)資本8000萬(wàn)元,2013年3月在天交所掛牌上市。
由于企業(yè)生產(chǎn)工藝和流程較為特殊,企業(yè)物料的采購(gòu)和倉(cāng)儲(chǔ)在ERP系統(tǒng)中無(wú)法實(shí)現(xiàn)企業(yè)定制化要求,而在ERP使用過(guò)程中造成了公司人力資源和員工的工作強(qiáng)度增加,但工作效率沒(méi)有得到顯著的提升。因此,企業(yè)員工仍舊采用手工的EXCEL表操作,雖然效率很低,但是至少員工都比較熟練操作流程。
1 需求分析設(shè)計(jì)
物料采購(gòu)倉(cāng)儲(chǔ)系統(tǒng)的開(kāi)發(fā),主要針對(duì)企業(yè)目前在生產(chǎn)環(huán)節(jié)中,對(duì)于生產(chǎn)過(guò)程中涉及到的物料的一整套發(fā)雜工藝流程的信息化管理,包括根據(jù)生產(chǎn)BOM單管理、供應(yīng)商的管理、物料訂單管理、物料采購(gòu)管理、物料倉(cāng)儲(chǔ)管理等。
系統(tǒng)設(shè)計(jì)遵循以下原則。
⑴ 實(shí)用性原則:要力求最大限度地滿(mǎn)足實(shí)際工作的需要,充分考慮各業(yè)務(wù)層次、各管理環(huán)節(jié)數(shù)據(jù)處理的實(shí)用性。
⑵ 可擴(kuò)展性與可維護(hù)性原則:系統(tǒng)設(shè)計(jì)盡可能模塊化、組件化,讓系統(tǒng)可以靈活配置,適應(yīng)不同的情況。設(shè)計(jì)功能接口和數(shù)據(jù)結(jié)構(gòu)跟企業(yè)ERP系統(tǒng)盡可能保持一致性,方便后續(xù)系統(tǒng)的可擴(kuò)展性。
⑶ 安全可靠性原則:網(wǎng)站系統(tǒng)與數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)要做到安全可靠,防止非法用戶(hù)的入侵。數(shù)據(jù)庫(kù)的備份策略恰當(dāng),以防災(zāi)難性事故發(fā)生。
⑷ 用戶(hù)界面設(shè)計(jì)原則:用戶(hù)界面的設(shè)計(jì)應(yīng)做到美觀大方,實(shí)現(xiàn)“傻瓜型”人性化設(shè)計(jì)——易學(xué)、易用、易管理。
2 系統(tǒng)設(shè)計(jì)方案
2.1 系統(tǒng)方案總體設(shè)計(jì)
開(kāi)發(fā)之初,針對(duì)企業(yè)提出的以上實(shí)際需求,系統(tǒng)采用B/S結(jié)構(gòu)平臺(tái)。采用ASP.NET[1] MVC[2-3]三層框架和SQL SERVER數(shù)據(jù)庫(kù)[4]來(lái)實(shí)現(xiàn)系統(tǒng)功能,采用jQuery框架[5]和AJAX[6]技術(shù)實(shí)現(xiàn)系統(tǒng)界面操作的簡(jiǎn)便性和人性化設(shè)計(jì),如圖1所示。
2.2 系統(tǒng)總體功能設(shè)計(jì)
物料采購(gòu)倉(cāng)儲(chǔ)系統(tǒng)根據(jù)企業(yè)實(shí)際業(yè)務(wù)需求,總共分基礎(chǔ)中心、訂單中心、采購(gòu)中心、倉(cāng)儲(chǔ)中心和系統(tǒng)中心五大功能模塊?;A(chǔ)中心包括部門(mén)管理、角色管理、用戶(hù)管理、供應(yīng)商管理和BOM單管理(根據(jù)實(shí)際生產(chǎn)需求而定制的BOM單);訂單中心包括訂單管理、用料管理和成本管理;采購(gòu)中心包括采購(gòu)核算、采購(gòu)下單、采購(gòu)審核和采購(gòu)統(tǒng)計(jì);倉(cāng)儲(chǔ)中心包括入庫(kù)單管理、備用管理、出庫(kù)單管理和退庫(kù)管理;系統(tǒng)中心包括登錄/退出、個(gè)人信息和密碼修改。如圖2所示。
2.3 系統(tǒng)用戶(hù)角色
本系統(tǒng)根據(jù)江蘇申凱包裝股份有限公司實(shí)際生產(chǎn)管理流程和各環(huán)節(jié)涉及管理部門(mén),總共分為系統(tǒng)管理員、營(yíng)銷(xiāo)主管、采購(gòu)主管、倉(cāng)儲(chǔ)主管、技術(shù)員、營(yíng)銷(xiāo)員、倉(cāng)庫(kù)出入員和車(chē)間科長(zhǎng)八個(gè)角色,具體權(quán)限分配如表1所示。
2.4 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)是管理系統(tǒng)的基礎(chǔ)與核心,數(shù)據(jù)庫(kù)設(shè)計(jì)的優(yōu)劣將直接影響管理系統(tǒng)的性能。通過(guò)對(duì)系統(tǒng)功能模塊的劃分和設(shè)計(jì),已明確了本系統(tǒng)所涉及的所有實(shí)體及實(shí)體間的關(guān)系??紤]和預(yù)估算本系統(tǒng)實(shí)際使用過(guò)程中產(chǎn)生的數(shù)據(jù)體量及數(shù)據(jù)規(guī)范性,系統(tǒng)數(shù)據(jù)庫(kù)采用SQL Server。根據(jù)各功能模塊所需,總共設(shè)計(jì)了14張數(shù)據(jù)表,分別有部門(mén)表、權(quán)限表、用戶(hù)表、倉(cāng)庫(kù)表、供應(yīng)商表、成品模板表、成品物料表、訂單表、實(shí)際物料表、采購(gòu)表、專(zhuān)用出入庫(kù)表、公用正品庫(kù)表、公用次品庫(kù)表和公用報(bào)廢庫(kù)表。
⑴ 部門(mén)表(Tb_Department),包括:部門(mén)編號(hào)(自動(dòng)增量)、部門(mén)名稱(chēng)。
⑵ 權(quán)限表(Tb_Role),包括:權(quán)限編碼、權(quán)限名稱(chēng)。
⑶ 用戶(hù)表(Tb_User),包括:用戶(hù)編號(hào)、用戶(hù)名、真實(shí)姓名、密碼、權(quán)限編號(hào)、部門(mén)編號(hào)。
⑷ 倉(cāng)庫(kù)表(Tb_Storage),包括:倉(cāng)庫(kù)編號(hào)、倉(cāng)庫(kù)名稱(chēng)。
⑸ 供應(yīng)商表(Tb_Supplier),包括:供應(yīng)商編號(hào)、供應(yīng)商名稱(chēng)、聯(lián)系人、聯(lián)系電話(huà)、傳真、省份、地級(jí)市、地址。
⑹ 成品模板表(Tb_ProMasterplate),包括:產(chǎn)品代碼、產(chǎn)品名稱(chēng)、產(chǎn)品規(guī)格、產(chǎn)品形式、產(chǎn)品結(jié)構(gòu)、PE配方、成品數(shù)量、工藝流。
⑺ 成品物料表(Tb_ProMaterialFlow),包括:編號(hào)、產(chǎn)品代碼、物料代碼、物料名稱(chēng)、長(zhǎng)、長(zhǎng)的單位、寬、寬的單位、厚、厚的單位、高、高的單位、數(shù)量、數(shù)量的單位、物料分類(lèi)、比重系數(shù)、物料系數(shù)。
⑻ 訂單表(Tb_Order),包括:訂單編號(hào)、客戶(hù)名稱(chēng)、業(yè)務(wù)員、內(nèi)勤編號(hào)、客戶(hù)下單時(shí)間、交貨日期、下生產(chǎn)單日期、預(yù)計(jì)生成日期、產(chǎn)品代碼、訂單數(shù)量、結(jié)算標(biāo)記、采購(gòu)標(biāo)記、備注。
⑼ 實(shí)際物料表(Tb_ReaMaterialFlow),包括:編號(hào)、訂單編號(hào)、產(chǎn)品代碼、物料代碼、物料名稱(chēng)、長(zhǎng)、長(zhǎng)的單位、寬、寬的單位、厚、厚的單位、高、高的單位、數(shù)量、數(shù)量的單位、物料分類(lèi)、比重系數(shù)、標(biāo)記、物料系數(shù)。
⑽ 采購(gòu)表(Tb_Procure),包括:編號(hào)、供應(yīng)商編號(hào)、訂單編號(hào)、實(shí)際物料編號(hào)、數(shù)量、單位、金額、交貨日期、要求、備注、審核標(biāo)記。
⑾ 專(zhuān)用出入庫(kù)表(Tb_SpecStorage),包括:專(zhuān)用出入庫(kù)編號(hào)、訂單編號(hào)、實(shí)際物料編號(hào)、數(shù)量、數(shù)量單位、出入庫(kù)時(shí)間、操作員、倉(cāng)庫(kù)編號(hào)、備注、庫(kù)位號(hào)。
⑿ 公用正品庫(kù)表(Tb_PubStorage),包括:公用出入庫(kù)編號(hào)、訂單編號(hào)、實(shí)際物料編號(hào)、數(shù)量、數(shù)量單位、出入庫(kù)時(shí)間、操作員、倉(cāng)庫(kù)編號(hào)、備注、庫(kù)位號(hào)、備用標(biāo)記。
⒀ 公用次品庫(kù)表(Tb_FakeStorage),包括:次品庫(kù)編號(hào)、訂單編號(hào)、實(shí)際物料編號(hào)、數(shù)量、數(shù)量單位、出入庫(kù)時(shí)間、操作員、倉(cāng)庫(kù)編號(hào)、備注、庫(kù)位號(hào)、備用標(biāo)記。
⒁ 公用報(bào)廢庫(kù)表(Tb_BrokenStorage),包括:報(bào)廢庫(kù)編號(hào)、訂單編號(hào)、實(shí)際物料編號(hào)、數(shù)量、數(shù)量單位、出入庫(kù)時(shí)間、操作員、倉(cāng)庫(kù)編號(hào)、備注、庫(kù)位號(hào)、備用標(biāo)記。
以上庫(kù)表設(shè)計(jì),既滿(mǎn)足了企業(yè)ERP系統(tǒng)的數(shù)據(jù)對(duì)接,又為企業(yè)進(jìn)一步規(guī)范操作管理助推。
3 系統(tǒng)開(kāi)發(fā)實(shí)現(xiàn)
物料采購(gòu)倉(cāng)儲(chǔ)系統(tǒng)是一套基于B/S結(jié)構(gòu)的信息化系統(tǒng)。采用了ASP.NET MVC三層設(shè)計(jì)模式,實(shí)現(xiàn)了系統(tǒng)業(yè)務(wù)功能流程、數(shù)據(jù)庫(kù)訪問(wèn)操作和靜態(tài)頁(yè)面全分離。系統(tǒng)功能經(jīng)過(guò)多年的運(yùn)行和維護(hù),系統(tǒng)功能各模塊都運(yùn)行正常。本文通過(guò)采購(gòu)單功能的實(shí)現(xiàn)來(lái)具體闡述本系統(tǒng)的開(kāi)發(fā)與實(shí)現(xiàn),采購(gòu)單功能效果如圖3所示。
核心代碼:
/// <summary>
/// 保存按鈕按下功能
/// </summary>
/// <returns></returns>
protected void btnSave_Click(object sender, EventArgs e)
{ ProcureInfo pi=new ProcureInfo();
pi.ProcureId=new ProcureBiz().AutoInsertProcureId();
pi.SupplierModel=new SupplierBiz().GetSupplierModel
(Convert.ToInt32(ViewState["SupplierId"]));
pi.OrderModel=new OrderBiz().GetOrderModel
(ViewState["OrderId"].ToString());
pi.ReaMaterialFlowModel=new ReaMaterialFlowBiz()
.GetMaterialFlowModel(Convert.ToInt32(ViewState["MaterialFlowId"]));
pi.Num=Convert.ToSingle(txtNum.Text.Trim());
pi.Unit=lblNumUnit.Text.Trim();
pi.UnitPrice=Convert.ToSingle(txtUnitPrice.Text.Trim());
pi.AllSum=Convert.ToSingle(txtAllSum.Text.Trim());
pi.DeliveryTime=TimeHelper.getStringDateTime
(dataTxtDeliveryTime.Text.Trim());
pi.Require=txtNeed.Text.Trim();
pi.ReMark=txtRemark.Text.Trim();
pi.ExamineMark="0";
if (Convert.ToInt32(pi.OrderModel.ProduceTime)>=
Convert.ToInt32(pi.DeliveryTime))
{ int result1=new ProcureBiz().AddProcure(pi);
ReaMaterialFlowInfo rmfm=new
ReaMaterialFlowInfo();
rmfm.MaterialFlowId=Convert.ToInt32(ViewState
["MaterialFlowId"]);
rmfm.Long=Convert.ToSingle(txtLong.Text.Trim());
rmfm.Height=Convert.ToSingle(txtHeight.Text.Trim());
rmfm.Wide=Convert.ToSingle(txtWide.Text.Trim());
rmfm.Ply=Convert.ToSingle(txtPly.Text.Trim());
int result2=new ReaMaterialFlowBiz()
.UpDateRemoveReMark("2",Convert.ToInt32(ViewState["MaterialFlowId"]));
int result4=new ReaMaterialFlowBiz().UpDateGuige(rmfm);
int RemoveReMarkAmount=new
ReaMaterialFlowBiz().SearchRemoveReMark(ViewState["OrderId"].ToString());
if (RemoveReMarkAmount != 0)
{ string gotoBackUrl="PurchaseCheck.aspx?
OrderId="+ViewState["OrderId"].ToString();
if (result1>0 && result2>0 && result4>0)
{ MsgBoxHelper.ShowMsgAndRedirect(""保存成功!",
this.Page, gotoBackUrl);
}
else
{ MsgBoxHelper.ShowMsgAndRedirect("保存失?。?,
this.Page, gotoBackUrl);
}
}
else
{? int result3=new OrderBiz().UpdatePurchase
(ViewState["OrderId"].ToString(), "1");
//修改訂單表中的訂單狀態(tài)
string gotoBackUrl="PurchaseCheck.aspx?
OrderId="+ViewState["OrderId"].ToString();
if (result1>0 && result2>0 && result3>0 &&
result4>0)
{? MsgBoxHelper.ShowMsgAndRedirect("保存成功!",
this.Page, gotoBackUrl);
}
else
{? MsgBoxHelper.ShowMsgAndRedirect("保存失??!",
this.Page, gotoBackUrl);
}
}
}
else
{ MsgBoxHelper.ShowMsgBox("交貨日期不能晚于訂單
預(yù)計(jì)生產(chǎn)日期!", this.Page);
}
}
4 系統(tǒng)運(yùn)行測(cè)試
系統(tǒng)從開(kāi)發(fā)、測(cè)試,到交付客戶(hù),正式上線(xiàn)使用,再經(jīng)過(guò)系統(tǒng)功能的充實(shí)和再完善,已經(jīng)經(jīng)歷了近幾年時(shí)間。通過(guò)這幾年的實(shí)際應(yīng)用,本系統(tǒng)不論是從響應(yīng)效率、功能操作、界面顯示均工作正常,得到了企業(yè)各部門(mén)各類(lèi)用戶(hù)的一致認(rèn)可,極大的提高了企業(yè)的工作效率,極大的節(jié)約了企業(yè)運(yùn)行成本。
5 結(jié)論
本文從需求分析、系統(tǒng)方案總體設(shè)計(jì)、系統(tǒng)功能設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和系統(tǒng)開(kāi)發(fā)實(shí)現(xiàn)等方面對(duì)物料采購(gòu)系統(tǒng)進(jìn)行了詳細(xì)的介紹。系統(tǒng)正式上線(xiàn)使用近幾年時(shí)間,至今系統(tǒng)界面操作方便、運(yùn)行穩(wěn)定、Web服務(wù)響應(yīng)快速、數(shù)據(jù)安全可靠,達(dá)到了預(yù)期開(kāi)發(fā)的效果。
目前,系統(tǒng)服務(wù)于江蘇申凱包裝高新技術(shù)股份有限公司的生產(chǎn)、物料采購(gòu)、倉(cāng)儲(chǔ)等多個(gè)環(huán)節(jié),在互聯(lián)網(wǎng)+時(shí)代大背景下,本系統(tǒng)的上線(xiàn),極大的推動(dòng)了企業(yè)的業(yè)務(wù)流程標(biāo)準(zhǔn)化,大大地節(jié)約了企業(yè)的人、財(cái)、物運(yùn)行成本,為企業(yè)創(chuàng)造了巨大的利潤(rùn)。系統(tǒng)表現(xiàn)出其使用價(jià)值和推廣價(jià)值。
參考文獻(xiàn)(References):
[1] 明日科技著.ASP.NET從入門(mén)到精通(第4版)[M].清華大學(xué)出版社,2017.
[2] [美]Adam Freeman著,張成彬,徐燕萍,李萍,林逸 譯.精通ASP.NET MVC 5[M].人民郵電出版社,2016.
[3] 鄒瓊俊著.ASP.NET MVC企業(yè)級(jí)實(shí)戰(zhàn)[M].清華大學(xué)出版社,2017.
[4] 陳暢亮,吳一晴著.SQL Server性能調(diào)優(yōu)實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2015.
[5] 單東林,張曉菲,魏然等著.鋒利的jQuery(第2版)[M].人民郵電出版社,2012.
[6] 李慶松,徐小瓏,鄒佳等編.面向服務(wù)的AJAX架構(gòu)模式與應(yīng)用開(kāi)發(fā)[M].人民郵電出版社,2011.