$PBExportHeader$uo_owegood.sru forward global type uo_owegood from nonvisualobject end type end forward global type uo_owegood from nonvisualobject end type global uo_owegood uo_owegood type variables long uo_billid string uo_billcode end variables forward prototypes public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer save (s_owegood arg_s_owe, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_owegoodmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer tmpstopbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer stopbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer finishbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer cfinishbill (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer stopmx (long arg_billid, long arg_printid, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl (long arg_billid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer tryfinish (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer addstopqty (long arg_billid, long arg_printid, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_owegood WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 long li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以修改,请核对' GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1 long ll_flag if arg_billid <= 0 then rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF if ll_flag <> 0 then rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF DELETE FROM u_owegoodmx WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_owegood WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 long ll_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_owegood SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_owegood.billid = :arg_billid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag Long ll_scid DateTime null_dt Long ll_inware_in Long ll_storageid Long cnt SetNull(null_dt) uo_inware uo_in uo_in = CREATE uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = FALSE IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在审核状态,不可以撤审' GOTO ext END IF SELECT storageid,scid INTO :ll_storageid,:ll_scid FROM u_owegood Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据所属分部失败'+sqlca.SQLErrText GOTO ext END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :ll_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(ll_storageid)+',') <= 0 THEN rslt = 0 ARG_MSG = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据' GOTO ext END IF END IF // //撤审删除相关进仓单 cnt = 0 SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :ll_scid AND relid = :arg_billid AND billtype = 18; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询是否存在相关进仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 1 THEN SELECT inwareid INTO :ll_inware_in FROM u_inware WHERE scid = :ll_scid AND relid = :arg_billid AND billtype = 18; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询相关进仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_in.getinfo(ll_scid,ll_inware_in,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.c_auditing(FALSE,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.del(ll_scid,ll_inware_in,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF // //更新审核标记 UPDATE u_owegood SET auditemp = '', auditdate = :null_dt, flag = 0 Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_in RETURN rslt end function public function integer save (s_owegood arg_s_owe, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i String ls_sccode,ls_billcode IF IsNull(arg_s_owe.scid) THEN arg_s_owe.scid = 0 IF IsNull(arg_s_owe.billid) THEN arg_s_owe.billid = 0 IF IsNull(arg_s_owe.cusid) THEN arg_s_owe.cusid = 0 IF IsNull(arg_s_owe.relcode) THEN arg_s_owe.relcode = '' IF IsNull(arg_s_owe.assignemp) THEN arg_s_owe.assignemp = '' IF IsNull(arg_s_owe.dscrp) THEN arg_s_owe.dscrp = '' IF IsNull(arg_s_owe.storageid) THEN arg_s_owe.storageid = 0 IF IsNull(arg_s_owe.ifaddware) THEN arg_s_owe.ifaddware = 0 IF IsNull(arg_s_owe.relid) THEN arg_s_owe.relid = 0 IF arg_s_owe.assignemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF arg_s_owe.storageid = 0 THEN arg_msg = '请选择仓库' rslt = 0 GOTO ext END IF //检查仓库 SELECT count(*) INTO :cnt FROM u_storage Where u_storage.storageid = :arg_s_owe.storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的仓库编号: "+String(arg_s_owe.storageid) GOTO ext END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :arg_s_owe.storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_new <> '0' THEN IF Pos(sys_user_storagestr_new,','+String(arg_s_owe.storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许建立该仓库的单据' GOTO ext END IF END IF // IF arg_s_owe.cusid = 0 THEN arg_msg = '请选择客户' rslt = 0 GOTO ext END IF //检查客户资料 cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_s_owe.cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '错误的客户ID' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF it_mxbt = UpperBound(arg_s_owe.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF //检查明细内容 Long ll_i FOR ll_i = 1 TO it_mxbt IF arg_s_owe.arg_s_mx[ll_i].taskid = 0 and arg_s_owe.arg_s_mx[ll_i].ifrel = 1 THEN rslt = 0 arg_msg = '请选择订单,第'+String(ll_i)+'行' GOTO ext END IF NEXT IF arg_s_owe.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_owegood","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_owe.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_owe.scid,ls_sccode + 'OG',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_owegood (scid, billid, billcode, loandate, cusid, storageid, relcode, assignemp, dscrp, ifaddware, opdate, opemp, relid) VALUES (:arg_s_owe.scid, :ll_billid, :ls_billcode, :arg_s_owe.loandate, :arg_s_owe.cusid, :arg_s_owe.storageid, :arg_s_owe.relcode, :arg_s_owe.assignemp, :arg_s_owe.dscrp, :arg_s_owe.ifaddware, getdate(), :arg_opemp, :arg_s_owe.relid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_owegoodmx (scid, billid, printid, ifrel, taskid, taskprintid, taskcode, taskrelcode, taskmtrlid, mtrlid, status, woodcode, pcode, plancode, qty, acmpqty, mxdscrp) VALUES (:arg_s_owe.scid, :ll_billid, :arg_s_owe.arg_s_mx[i].printid, :arg_s_owe.arg_s_mx[i].ifrel, :arg_s_owe.arg_s_mx[i].taskid, :arg_s_owe.arg_s_mx[i].taskprintid, :arg_s_owe.arg_s_mx[i].taskcode, :arg_s_owe.arg_s_mx[i].taskrelcode, :arg_s_owe.arg_s_mx[i].taskmtrlid, :arg_s_owe.arg_s_mx[i].mtrlid, :arg_s_owe.arg_s_mx[i].status, :arg_s_owe.arg_s_mx[i].woodcode, :arg_s_owe.arg_s_mx[i].pcode, :arg_s_owe.arg_s_mx[i].plancode, :arg_s_owe.arg_s_mx[i].qty, :arg_s_owe.arg_s_mx[i].acmpqty, :arg_s_owe.arg_s_mx[i].mxdscrp ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_owegood SET loandate = :arg_s_owe.loandate, cusid = :arg_s_owe.cusid, storageid = :arg_s_owe.storageid, relcode = :arg_s_owe.relcode, assignemp = :arg_s_owe.assignemp, ifaddware = :arg_s_owe.ifaddware, dscrp = :arg_s_owe.dscrp, moddate = getdate(), modemp = :arg_opemp, relid = :arg_s_owe.relid WHERE billid = :arg_s_owe.billid AND flag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_owegoodmx Where billid = :arg_s_owe.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_owegoodmx (scid, billid, printid, ifrel, taskid, taskprintid, taskcode, taskrelcode, taskmtrlid, mtrlid, status, woodcode, pcode, plancode, qty, acmpqty, mxdscrp) VALUES (:arg_s_owe.scid, :arg_s_owe.billid, :arg_s_owe.arg_s_mx[i].printid, :arg_s_owe.arg_s_mx[i].ifrel, :arg_s_owe.arg_s_mx[i].taskid, :arg_s_owe.arg_s_mx[i].taskprintid, :arg_s_owe.arg_s_mx[i].taskcode, :arg_s_owe.arg_s_mx[i].taskrelcode, :arg_s_owe.arg_s_mx[i].taskmtrlid, :arg_s_owe.arg_s_mx[i].mtrlid, :arg_s_owe.arg_s_mx[i].status, :arg_s_owe.arg_s_mx[i].woodcode, :arg_s_owe.arg_s_mx[i].pcode, :arg_s_owe.arg_s_mx[i].plancode, :arg_s_owe.arg_s_mx[i].qty, :arg_s_owe.arg_s_mx[i].acmpqty, :arg_s_owe.arg_s_mx[i].mxdscrp ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_owe.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_owegoodmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT u_owegoodmx.scid, u_owegoodmx.billid, u_owegoodmx.printid, u_owegoodmx.ifrel, u_owegoodmx.taskid, u_owegoodmx.taskprintid, u_owegoodmx.taskcode, u_owegoodmx.taskrelcode, u_owegoodmx.taskmtrlid, u_owegoodmx.mtrlid, u_owegoodmx.status, u_owegoodmx.woodcode, u_owegoodmx.pcode, u_owegoodmx.plancode, u_owegoodmx.qty, u_owegoodmx.acmpqty, u_owegoodmx.mxdscrp, u_mtrldef.mtrlcode, u_mtrldef.planprice, u_mtrldef.unit, u_owegoodmx.stopqty FROM u_owegoodmx,u_mtrldef WHERE u_owegoodmx.billid = :arg_billid and u_owegoodmx.mtrlid = u_mtrldef.mtrlid Order By u_owegoodmx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].ifrel, :arg_ref_mx[i].taskid, :arg_ref_mx[i].taskprintid, :arg_ref_mx[i].taskcode, :arg_ref_mx[i].taskrelcode, :arg_ref_mx[i].taskmtrlid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].plancode, :arg_ref_mx[i].qty, :arg_ref_mx[i].acmpqty, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].planprice, :arg_ref_mx[i].unit, :arg_ref_mx[i].stopqty; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].ifrel, :arg_ref_mx[i].taskid, :arg_ref_mx[i].taskprintid, :arg_ref_mx[i].taskcode, :arg_ref_mx[i].taskrelcode, :arg_ref_mx[i].taskmtrlid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].plancode, :arg_ref_mx[i].qty, :arg_ref_mx[i].acmpqty, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].planprice, :arg_ref_mx[i].unit, :arg_ref_mx[i].stopqty; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_owegoodmx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待审核状态,不可以再审' GOTO ext END IF Long ll_storageid,ll_scid,ll_cusid DateTime ld_loandate String ls_dscrp,ls_billcode Long ll_inwareid_in Int li_ifaddware SELECT scid,billcode,storageid,loandate,dscrp,cusid,ifaddware INTO :ll_scid,:ls_billcode,:ll_storageid,:ld_loandate,:ls_dscrp,:ll_cusid,:li_ifaddware FROM u_owegood Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据信息失败'+sqlca.SQLErrText GOTO ext END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :ll_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(ll_storageid)+',') <= 0 THEN rslt = 0 ARG_MSG = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据' GOTO ext END IF END IF // s_owegoodmx arg_s_mx[] Long ll_arr_mx Long ll_i IF li_ifaddware = 1 THEN IF getinfo(arg_billid,arg_s_mx,ll_arr_mx,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF //生成相关进仓单 uo_inware uo_in uo_in = CREATE uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = FALSE IF uo_in.newbegin(ll_scid,18,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = arg_billid uo_in.indate = ld_loandate uo_in.inrep = arg_opemp uo_in.part = ls_billcode uo_in.dscrp = ls_dscrp uo_in.storageid = ll_storageid uo_in.sptname = '欠货单进仓单' FOR ll_i = 1 TO ll_arr_mx IF uo_in.acceptmx(ll_i,& arg_s_mx[ll_i].mtrlid,& arg_s_mx[ll_i].mtrlcode,& arg_s_mx[ll_i].plancode,& arg_s_mx[ll_i].status,& arg_s_mx[ll_i].qty,& arg_s_mx[ll_i].planprice,& 1,& '',& ARG_MSG,& 0,0,0,arg_s_mx[ll_i].woodcode,& arg_s_mx[ll_i].pcode,& ll_cusid,& arg_s_mx[ll_i].unit,1,arg_s_mx[ll_i].qty,& 0,0,'','',0,0,'','',& arg_s_mx[ll_i].qty,& 0) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_in.Save(FALSE,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF ll_inwareid_in = uo_in.inwareid IF uo_in.getinfo(ll_scid,ll_inwareid_in,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(FALSE,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF END IF // //更新审核标记 UPDATE u_owegood SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_in RETURN rslt end function public function integer tmpstopbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long ll_flag IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 AND ll_flag <> 2 THEN rslt = 0 arg_msg = "单据只有在进行,暂停状态才可以执行暂停/取消暂停操作" GOTO ext END IF IF ll_flag = 1 THEN UPDATE u_owegood SET flag = 2, stopemp = :arg_opemp WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致暂停单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_owegood SET flag = 1, stopemp = '' WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致取消暂停单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF Return (rslt) end function public function integer stopbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 arg_msg = "单据只有在进行状态才可以执行终止,请核对" GOTO ext END IF UPDATE u_owegood SET flag = 3, stopemp = :arg_opemp WHERE billid = :arg_billid AND flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致终止单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSE IF sqlca.SQLNRows = 0 THEN arg_msg = '单据正在终止...' rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer finishbill (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 arg_msg = "单据只有在进行状态才可以执行完成,请核对" GOTO ext END IF UPDATE u_owegood SET flag = 6, accomplishdate = getdate(), finishemp = :arg_opemp Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致完成单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer cfinishbill (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag DateTime null_dt SetNull(null_dt) IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 6 THEN rslt = 0 arg_msg = "单据只有在手动完成状态下才可以执行取消手动完成,请核对" GOTO ext END IF UPDATE u_owegood SET flag = 1, accomplishdate = :null_dt, finishemp = '' Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致取消手动完成单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer stopmx (long arg_billid, long arg_printid, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag ,ll_stopflag DateTime null_dt Decimal ld_notconsignedqty SetNull(null_dt) IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 arg_msg = "单据只有在进行状态才可以执行终止明细,请核对" GOTO ext END IF SELECT stopflag INTO :ll_stopflag FROM u_owegoodmx WHERE billid = :arg_billid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细中止标记失败' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF ll_stopflag = 0 THEN arg_msg = '明细还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF ll_stopflag = 1 THEN arg_msg = '明细物料已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT qty - acmpqty INTO :ld_notconsignedqty FROM u_owegoodmx WHERE billid = :arg_billid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细未还货数失败' rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细已完成还货,不能中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_owegoodmx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '' WHERE billid = :arg_billid AND printid = :arg_printid; ELSE UPDATE u_owegoodmx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason WHERE billid = :arg_billid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer addmxcmpl (long arg_billid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 long ll_flag IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 AND ll_flag <> 5 THEN rslt = 0 IF ll_flag <> 1 THEN ARG_MSG = "欠货单只有在进行状态下才可以执行进仓" ELSEIF ll_flag <> 5 THEN ARG_MSG = "欠货单只有在自动完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_Qty,ls_acmpqty,ld_stopqty String ls_mtrlcode SELECT u_owegoodMx.qty, u_owegoodMx.acmpqty, u_mtrldef.mtrlcode, u_owegoodMx.stopqty INTO :ls_Qty, :ls_acmpqty, :ls_mtrlcode, :ld_stopqty FROM u_owegoodMx ,u_mtrldef WHERE ( u_owegoodMx.billid = :arg_billid ) AND ( u_owegoodMx.printid = :arg_printid ) AND ( u_owegoodMx.stopflag = 0 ) and ( u_owegoodMx.mtrlid = u_mtrldef.mtrlid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询欠货单已还货数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_Qty < ls_acmpqty + arg_addqty + ld_stopqty THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_Qty - ls_acmpqty - ld_stopqty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_owegoodMx SET acmpqty = acmpqty +:arg_addqty WHERE ( u_owegoodMx.billid = :arg_billid ) AND ( u_owegoodMx.printid = :arg_printid ) and ( u_owegoodMx.stopflag = 0 ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误产品唯一码导致欠货单已还货数量操作失败"+"~n"+ sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK ; ELSEIF arg_ifcommit and rslt = 1 THEN COMMIT ; END IF Return (rslt) end function public function integer tryfinish (long arg_billid, ref string arg_msg, boolean arg_ifcommit);//trycmplsaletask(arg_taskid,arg_msg,arg_ifcommit) Int rslt = 1,cnt = 0 long ll_status DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_status,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_status <> 1 AND ll_status <> 5 THEN rslt = 0 IF ll_status <> 1 THEN arg_msg = "欠货单只有在进行状态下才可以执行设完成状态" ELSEIF ll_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_owegoodmx.qty - u_owegoodmx.acmpqty - u_owegoodmx.stopqty FROM u_owegoodmx WHERE ( u_owegoodmx.billid = :arg_billid ) AND ( u_owegoodmx.stopflag = 0 ) ; OPEN zero_cur; FETCH zero_cur INTO :ls_zerook; DO WHILE sqlca.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 ll_status = 1 AND if_finish THEN UPDATE u_owegood SET flag = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_owegood.billid = :arg_billid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致欠货单完成状态设置操作失败"+"~n"+sqlca.SQLErrText ROLLBACK ; GOTO ext END IF END IF IF ll_status = 5 AND NOT if_finish THEN UPDATE u_owegood SET flag = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_owegood.billid = :arg_billid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致欠货单撤消完成状态设置操作失败"+"~n"+sqlca.SQLErrText ROLLBACK; GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT ; END IF Return (rslt) end function public function integer addstopqty (long arg_billid, long arg_printid, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 long ll_flag IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF arg_stopqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 AND ll_flag <> 5 THEN rslt = 0 IF ll_flag <> 1 THEN ARG_MSG = "欠货单只有在进行状态下才可以执行进仓" ELSEIF ll_flag <> 5 THEN ARG_MSG = "欠货单只有在自动完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_Qty,ls_acmpqty,ld_stopqty String ls_mtrlcode SELECT u_owegoodMx.qty, u_owegoodMx.acmpqty, u_mtrldef.mtrlcode, u_owegoodMx.stopqty INTO :ls_Qty, :ls_acmpqty, :ls_mtrlcode, :ld_stopqty FROM u_owegoodMx ,u_mtrldef WHERE ( u_owegoodMx.billid = :arg_billid ) AND ( u_owegoodMx.printid = :arg_printid ) AND ( u_owegoodMx.stopflag = 0 ) and ( u_owegoodMx.mtrlid = u_mtrldef.mtrlid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询欠货单明细信息操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_Qty < ls_acmpqty + arg_stopqty + ld_stopqty THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_Qty - ls_acmpqty - ld_stopqty,'#,##0.0#')+",不能终止"+String(arg_stopqty,'#,##0.0#') GOTO ext END IF UPDATE u_owegoodMx SET stopqty = stopqty +:arg_stopqty WHERE ( u_owegoodMx.billid = :arg_billid ) AND ( u_owegoodMx.printid = :arg_printid ) and ( u_owegoodMx.stopflag = 0 ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误产品唯一码导致欠货单已终止数量操作失败"+"~n"+ sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK ; ELSEIF arg_ifcommit and rslt = 1 THEN COMMIT ; END IF Return (rslt) end function on uo_owegood.create call super::create TriggerEvent( this, "constructor" ) end on on uo_owegood.destroy TriggerEvent( this, "destructor" ) call super::destroy end on