$PBExportHeader$uo_wfjg_py.sru forward global type uo_wfjg_py from nonvisualobject end type end forward global type uo_wfjg_py from nonvisualobject end type global uo_wfjg_py uo_wfjg_py type variables PUBLIC PROTECTEDWRITE Long scid = 0 //分部id PUBLIC PROTECTEDWRITE Long outwareid //进仓单表自动增量id PUBLIC PROTECTEDWRITE String outwarecode //单据的唯一编号 PUBLIC PROTECTEDWRITE Int billtype = 0 //业务类型 //billtype = 4 正常出仓 //billtype =16 加工商盘盈 PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动 PUBLIC PROTECTEDWRITE String opemp //建立操作员 PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动 PUBLIC PROTECTEDWRITE String modemp //修改操作员 PUBLIC PROTECTEDWRITE Int balcflag = 0 //仓库日结标志 PUBLIC PROTECTEDWRITE Int flag = 0 //仓库审核标志 PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间 PUBLIC PROTECTEDWRITE String auditingrep //审核操作员 PUBLIC PROTECTEDWRITE Long ctmint Long relid = 0 //关联id DateTime outdate //进仓发生时间 String outrep = '' //经手人 String part = '' //相关号码 String dscrp = '' //备注 Long sptid = 0 //供应户id String sptname = '' //供应商名称  Int thflag = 0 //退货标记 Boolean if_getid_ture = TRUE Transaction commit_transaction //数据commit事务 s_outwaremx_wfjg outwaremx[] //明细结构数组 s_outwaremx_wfjg_aft outwaremx_aft[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbt_aft = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE //修改标志 Int uo_option_2unit String uo_option_change_status String uo_option_change_woodcode String uo_option_change_pcode end variables forward prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_outwareid, integer arg_billtype, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_outwareid, ref string arg_msg) public function integer del (long arg_scid, long arg_outwareid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_outwareid, string arg_newdescppart, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_clearmx () public function integer p_getinfo (long arg_scid, long arg_outwareid, ref string arg_msg) public function integer p_reset () public function integer acceptmx (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg, integer arg_ifrel, long arg_relid, long arg_mtrlid, long arg_storageid, integer arg_dxflag, string arg_plancode, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, decimal arg_rebate, long arg_olmtrlid, decimal arg_uqty, string arg_uunit, decimal arg_rate) public function integer p_create_wfjgorder (string arg_opemp, boolean arg_ifcommit, ref string arg_msg) public function integer p_destroy_wfjgorder (boolean arg_ifcommit, ref string arg_msg) public function integer acceptmx_aft (s_outwaremx_wfjg_aft s_mx, string arg_msg) end prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);int rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if IF Not (arg_billtype = 5 OR & arg_billtype = 9 or & arg_billtype = 10) THEN rslt = 0 arg_msg = '此单据类型必须为:' arg_msg = arg_msg+'5-车间外协发出单,' arg_msg = arg_msg+'9-外协商盘盈单,' arg_msg = arg_msg+'10-外协商库存成本价调整' GOTO ext END IF p_reset() billtype=arg_billtype scid=arg_scid it_newbegin=true it_updatebegin=false ext: if rslt=0 then p_reset() return rslt end function public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(relid) THEN relid = 0 IF IsNull(outrep) THEN outrep = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(part) THEN part = '' IF IsNull(sptid) THEN sptid = 0 IF IsNull(sptname) THEN sptname = '' IF IsNull(thflag) THEN thflag = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确进仓内容" GOTO ext END IF IF f_check_inoutdate(0,outdate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_check_inoutdate_wfjg(scid,sptid,outdate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT name INTO :sptname FROM u_spt Where sptid = :sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,加工商资料" GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF outwareid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"ow_wfjg_out","outwareid",arg_msg,True,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //取得新单据编号 IF billtype = 5 THEN IF thflag = 0 THEN outwarecode = getid(scid,ls_sccode + 'WF',Date(server_dt),if_getid_ture,commit_transaction) ELSE outwarecode = getid(scid,ls_sccode + 'OF',Date(server_dt),if_getid_ture,commit_transaction) END IF ELSEIF billtype = 9 THEN outwarecode = getid(scid,ls_sccode + 'WY',Date(server_dt),if_getid_ture,commit_transaction) ELSEIF billtype = 10 THEN outwarecode = getid(scid,ls_sccode + 'FI',Date(server_dt),if_getid_ture,commit_transaction) END IF IF outwarecode = "err" THEN outwarecode = '' rslt = 0 arg_msg = "无法获取出仓单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO ow_wfjg_out ( scid, outwareid, outwarecode, billtype, relid, outdate, outrep, part, dscrp, sptid, sptname, thflag, opdate, opemp) VALUES ( :scid, :ls_newid, :outwarecode, :billtype, :relid, :outdate, :outrep, :part, :dscrp, :sptid, :sptname, :thflag, :server_dt, :publ_operator ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新outwareid outwareid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE ow_wfjg_out SET billtype = :billtype, relid = :relid, outdate = :outdate, outrep = :outrep, part = :part, dscrp = :dscrp, sptid = :sptid, sptname = :sptname, thflag = :thflag, moddate = :server_dt, modemp = :publ_operator WHERE ow_wfjg_out.outwareid = :outwareid AND ow_wfjg_out.scid = :scid And flag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败(1)"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM ow_wfjgmx_out WHERE ow_wfjgmx_out.outwareid = :outwareid And ow_wfjgmx_out.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM ow_wfjgmx_out_aft WHERE ow_wfjgmx_out_aft.outwareid = :outwareid And ow_wfjgmx_out_aft.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有收货明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO ow_wfjgmx_out (scid, storageid, outwareid, mtrlwareid, printid, mtrlid, plancode, status, qty, fprice, rebate, price, mxdscrp, costamt, ifrel, relid, woodcode, relcode, pcode, cost, olmtrlid, uqty, uprice, uunit, rate) VALUES ( :scid, :outwaremx[i].storageid, :outwareid, :outwaremx[i].mtrlwareid, :outwaremx[i].printid, :outwaremx[i].mtrlid, :outwaremx[i].plancode, :outwaremx[i].status, :outwaremx[i].qty, :outwaremx[i].fprice, :outwaremx[i].rebate, :outwaremx[i].price, :outwaremx[i].mxdscrp, :outwaremx[i].costamt, :outwaremx[i].ifrel, :outwaremx[i].relid, :outwaremx[i].woodcode, :outwaremx[i].relcode, :outwaremx[i].pcode, :outwaremx[i].cost, :outwaremx[i].olmtrlid, :outwaremx[i].uqty, :outwaremx[i].uprice, :outwaremx[i].uunit, :outwaremx[i].rate) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN outwareid = 0 //重置outwareid rslt = 0 arg_msg = "插入发出明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT //收货明细 FOR i = 1 To it_mxbt_aft INSERT INTO ow_wfjgmx_out_aft (scid, outwareid, printid, outmxprintid, mtrlid, status, woodcode, pcode, qty, uqty, unit, rate, price, jgprice, rebate, jgdscrp, ifrel, relid, relprintid, relcode, plancode, mtrlcuscode, location, mxdscrp) VALUES ( :scid, :outwareid, :outwaremx_aft[i].printid, :outwaremx_aft[i].outmxprintid, :outwaremx_aft[i].mtrlid, :outwaremx_aft[i].status, :outwaremx_aft[i].woodcode, :outwaremx_aft[i].pcode, :outwaremx_aft[i].qty, :outwaremx_aft[i].uqty, :outwaremx_aft[i].unit, :outwaremx_aft[i].rate, :outwaremx_aft[i].price, :outwaremx_aft[i].jgprice, :outwaremx_aft[i].rebate, :outwaremx_aft[i].jgdscrp, :outwaremx_aft[i].ifrel, :outwaremx_aft[i].relid, :outwaremx_aft[i].relprintid, :outwaremx_aft[i].relcode, :outwaremx_aft[i].plancode, :outwaremx_aft[i].mtrlcuscode, :outwaremx_aft[i].location, :outwaremx_aft[i].mxdscrp) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN outwareid = 0 //重置outwareid rslt = 0 arg_msg = "插入收货明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i uo_order_wfjg uo_wfjg uo_wfjg = Create uo_order_wfjg uo_wfjg.commit_transaction = commit_transaction IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE ow_wfjg_out SET Auditingemp = :publ_operator, Auditingdate = getdate(), flag = 1 WHERE ow_wfjg_out.outwareid = :outwareid AND flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新供应商库存 FOR i = 1 To it_mxbt IF f_update_mtrlware_spt_out (billtype,thflag,scid,outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, outwaremx[i].plancode,& outwaremx[i].status, outwaremx[i].qty, outwaremx[i].costamt,& outwaremx[i].planprice, sptid, & outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,& False,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF IF outwaremx[i].relid > 0 THEN IF uo_wfjg.addmxcmpl_out(scid,outwaremx[i].relid,outwaremx[i].mtrlid,outwaremx[i].olmtrlid,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF NEXT // //外协商盘盈,自动生成外协订单 IF it_mxbt_aft > 0 THEN IF p_create_wfjgorder(publ_operator,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF flag = 1 ext: Destroy uo_wfjg IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_outwareid, integer arg_billtype, ref string arg_msg);Long rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 GOTO ext END IF IF Not (arg_billtype = 5 OR & arg_billtype = 9 or & arg_billtype = 10) THEN rslt = 0 arg_msg = '此单据类型必须为:' arg_msg = arg_msg+'5-车间外协发出单,' arg_msg = arg_msg+'9-外协商盘盈单,' arg_msg = arg_msg+'10-外协商库存成本价调整' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_outwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF outwareid = arg_outwareid billtype = arg_billtype scid = arg_scid it_newbegin = FALSE it_updatebegin = TRUE p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_scid, long arg_outwareid, ref string arg_msg);//getinfo(arg_scid,arg_outwareid,arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "非法出仓单唯一码" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_outwareid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT ow_wfjgmx_out.printid, ow_wfjgmx_out.mtrlid, ow_wfjgmx_out.plancode, ow_wfjgmx_out.status, ow_wfjgmx_out.qty, ow_wfjgmx_out.fprice, ow_wfjgmx_out.rebate, ow_wfjgmx_out.price, ow_wfjgmx_out.mxdscrp, u_mtrldef.mtrlcode, ow_wfjgmx_out.mtrlwareid, ow_wfjgmx_out.storageid, ow_wfjgmx_out.costamt, ow_wfjgmx_out.ifrel, ow_wfjgmx_out.relid, ow_wfjgmx_out.woodcode, ow_wfjgmx_out.pcode, ow_wfjgmx_out.cost, ow_wfjgmx_out.olmtrlid, ow_wfjgmx_out.rate, u_mtrldef.unit FROM ow_wfjgmx_out,u_mtrldef,ow_wfjg_out WHERE ow_wfjg_out.outwareid = :arg_outwareid AND ow_wfjgmx_out.mtrlid = u_mtrldef.mtrlid AND ow_wfjg_out.scid = :arg_scid AND ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid AND ow_wfjg_out.scid = ow_wfjgmx_out.scid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :outwaremx[i].printid,:outwaremx[i].mtrlid,:outwaremx[i].plancode, :outwaremx[i].status,:outwaremx[i].qty,:outwaremx[i].fprice, :outwaremx[i].rebate,:outwaremx[i].price, :outwaremx[i].mxdscrp,:outwaremx[i].mtrlcode, :outwaremx[i].mtrlwareid,:outwaremx[i].storageid, :outwaremx[i].costamt,:outwaremx[i].ifrel, :outwaremx[i].relid, :outwaremx[i].woodcode,:outwaremx[i].pcode, :outwaremx[i].cost,:outwaremx[i].olmtrlid, :outwaremx[i].rate, :outwaremx[i].unit; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_inwaermx INTO :outwaremx[i].printid,:outwaremx[i].mtrlid,:outwaremx[i].plancode, :outwaremx[i].status,:outwaremx[i].qty,:outwaremx[i].fprice, :outwaremx[i].rebate,:outwaremx[i].price, :outwaremx[i].mxdscrp,:outwaremx[i].mtrlcode, :outwaremx[i].mtrlwareid,:outwaremx[i].storageid, :outwaremx[i].costamt,:outwaremx[i].ifrel, :outwaremx[i].relid, :outwaremx[i].woodcode,:outwaremx[i].pcode, :outwaremx[i].cost,:outwaremx[i].olmtrlid, :outwaremx[i].rate, :outwaremx[i].unit; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM ow_wfjgmx_out WHERE ow_wfjgmx_out.outwareid = :arg_outwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,出仓单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,出仓单明细" GOTO ext END IF it_mxbt = i - 1 ////收货明细 游标读取 i = 1 DECLARE cur_aftmx CURSOR FOR SELECT ow_wfjgmx_out_aft.printid, ow_wfjgmx_out_aft.outmxprintid, ow_wfjgmx_out_aft.mtrlid, ow_wfjgmx_out_aft.status, ow_wfjgmx_out_aft.woodcode, ow_wfjgmx_out_aft.pcode, ow_wfjgmx_out_aft.qty, ow_wfjgmx_out_aft.uqty, ow_wfjgmx_out_aft.unit, ow_wfjgmx_out_aft.rate, ow_wfjgmx_out_aft.price, ow_wfjgmx_out_aft.jgprice, ow_wfjgmx_out_aft.rebate, ow_wfjgmx_out_aft.jgdscrp, ow_wfjgmx_out_aft.ifrel, ow_wfjgmx_out_aft.relid, ow_wfjgmx_out_aft.relprintid, ow_wfjgmx_out_aft.relcode, ow_wfjgmx_out_aft.plancode, ow_wfjgmx_out_aft.mtrlcuscode, ow_wfjgmx_out_aft.location, ow_wfjgmx_out_aft.mxdscrp, u_mtrldef.mtrlcode FROM ow_wfjgmx_out_aft,u_mtrldef WHERE ow_wfjgmx_out_aft.scid = :arg_scid AND ow_wfjgmx_out_aft.outwareid = :arg_outwareid AND ow_wfjgmx_out_aft.mtrlid = u_mtrldef.mtrlid USING commit_transaction; OPEN cur_aftmx; FETCH cur_aftmx INTO :outwaremx_aft[i].printid, :outwaremx_aft[i].outmxprintid, :outwaremx_aft[i].mtrlid, :outwaremx_aft[i].status, :outwaremx_aft[i].woodcode, :outwaremx_aft[i].pcode, :outwaremx_aft[i].qty, :outwaremx_aft[i].uqty, :outwaremx_aft[i].unit, :outwaremx_aft[i].rate, :outwaremx_aft[i].price, :outwaremx_aft[i].jgprice, :outwaremx_aft[i].rebate, :outwaremx_aft[i].jgdscrp, :outwaremx_aft[i].ifrel, :outwaremx_aft[i].relid, :outwaremx_aft[i].relprintid, :outwaremx_aft[i].relcode, :outwaremx_aft[i].plancode, :outwaremx_aft[i].mtrlcuscode, :outwaremx_aft[i].location, :outwaremx_aft[i].mxdscrp, :outwaremx_aft[i].mtrlcode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_aftmx INTO :outwaremx_aft[i].printid, :outwaremx_aft[i].outmxprintid, :outwaremx_aft[i].mtrlid, :outwaremx_aft[i].status, :outwaremx_aft[i].woodcode, :outwaremx_aft[i].pcode, :outwaremx_aft[i].qty, :outwaremx_aft[i].uqty, :outwaremx_aft[i].unit, :outwaremx_aft[i].rate, :outwaremx_aft[i].price, :outwaremx_aft[i].jgprice, :outwaremx_aft[i].rebate, :outwaremx_aft[i].jgdscrp, :outwaremx_aft[i].ifrel, :outwaremx_aft[i].relid, :outwaremx_aft[i].relprintid, :outwaremx_aft[i].relcode, :outwaremx_aft[i].plancode, :outwaremx_aft[i].mtrlcuscode, :outwaremx_aft[i].location, :outwaremx_aft[i].mxdscrp, :outwaremx_aft[i].mtrlcode; LOOP CLOSE cur_aftmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM ow_wfjgmx_out_aft WHERE outwareid = :arg_outwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,发货明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,发货明细" GOTO ext END IF it_mxbt_aft = i - 1 outwareid = arg_outwareid scid = arg_scid it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_scid, long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);//如果单据还没有审核删除单据极其明细 //0 FAIL, 1 SUCCESS Int rslt = 1 IF arg_outwareid <= 0 THEN rslt = 0 arG_MSG = "没有删除对象,操作取消" GOTO ext END IF p_getinfo(arg_scid,arg_outwareid,arg_msg) IF flag = 1 THEN rslt = 0 arG_MSG = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM ow_wfjg_out WHERE ow_wfjg_out.outwareid = :arg_outwareid AND ow_wfjg_out.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM ow_wfjgmx_out WHERE ow_wfjgmx_out.outwareid = :arg_outwareid AND ow_wfjgmx_out.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除进仓单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN (rslt) end function public function integer add_dscrp (long arg_scid, long arg_outwareid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success int rslt=1 arg_newdescppart=trim(arg_newdescppart) if arg_newdescppart='' then rslt=0 arg_msg="要添加内容为空,操作取消" goto ext end if rslt=p_getinfo(arg_scid,arg_outwareid,arg_msg) if rslt=0 then goto ext if flag=0 then rslt=0 arg_msg="非审核状态下不可用" goto ext end if update ow_wfjg_out set dscrp = ltrim(rtrim(dscrp))+' '+:arg_newdescppart where ow_wfjg_out.outwareid = :outwareid and scid=:scid using commit_transaction; if commit_transaction.sqlcode<>0 then rollback ; rslt=0 arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if commit using commit_transaction; dscrp = dscrp+' '+arg_newdescppart ext: return (rslt) end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,cnt = 0,i DateTime null_dt SetNull(null_dt) uo_order_wfjg uo_wfjg uo_wfjg=create uo_order_wfjg uo_wfjg.commit_transaction=commit_transaction IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF UPDATE ow_wfjg_out SET Auditingemp = '', Auditingdate = :null_dt, flag = 0 WHERE ow_wfjg_out.outwareid = :outwareid AND flag = 1 AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt IF f_update_mtrlware_spt_out(billtype,thflag,scid,outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, outwaremx[i].plancode,& outwaremx[i].status, 0 - outwaremx[i].qty, 0 - outwaremx[i].costamt,& outwaremx[i].planprice, sptid, & outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,false,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF IF outwaremx[i].relid > 0 THEN IF uo_wfjg.addmxcmpl_out(scid,outwaremx[i].relid,outwaremx[i].mtrlid,outwaremx[i].sptid,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,0 - outwaremx[i].qty,arg_msg,FALSE) <> 1 THEN rslt = 0 GOTO ext END IF END IF NEXT ////外协商盘盈,自动删除外协订单 IF it_mxbt_aft > 0 And relid > 0 THEN IF p_destroy_wfjgorder( False, arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF flag = 0 ext: destroy uo_wfjg IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 it_mxbt_aft=0 return 1 end function public function integer p_getinfo (long arg_scid, long arg_outwareid, ref string arg_msg);//p_getinfo(arg_scid,arg_outwareid,arg_msg) //0 失败 1成功 Int rslt = 1 IF arg_outwareid <= 0 THEN rslt = 0 arG_MSG = "非法出仓单唯一码" GOTO ext END IF SELECT ow_wfjg_out.outwarecode, ow_wfjg_out.billtype, ow_wfjg_out.relid, ow_wfjg_out.outdate, ow_wfjg_out.outrep, ow_wfjg_out.part, ow_wfjg_out.sptid, ow_wfjg_out.sptname, ow_wfjg_out.dscrp, ow_wfjg_out.thflag, ow_wfjg_out.flag, ow_wfjg_out.balcflag , ow_wfjg_out.ctmint INTO :outwarecode, :billtype, :relid, :outdate, :outrep, :part, :sptid, :sptname, :dscrp, :thflag, :flag, :balcflag, :ctmint FROM ow_wfjg_out WHERE ow_wfjg_out.outwareid = :arg_outwareid AND scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误出仓单唯一码),出仓单"+commit_transaction.SQLErrText GOTO ext END IF outwareid = arg_outwareid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer p_reset ();//int p_reset() //清除对象及其明细 scid = 0 outwareid = 0 outwarecode = '' billtype = 0 opemp = '' modemp = '' auditingrep = '' flag = 0 relid = 0 //storageid = 0 outrep = '' part = '' dscrp = '' sptid = 0 sptname = '' thflag = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 p_clearmx() RETURN 1 end function public function integer acceptmx (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg, integer arg_ifrel, long arg_relid, long arg_mtrlid, long arg_storageid, integer arg_dxflag, string arg_plancode, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, decimal arg_rebate, long arg_olmtrlid, decimal arg_uqty, string arg_uunit, decimal arg_rate);Long rslt = 1,cnt = 0,LS_i Decimal i_planprice String ls_relcode IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF uo_option_2unit = -1000 THEN arg_msg = '选项:[067]外协双单位核算,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_status = '-1000' THEN arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF //清除空值 IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_ifrel) THEN arg_ifrel = 0 IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_fprice) THEN arg_fprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_ifrel) THEN arg_ifrel = 0 IF IsNull(arg_mxdscrp) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_uqty) THEN arg_uqty = 0 IF IsNull(arg_uunit) THEN arg_uunit = '' IF IsNull(arg_rate) THEN arg_rate = 0 IF arg_mtrlid = 0 Or arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF uo_option_2unit = 1 THEN IF arg_uqty = 0 THEN arg_msg = '行:'+String(arg_printid)+ ',请输入计价数量' rslt = 0 GOTO ext END IF END IF IF Trim(arg_uunit) = '' THEN arg_msg = '行:'+String(arg_printid)+ ',请输入计价单位' rslt = 0 GOTO ext END IF //检查物料id SELECT planprice INTO :i_planprice FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料或产品编号:"+arg_mtrlcode GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_status+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_woodcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_pcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode GOTO ext END IF IF arg_ifrel = 1 THEN IF arg_relid = 0 THEN rslt = 0 arg_msg = '请选择加工计划!' GOTO ext END IF SELECT taskcode INTO :ls_relcode FROM u_order_wfjg Where wfjgID = :arg_relid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询加工计划号失败!>>'+commit_transaction.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_wfjgMx_out WHERE wfjgid = :arg_relid AND mtrlid = :arg_mtrlid AND status = :arg_status AND orderid = :arg_olmtrlid AND woodcode = :arg_woodcode AND pcode = :arg_pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询外协计划出仓明细失败!>'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '出仓物料:'+arg_mtrlcode+'不在加工计划出仓明细中!' GOTO ext END IF END IF //*********************************************** IF arg_fprice * arg_rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = "物料或产品:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF //写入内容 it_mxbt++ outwaremx[it_mxbt].mtrlwareid = arg_mtrlwareid outwaremx[it_mxbt].mtrlid = arg_mtrlid outwaremx[it_mxbt].status = arg_status outwaremx[it_mxbt].qty = arg_qty outwaremx[it_mxbt].storageid = arg_storageid outwaremx[it_mxbt].cost = arg_fprice outwaremx[it_mxbt].costamt = Round(arg_fprice * arg_qty,2) outwaremx[it_mxbt].newpriceamt = 0 outwaremx[it_mxbt].plancode = arg_plancode outwaremx[it_mxbt].planprice = i_planprice outwaremx[it_mxbt].mtrlcode = arg_mtrlcode outwaremx[it_mxbt].mxdscrp = arg_mxdscrp outwaremx[it_mxbt].printid = arg_printid outwaremx[it_mxbt].rebate = arg_rebate outwaremx[it_mxbt].fprice = arg_fprice outwaremx[it_mxbt].price = Round(arg_fprice * arg_rebate,2) outwaremx[it_mxbt].olmtrlid = arg_olmtrlid outwaremx[it_mxbt].dxflag = arg_dxflag outwaremx[it_mxbt].ifrel = arg_ifrel outwaremx[it_mxbt].relid = arg_relid outwaremx[it_mxbt].woodcode = arg_woodcode outwaremx[it_mxbt].pcode = arg_pcode outwaremx[it_mxbt].relcode = ls_relcode IF uo_option_2unit = 0 THEN arg_uqty = arg_qty END IF outwaremx[it_mxbt].rate = arg_rate outwaremx[it_mxbt].uqty = arg_uqty outwaremx[it_mxbt].uunit = arg_uunit IF uo_option_2unit = 0 THEN outwaremx[it_mxbt].uprice = arg_fprice ELSE outwaremx[it_mxbt].uprice = Round(arg_qty * arg_fprice/arg_uqty,5) END IF ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function public function integer p_create_wfjgorder (string arg_opemp, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1,i Long rst_wfjgid uo_order_wfjg uo_wforder uo_wforder = Create uo_order_wfjg uo_wforder.commit_transaction = commit_transaction IF uo_wforder.newbegin(scid,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF uo_wforder.Requiredate = outdate uo_wforder.Assign_emp = outrep uo_wforder.sptID = sptID uo_wforder.dscrp = '盘盈单审核自动生成的外协订单' uo_wforder.billtype = 9 uo_wforder.reason = '' uo_wforder.relcode = outwarecode String ls_jgdscrp, ls_unit //收货明细 FOR i = 1 To it_mxbt_aft IF uo_wforder.acceptmx(0,& 0,& '',& outwaremx_aft[i].mtrlid,& Abs(outwaremx_aft[i].qty),& outwaremx_aft[i].price,& outwaremx_aft[i].mxdscrp,& outwaremx_aft[i].mtrlcode,& arg_msg,& i,& outdate,& 0,& outwaremx_aft[i].jgdscrp,& outwaremx_aft[i].status,& outwaremx_aft[i].woodcode,& outwaremx_aft[i].pcode,& 0,& 0,& 0,& '[常规]',& outwaremx_aft[i].unit,& Abs(outwaremx_aft[i].uqty),& outwaremx_aft[i].rate,& 0,& outwaremx_aft[i].plancode,& 0,0) = 0 THEN rslt = 0 GOTO ext END IF NEXT //发出明细 FOR i = 1 To it_mxbt IF uo_wforder.acceptmx_out(0,& 0,& '',& outwaremx[i].mtrlid,& abs(outwaremx[i].qty),& outwaremx[i].price,& outwaremx[i].mxdscrp,& outwaremx[i].mtrlcode,& arg_msg,& i,& 0,& outwaremx[i].status,& outwaremx[i].woodcode,& outwaremx[i].pcode,& outwaremx[i].unit,& abs(outwaremx[i].uqty),& outwaremx[i].rate,& i,& 0) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_wforder.savesubmit(arg_opemp,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF rst_wfjgid = uo_wforder.wfjgid IF uo_wforder.firstpermit(scid,rst_wfjgid,arg_opemp,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE ow_wfjg_out SET relid = :rst_wfjgid WHERE scid = :scid And outwareid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '记录相关盘盈外协订单id失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_wforder RETURN rslt end function public function integer p_destroy_wfjgorder (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 uo_order_wfjg uo_wforder uo_wforder = Create uo_order_wfjg uo_wforder.commit_transaction = commit_transaction uo_wforder.caudit_checkauto = 1 IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF relid = 0 THEN rslt = 1 GOTO ext END IF IF uo_wforder.cancelpermit(scid,relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wforder.Cancel(scid,relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE ow_wfjg_out SET relid = 0 WHERE scid = :scid And outwareid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '清除相关盘盈外协订单id失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_wforder RETURN rslt end function public function integer acceptmx_aft (s_outwaremx_wfjg_aft s_mx, string arg_msg); Long rslt = 1 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(s_mx.printid) THEN s_mx.printid = 0 IF IsNull(s_mx.mtrlid) THEN s_mx.mtrlid = 0 IF IsNull(s_mx.qty) THEN s_mx.qty = 0 IF IsNull(s_mx.unit) THEN s_mx.unit = '' IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0 IF IsNull(s_mx.rate) THEN s_mx.rate = 0 IF IsNull(s_mx.relid) THEN s_mx.relid = 0 IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0 IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = '' IF s_mx.mtrlid = 0 OR s_mx.qty = 0 THEN rslt = 1 GOTO ext END IF //写入内容 it_mxbt_aft++ outwaremx_aft[it_mxbt_aft].printid = s_mx.printid outwaremx_aft[it_mxbt_aft].outmxprintid = s_mx.outmxprintid outwaremx_aft[it_mxbt_aft].mtrlid = s_mx.mtrlid outwaremx_aft[it_mxbt_aft].mtrlcode = s_mx.mtrlcode outwaremx_aft[it_mxbt_aft].status = s_mx.status outwaremx_aft[it_mxbt_aft].woodcode = s_mx.woodcode outwaremx_aft[it_mxbt_aft].pcode = s_mx.pcode outwaremx_aft[it_mxbt_aft].qty = s_mx.qty outwaremx_aft[it_mxbt_aft].uqty = s_mx.uqty outwaremx_aft[it_mxbt_aft].unit = s_mx.unit IF s_mx.uqty <> 0 THEN outwaremx_aft[it_mxbt_aft].rate = s_mx.qty / s_mx.uqty ELSE outwaremx_aft[it_mxbt_aft].rate = 0 END IF outwaremx_aft[it_mxbt_aft].price = s_mx.price outwaremx_aft[it_mxbt_aft].rebate = s_mx.rebate outwaremx_aft[it_mxbt_aft].jgprice = s_mx.jgprice outwaremx_aft[it_mxbt_aft].jgdscrp = s_mx.jgdscrp outwaremx_aft[it_mxbt_aft].sptid = s_mx.sptid outwaremx_aft[it_mxbt_aft].mxdscrp = s_mx.mxdscrp outwaremx_aft[it_mxbt_aft].ifrel = s_mx.ifrel outwaremx_aft[it_mxbt_aft].relid = s_mx.relid outwaremx_aft[it_mxbt_aft].relprintid = s_mx.relprintid outwaremx_aft[it_mxbt_aft].relcode = s_mx.relcode outwaremx_aft[it_mxbt_aft].plancode = s_mx.plancode outwaremx_aft[it_mxbt_aft].mtrlcuscode = s_mx.mtrlcuscode outwaremx_aft[it_mxbt_aft].location = s_mx.location ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function on uo_wfjg_py.create call super::create TriggerEvent( this, "constructor" ) end on on uo_wfjg_py.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('067',str_optionvalue,arg_msg) uo_option_2unit = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('029',str_optionvalue,arg_msg) uo_option_change_status = str_optionvalue str_optionvalue = '' f_get_sys_option_value('027',str_optionvalue,arg_msg) uo_option_change_woodcode = str_optionvalue str_optionvalue = '' f_get_sys_option_value('028',str_optionvalue,arg_msg) uo_option_change_pcode = str_optionvalue end event