商业自动化工程设计与实例6_第1页
商业自动化工程设计与实例6_第2页
商业自动化工程设计与实例6_第3页
商业自动化工程设计与实例6_第4页
商业自动化工程设计与实例6_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 系统应用程序编程我们知道商业管理信息系统的结构是复杂的的。小的系统至少有十来个子模块组成,大系统可能有上百个子系统组成。限于篇幅,这里以供应商采购入库流程作一个介绍,从中可以了解系统应用程序基本构造。61 门店/配送中心采购申请各门店采购员根据理货员的要求以及自动采购的辅助,填写采购申请单。要求总部审批。本次需要完成采购申请审核功能,总部采购申请处理(1)简介总部采购员审核各门店传输过来的采购申请单,填写审查数量,系统根据审查数量以及采购供应商,生成总部采购单。(2)程序流程DFD解释:PROCESS 1.1:总部审查各门店采购申请表,填写审查数量,保存。PROCESS 1.2:审核前

2、的必要数据检查,验证单据状态是否可以审查。验证单据明细内容合法性。PROCESS 1.3:调用存储过程,将采购申请表根据供应商自动分拣,生成采购单。申请单的单号写入备注。 (3)相关数据表采购申请表主表 PURCHASE_APP_M采购申请表明细表 PURCHASE_APP_D采购单主表 PURCHASE_M采购单明细表 PURCHASE_D(4)窗口界面以及主要事件函数解释窗口名: dw_wortemp_h.w_purchase_app_input:w_bill_modify参考界面:略解释: w_detail.doubleclicked():对应1.1 f_preaudite() 对应1.

3、2 未存盘单据报警,要求先存盘; 单据状态检查是否可以审核f_audite() 对应1.3 调用存储过程USP_HQ_PURCHASEAPP_EXAMINE,将采购申请单按供应商分拣,生成总部采购单.存储过程流程如下(5)相关系统设置62 总部采购单制定总部采购单来源有两个,一个是从门店采购申请单审核后转入采购单,一个是总部自行录入采购单,由采购申请单转入采购单方法请参见“总部采购申请处理”。总部采购单自行录入不进行详细描述。本次完成审核的功能wf_preaudite() 未存盘单据报警,要求先存盘; 单据状态检查是否可以审核。wf_audite() 调用存储过程USP_HQ_PURCHASE

4、_AUDITE,设置单据状态,写发送信息。63 门店浏览采购单略64 门店,配送中心采购入库(1)简介:门店配送中心采购入库是标准入库流程,根据用户输入的订单号,将对应订单的数据导入入库单,用户填写验收数量,然后保存记录,审核入库。需要注意的是,是否强制由订单入库是一个系统设置,系统通过读取这个设置决定是否必须由订单入库,具体方式是若必须由订单入库,则不允许新增明细记录。(2)程序流程:解释: PROCESS 1.1。用户输入订单号码,系统根据输入的订单号码读取明细数据导入入库单明细表,对于多张订单中有重复的商品,累计审查数量。PROCESS 1.2。用户修改入库明细记录,对于系统参数决定必须

5、由订单入库的情况,无法新增记录,并且验收数量不能大于采购数量。反之,则没有这个限制。PROCESS 1.3。保存单据,审核单据。(3)相关数据表采购单主表采购单明细表入库单主表入库单明细表系统参数表(4)窗口界面参考以及主要事件函数解释窗口名:win_worktemp_o.w_selectbill:w_work response 窗口 对应PROCESS1.1参考界面:解释: (A) 窗口是一个通用窗口,除了此处需要用到以外,对于退货申请单导入退货单,返库申请单导入返库单,损溢申请单导入损溢单都需要用到这个窗口(B)窗口基本方法是根据打开时传入的参数决定待选择单据数据窗口对象,使用cb_(加入

6、)和cb_(移出)按钮添加或删除选择的单据,然后将选择的单据编号返回调用者。(C) W_billselect.open()(D)billselect.cb_(加入).clicked(E)W_billselect.cb_(确定).clicked窗口名: win_wortemp_o/d.w_entrystock_input:w_bill_modify参考界面:略解释:(A) instance declare is_prchsimport = N 用于记录系统参数,是否必须订单入库(B) open():从系统参数表中读取参数,设置is_prchsimport 添加函数wf_prchsimport(s

7、tring ls_bi) 该函数用于采购单明细数据导入,流程如下:a) wf_newrec()if is_prchsimport = Y then提示必须由采购单导入,无法新增else新增一条明细记录b) dw_main.clicked()若用户按下采购单导入按钮,打开单据选择窗口,参数:prchase_app得到返回的采购单编号字符串,调用wf_prchsimport()导入采购明细表c) dw_detail.itemchanged()根据参数进行一系列限制。(5)相关系统设置相关系统设置系统参数设置:是否必须由订单入库。系统设置编号:PURCHASE_ENTRY6.5 门店,配送中心紧急入

8、库紧急入库就是没有订单入库,设置此功能是为了解决当必须由订单入库时出现以外情况造成没有订单时候的紧急入库。其功能和订单入库功能基本一致,不同点是无需检验系统参数设置情况,也没有订单号输入。此处就不在作详细介绍。6.6配送中心自动采购(1)简介该功能提供了配送中心自动采购的辅助功能,类似于门店自动补货流程,区别在于配送中心只有自动采购功能。(2)程序流程程序流程类似门店自动补货,但是无须分拣生成补货单。(3)相关数据表视图:门店商品库存表(新增) V_ARTICLE_STOCK具体表结构参见pdm文件数据表:自动补货暂存表(新增) AUTOPUCHS_INTRIM数据表:商品字典(修改) 增加最

9、低,最高库存,采购区域(4)窗口界面以及主要事件函数解释自动采购数据生成。内容以及窗口界面请你参见自动补货采购数据生成。自动采购辅助。窗口名:w_autoprchs_ assistant_hq : w_modify sheet参考界面:主要函数事件解释(A)Open()Dw_1取消当前行选择服务Dw_1 开启突出行显示服务Dw_1 关闭检索进度界面Dw_1.retrieve()实例化单据输入对象,设置单据输入对象检查属性.(B)Dw_1.itemchanged()。类似的相应事件.(C)Presave()。数量为0的记录提示进行,确认后删除,商品编号数量为空的记录删除(D)Sav

10、e()。保存dw_1(E)Preaudite()。检查是否保存,若有修改未保存,则提示先保存再审核。(F)Audite()。调用存储过程USP_HQ_AUTOPRCHS生成补货数据和采购申请数据,存储过程流程如下:(5)相关系统设置67 主要代码(1)采购输入forward prototypespublic function string wf_getbi (string as_type)public function integer wf_preaudite ()public function integer wf_close ()public function integer wf_pre

11、save ()public function integer wf_newedit ()public function integer wf_aftaudite ()public function integer wf_audite ()end prototypespublic function string wf_getbi (string as_type);string ls_id /分店编号string ls_biif isvalid(gn_sys) thenls_id = gn_sys.in_market.of_getid()end ifls_bi = gf_getlsh('p

12、urchase',as_type)ls_bi = right('00000000' + ls_bi,8)return '5' + ls_id + ls_bi end functionpublic function integer wf_preaudite ();string ls_statusstring ls_purchase_bidw_main.accepttext()dw_detail.accepttext()ls_purchase_bi = dw_main.getitemstring(dw_main.getrow(),'purchase_

13、bi')if dw_main.modifiedcount()>=1 or dw_detail.modifiedcount()>=1 & or dw_main.deletedcount() >0 or dw_detail.deletedcount() >0 then messagebox('提示!','有改动,先保存单据!') return -1 end ifselect status into :ls_statusfrom purchase_mwhere purchase_bi = :ls_purchase_bi;if l

14、s_status <> '0' thenmessagebox('提示!','此单据已经审核,不能再次审核!')return -1end ifreturn 1end functionpublic function integer wf_close ();if dw_main.modifiedcount()>=1 or dw_detail.modifiedcount()>=1 & or dw_main.deletedcount() >0 or dw_detail.deletedcount() >0 then

15、 if messagebox('提示!','有改动,是否先保存单据?',information!,yesno!,1) = 1 then return -1 end ifreturn 1end functionpublic function integer wf_presave ();string ls_statusstring ls_supid,ls_outlet_iddecimal ld_qdecimal ld_etypricedatetime ldt_deliverdatetime ldt_todayint idw_main.accepttext()dw_d

16、etail.accepttext()/检查单据状态if is_keyvalue <> '' thenselect status into :ls_status from PURCHASE_Mwhere PURCHASE_BI = :is_keyvalue;if ls_status <> '0' thenmessagebox('提示!','该单据已经审核或者作废单据,不能再次修改存盘!')return -1end ifend ifls_supid=dw_main.getitemstring(dw_main.g

17、etrow(),'supplier_id')if ls_supid='' or isnull(ls_supid) thenmessagebox("提示","请选择供应商编号")return -1end ifls_outlet_id=dw_main.getitemstring(dw_main.getrow(),'outlet_id')if ls_outlet_id='' or isnull(ls_outlet_id) thenmessagebox("提示","请选

18、择分店编号")return -1end if /检查申请数量,进价,供应商if dw_detail.rowcount() <=0 then return -1for i = 1 to dw_detail.rowcount()if dw_detail.getitemstring(i,'aid')= '' or isnull(dw_detail.getitemstring(i,'aid') then continueld_q = dw_detail.getitemnumber(i,'purchase_q')if ld_

19、q < 0 or isnull(ld_q) thenmessagebox('提示!','不允许采购数量小于0或不输入数量,请检查第'+ string(i) + '行记录数据准确性.')return -1end ifld_etyprice = dw_detail.getitemnumber(i,'tax_entry_price')if ld_etyprice <= 0 thenmessagebox('提示!','不允许进价小于等于0,请检查第'+ string(i) + '行记录数

20、据准确性.')return -1end ifnext ldt_today=datetime(today()ldt_deliver=dw_main.getitemdatetime(dw_main.getrow(),'deliver_day')if isnull(ldt_deliver) thenldt_deliver=datetime(relativedate(today(),30)dw_main.setitem(dw_main.getrow(),'deliver_day',ldt_deliver)end if return 1end functionpu

21、blic function integer wf_newedit ();date ld_deliverif super:wf_newedit() = -1 thenreturn -1end ifdatetime ldt_todaystring ls_workstring ls_marketid , ls_headquarters_idldt_today = datetime(today(),00:00:00)if isvalid(in_user) thenls_work = in_user.of_getname()elsels_work = 'unknow'end ifif i

22、svalid(gn_sys) thenls_marketid = gn_sys.in_market.of_getid()elsels_marketid = 'unknow'end ifld_deliver=relativedate(today(),3)dw_main.setitem(dw_main.getrow(),'deliver_day',ld_deliver)dw_main.setitem(dw_main.getrow(),'input_dt',ldt_today)dw_main.setitem(dw_main.getrow(),'

23、inputter',ls_work)/dw_main.setitem(dw_main.getrow(),'outlet_id',ls_marketid)/dw_main.setitem(dw_main.getrow(),'outlet_id_1',ls_marketid)dw_main.setitem(dw_main.getrow(),'status','0')select HEADQUARTERS_ID into:ls_headquarters_id from struct_info where outlet_id=:l

24、s_marketid;if sqlca.sqlcode<>0 then messagebox("提示","总部编号没有设置")end if dw_main.setitem(dw_main.getrow(),'headquarters_id',ls_headquarters_id)dw_main.setitem(dw_main.getrow(),'headquarters_id_1',ls_headquarters_id)/设置为普通采购单dw_main.object.purchase_typedw_main.g

25、etrow() = '0'dw_main.object.t_1.visible = truedw_main.object.deliver_day.visible = truedw_print.object.t_6.visible = truedw_print.object.purchase_m_deliver_day.visible = trueif dw_main.describe('title.text') <> '!' and isvalid(gn_sys) thendw_main.object.title.text=gn_sy

26、s.in_market.of_getname() + '采购单'end ifif dw_print.describe('title.text') <> '!' and isvalid(gn_sys) thendw_print.object.title.text=gn_sys.in_market.of_getname() + '采购单'end ifdw_main.setfocus()dw_main.setcolumn('folio_ref')/dw_main.scrolltorow(dw_main.get

27、row()return 1end functionpublic function integer wf_aftaudite ();if messagebox('提示!','是否需要进行打印?',information!,yesno!,2) = 1 thenthis.postevent('ue_print')end if return 1end functionpublic function integer wf_audite ();string ls_purchase_bistring ls_workstring ls_errordate ldt

28、_dayldt_day = today()if isvalid(in_user) thenls_work = in_user.of_getname()elsels_work = 'unknow'end ifls_purchase_bi = dw_main.getitemstring(dw_main.getrow(),'purchase_bi')update purchase_m set status = '1', audite_dt = :ldt_day, auditer = :ls_work where purchase_bi = :ls_pu

29、rchase_bi;if sqlca.sqlcode <> -1 then IF gf_hq_billcomm('总部采购单',is_keyvalue)=-1 Then Rollback; messagebox('提示!','生成发送指令错误!',Stopsign!,ok!) Return -1Elsecommit ;End iFmessagebox('提示!','审核成功!')dw_main.setitem(dw_main.getrow(),'status','1')d

30、w_main.setitem(dw_main.getrow(),'audite_dt',ldt_day)dw_main.setitem(dw_main.getrow(),'auditer',ls_work)dw_main.resetupdate()dw_detail.resetupdate()elsels_error = sqlca.SQLErrTextrollback;messagebox('提示!','审核有错误!rn'+ ls_error) return -1end ifreturn 1end functionon w_pu

31、rchase_input.createcall super:createend onon w_purchase_input.destroycall super:destroyend onevent close;call super:close;if not isvalid(in_article) thendestroy in_article end ifend eventevent open;call super:open;string ls_branchiddatetime ldt_todaydate ldt_deliverif not isvalid(in_article) thenin_

32、article = create n_cst_billarticle_headin_article.of_setcheckmode('01211011102')in_article.of_regdw(dw_detail) / ls_branchid = dw_main.getitemstring(dw_main.getrow(),'outlet_id')/in_article.of_setbranch(ls_branchid)end ifif not (is_keyvalue = '' or isnull(is_keyvalue) or len(

33、trim(is_keyvalue) < 8) thenls_branchid = dw_main.object.outlet_iddw_main.getrow()if isvalid(in_article) then in_article.of_setbranch(ls_branchid)end if/根据start.ini中记录的信息写采购单的注脚. 白凡 2002-09-24if isvalid(gn_sys) thenstring ls_t1,ls_t2,ls_t3,ls_filels_file=gn_sys.is_pathname + 'start.ini' ls

34、_t1 = trim(ProfileString(ls_file, 'MARKET', "T1","")ls_t2 = trim(ProfileString(ls_file, 'MARKET', "T2","")ls_t3 = trim(ProfileString(ls_file, 'MARKET', "T3","")dw_print.object.t_1.text = ls_t1dw_print.object.t_2.text

35、 = ls_t2dw_print.object.t_3.text = ls_t3end if/判断单据是否为用续采购单,若是,不显示最后送货日期string ls_typeif dw_main.getrow() > 0 thenls_type = dw_main.object.purchase_typedw_main.getrow()if ls_type = '1' thendw_main.object.t_1.visible = falsedw_main.object.deliver_day.visible = falsedw_print.object.t_6.visi

36、ble = falsedw_print.object.purchase_m_deliver_day.visible = falseif dw_main.describe('title.text') <> '!' and isvalid(gn_sys) thendw_main.object.title.text=gn_sys.in_market.of_getname() + '永续采购单'end ifif dw_print.describe('title.text') <> '!' and i

37、svalid(gn_sys) thendw_print.object.title.text=gn_sys.in_market.of_getname() + '永续采购单'end ifelsedw_main.object.t_1.visible = truedw_main.object.deliver_day.visible = truedw_print.object.t_6.visible = truedw_print.object.purchase_m_deliver_day.visible = trueif dw_main.describe('title.text&

38、#39;) <> '!' and isvalid(gn_sys) thendw_main.object.title.text=gn_sys.in_market.of_getname() + '采购单'end ifif dw_print.describe('title.text') <> '!' and isvalid(gn_sys) thendw_print.object.title.text=gn_sys.in_market.of_getname() + '采购单'end ifend if

39、end if/ldt_deliver=relativedate(today(),3)/dw_main.setitem(dw_main.getrow(),'deliver_day',ldt_deliver)end eventtype dw_infor from w_bill_modifydw_infor within w_purchase_inputend typetype st_1 from w_bill_modifyst_1 within w_purchase_inputend typetype dw_print from w_bill_modifydw_print with

40、in w_purchase_inputinteger x = 704integer y = 1628integer width = 297integer height = 228string dataobject = "dw_purchase_m_input_print"boolean hscrollbar = trueboolean vscrollbar = trueend typetype dw_detail from w_bill_modifydw_detail within w_purchase_inputstring dataobject = "dw_p

41、urchase_d_input"end typeevent dw_detail:itemchanged;call super:itemchanged;decimal ld_qdecimal ld_etypricedecimal ld_retpricedecimal ld_high,ld_lowerstring ls_aid,ls_outletid,ls_supid,ls_baledecimal ld_balethis.accepttext()ls_supid=dw_main.getitemstring(dw_main.getrow(),'supplier_id')if

42、 ls_supid='' or isnull(ls_supid) thenmessagebox("提示","请选择供应商编号")return 1end ifls_outletid=dw_main.getitemstring(dw_main.getrow(),'outlet_id')if isnull(ls_outletid) or ls_outletid='' then messagebox("提示","请选择分店编号")return 1end ifchoose ca

43、se case 'aid'if isvalid(in_article) then/in_article.of_setbranch(ls_outletid)if in_article.of_setarticle(data,in_article.aid) = -1 then this.deleterow(row)this.scrolltorow(this.insertrow(0)this.setcolumn('aid')return 1end ifselect higher_stock,lower_stock into :ld_high,:ld_lo

44、wer from article_addin_propertiy where aid = :data;this.object.higher_stockthis.getrow() = ld_highthis.object.lower_stockthis.getrow() = ld_lowerif in_article.of_supcheck(data,ls_supid,ls_outletid)=-1 thenthis.deleterow(row)this.scrolltorow(this.insertrow(0)this.setcolumn('aid')return 1end i

45、fend ifthis.object.purchase_qthis.getrow() = 0this.object.purchase_box_qthis.getrow() = 0this.object.entry_athis.getrow() = 0case 'barcode'if isvalid(in_article) thenif in_article.of_setarticle(data,in_article.barcode) = -1 thenthis.deleterow(row)this.scrolltorow(this.insertrow(0)this.setcol

46、umn('barcode')return 1end ifls_aid=dw_detail.getitemstring(dw_detail.getrow(),'aid')select higher_stock,lower_stock into :ld_high,:ld_lower from article_addin_propertiy where aid = :data;this.object.higher_stockthis.getrow() = ld_highthis.object.lower_stockthis.getrow() = ld_lower if

47、 in_article.of_supcheck(ls_aid,ls_supid,ls_outletid)=-1 thenthis.deleterow(row)this.scrolltorow(this.insertrow(0)this.setcolumn('barcode')return 1end ifend ifthis.object.purchase_qthis.getrow() = 0this.object.purchase_box_qthis.getrow() = 0this.object.entry_athis.getrow() = 0case 'purcha

48、se_box_q'if dec(data) < 0 thenmessagebox("提示!","输入的箱数数量不允许小于零,重新输入!")this.object.purchase_box_qrow = 0this.setcolumn('purchase_box_q')return 1end ifif isvalid(in_article) thenls_aid = string(this.object.aidthis.getrow() ls_bale = string(this.object.bale_capacitythi

49、s.getrow() if not isnull(ls_bale) or ls_bale <> '' or ls_bale <> '0' then ld_bale = dec(ls_bale) else messagebox("提示!","此商品没有包装率,请输入数量!") ld_bale = 0 end ifld_q = round(dec(data) * ld_bale,3)this.setitem(this.getrow(),'purchase_q',ld_q) / ld_re

50、tprice=this.getitemnumber(this.getrow(),'retail_price')ld_etyprice = this.getitemnumber(this.getrow(),'tax_entry_price')/this.setitem(this.getrow(),'retail_a',round(ld_retprice*ld_q,2)this.setitem(this.getrow(),'entry_a',round(ld_etyprice * ld_q,4)end ifcase 'purc

51、hase_q'if dec(data) <= 0 thenmessagebox('提示!','输入的数量不能小于0!')return 1elseld_etyprice = this.getitemnumber(this.getrow(),'tax_entry_price')this.setitem(this.getrow(),'entry_a',round(ld_etyprice * dec(data),4)end ifcase 'tax_entry_price'if dec(data) <=

52、0 thenmessagebox('提示!','输入的价格不能小于0!')this.setitem(this.getrow(),'tax_entry_price',0.0)return 1end ifif isvalid(in_article) thenls_aid = this.getitemstring(this.getrow(),'aid')if in_article.of_retpricecheck(ls_aid,dec(data) = -1 thenthis.setitem(this.getrow(),'tax_

53、entry_price',0.0)return 1end ifend ifld_q = this.getitemnumber(this.getrow(),'purchase_q')this.setitem(this.getrow(),'entry_a',round(ld_q * dec(data),4)case 'entry_a'if dec(data) <= 0 thenmessagebox('提示!','输入的金额不能小于等于0!')return 1elseld_q = this.getitemn

54、umber(this.getrow(),'purchase_q')if ld_q <> 0 thenld_etyprice = round(dec(data) / ld_q,4)if isvalid(in_article) thenls_aid = this.getitemstring(this.getrow(),'aid')if in_article.of_retpricecheck(ls_aid,ld_etyprice) = -1 thenthis.setitem(this.getrow(),'entry_a',0.0)retur

55、n 1end ifend ifthis.setitem(this.getrow(),'tax_entry_price',ld_etyprice)elsemessagebox('提示!','请先输入数量!')this.setitem(this.getrow(),'entry_a',0.0)return 1end ifend ifend chooseend eventtype dw_main from w_bill_modifydw_main within w_purchase_inputstring dataobject = &qu

56、ot;dw_purchase_m_input"end typeevent dw_main:itemchanged;call super:itemchanged;string ls_supplier_idint li_find,li_rtn,i,li_daydatetime ldt_today,ldt_deliverDataWindowChild dwchild_supplieridDataWindowChild dwchild_outletidthis.accepttext()choose case case 'supplier_id' if dat

57、a ='' or isnull(data) then messagebox("提示","供应商不能为空") return 2 end ifthis.getchild('supplier_id',dwchild_supplierid)dwchild_supplierid.settransobject(sqlca)dwchild_supplierid.retrieve() li_find=dwchild_supplierid.find("supplier_id ='"+data+"'

58、;",1,dwchild_supplierid.rowcount()if li_find<=0 then messagebox("提示","供应商不存在")this.setitem(row,'supplier_id','')return 1end if if dw_detail.rowcount()>1 thenli_rtn= messagebox("提示","对应的退货供应商已改变,为保证数据检查的正确,系统将清空明细要求重新输入,是否确认修改?" , question!,okcancel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论