$PBExportHeader$uo_wfjg_waste.sru forward global type uo_wfjg_waste from nonvisualobject end type end forward global type uo_wfjg_waste from nonvisualobject end type global uo_wfjg_waste uo_wfjg_waste type variables PUBLIC PROTECTEDWRITE Long scid = 0 PUBLIC PROTECTEDWRITE Long wasteid PUBLIC PROTECTEDWRITE String wastecode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag = 0 PUBLIC PROTECTEDWRITE Int balcflag = 0 PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep Long relid = 0 DateTime waste_date String waste_rep = '' String relcode = '' String dscrp = '' Long sptid = 0 String sptname = '' Boolean if_getid_ture = TRUE Transaction commit_transaction s_waste s_waste_mx[] Long it_mxbt = 0 s_waste_spt s_waste_mx_spt[] Long it_mxbt_spt = 0 Boolean it_newbegin = FALSE Boolean it_updatebegin = FALSE 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 del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_clearmx () public function integer p_reset () public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_orderprintid, long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, long arg_relid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode) public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg) end prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//==================================================================== // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg) //-------------------------------------------------------------------- // Description: 从置对象,设定业务类型,准备建立新进仓单 //-------------------------------------------------------------------- // Arguments: // value long arg_scid // value integer arg_billtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if //if not (arg_billtype=1 or arg_billtype=2 or arg_billtype=3 or arg_billtype=4 or arg_billtype=8 or arg_billtype=9 or arg_billtype=12 or arg_billtype=15) then // rslt=0 // arg_msg='此单据类型必须为:' // arg_msg=arg_msg+'1-采购进仓[记帐模式],' // arg_msg=arg_msg+'2-采购进仓[不记帐模式],' // arg_msg=arg_msg+'3-成品进仓,' // arg_msg=arg_msg+'4-外发加工进仓,' // arg_msg=arg_msg+'8-其他进仓,' // arg_msg=arg_msg+'9-盘盈进仓,' // arg_msg=arg_msg+'12-调拨进仓' // arg_msg=arg_msg+'15-拆装进仓' // 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(waste_rep) THEN waste_rep = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(sptid) THEN sptid = 0 IF IsNull(sptname) THEN sptname = '' IF IsNull(relcode) THEN relcode = '' 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 and it_mxbt_spt = 0 THEN rslt = 0 arg_msg = "没有明细内容" GOTO ext END IF cnt = 0 //检查供应商 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :sptid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "供应商资料错误!" GOTO ext END IF IF f_check_inoutdate(0,waste_date,false,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF f_check_inoutdate_wfjg(scid,sptid,waste_date,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ////////////////////////////////////////////////开始区分:新建/更新 处理 IF wasteid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_order_wfjg_waste","wasteid",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 //取得新单据编号 wastecode = getid(scid,ls_sccode + 'SH',Date(server_dt),if_getid_ture,commit_transaction) IF wastecode = "err" THEN wastecode = '' rslt = 0 arg_msg = "无法获取损耗单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_order_wfjg_waste ( scid, wasteid, wastecode, sptid, wastedate, assign_emp, relcode, dscrp, opemp, opdate ) VALUES ( :scid, :ls_newid, :wastecode, :sptid, :waste_date, :waste_rep, :relcode, :dscrp, :publ_operator, :server_dt ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新inwareid wasteid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_order_wfjg_wastemx (scid, wasteid, printid, mtrlid, status, qty, price, wastedscrp, wfjg_orderid, wfjg_ordercode, orderid, orderprintid, woodcode, pcode) VALUES ( :scid, :ls_newid, :s_waste_mx[i].printid, :s_waste_mx[i].mtrlid, :s_waste_mx[i].status, :s_waste_mx[i].qty, :s_waste_mx[i].jgprice, :s_waste_mx[i].mxdscrp, :s_waste_mx[i].relid, :s_waste_mx[i].relcode, :s_waste_mx[i].orderid, :s_waste_mx[i].orderprintid, :s_waste_mx[i].woodcode, :s_waste_mx[i].pcode) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //wasteid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 TO it_mxbt_spt INSERT INTO u_order_wfjg_wasteMx_spt (scid, wasteid, mtrlwareid, mtrlid, status, woodcode, pcode, plancode, qty, fprice, printid, mxdscrp) VALUES ( :scid, :ls_newid, :s_waste_mx_spt[i].mtrlwareid, :s_waste_mx_spt[i].mtrlid, :s_waste_mx_spt[i].status, :s_waste_mx_spt[i].woodcode, :s_waste_mx_spt[i].pcode, :s_waste_mx_spt[i].plancode, :s_waste_mx_spt[i].qty, :s_waste_mx_spt[i].fprice, :s_waste_mx_spt[i].printid, :s_waste_mx_spt[i].mxdscrp ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //还原inwareid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 UPDATE u_order_wfjg_waste SET sptid = :sptid, wastedate = :waste_date, assign_emp = :waste_rep, relcode = :relcode, dscrp = :dscrp, moddate = :server_dt, modemp = :publ_operator WHERE u_order_wfjg_waste.wasteid = :wasteid AND u_order_wfjg_waste.scid = :scid AND u_order_wfjg_waste.flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_order_wfjg_wastemx WHERE u_order_wfjg_wastemx.wasteid = :wasteid AND u_order_wfjg_wastemx.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 u_order_wfjg_wastemx_spt WHERE u_order_wfjg_wastemx_spt.wasteid = :wasteid AND u_order_wfjg_wastemx_spt.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作(外协库存)失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_order_wfjg_wastemx (scid, wasteid, printid, mtrlid, status, qty, price, wastedscrp, wfjg_orderid, wfjg_ordercode, orderid, orderprintid, woodcode, pcode) VALUES ( :scid, :wasteid, :s_waste_mx[i].printid, :s_waste_mx[i].mtrlid, :s_waste_mx[i].status, :s_waste_mx[i].qty, :s_waste_mx[i].jgprice, :s_waste_mx[i].mxdscrp, :s_waste_mx[i].relid, :s_waste_mx[i].relcode, :s_waste_mx[i].orderid, :s_waste_mx[i].orderprintid, :s_waste_mx[i].woodcode, :s_waste_mx[i].pcode) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 TO it_mxbt_spt INSERT INTO u_order_wfjg_wasteMx_spt (scid, wasteid, mtrlwareid, mtrlid, status, woodcode, pcode, plancode, qty, fprice, printid, mxdscrp) VALUES ( :scid, :wasteid, :s_waste_mx_spt[i].mtrlwareid, :s_waste_mx_spt[i].mtrlid, :s_waste_mx_spt[i].status, :s_waste_mx_spt[i].woodcode, :s_waste_mx_spt[i].pcode, :s_waste_mx_spt[i].plancode, :s_waste_mx_spt[i].qty, :s_waste_mx_spt[i].fprice, :s_waste_mx_spt[i].printid, :s_waste_mx_spt[i].mxdscrp ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //还原inwareid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF 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 IF wasteid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF uo_order_wfjg uo_wfjg uo_wfjg = CREATE uo_order_wfjg uo_wfjg.commit_transaction = commit_transaction IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE u_order_wfjg_waste SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE u_order_wfjg_waste.wasteid = :wasteid 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_spt IF f_update_mtrlware_spt_in(10,& 0,& scid,& s_waste_mx_spt[i].mtrlwareid,& s_waste_mx_spt[i].mtrlid,& s_waste_mx_spt[i].mtrlcode,& s_waste_mx_spt[i].plancode,& s_waste_mx_spt[i].status,& s_waste_mx_spt[i].qty,& s_waste_mx_spt[i].fprice,& sptid,& s_waste_mx_spt[i].woodcode,& s_waste_mx_spt[i].pcode,& arg_msg,FALSE,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF NEXT FOR i = 1 TO it_mxbt IF uo_wfjg.wasteqty(scid,s_waste_mx[i].qty,& s_waste_mx[i].relid,& s_waste_mx[i].orderprintid,& s_waste_mx[i].mtrlcode,& arg_msg,& FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.trycmplbuytask(scid,s_waste_mx[i].relid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT flag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_wfjg RETURN rslt end function public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg) //如果单据还没有审核删除单据极其明细 //0 fail, 1 success int rslt = 1 if arg_inwareid = 0 then rslt = 0 arg_msg = "没有删除对象,操作取消" goto ext end if rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) if rslt = 0 then goto ext if flag = 1 then rslt = 0 arg_msg = "单据已经审核,不可以删除" goto ext end if delete from u_order_wfjg_wastemx where u_order_wfjg_wastemx.wasteid = :arg_inwareid and 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 u_order_wfjg_wastemx_spt where wasteid = :arg_inwareid and 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 u_order_wfjg_waste where u_order_wfjg_waste.wasteid = :arg_inwareid and 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; elseif rslt=1 and arg_ifcommit then commit using commit_transaction; end if p_reset() 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) IF wasteid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行撤核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF uo_order_wfjg uo_wfjg uo_wfjg = CREATE uo_order_wfjg uo_wfjg.commit_transaction = commit_transaction UPDATE u_order_wfjg_waste SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE u_order_wfjg_waste.wasteid = :wasteid 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_spt IF f_update_mtrlware_spt_in(10,& 0,& scid,& s_waste_mx_spt[i].mtrlwareid,& s_waste_mx_spt[i].mtrlid,& s_waste_mx_spt[i].mtrlcode,& s_waste_mx_spt[i].plancode,& s_waste_mx_spt[i].status,& 0 - s_waste_mx_spt[i].qty,& s_waste_mx_spt[i].fprice,& sptid,& s_waste_mx_spt[i].woodcode,& s_waste_mx_spt[i].pcode,& arg_msg,false,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF next FOR i = 1 TO it_mxbt IF uo_wfjg.wasteqty(scid,0 - s_waste_mx[i].qty,& s_waste_mx[i].relid,& s_waste_mx[i].orderprintid,& s_waste_mx[i].mtrlcode,& arg_msg,& false) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.trycmplbuytask(scid,s_waste_mx[i].relid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT flag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_wfjg RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt = 0 it_mxbt_spt = 0 RETURN 1 end function public function integer p_reset ();//int p_reset() //清除对象及其明细 scid=0 wasteid=0 wastecode='' opemp='' modemp='' auditingrep='' flag=0 relid=0 relcode='' waste_rep='' dscrp='' sptid=0 sptname='' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1 IF arg_wasteid <= 0 THEN rslt = 0 arG_MSG = "非法进仓单唯一码" GOTO ext END IF SELECT wastecode, sptid, wastedate, assign_emp, relcode, dscrp, flag INTO :wastecode, :sptid, :waste_date, :waste_rep, :relcode, :dscrp, :flag FROM u_order_wfjg_waste WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误损耗单唯一码),损耗单"+commit_transaction.SQLErrText GOTO ext END IF wasteid = arg_wasteid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg);long rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if if arg_wasteid<=0 then rslt=0 goto ext end if rslt=p_getinfo(arg_scid,arg_wasteid,arg_msg) if rslt=0 then goto ext if flag=1 then rslt=0 arg_msg='单据已经审核,不可以修改' goto ext end if wasteid=arg_wasteid 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 add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success int rslt=1 arg_newdescrppart=trim(arg_newdescrppart) if arg_newdescrppart='' then rslt=0 arg_msg="要添加内容为空,操作取消" goto ext end if //rslt=p_getinfo(arg_scid,arg_wasteid,arg_msg) if rslt=0 then goto ext if flag=0 then rslt=0 arg_msg="非审核状态下不可用" goto ext end if update u_order_wfjg_waste set dscrp = dscrp+' '+:arg_newdescrppart where u_order_wfjg_waste.wasteid = :arg_wasteid and scid=:scid using commit_transaction; if commit_transaction.sqlcode<>0 then rollback using commit_transaction; rslt=0 arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if commit using commit_transaction; dscrp = dscrp+' '+arg_newdescrppart ext: return (rslt) end function public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,no_mxcheck = 0,j = 1,no_mxcheck_bef = 0 IF arg_wasteid <= 0 THEN rslt = 0 arg_msg = "非法损耗单唯一码" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_wasteid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_wastemx CURSOR FOR SELECT u_order_wfjg_wastemx.printid, u_order_wfjg_wastemx.mtrlid, u_order_wfjg_wastemx.status, u_order_wfjg_wastemx.qty, u_order_wfjg_wastemx.wastedscrp, u_order_wfjg_wastemx.price, u_order_wfjg_wastemx.wfjg_orderid, u_order_wfjg_wastemx.wfjg_ordercode, u_order_wfjg_wastemx.orderid, u_order_wfjg_wastemx.orderprintid, u_order_wfjg_wastemx.woodcode, u_order_wfjg_wastemx.pcode FROM u_order_wfjg_wastemx,u_mtrldef WHERE u_order_wfjg_wastemx.wasteid = :arg_wasteid AND u_order_wfjg_wastemx.mtrlid = u_mtrldef.mtrlid AND u_order_wfjg_wastemx.scid = :arg_scid USING commit_transaction; OPEN cur_wastemx; FETCH cur_wastemx INTO :s_waste_mx[i].printid,:s_waste_mx[i].mtrlid, :s_waste_mx[i].status,:s_waste_mx[i].qty, :s_waste_mx[i].mxdscrp,:s_waste_mx[i].jgprice, :s_waste_mx[i].relid,:s_waste_mx[i].relcode, :s_waste_mx[i].orderid,:s_waste_mx[i].orderprintid, :s_waste_mx[i].woodcode,:s_waste_mx[i].pcode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_wastemx INTO :s_waste_mx[i].printid,:s_waste_mx[i].mtrlid, :s_waste_mx[i].status,:s_waste_mx[i].qty, :s_waste_mx[i].mxdscrp,:s_waste_mx[i].jgprice, :s_waste_mx[i].relid,:s_waste_mx[i].relcode, :s_waste_mx[i].orderid,:s_waste_mx[i].orderprintid, :s_waste_mx[i].woodcode,:s_waste_mx[i].pcode; LOOP CLOSE cur_wastemx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjg_wastemx WHERE wasteid = :arg_wasteid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协损耗单明细数量"+commit_transaction.SQLErrText GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外协损耗单明细" GOTO ext END IF // //用游标读取明细 DECLARE cur_wastemx_spt CURSOR FOR SELECT u_order_wfjg_wasteMx_spt.mtrlwareid, u_order_wfjg_wasteMx_spt.printid, u_order_wfjg_wasteMx_spt.mtrlid, u_order_wfjg_wasteMx_spt.plancode, u_order_wfjg_wasteMx_spt.status, u_order_wfjg_wasteMx_spt.qty, u_order_wfjg_wasteMx_spt.fprice, u_order_wfjg_wasteMx_spt.mxdscrp, u_mtrldef.mtrlcode, u_order_wfjg_wasteMx_spt.woodcode, u_order_wfjg_wasteMx_spt.pcode, u_order_wfjg_wasteMx_spt.plancode FROM u_order_wfjg_wasteMx_spt,u_mtrldef,u_order_wfjg_waste WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND u_order_wfjg_wasteMx_spt.mtrlid = u_mtrldef.mtrlid AND u_order_wfjg_waste.scid = :arg_scid AND u_order_wfjg_waste.wasteid = u_order_wfjg_wasteMx_spt.wasteid AND u_order_wfjg_waste.scid = u_order_wfjg_wasteMx_spt.scid USING commit_transaction; OPEN cur_wastemx_spt; FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid, :s_waste_mx_spt[j].printid, :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode, :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice, :s_waste_mx_spt[j].mxdscrp, :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode, :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid, :s_waste_mx_spt[j].printid, :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode, :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice, :s_waste_mx_spt[j].mxdscrp, :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode, :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode; LOOP CLOSE cur_wastemx_spt; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck_bef FROM u_order_wfjg_wasteMx_spt WHERE u_order_wfjg_wasteMx_spt.wasteid = :arg_wasteid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协收货单相关发外明细数量"+commit_transaction.SQLErrText GOTO ext END IF IF j <> (no_mxcheck_bef+1) THEN rslt = 0 arg_msg = "查询操作失败,外协收货单相关发外明细" GOTO ext END IF wasteid = arg_wasteid scid = arg_scid it_mxbt = i - 1 it_mxbt_spt = j - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer acceptmx (long arg_printid, long arg_orderprintid, long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, long arg_relid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode);Long rslt = 1,cnt = 0,ls_i String ls_relcode IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_orderprintid) THEN arg_orderprintid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF //检查物料id SELECT COUNT(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料编码"+String(arg_mtrlcode) GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的产品编码: "+String(arg_mtrlcode) GOTO ext END IF cnt = 0 //检查生产计划ID IF arg_orderid > 0 THEN SELECT count(*) INTO :cnt FROM u_order_ml WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :scid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,生产计划编号,在物料"+String(arg_mtrlcode) GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的生产计划编号, 在物料"+String(arg_mtrlcode) GOTO ext END IF END IF //检查外加工计划明细,该物料记录是否存在 IF arg_relid = 0 THEN arg_msg = '请先择相应的外协计划' rslt = 0 GOTO ext END IF SELECT taskcode INTO :ls_relcode FROM u_order_wfjgmx,u_order_wfjg WHERE u_order_wfjgmx.wfjgid = :arg_relid AND u_order_wfjgmx.printid = :arg_orderprintid AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid AND u_order_wfjgmx.scid = u_order_wfjg.scid AND u_order_wfjgmx.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询加工计划是否有加工产品:'+arg_mtrlcode+'失败' rslt = 0 GOTO ext END IF IF ls_relcode = '' THEN rslt = 0 arg_msg = "错误的外加工产品编号 " GOTO ext END IF //写入内容 it_mxbt++ s_waste_mx[it_mxbt].printid = arg_printid s_waste_mx[it_mxbt].orderprintid = arg_orderprintid s_waste_mx[it_mxbt].mtrlid = arg_mtrlid s_waste_mx[it_mxbt].status = arg_status s_waste_mx[it_mxbt].woodcode = arg_woodcode s_waste_mx[it_mxbt].pcode = arg_pcode s_waste_mx[it_mxbt].qty = arg_qty s_waste_mx[it_mxbt].mxdscrp = arg_mxdscrp s_waste_mx[it_mxbt].jgprice = 0 s_waste_mx[it_mxbt].relid = arg_relid s_waste_mx[it_mxbt].relcode = ls_relcode s_waste_mx[it_mxbt].orderid = arg_orderid //生产计划ID ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i Long i_mtrlid,i_sptid String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode Double i_cost,i_newprice Decimal i_allouseqty String ls_relcode Decimal ld_rate = 1 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" 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 arg_mtrlwareid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF SELECT ow_wfjgware.mtrlid, ow_wfjgware.sptid, ow_wfjgware.plancode, ow_wfjgware.status, ow_wfjgware.cost, u_mtrldef.mtrlcode, ow_wfjgware.woodcode, ow_wfjgware.pcode, ow_wfjgware.noallocqty INTO :i_mtrlid, :i_sptid, :i_plancode, :i_status, :i_cost, :i_mtrlcode, :i_woodcode, :i_pcode, :i_allouseqty FROM ow_wfjgware ,u_mtrldef WHERE ( ow_wfjgware.mtrlwareid = :arg_mtrlwareid ) AND ( ow_wfjgware.mtrlid = u_mtrldef.mtrlid ) And ( ow_wfjgware.scid = :scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,库存编号错误" GOTO ext END IF IF IsNull(i_cost) THEN i_cost = 0 IF IsNull(i_plancode) THEN i_plancode = '' IF IsNull(i_status) THEN i_status = '' IF IsNull(i_mtrlid) THEN i_mtrlid = 0 IF IsNull(i_sptid) THEN i_sptid = 0 IF IsNull(i_woodcode) THEN i_woodcode = '' IF IsNull(i_pcode) THEN i_pcode = '' IF sptid <> i_sptid THEN arg_msg = "物料:" + String(i_mtrlcode) + '所属加工商资料不对应' rslt = 0 GOTO ext END IF IF i_cost < 0 THEN //检查进仓价 rslt = 0 arg_msg = "物料:" + String(i_mtrlcode)+" 单价错误" GOTO ext END IF //写入内容 it_mxbt_spt++ s_waste_mx_spt[it_mxbt_spt].mtrlwareid = arg_mtrlwareid s_waste_mx_spt[it_mxbt_spt].mtrlid = i_mtrlid s_waste_mx_spt[it_mxbt_spt].status = i_status s_waste_mx_spt[it_mxbt_spt].qty = arg_qty s_waste_mx_spt[it_mxbt_spt].sptid = i_sptid s_waste_mx_spt[it_mxbt_spt].cost = i_cost s_waste_mx_spt[it_mxbt_spt].costamt = Round(i_cost * arg_qty,2) s_waste_mx_spt[it_mxbt_spt].plancode = i_plancode s_waste_mx_spt[it_mxbt_spt].mtrlcode = i_mtrlcode s_waste_mx_spt[it_mxbt_spt].mxdscrp = arg_mxdscrp s_waste_mx_spt[it_mxbt_spt].printid = arg_printid s_waste_mx_spt[it_mxbt_spt].fprice = i_cost s_waste_mx_spt[it_mxbt_spt].woodcode = i_woodcode s_waste_mx_spt[it_mxbt_spt].pcode = i_pcode ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function on uo_wfjg_waste.create call super::create TriggerEvent( this, "constructor" ) end on on uo_wfjg_waste.destroy TriggerEvent( this, "destructor" ) call super::destroy end on