$PBExportHeader$uo_order_wfjg.sru forward global type uo_order_wfjg from nonvisualobject end type type s_order_wfjgmx from structure within uo_order_wfjg end type type s_order_wfjgmx_out from structure within uo_order_wfjg end type end forward type s_order_wfjgmx from structure long orderid string ordercode long mtrlid decimal { 4 } qty string dscrp string mtrlcode long printid decimal { 10 } price datetime requiredate datetime accomplishdate long storageid string jgdscrp integer iforder string status string woodcode string pcode long relprintid long relid2 string relcode string plancode string mxdscrp2 string mxdscrp3 string mxdscrp4 end type type s_order_wfjgmx_out from structure long orderid string ordercode long mtrlid decimal { 4 } qty string dscrp string mtrlcode long printid decimal { 10 } price long storageid integer iforder string status string woodcode string pcode string dscrp2 string unit string plancode string saletaskcode end type global type uo_order_wfjg from nonvisualobject end type global uo_order_wfjg uo_order_wfjg type variables PUBLIC PROTECTEDWRITE Long scid = 0 PUBLIC PROTECTEDWRITE Long wfjgid = 0 PUBLIC PROTECTEDWRITE String taskcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String operator PUBLIC PROTECTEDWRITE Int status PUBLIC PROTECTEDWRITE DateTime accomplishdate PUBLIC PROTECTEDWRITE String permit_emp Long sptid = 0 String assign_emp DateTime requiredate String dscrp = '' //备注 Transaction commit_transaction //数据commit事务 Int billtype int banktypeid PRIVATE: s_order_wfjgmx wfjgmx[] //明细结构数组 s_order_wfjgmx_out wfjgmx_out[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbt_out = 0 //明细结构数组末指针 Boolean it_newbegin = TRUE //新建标志 Boolean it_updatebegin = FALSE//修改标志 end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer add_dscrp (long arg_scid, long arg_wfjgid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer firstpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer lastpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer stopbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer tempstoptask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg) public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg) public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit) public function integer stopmx (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit) public function integer stopmx1 (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit) public function integer uf_del_outware_wfjg (boolean arg_ifcommit, ref string arg_msg) public function integer uf_create_outware_wfjg (boolean arg_ifcommit, ref string arg_msg) public function integer check_addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_relprintid, long arg_relid2, string arg_relcode, long arg_orderid, string arg_plancode, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4) public function integer uf_create_outware_wfjg_noaudit (boolean arg_ifcommit, ref string arg_msg) public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit, long arg_printid) public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_dscrp2, string arg_plancode, string arg_saletaskcode) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 scid = 0 wfjgid = 0 taskcode = '' operator = '' status = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt = 0 it_mxbt_out = 0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: savesubmit() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value string arg_operator // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.06.23 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Integer rslt = 1,cnt = 0,i,j Long LS_NEWwfjgID DateTime server_datetime String ls_sccode IF IsNull(dscrp) THEN dscrp = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(arg_operator) THEN arg_operator = '' IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp IF IsNull(billtype) THEN billtype = 0 IF IsNull(banktypeid) THEN banktypeid = 0 operator = arg_operator IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arG_MSG = "非编辑状态不可以提交" GOTO ext END IF IF Trim(assign_emp) = '' THEN rslt = 0 arG_MSG = "请输入外加工负责人" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where 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 SELECT Top 1 getdate() INTO :server_datetime 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 sys_option_wfjg_outmx = 1 And it_mxbt_out = 0 THEN rslt = 0 arg_msg = "系统选项[079]限制,没有正确的计划发出明细内容" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :operator 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 opdate = server_datetime //填写单据建立时间(最近修改时间) ////////////////////////////////////////////////开始区分:新建/更新 处理 IF wfjgID = 0 THEN //新建 LS_NEWwfjgID = f_sys_scidentity(scid,"u_order_wfjg","wfjgID",arG_MSG,TRUE, commit_transaction) //数据commit事务) IF LS_NEWwfjgID <= 0 THEN rslt = 0 // ROLLBACK; GOTO ext END IF IF f_get_sccode(scid,commit_transaction,ls_sccode,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF taskcode = getid(scid,ls_sccode + 'WJ',Date(server_datetime),FALSE,commit_transaction) IF taskcode = "err" THEN taskcode = '' rslt = 0 arG_MSG = "无法获取外加工编号"+"~n"+commit_transaction.SQLErrText // ROLLBACK USING commit_transaction; GOTO ext END IF INSERT INTO u_order_wfjg ( scid, wfjgID, TaskCode, sptID, requiredate, Status, Opemp, Assign_Emp, Dscrp, opdate, billtype, banktypeid) VALUES ( :scid, :LS_NEWwfjgID, :TaskCode, :sptID, :requiredate, :Status, :Operator, :Assign_Emp, :Dscrp, :opdate, :billtype, :banktypeid) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg') > 0 then arg_msg = '插入外加工计划操作失败,关键字分部ID、单据ID重复' else arG_MSG = "插入外加工计划操作失败"+"~n"+commit_transaction.SQLErrText end if // ROLLBACK USING commit_transaction; GOTO ext END IF //读取新taskid wfjgID = LS_NEWwfjgID ELSE //////////////////////////////////////////////////更新 UPDATE u_order_wfjg SET sptID = :sptID, requiredate = :requiredate, Assign_Emp = :Assign_Emp, Dscrp = :Dscrp, moddate = getdate(), Modemp = :publ_operator, billtype = :billtype, banktypeid = :banktypeid WHERE u_order_wfjg.wfjgID = :wfjgID AND u_order_wfjg.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg') > 0 then arg_msg = '更新外加工计划操作失败,关键字分部ID、单据ID重复' else arG_MSG = "更新外加工计划操作失败"+"~n"+commit_transaction.SQLErrText end if // ROLLBACK USING commit_transaction; GOTO ext END IF //删除原有明细 DELETE FROM u_order_wfjgMx WHERE u_order_wfjgMx.wfjgID = :wfjgID AND u_order_wfjgMx.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText // ROLLBACK USING commit_transaction; GOTO ext END IF //删除原有明细 DELETE FROM u_order_wfjgMx_out WHERE u_order_wfjgMx_out.wfjgID = :wfjgID AND u_order_wfjgMx_out.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText // ROLLBACK USING commit_transaction; GOTO ext END IF END IF FOR i = 1 TO it_mxbt INSERT INTO u_order_wfjgMx ( scid, wfjgID, mtrlid, qty, price, dscrp, printid, requiredate, orderid, storageid, jgdscrp, status, woodcode, pcode, iforder, relprintid, relid2, relcode, plancode, mxdscrp2, mxdscrp3, mxdscrp4) VALUES (:scid, :wfjgID, :wfjgmx[i].mtrlid, :wfjgmx[i].QTY, :wfjgmx[i].price, :wfjgmx[i].dscrp, :wfjgmx[i].printid, :wfjgmx[i].requiredate, :wfjgmx[i].orderid, :wfjgmx[i].storageid, :wfjgmx[i].jgdscrp, :wfjgmx[i].status, :wfjgmx[i].woodcode, :wfjgmx[i].pcode, :wfjgmx[i].iforder, :wfjgmx[i].relprintid, :wfjgmx[i].relid2, :wfjgmx[i].relcode , :wfjgmx[i].plancode, :wfjgmx[i].mxdscrp2, :wfjgmx[i].mxdscrp3, :wfjgmx[i].mxdscrp4 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN if it_newbegin then wfjgID = 0 //还原taskid end if rslt = 0 arG_MSG = "插入收货明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR j = 1 TO it_mxbt_out INSERT INTO u_order_wfjgMx_out ( scid, wfjgID, mtrlid, qty, price, dscrp, printid, orderid, storageid, status, woodcode, pcode, iforder, dscrp2, plancode, saletaskcode) VALUES (:scid, :wfjgID, :wfjgmx_out[j].mtrlid, :wfjgmx_out[j].QTY, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp, :wfjgmx_out[j].printid, :wfjgmx_out[j].orderid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].status, :wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].iforder, :wfjgmx_out[j].dscrp2, :wfjgmx_out[j].plancode, :wfjgmx_out[j].saletaskcode) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN if it_newbegin then wfjgID = 0 //还原taskid end if 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 arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF arg_msg = '外协订单,'+ arg_msg Return(rslt) end function public function integer newbegin (long arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单 //0 fail 1 success long rslt=1,CNT=0 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if p_reset() it_newbegin=TRUE it_updatebegin=FALSE scid=arg_scid ext: if rslt = 0 then p_reset() arg_msg = '外协订单,'+ arg_msg return rslt end function public function integer p_getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg);int rslt=1 SELECT wfjgID, TaskCode, sptID, requiredate, accomplishdate, Status, Opemp, Assign_Emp, Permit_Emp, Dscrp, opdate, billtype INTO :wfjgID, :TaskCode, :sptID, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :opdate, :billtype FROM u_order_wfjg WHERE u_order_wfjg.wfjgID = :arg_wfjgID and u_order_wfjg.scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then arg_msg = '查询外加工计划内容失败,查询数据返回值多于一个' else ARG_MSG='查询外加工计划内容失败(错误外加工计划唯一码)' end if goto ext end if scid=arg_scid ext: return rslt end function public function integer getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0,j = 1 IF arg_wfjgid <= 0 THEN rslt = 0 arg_msg = '错误外加工计划唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_order_wfjgmx.mtrlid, u_order_wfjgmx.qty, u_order_wfjgmx.price, u_order_wfjgmx.dscrp, u_mtrldef.mtrlcode, u_order_wfjgmx.printid, u_order_wfjgmx.orderid, u_order_wfjgmx.storageid, u_order_wfjgmx.jgdscrp, u_order_wfjgmx.iforder, u_order_wfjgmx.status, u_order_wfjgmx.woodcode, u_order_wfjgmx.pcode, u_order_wfjgmx.relprintid, u_order_wfjgmx.relid2, u_order_wfjgmx.relcode FROM u_order_wfjgmx,u_mtrldef WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid AND u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.mtrlid = u_mtrldef.mtrlid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid, :wfjgmx[i].qty, :wfjgmx[i].price, :wfjgmx[i].dscrp, :wfjgmx[i].mtrlcode, :wfjgmx[i].printid, :wfjgmx[i].orderid, :wfjgmx[i].storageid, :wfjgmx[i].jgdscrp, :wfjgmx[i].iforder, :wfjgmx[i].status, :wfjgmx[i].woodcode, :wfjgmx[i].pcode, :wfjgmx[i].relprintid, :wfjgmx[i].relid2, :wfjgmx[i].relcode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty,:wfjgmx[i].price, :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode, :wfjgmx[i].printid,:wfjgmx[i].orderid, :wfjgmx[i].storageid,:wfjgmx[i].jgdscrp,:wfjgmx[i].iforder, :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode, :wfjgmx[i].relprintid, :wfjgmx[i].relid2, :wfjgmx[i].relcode; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjgmx WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid AND u_order_wfjgmx.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN arg_msg = '查询外加工计划收货明细操作失败,查询数据返回值多于一个' ELSE arg_msg = "查询操作失败,外加工计划收货明细数量" END IF GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外加工计划明细" GOTO ext END IF it_mxbt = i - 1 // //用游标读取明细 DECLARE cur_inwaermx_out CURSOR FOR SELECT u_order_wfjgmx_out.mtrlid, u_order_wfjgmx_out.qty, u_order_wfjgmx_out.price, u_order_wfjgmx_out.dscrp, u_mtrldef.mtrlcode, u_order_wfjgmx_out.printid, u_order_wfjgmx_out.orderid, u_order_wfjgmx_out.storageid, u_order_wfjgmx_out.iforder, u_order_wfjgmx_out.status, u_order_wfjgmx_out.woodcode, u_order_wfjgmx_out.pcode, u_order_wfjgmx_out.dscrp2, u_mtrldef.unit FROM u_order_wfjgmx_out,u_mtrldef WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid AND u_order_wfjgmx_out.scid = :arg_scid AND u_order_wfjgmx_out.mtrlid = u_mtrldef.mtrlid USING commit_transaction; OPEN cur_inwaermx_out; FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid, :wfjgmx_out[j].qty, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp, :wfjgmx_out[j].mtrlcode, :wfjgmx_out[j].printid, :wfjgmx_out[j].orderid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].iforder, :wfjgmx_out[j].status, :wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].dscrp2, :wfjgmx_out[j].unit; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid, :wfjgmx_out[j].qty, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp, :wfjgmx_out[j].mtrlcode, :wfjgmx_out[j].printid, :wfjgmx_out[j].orderid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].iforder, :wfjgmx_out[j].status, :wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].dscrp2, :wfjgmx_out[j].unit; LOOP CLOSE cur_inwaermx_out; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjgmx_out WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid AND u_order_wfjgmx_out.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN arg_msg = '查询外加工计划发料明细操作失败,查询数据返回值多于一个' ELSE arg_msg = "查询操作失败,外加工计划发料明细数量" END IF GOTO ext END IF IF j <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外加工计划明细" GOTO ext END IF it_mxbt_out = j - 1 // it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer add_dscrp (long arg_scid, long arg_wfjgid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS INT rslt=1 arg_newdescppart=TRIM(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt=0 arG_MSG="编辑状态下不可用" goto ext END IF IF arg_newdescppart='' THEN rslt=0 arG_MSG="要添加内容为空,操作取消" goto ext END IF if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF status=0 THEN rslt=0 arG_MSG="待审核状态下不可用" goto ext END IF UPDATE u_order_wfjg SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_order_wfjg.wfjgid = :arg_wfjgid and u_order_wfjg.scid = :arg_scid using commit_transaction; if commit_transaction.SQLCode<>0 then rslt=0 arG_MSG="因网络或其它原因导致添加外加工计划备注操作失败"+"~n"+commit_transaction.SQLErrText rollback using commit_transaction; goto ext end if DSCRP = DSCRP+' '+arg_newdescppart it_newbegin=FALSE it_updatebegin=FALSE EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单 //0 FAIL, 1 SUCCESS INT rslt=1 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>0 THEN rslt=0 arG_MSG="外加工计划已经审核,不可以删除" goto ext END IF DELETE FROM u_order_wfjg WHERE u_order_wfjg.wfjgid = :arg_wfjgid and u_order_wfjg.scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="删除外加工计划操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK using commit_transaction; goto ext end if DELETE FROM u_order_wfjgMx WHERE u_order_wfjgMx.wfjgid = :arg_wfjgid and u_order_wfjgMx.scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="删除外加工计划明细操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK using commit_transaction; goto ext end if DELETE FROM u_order_wfjgMx_out WHERE u_order_wfjgMx_out.wfjgID = :wfjgID AND u_order_wfjgMx_out.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF it_newbegin=FALSE it_updatebegin=FALSE if arg_ifcommit and rslt =1 then COMMIT using commit_transaction; end if EXT: p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 uo_saletask uo_sale uo_sale = CREATE uo_saletask uo_sale.commit_transaction = commit_transaction uo_order_ml_mrp uo_mrp uo_mrp = CREATE uo_order_ml_mrp IF arg_wfjgid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 ARG_MSG = "外加工计划只有在已审核状态才可以执行撤消审核,请核对" GOTO ext END IF //检查进仓单 SELECT count(*) INTO :cnt FROM u_inwaremx,u_inware WHERE ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inware.billtype = 4) AND ( u_inwaremx.relid = :arg_wfjgid ) AND ( u_inwaremx.scid = :arg_scid) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询外加工计划收货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "外加工计划已经有相关进仓单据,不可以撤消审核" GOTO ext END IF //检查发出单 SELECT count(*) INTO :cnt FROM u_outwaremx,u_outware WHERE ( u_outware.scid = u_outwaremx.scid ) AND ( u_outware.outwareid = u_outwaremx.outwareid ) AND ( u_outware.billtype = 4) AND ( u_outwaremx.relid = :arg_wfjgid ) AND ( u_outwaremx.scid = :arg_scid) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询外加工计划发货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "外加工计划已经有相关出仓单据,不可以撤消审核" GOTO ext END IF //检查外协收货单 SELECT count(*) INTO :cnt FROM ow_wfjgmx_in_aft Where relid = :arg_wfjgid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询外加工计划车间收货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "外加工计划已经有相关车间收货或返工单据,不可以撤消审核" GOTO ext END IF //检查外协发出单 if sys_option_autocreate_outware = 0 then SELECT count(*) INTO :cnt FROM ow_wfjgmx_out Where relid = :arg_wfjgid USING commit_transaction ; else //如果使用订单自动生成发出单,则检查是否有非自动生成的发出单(原则上没有) SELECT count(*) INTO :cnt FROM ow_wfjgmx_out,ow_wfjg_out WHERE ( ow_wfjgmx_out.scid = :arg_scid ) AND ( ow_wfjgmx_out.relid = :arg_wfjgid ) AND (ow_wfjg_out.scid = ow_wfjgmx_out.scid) AND (ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid) And (ow_wfjg_out.relid <> :arg_wfjgid ) Using commit_transaction; end if IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询外加工计划车间发货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "外加工计划已经有相关车间发货或退回单据,不可以撤消审核" GOTO ext END IF //检查损耗单 SELECT count(*) INTO :cnt FROM u_order_wfjg_wasteMx Where wfjg_orderid = :arg_wfjgid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询外加工计划损耗数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "外加工计划已经有相关损耗单据,不可以撤消审核" GOTO ext END IF //删除外协发出单, 系统选项控制 sys_option_autocreate_outware ; if uf_del_outware_wfjg(false, arg_msg) = 0 then rslt = 0 GOTO ext end if Long i IF billtype > 0 THEN FOR i = 1 TO it_mxbt IF billtype = 1 THEN UPDATE u_SaleTaskMx SET wfjgtaskqty = wfjgtaskqty - :wfjgmx[i].qty WHERE scid = :scid AND TaskID = :wfjgmx[i].orderid AND printid = :wfjgmx[i].relprintid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSEIF billtype = 2 THEN IF wfjgmx[i].orderid > 0 AND wfjgmx[i].relprintid > 0 AND wfjgmx[i].relid2 > 0 THEN IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, wfjgmx[i].orderid, wfjgmx[i].relprintid, wfjgmx[i].relid2, 3, 0 - wfjgmx[i].qty, FALSE, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT END IF UPDATE u_order_wfjg SET Status = 0, permit_date = NULL, permit_emp = '' WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND Status = 1 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 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() DESTROY uo_sale DESTROY uo_mrp ARG_MSG = '外协订单,'+ ARG_MSG Return (rslt) end function public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0 datetime null_dt setnull(null_dt) IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if if arg_finishtype = 5 or arg_finishtype = 6 then IF Status<>1 THEN rslt=0 arG_MSG="外加工计划只有在进行状态才可以执行完成,请核对" goto ext END IF else if arg_finishtype = 1 then IF Status<>6 THEN rslt=0 arG_MSG="外加工计划只有在手动完成状态下才可以执行取消手动完成,请核对" goto ext END IF end if end if if arg_finishtype = 5 or arg_finishtype = 6 then UPDATE u_order_wfjg SET status=:arg_finishtype, accomplishdate=getdate(), finishemp=:publ_operator WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText rollback using commit_transaction; goto ext end if else UPDATE u_order_wfjg SET status=:arg_finishtype, accomplishdate=:null_dt, finishemp='' WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致取消手动完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText rollback using commit_transaction; goto ext end if end if EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer firstpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//buypermit Int rslt = 1,cnt = 0 uo_saletask uo_sale uo_sale = Create uo_saletask uo_sale.commit_transaction = commit_transaction uo_order_ml_mrp uo_mrp uo_mrp = Create uo_order_ml_mrp IF arg_wfjgid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 ARG_MSG = "外加工计划已经审核,操作取消" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp 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 Long i IF billtype > 0 THEN FOR i = 1 To it_mxbt IF billtype = 1 THEN UPDATE u_SaleTaskMx SET wfjgtaskqty = wfjgtaskqty + :wfjgmx[i].qty WHERE scid = :scid AND TaskID = :wfjgmx[i].orderid AND printid = :wfjgmx[i].relprintid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSEIF billtype = 2 THEN IF wfjgmx[i].orderid > 0 And wfjgmx[i].relprintid > 0 And wfjgmx[i].relid2 > 0 THEN IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, wfjgmx[i].orderid, wfjgmx[i].relprintid, wfjgmx[i].relid2, 3, wfjgmx[i].qty, False, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT END IF UPDATE u_order_wfjg SET Permit_Emp = :arg_emp, Permit_date = getdate(), Status = 1 WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND Status = 0 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 //自动生产外协发出单, 系统选项控制 sys_option_autocreate_outware ; IF sys_option_autocreate_outware = 1 THEN //自动生成 且 审核 IF uf_create_outware_wfjg(False, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF sys_option_autocreate_outware = 2 THEN //自动生成 不审核 IF uf_create_outware_wfjg_noaudit(False, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF p_reset() Destroy uo_sale Destroy uo_mrp ARG_MSG = '外协订单,'+ ARG_MSG Return (rslt) end function public function integer lastpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>4 THEN rslt=0 arG_MSG="外加工计划只有在已采购审核状态才可以执行最终审核,请核对" goto ext END IF cnt=0 SELECT count(*) INTO :cnt FROM u_user WHERE username=:arg_emp ; if sqlca.sqlcode<>0 then rslt=0 arG_MSG="查询操作失败,操作员!" goto ext end if if cnt=0 then rslt=0 arG_MSG="操作员姓名未登记或已取消!" goto ext end if UPDATE u_order_wfjg SET Permit_emp = :arg_emp, Status = 1 WHERE wfjgid = :arg_wfjgid and scid = :arg_scid ; if sqlca.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+SQLCA.SQLErrText goto ext end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if rslt=0 then rollback; elseif arg_ifcommit then COMMIT; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer stopbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>1 THEN rslt=0 arG_MSG="外加工计划只有在进行状态才可以执行终止,请核对" goto ext END IF UPDATE u_order_wfjg SET Status = 5, accomplishdate=getdate(), stopemp=:publ_operator WHERE wfjgid = :arg_wfjgid and scid = :arg_scid using commit_transaction ; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致终止外加工计划操作失败"+"~n"+commit_transaction.SQLErrText rollback using commit_transaction; goto ext end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer tempstoptask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>1 and Status<>2 THEN rslt=0 arG_MSG="外加工计划只有在进行状态或暂停状态才可以执行暂停/取消暂停操作" goto ext END IF if Status=1 then UPDATE u_order_wfjg SET Status = 2 , stopemp=:publ_operator WHERE wfjgid = :arg_wfjgid 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 else UPDATE u_order_wfjg SET Status = 1,stopemp='' WHERE wfjgid = :arg_wfjgid 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 end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if rslt=0 then rollback using commit_transaction; elseif arg_ifcommit then COMMIT using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//trycmplbuytask(arg_taskid,arg_msg,arg_ifcommit) int rslt = 1,cnt = 0 datetime null_dt setnull(null_dt) if arg_wfjgid <= 0 then rslt = 0 arg_msg = '错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then rslt = 0 goto ext end if if status<>1 and status <> 5 then rslt=1 if status<>1 then arg_msg="外加工计划只有在进行状态下才可以执行设完成状态" elseif status <>5 then arg_msg="外加工计划只有在完成状态下才可以执行撤消完成状态" end if goto ext end if decimal ls_zerook boolean if_finish if_finish=true declare zero_cur cursor for select u_order_wfjgMx.qty - u_order_wfjgMx.stopqty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty from u_order_wfjgMx where ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) and ( u_order_wfjgMx.scid = :arg_scid ) using commit_transaction ; open zero_cur; fetch zero_cur into :ls_zerook; do while commit_transaction.sqlcode = 0 if if_finish then if ls_zerook > 0 then if_finish=false end if fetch zero_cur into :ls_zerook; loop close zero_cur; if status = 1 and if_finish then update u_order_wfjg set status = 5, accomplishdate = getdate(), finishemp = :publ_operator where ( u_order_wfjg.wfjgid = :arg_wfjgid ) and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = "因网络或其他原因导致外加工计划完成状态设置操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if end if if status = 5 and not if_finish then update u_order_wfjg set status = 1, accomplishdate = :null_dt, finishemp = '' where ( u_order_wfjg.wfjgid = :arg_wfjgid ) and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = "因网络或其他原因导致外加工计划撤消完成状态设置操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if end if it_newbegin = false it_updatebegin = false ext: if rslt=0 then rollback using commit_transaction; elseif arg_ifcommit then commit using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg);//UPDATEbegin(long arg_taskid,ref string arg_msg) //从置对象,设定业务类型与关联ID,准备更新进仓单 //0 fail 1 success long rslt=1,CNT=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if if Status<>0 then rslt=0 ARG_MSG='已经处于审核或完成等状态,不可以修改,如果外加工计划未完成并要修改请先撤销审核' goto ext end if it_newbegin=FALSE it_updatebegin=TRUE p_clearmx() //清除明细 ext: if rslt=0 then p_reset() arg_msg = '外协订单,'+ arg_msg return rslt end function public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);int rslt = 1,cnt = 0 if arg_wfjgid <= 0 then rslt = 0 arg_msg = '错误外加工计划唯一码' goto ext end if if arg_addqty = 0 then rslt = 1 goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then rslt = 0 goto ext end if //==================================================================== // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit ) // Reason:检查数量限制 //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.02.12 //-------------------------------------------------------------------- long ls_isbuylimit decimal ls_buyqty,ls_consignedqty string ls_mtrlcode select isbuylimit,mtrlcode into :ls_isbuylimit,:ls_mtrlcode from u_mtrldef where mtrlid = :arg_mtrlid using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = '查询物料资料失败' goto ext end if //if ls_isbuylimit = 1 then select u_order_wfjgMx_out.qty, u_order_wfjgMx_out.consignedqty into :ls_buyqty, :ls_consignedqty from u_order_wfjgMx_out where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and ( u_order_wfjgMx_out.scid = :arg_scid ) and ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and ( u_order_wfjgMx_out.status = :arg_status ) and ( u_order_wfjgMx_out.orderid = :arg_orderid ) and (u_order_wfjgMx_out.woodcode=:arg_woodcode) and (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询外协订单已完成数量操作失败,查询数据返回值多于一个' else arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外协订单发出明细" end if goto ext end if if sys_option_ifovertask_wfjg_out = 0 then if ls_buyqty < ls_consignedqty + arg_addqty then rslt = 0 arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+string(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+string(arg_addqty,'#,##0.0#') goto ext end if end if //end if //==================================================================== update u_order_wfjgMx_out set consignedqty = consignedqty + :arg_addqty where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and ( u_order_wfjgMx_out.scid = :arg_scid ) and ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and ( u_order_wfjgMx_out.status = :arg_status ) and ( u_order_wfjgMx_out.orderid = :arg_orderid ) and (u_order_wfjgMx_out.woodcode=:arg_woodcode) and (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction; if sqlca.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 arg_ifcommit then commit using commit_transaction; end if p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit) INT rslt=1,cnt=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if arg_addqty=0 then rslt=1 goto ext end if rslt=p_getinfo(arg_scid,arg_wfjgid,arg_msg) if rslt=0 then goto ext IF Status<>1 THEN rslt=0 arG_MSG="外加工计划只有在进行状态下才可以执行进仓" goto ext END IF decimal ls_buyQty,ls_assignQty string ls_mtrlcode SELECT u_order_wfjgMx.Qty, u_order_wfjgMx.consignedqty, u_mtrldef.mtrlcode INTO :ls_buyQty, :ls_assignQty, :ls_mtrlcode FROM u_order_wfjgMx ,u_mtrldef WHERE ( u_order_wfjgMx.wfjgid =:arg_wfjgid ) AND ( u_order_wfjgMx.scid =:arg_scid ) and ( u_order_wfjgMx.MtrlID =:arg_mtrlid ) and ( u_mtrldef.mtrlid=u_order_wfjgMx.MtrlID ) and ( u_order_wfjgMx.status=:arg_status ) and ( u_order_wfjgMx.woodcode=:arg_woodcode ) and (u_order_wfjgMx.pcode=:arg_pcode) using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个' else arG_MSG="物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划收货明细" end if goto ext end if if ls_buyQty < ls_assignQty + arg_addqty then rslt=0 arG_MSG="物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#') goto ext end if EXT: p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit) INT rslt=1,cnt=0 IF arg_wfjgid<=0 THEN rslt=0 ARG_MSG='错误外加工计划唯一码' goto ext end if if arg_addqty=0 then rslt=1 goto ext end if rslt=p_getinfo(arg_scid,arg_wfjgid,arg_msg) if rslt=0 then goto ext IF Status<>1 THEN rslt=0 arG_MSG="外加工计划只有在进行状态下才可以执行进仓" goto ext END IF decimal ls_buyQty,ls_assignQty string ls_mtrlcode SELECT u_order_wfjgMx_out.Qty, u_order_wfjgMx_out.consignedqty, u_mtrldef.mtrlcode INTO :ls_buyQty, :ls_assignQty, :ls_mtrlcode FROM u_order_wfjgMx_out ,u_mtrldef WHERE ( u_order_wfjgMx_out.wfjgid =:arg_wfjgid ) AND ( u_order_wfjgMx_out.scid =:arg_scid ) and ( u_order_wfjgMx_out.MtrlID =:arg_mtrlid ) and ( u_mtrldef.mtrlid=u_order_wfjgMx_out.MtrlID ) and ( u_order_wfjgMx_out.status=:arg_status ) and ( u_order_wfjgMx_out.woodcode=:arg_woodcode) and (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个' else arG_MSG="物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划发料明细"+"~n"+commit_transaction.SQLErrText end if goto ext end if if ls_buyQty < ls_assignQty + arg_addqty then rslt=0 arG_MSG="物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#') goto ext end if EXT: p_reset() arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Decimal ls_buyqty,ls_consignedqty IF arg_wfjg_orderid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_wfjgmx WHERE u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND u_order_wfjgmx.mtrlid = :arg_mtrlid AND ( u_order_wfjgMx.status = :arg_status ) AND ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND ( u_order_wfjgMx.pcode = :arg_pcode ) AND ( u_order_wfjgmx.orderid = :arg_orderid ) 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 SELECT u_order_wfjgMx.qty, u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty INTO :ls_buyqty, :ls_consignedqty FROM u_order_wfjgMx WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjg_orderid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND ( u_order_wfjgMx.status = :arg_status ) AND ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND ( u_order_wfjgMx.pcode = :arg_pcode ) AND ( u_order_wfjgmx.orderid = :arg_orderid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个' else ARG_MSG = "物料编码["+arg_mtrlcode+"]不存在对应属性的外加工计划明细" end if GOTO ext END IF IF ls_buyqty < ls_consignedqty + arg_wasteqty THEN rslt = 0 ARG_MSG = "物料["+arg_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_wasteqty,'#,##0.0#') GOTO ext END IF UPDATE u_order_wfjgmx SET u_order_wfjgmx.wasteqty = u_order_wfjgmx.wasteqty + :arg_wasteqty WHERE u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND u_order_wfjgmx.mtrlid = :arg_mtrlid AND ( u_order_wfjgMx.status = :arg_status ) AND ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND ( u_order_wfjgMx.pcode = :arg_pcode ) AND ( u_order_wfjgmx.orderid = :arg_orderid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致更新外加工计划损耗操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF arg_msg = '外协订单,'+ arg_msg Return (rslt) end function public function integer stopmx (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_flag DateTime null_dt Decimal ld_notconsignedqty SetNull(null_dt) IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag INTO :li_flag FROM u_order_wfjgmx WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个' else arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' end if rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_flag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF li_flag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT u_order_wfjgmx.Qty - u_order_wfjgmx.consignedqty INTO :ld_notconsignedqty FROM u_order_wfjgmx WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个' else arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' end if rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止' rslt = 0 GOTO ext END IF IF ld_notconsignedqty < arg_stopqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####') rslt = 0 GOTO ext END IF IF trycmplbuytask(arg_scid,arg_orderid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_order_wfjgmx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '', stopqty = 0 WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; ELSE UPDATE u_order_wfjgmx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason, stopqty = :arg_stopqty WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF arg_msg = '外协订单,'+ arg_msg RETURN rslt end function public function integer stopmx1 (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_flag DateTime null_dt Decimal ld_notconsignedqty SetNull(null_dt) IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag INTO :li_flag FROM u_order_wfjgmx_out WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个' else arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' end if rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_flag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF li_flag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT u_order_wfjgmx_out.Qty - u_order_wfjgmx_out.consignedqty INTO :ld_notconsignedqty FROM u_order_wfjgmx_out WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个' else arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' end if rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成发出,不能中止' rslt = 0 GOTO ext END IF IF ld_notconsignedqty < arg_stopqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####') rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_order_wfjgmx_out SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '', stopqty = 0 WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; ELSE UPDATE u_order_wfjgmx_out SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason, stopqty = :arg_stopqty WHERE scid = :arg_scid AND wfjgid = :arg_orderid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF arg_msg = '外协订单,'+ arg_msg RETURN rslt end function public function integer uf_del_outware_wfjg (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单 IF sys_option_autocreate_outware = 0 THEN RETURN 1 //IF it_mxbt_out <= 0 THEN RETURN 1 Int rslt = 1 Long cnt Long ll_outwareid //==================================================================== //撤审并删除自动生成的仓库外协发出单 //==================================================================== uo_outware_wfjg uo_ware uo_ware = Create uo_outware_wfjg uo_ware.commit_transaction = sqlca cnt = 0 SELECT count(*) INTO :cnt FROM ow_wfjg_out WHERE relid = :wfjgid AND billtype = 4 And scid = :scid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有自动建立的外协发出单失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 1 THEN SELECT outwareid INTO :ll_outwareid FROM ow_wfjg_out WHERE relid = :wfjgid AND billtype = 4 And scid = :scid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询自动建立的外协发出单信息失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF IF uo_ware.getinfo(scid,ll_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.flag = 1 THEN IF uo_ware.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_ware.del(scid,ll_outwareid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK Using commit_transaction; arg_msg = "辅助删除外协发出单失败,"+arg_msg ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uf_create_outware_wfjg (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单 IF it_mxbt_out <= 0 THEN RETURN 1 Int rslt = 1 //==================================================================== // 按外协订单发出明细内容自动建立 //==================================================================== uo_outware_wfjg uo_ware uo_ware = Create uo_outware_wfjg uo_ware.commit_transaction = sqlca Long i,j Long ll_mx Decimal ld_sumqty,ld_acceptqty,ld_lastqty Long ll_mtrlwareid[] Decimal ld_noallocqty[] Long ll_printid = 0 DateTime server_dt 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 uo_ware.newbegin(scid,4,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // //初始化主表参数 uo_ware.outdate = server_dt uo_ware.outrep = publ_operator uo_ware.dscrp = '外协订单 '+taskcode+' 自动生成' uo_ware.relid = wfjgid //相关ID uo_ware.sptid = sptid uo_ware.part = taskcode uo_ware.if_getid_ture = False //检查是否够库存 FOR i = 1 To it_mxbt_out SELECT sum(noallocqty) INTO :ld_sumqty FROM u_mtrlware WHERE mtrlid = :wfjgmx_out[i].mtrlid AND storageid = :wfjgmx_out[i].storageid AND status = :wfjgmx_out[i].status AND woodcode = :wfjgmx_out[i].woodcode And pcode = :wfjgmx_out[i].pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询 '+wfjgmx_out[i].mtrlcode+' 库存数量失败'+'~r~n'+sqlca.SQLErrText GOTO ext END IF IF ld_sumqty < wfjgmx_out[i].qty THEN rslt = 0 arg_msg = wfjgmx_out[i].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjgmx_out[i].qty,'#,##0.##########')+',不能自动生成发出单' GOTO ext END IF NEXT //插入明细 FOR i = 1 To it_mxbt_out ll_mx = 1 DECLARE cur_mx CURSOR FOR SELECT noallocqty,mtrlwareid FROM u_mtrlware WHERE mtrlid = :wfjgmx_out[i].mtrlid AND storageid = :wfjgmx_out[i].storageid AND status = :wfjgmx_out[i].status AND woodcode = :wfjgmx_out[i].woodcode AND pcode = :wfjgmx_out[i].pcode ORDER BY noallocqty DESC Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; DO WHILE commit_transaction.SQLCode = 0 ll_mx++ FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; LOOP CLOSE cur_mx; ld_lastqty = wfjgmx_out[i].qty FOR j = 1 To ll_mx - 1 IF ld_lastqty <= ld_noallocqty[j] THEN ld_acceptqty = ld_lastqty ld_lastqty = 0 ELSE ld_acceptqty = ld_noallocqty[j] ld_lastqty = ld_lastqty - ld_noallocqty[j] END IF ll_printid++ IF uo_ware.acceptmx(ll_mtrlwareid[j],& ld_acceptqty ,& wfjgmx_out[i].unit,& ld_acceptqty ,& wfjgmx_out[i].dscrp,& ll_printid,& arg_msg,& 1,& wfjgid,& wfjgmx_out[i].printid,& 1,& 0,& '',& wfjgmx_out[i].dscrp2) = 0 THEN arg_msg = "行:"+String(i)+","+arg_msg rslt = 0 GOTO ext END IF IF ld_lastqty = 0 THEN EXIT NEXT NEXT //保存发出单 IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.getinfo(scid,uo_ware.outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //审核发出单 IF uo_ware.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK Using commit_transaction; arg_msg = "辅助建立外协发出单失败,"+arg_msg ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer check_addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit); int rslt = 1,cnt = 0 if arg_wfjgid <= 0 then rslt = 0 arg_msg = '错误外加工计划唯一码' goto ext end if if arg_addqty = 0 then rslt = 1 goto ext end if if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then rslt = 0 goto ext end if //==================================================================== // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit ) // Reason:检查数量限制 //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.02.12 //-------------------------------------------------------------------- long ls_isbuylimit decimal ls_buyqty,ls_consignedqty string ls_mtrlcode select isbuylimit,mtrlcode into :ls_isbuylimit,:ls_mtrlcode from u_mtrldef where mtrlid = :arg_mtrlid using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = '查询物料资料失败' goto ext end if //if ls_isbuylimit = 1 then select u_order_wfjgMx_out.qty, u_order_wfjgMx_out.consignedqty into :ls_buyqty, :ls_consignedqty from u_order_wfjgMx_out where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and ( u_order_wfjgMx_out.scid = :arg_scid ) and ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and ( u_order_wfjgMx_out.status = :arg_status ) and ( u_order_wfjgMx_out.orderid = :arg_orderid ) and (u_order_wfjgMx_out.woodcode=:arg_woodcode) and (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询外协订单已完成数量操作失败,查询数据返回值多于一个' else arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外协订单发出明细" end if goto ext end if if ls_buyqty < ls_consignedqty + arg_addqty then rslt = 0 arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+string(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+string(arg_addqty,'#,##0.0#') goto ext end if //end if ext: if rslt = 0 then elseif arg_ifcommit then end if arg_msg = '外协订单,'+ arg_msg return (rslt) end function public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_relprintid, long arg_relid2, string arg_relcode, long arg_orderid, string arg_plancode, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4);//RETURN 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,LS_i IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arG_MSG = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_price) THEN arg_price = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(ARG_mtrlCODE) THEN ARG_mtrlCODE = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_jgdscrp) THEN arg_jgdscrp = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_relprintid) THEN arg_relprintid = 0 IF IsNull(arg_relid2) THEN arg_relid2 = 0 IF IsNull(arg_relcode) THEN arg_relcode = '' IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_mxdscrp2) THEN arg_mxdscrp2 = '' IF IsNull(arg_mxdscrp3) THEN arg_mxdscrp3 ='' IF IsNull(arg_mxdscrp4) THEN arg_mxdscrp4 = '' arg_requiredate = datetime(date(arg_requiredate)) IF arg_mtrlid = 0 OR arg_qty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF IF arg_price < 0 THEN //检查进仓价 rslt = 0 arG_MSG = "物料:" + String(ARG_mtrlCODE)+" 单价错误" GOTO ext END IF //检查物料ID SELECT COUNT(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,物料编码" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arG_MSG = "错误的物料编码: "+String(ARG_mtrlCODE) GOTO ext END IF cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_storage Where u_storage.storageid = :arg_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,仓库编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arG_MSG = "错误的仓库编号" GOTO ext END IF //检查超数量 IF arg_orderid > 0 AND arg_relid2 > 0 THEN Decimal ld_noqty,ld_readyqty SELECT u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty - ISNULL(notmp.noauditqty,0) as noqty INTO :ld_noqty FROM u_OrderRqMtrl LEFT OUTER JOIN ( SELECT u_order_wfjgMx.scid ,orderid ,relprintid ,relid2 ,SUM(Qty) AS noauditqty FROM u_order_wfjgMx inner join u_order_wfjg on u_order_wfjg.scid = u_order_wfjgMx.scid and u_order_wfjg.wfjgID = u_order_wfjgMx.wfjgID where u_order_wfjg.status = 0 and u_order_wfjg.scid = :scid and u_order_wfjg.wfjgid <> :wfjgid GROUP BY u_order_wfjgMx.scid ,orderid ,relprintid ,relid2 ) AS notmp ON u_OrderRqMtrl.scid = notmp.scid AND u_OrderRqMtrl.taskID = notmp.orderid AND u_OrderRqMtrl.printid = notmp.relprintid AND u_OrderRqMtrl.mxpkid = notmp.relid2 WHERE (u_OrderRqMtrl.plantype = 3) AND u_OrderRqMtrl.scid = :scid AND u_OrderRqMtrl.taskID = :arg_orderid AND u_OrderRqMtrl.printid = :arg_relprintid AND u_OrderRqMtrl.mxpkid = :arg_relid2; IF SQLCA.SQLCODE <> 0 THEN arg_msg = "第" + String(arg_printid) + "行,查询需求表失败"+arg_mtrlcode+'失败!'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ld_readyqty = arg_qty FOR LS_i = 1 TO it_mxbt IF wfjgmx[it_mxbt].orderid = arg_orderid AND & wfjgmx[it_mxbt].relprintid = arg_relprintid AND & wfjgmx[it_mxbt].relid2 = arg_relid2 THEN ld_readyqty += wfjgmx[it_mxbt].qty END IF NEXT IF ld_readyqty > ld_noqty THEN arg_msg = "第" + String(arg_printid) + '行,本次开单数'+String(ld_readyqty,"#,##0.00##")+'不能大于未开单数'+String(ld_noqty,"#,##0.00##") rslt = 0 GOTO ext END IF END IF FOR LS_i = 1 TO it_mxbt //合并重复项 IF sys_option_order_wfjg_mxhb = 0 THEN IF wfjgmx[it_mxbt].orderid = arg_orderid AND & wfjgmx[it_mxbt].mtrlid = arg_mtrlid AND & wfjgmx[it_mxbt].status = arg_status AND & wfjgmx[it_mxbt].woodcode = arg_woodcode AND & wfjgmx[it_mxbt].pcode = arg_pcode AND & wfjgmx[it_mxbt].requiredate = arg_requiredate THEN wfjgmx[it_mxbt].Qty = wfjgmx[it_mxbt].Qty+arg_qty rslt = 1 GOTO ext END IF END IF NEXT //写入内容 it_mxbt++ wfjgmx[it_mxbt].printid = arg_printid wfjgmx[it_mxbt].mtrlid = arg_mtrlid wfjgmx[it_mxbt].mtrlcode = ARG_mtrlCODE wfjgmx[it_mxbt].status = arg_status wfjgmx[it_mxbt].woodcode = arg_woodcode wfjgmx[it_mxbt].pcode = arg_pcode wfjgmx[it_mxbt].Qty = arg_qty wfjgmx[it_mxbt].price = arg_price wfjgmx[it_mxbt].dscrp = arg_dscrp wfjgmx[it_mxbt].requiredate = arg_requiredate wfjgmx[it_mxbt].storageid = arg_storageid wfjgmx[it_mxbt].jgdscrp = arg_jgdscrp wfjgmx[it_mxbt].relprintid = arg_relprintid wfjgmx[it_mxbt].relid2 = arg_relid2 wfjgmx[it_mxbt].relcode = arg_relcode wfjgmx[it_mxbt].orderid = arg_orderid wfjgmx[it_mxbt].plancode = arg_plancode wfjgmx[it_mxbt].mxdscrp2 = arg_mxdscrp2 wfjgmx[it_mxbt].mxdscrp3 = arg_mxdscrp3 wfjgmx[it_mxbt].mxdscrp4= arg_mxdscrp4 IF arg_orderid > 0 THEN wfjgmx[it_mxbt].iforder = 1 END IF ext: IF rslt = 0 THEN p_clearmx() arG_MSG = '外协订单,'+ arG_MSG Return(rslt) end function public function integer uf_create_outware_wfjg_noaudit (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单 IF it_mxbt_out <= 0 THEN RETURN 1 Int rslt = 1 //==================================================================== // 按外协订单发出明细内容自动建立 //==================================================================== uo_outware_wfjg uo_ware uo_ware = Create uo_outware_wfjg uo_ware.commit_transaction = sqlca Long i,j Long ll_mx Decimal ld_sumqty,ld_acceptqty,ld_lastqty Long ll_mtrlwareid[] Decimal ld_noallocqty[] Long ll_printid = 0 DateTime server_dt 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 uo_ware.newbegin(scid,4,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // //初始化主表参数 uo_ware.outdate = server_dt uo_ware.outrep = publ_operator uo_ware.dscrp = '外协订单 '+taskcode+' 自动生成' uo_ware.relid = wfjgid //相关ID uo_ware.sptid = sptid uo_ware.part = taskcode uo_ware.if_getid_ture = False //检查是否够库存 FOR i = 1 To it_mxbt_out SELECT top 1 mtrlwareid INTO :ld_sumqty FROM u_mtrlware WHERE mtrlid = :wfjgmx_out[i].mtrlid AND storageid = :wfjgmx_out[i].storageid AND status = :wfjgmx_out[i].status AND woodcode = :wfjgmx_out[i].woodcode And pcode = :wfjgmx_out[i].pcode; IF sqlca.SQLCode <> 0 And sqlca.SQLCode <> 100 THEN rslt = 0 arg_msg = '查询 '+wfjgmx_out[i].mtrlcode+' 库存数量失败'+'~r~n'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 THEN Long ls_mtrlwareid,ls_sptid String ls_mtrlcode,ls_plancode ls_mtrlwareid = 0 ls_sptid = 0 ls_mtrlcode = '' ls_plancode = '' IF f_insert_0_mtrlware(ls_mtrlwareid, wfjgmx_out[i].mtrlid,ls_mtrlcode, wfjgmx_out[i].storageid,ls_sptid,wfjgmx_out[i].status,wfjgmx_out[i].woodcode,wfjgmx_out[i].pcode,ls_plancode,0,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE END IF // IF ld_sumqty < wfjgmx_out[i].qty THEN // rslt = 0 // arg_msg = wfjgmx_out[i].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjgmx_out[i].qty,'#,##0.##########')+',不能自动生成发出单' // GOTO ext // END IF NEXT //插入明细 FOR i = 1 To it_mxbt_out ll_mx = 1 DECLARE cur_mx CURSOR FOR SELECT noallocqty,mtrlwareid FROM u_mtrlware WHERE mtrlid = :wfjgmx_out[i].mtrlid AND storageid = :wfjgmx_out[i].storageid AND status = :wfjgmx_out[i].status AND woodcode = :wfjgmx_out[i].woodcode AND pcode = :wfjgmx_out[i].pcode ORDER BY noallocqty DESC Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; DO WHILE commit_transaction.SQLCode = 0 ll_mx++ FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; LOOP CLOSE cur_mx; ld_lastqty = wfjgmx_out[i].qty FOR j = 1 To ll_mx - 1 // IF ld_lastqty <= ld_noallocqty[j] THEN // ld_acceptqty = ld_lastqty // ld_lastqty = 0 // ELSE // ld_acceptqty = ld_noallocqty[j] // ld_lastqty = ld_lastqty - ld_noallocqty[j] // END IF ll_printid++ IF uo_ware.acceptmx(ll_mtrlwareid[j],& ld_lastqty ,& wfjgmx_out[i].unit,& ld_lastqty ,& wfjgmx_out[i].dscrp,& ll_printid,& arg_msg,& 1,& wfjgid,& wfjgmx_out[i].printid,& 1,& 0,& '',& wfjgmx_out[i].dscrp2) = 0 THEN arg_msg = "行:"+String(i)+","+arg_msg rslt = 0 GOTO ext END IF IF ld_lastqty = 0 THEN EXIT NEXT NEXT //保存发出单 IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK Using commit_transaction; arg_msg = "辅助建立外协发出单失败,"+arg_msg ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit, long arg_printid);Int rslt = 1,cnt = 0 IF arg_wfjgid <= 0 THEN rslt = 0 arg_msg = '错误外加工计划唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "外加工计划只有在进行状态下才可以执行进仓" ELSEIF status <> 5 THEN arg_msg = "外加工计划只有在完成状态下才可以撤消进仓" END IF GOTO ext END IF Long ls_isbuylimit,ll_relid2 Decimal ls_buyqty,ls_consignedqty = 0 String ls_mtrlcode SELECT isbuylimit,mtrlcode INTO :ls_isbuylimit,:ls_mtrlcode FROM u_mtrldef WHERE mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN arg_msg = '查询物料资料失败,查询数据返回值多于一个' ELSE arg_msg = '查询物料资料失败' END IF GOTO ext END IF SELECT u_order_wfjgMx.qty, u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty, u_order_wfjgMx.relid2 INTO :ls_buyqty, :ls_consignedqty, :ll_relid2 FROM u_order_wfjgMx WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND ( u_order_wfjgMx.status = :arg_status ) AND u_order_wfjgMx.woodcode = :arg_woodcode AND u_order_wfjgMx.pcode = :arg_pcode AND u_order_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN arg_msg = '查询外加工计划已完成数量失败,查询数据返回值多于一个' ELSE arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划明细" END IF GOTO ext END IF IF sys_option_ifovertask_wfjg = 0 THEN IF ls_buyqty < ls_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF END IF // or :arg_orderid=0 荣改20170506 UPDATE u_order_wfjgMx SET consignedqty = consignedqty + :arg_addqty WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND ( u_order_wfjgMx.status = :arg_status ) AND ( u_order_wfjgMx.orderid = :arg_orderid or :arg_orderid=0 ) AND u_order_wfjgMx.woodcode = :arg_woodcode AND u_order_wfjgMx.pcode = :arg_pcode AND u_order_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致外加工计划完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ll_relid2 > 0 THEN UPDATE u_OrderRqMtrl SET inqty = inqty + :arg_addqty Where mxpkid = :ll_relid2 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新销售订单明细的外协需求已订货数操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() arg_msg = '外协订单,'+ arg_msg Return (rslt) end function public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_dscrp2, string arg_plancode, string arg_saletaskcode);//return 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,ls_i IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_price) THEN arg_price = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_dscrp2) THEN arg_dscrp2 = '' IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_saletaskcode) THEN arg_saletaskcode = '' IF arg_mtrlid = 0 OR arg_qty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF IF arg_price < 0 THEN rslt = 0 arg_msg = "物料:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF //检查物料id SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的产品编号: "+String(arg_mtrlcode) GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_storage Where u_storage.storageid = :arg_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的仓库编号" GOTO ext END IF FOR ls_i = 1 TO it_mxbt_out //合并重复项 IF wfjgmx_out[ls_i].mtrlid = arg_mtrlid AND & wfjgmx_out[ls_i].status = arg_status AND & wfjgmx_out[ls_i].woodcode = arg_woodcode AND & wfjgmx_out[ls_i].pcode = arg_pcode THEN wfjgmx_out[ls_i].qty = wfjgmx_out[ls_i].qty+arg_qty rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt_out++ wfjgmx_out[it_mxbt_out].mtrlid = arg_mtrlid wfjgmx_out[it_mxbt_out].qty = arg_qty wfjgmx_out[it_mxbt_out].dscrp = arg_dscrp wfjgmx_out[it_mxbt_out].mtrlcode = arg_mtrlcode wfjgmx_out[it_mxbt_out].printid = arg_printid wfjgmx_out[it_mxbt_out].price = arg_price wfjgmx_out[it_mxbt_out].storageid = arg_storageid wfjgmx_out[it_mxbt_out].status = arg_status wfjgmx_out[it_mxbt_out].woodcode = arg_woodcode wfjgmx_out[it_mxbt_out].pcode = arg_pcode wfjgmx_out[it_mxbt_out].dscrp2 = arg_dscrp2 wfjgmx_out[it_mxbt_out].plancode = arg_plancode wfjgmx_out[it_mxbt_out].saletaskcode = arg_saletaskcode ext: IF rslt = 0 THEN p_clearmx() arg_msg = '外协订单,'+ arg_msg Return(rslt) end function on uo_order_wfjg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_wfjg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on