$PBExportHeader$uo_request_wfjg.sru forward global type uo_request_wfjg from nonvisualobject end type end forward global type uo_request_wfjg from nonvisualobject end type global uo_request_wfjg uo_request_wfjg type variables Public ProtectedWrite Long scid Public ProtectedWrite Long wfjgid 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 Public ProtectedWrite Long ctmint Long ifauto Long sptid String assign_emp DateTime requiredate String dscrp String relcode Boolean if_getid_ture = True Transaction commit_transaction //数据commit事务 Private: s_order_wfjgmx wfjgmx[],wfjgmxmx[] //明细结构数组 s_order_wfjgmx_out wfjgmx_out[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbtmx = 0 Long it_mxbt_out = 0 //明细结构数组末指针 Boolean it_newbegin = True //新建标志 Boolean it_updatebegin = False //修改标志 Int uo_option_requestwfjg_hz int uo_option_wfjg_checkdate 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 checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer finishtask (integer arg_finishtype, 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 updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer trycmplwfjg (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer audit_2 (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_scid, long arg_wfjgid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_scid, long arg_wfjgid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_2 (long arg_scid, long arg_wfjgid, any arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer audit_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_mx (long arg_scid, long arg_wfjgid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer stopmx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_wrkgrpid, string arg_pfcode, string arg_plancode, string arg_unit, decimal arg_uqty, decimal arg_rate) public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, ref string arg_msg, long arg_printid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_uqty, decimal arg_rate) public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjgid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit) public function integer stopbuytask (long arg_scid, long arg_wfjgid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer uof_update_wfjg_flag (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_order_wfjgmx s_mx, ref string arg_msg) public function integer acceptmx_out (s_order_wfjgmx_out s_mx, ref string arg_msg) public function integer uof_add_thqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_fgqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_order_acmpqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer uof_add_order_dstrqty_bk (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, decimal arg_dec_round, ref string arg_msg) public function integer uof_add_order_dstrqty (long arg_scid, long arg_sptid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, decimal arg_dec_round, ref string arg_msg) public function integer uof_add_order_rqacmpqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 scid = 0 wfjgid = 0 taskcode = '' operator = '' status = 0 ifauto = 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 it_mxbtmx = 0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);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 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 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 f_check_inoutdate(0,requiredate,False,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF it_mxbt = 0 THEN rslt = 0 arG_MSG = "没有正确外协申请单收货明细" GOTO ext END IF if sys_option_request_wfjg_ifoutmx = 1 then IF it_mxbt_out = 0 THEN rslt = 0 arG_MSG = "系统选项[375]限制,没有正确外协申请单发出明细" GOTO ext END IF 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_request_wfjg","wfjgID",arG_MSG,True,id_sqlca) //数据commit事务) IF LS_NEWwfjgID <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(scid,commit_transaction,ls_sccode,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF taskcode = getid(scid,ls_sccode + 'WR',Date(server_datetime),if_getid_ture,commit_transaction) IF taskcode = "err" THEN taskcode = '' rslt = 0 arG_MSG = "无法获取外协申请单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_request_wfjg ( scid, wfjgID, TaskCode, requiredate, Status, Opemp, Assign_Emp, Dscrp, opdate, ifauto, relcode) VALUES ( :scid, :LS_NEWwfjgID, :TaskCode, :requiredate, :Status, :Operator, :Assign_Emp, :Dscrp, :opdate, :ifauto, :relcode) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致插入外协申请单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新taskid wfjgID = LS_NEWwfjgID ELSE //////////////////////////////////////////////// //更新 UPDATE u_request_wfjg SET requiredate = :requiredate, Assign_Emp = :Assign_Emp, Dscrp = :Dscrp, moddate = getdate(), Modemp = :publ_operator, relcode = :relcode WHERE u_request_wfjg.wfjgID = :wfjgID And u_request_wfjg.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致更新外加工计划操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_request_wfjgMx WHERE u_request_wfjgMx.wfjgID = :wfjgID And u_request_wfjgMx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有收货汇总操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_request_wfjgMxmx WHERE u_request_wfjgMxmx.wfjgID = :wfjgID And u_request_wfjgMxmx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有收货明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_request_wfjgMx_out WHERE u_request_wfjgMx_out.wfjgID = :wfjgID And u_request_wfjgMx_out.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有发出明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO u_request_wfjgMx ( scid, wfjgID, printid, mtrlid, qty, dscrp, requiredate, orderid, jgdscrp, status, iforder, woodcode, pcode, wrkGrpid, pfcode, sptid, plancode, unit, uqty, rate, sonmtrlid) VALUES (:scid, :wfjgID, :wfjgmx[i].printid, :wfjgmx[i].mtrlid, :wfjgmx[i].QTY, :wfjgmx[i].dscrp , :wfjgmx[i].requiredate, :wfjgmx[i].orderid, :wfjgmx[i].jgdscrp, :wfjgmx[i].status, :wfjgmx[i].iforder, :wfjgmx[i].woodcode, :wfjgmx[i].pcode, :wfjgmx[i].wrkGrpid, :wfjgmx[i].pfcode, :wfjgmx[i].sptid, :wfjgmx[i].plancode, :wfjgmx[i].unit, :wfjgmx[i].uqty, :wfjgmx[i].rate, :wfjgmx[i].sonmtrlid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN wfjgID = 0 //还原taskid rslt = 0 arG_MSG = "因网络或其它原因导致插入收货汇总操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbtmx INSERT INTO u_request_wfjgMxmx ( scid, wfjgID, printid, mtrlid, qty, dscrp, requiredate, orderid, jgdscrp, status, iforder, woodcode, pcode, wrkGrpid, pfcode, sptid, plancode, unit, uqty, rate, sonmtrlid) VALUES (:scid, :wfjgID, :wfjgmxmx[i].printid, :wfjgmxmx[i].mtrlid, :wfjgmxmx[i].QTY, :wfjgmxmx[i].dscrp , :wfjgmxmx[i].requiredate, :wfjgmxmx[i].orderid, :wfjgmxmx[i].jgdscrp, :wfjgmxmx[i].status, :wfjgmxmx[i].iforder, :wfjgmxmx[i].woodcode, :wfjgmxmx[i].pcode, :wfjgmxmx[i].wrkGrpid, :wfjgmxmx[i].pfcode, :wfjgmxmx[i].sptid, :wfjgmxmx[i].plancode, :wfjgmxmx[i].unit, :wfjgmxmx[i].uqty, :wfjgmxmx[i].rate, :wfjgmxmx[i].sonmtrlid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN wfjgID = 0 //还原taskid rslt = 0 arG_MSG = "因网络或其它原因导致插入收货明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbt_out INSERT INTO u_request_wfjgMx_out (scid, wfjgID, printid, mtrlid, qty, status, woodcode, pcode, unit, uqty, rate) VALUES (:scid, :wfjgID, :wfjgmx_out[i].printid, :wfjgmx_out[i].mtrlid, :wfjgmx_out[i].QTY, :wfjgmx_out[i].status, :wfjgmx_out[i].woodcode, :wfjgmx_out[i].pcode, :wfjgmx_out[i].unit, :wfjgmx_out[i].uqty, :wfjgmx_out[i].rate) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN wfjgID = 0 //还原taskid rslt = 0 arG_MSG = "因网络或其它原因导致插入发出明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT IF uof_update_wfjg_flag(scid,wfjgID,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF 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 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() 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, requiredate, accomplishdate, Status, Opemp, Assign_Emp, Dscrp, opdate , ctmint, ifauto, relcode INTO :wfjgID, :TaskCode, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Dscrp, :opdate, :ctmint, :ifauto, :relcode FROM u_request_wfjg WHERE u_request_wfjg.wfjgID = :arg_wfjgID AND u_request_wfjg.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询外协申请单内容失败(错误外协申请单唯一码)' 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, k = 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_request_wfjgmx.mtrlid, u_request_wfjgmx.qty, u_request_wfjgmx.dscrp, u_mtrldef.mtrlcode, u_request_wfjgmx.printid, u_request_wfjgmx.orderid, u_request_wfjgmx.jgdscrp, u_request_wfjgmx.iforder, u_request_wfjgmx.status, u_request_wfjgmx.woodcode, u_request_wfjgmx.pcode, u_request_wfjgmx.wrkGrpid, u_request_wfjgmx.sptid, u_request_wfjgmx.plancode, u_request_wfjgmx.unit, u_request_wfjgmx.uqty, u_request_wfjgmx.rate FROM u_request_wfjgmx,u_mtrldef WHERE u_request_wfjgmx.wfjgid = :arg_wfjgid AND u_request_wfjgmx.scid = :arg_scid AND u_request_wfjgmx.mtrlid = u_mtrldef.mtrlid Using commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty, :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode, :wfjgmx[i].printid,:wfjgmx[i].orderid, :wfjgmx[i].jgdscrp,:wfjgmx[i].iforder, :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode, :wfjgmx[i].wrkGrpid,:wfjgmx[i].sptid,:wfjgmx[i].plancode, :wfjgmx[i].unit,:wfjgmx[i].uqty,:wfjgmx[i].rate; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty, :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode, :wfjgmx[i].printid,:wfjgmx[i].orderid, :wfjgmx[i].jgdscrp,:wfjgmx[i].iforder, :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode, :wfjgmx[i].wrkGrpid,:wfjgmx[i].sptid,:wfjgmx[i].plancode, :wfjgmx[i].unit,:wfjgmx[i].uqty,:wfjgmx[i].rate; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_request_wfjgmx WHERE u_request_wfjgmx.wfjgid = :arg_wfjgid And u_request_wfjgmx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协计划收货汇总数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外协计划收货汇总" GOTO ext END IF it_mxbt = i - 1 // //用游标读取明细 DECLARE cur_inwaermxmx CURSOR FOR SELECT u_request_wfjgmxmx.mtrlid, u_request_wfjgmxmx.qty, u_request_wfjgmxmx.dscrp, u_mtrldef.mtrlcode, u_request_wfjgmxmx.printid, u_request_wfjgmxmx.orderid, u_request_wfjgmxmx.jgdscrp, u_request_wfjgmxmx.iforder, u_request_wfjgmxmx.status, u_request_wfjgmxmx.woodcode, u_request_wfjgmxmx.pcode, u_request_wfjgmxmx.wrkGrpid, u_request_wfjgmxmx.sptid, u_request_wfjgmxmx.plancode, u_request_wfjgmxmx.unit, u_request_wfjgmxmx.uqty, u_request_wfjgmxmx.rate FROM u_request_wfjgmxmx,u_mtrldef WHERE u_request_wfjgmxmx.wfjgid = :arg_wfjgid AND u_request_wfjgmxmx.scid = :arg_scid AND u_request_wfjgmxmx.mtrlid = u_mtrldef.mtrlid Using commit_transaction; OPEN cur_inwaermxmx; FETCH cur_inwaermxmx INTO :wfjgmxmx[k].mtrlid,:wfjgmxmx[k].qty, :wfjgmxmx[k].dscrp,:wfjgmxmx[k].mtrlcode, :wfjgmxmx[k].printid,:wfjgmxmx[k].orderid, :wfjgmxmx[k].jgdscrp,:wfjgmxmx[k].iforder, :wfjgmxmx[k].status,:wfjgmxmx[k].woodcode,:wfjgmxmx[k].pcode, :wfjgmxmx[k].wrkGrpid,:wfjgmxmx[k].sptid,:wfjgmxmx[k].plancode, :wfjgmxmx[k].unit,:wfjgmxmx[k].uqty,:wfjgmxmx[k].rate; DO WHILE commit_transaction.SQLCode = 0 k++ FETCH cur_inwaermxmx INTO :wfjgmxmx[k].mtrlid,:wfjgmxmx[k].qty, :wfjgmxmx[k].dscrp,:wfjgmxmx[k].mtrlcode, :wfjgmxmx[k].printid,:wfjgmxmx[k].orderid, :wfjgmxmx[k].jgdscrp,:wfjgmxmx[k].iforder, :wfjgmxmx[k].status,:wfjgmxmx[k].woodcode,:wfjgmxmx[k].pcode, :wfjgmxmx[k].wrkGrpid,:wfjgmxmx[k].sptid,:wfjgmxmx[k].plancode, :wfjgmxmx[k].unit,:wfjgmxmx[k].uqty,:wfjgmxmx[k].rate; LOOP CLOSE cur_inwaermxmx; // //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_request_wfjgmxmx WHERE u_request_wfjgmxmx.wfjgid = :arg_wfjgid And u_request_wfjgmxmx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协计划收货明细数量" GOTO ext END IF IF k <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外协计划收货明细" GOTO ext END IF it_mxbtmx = k - 1 // //用游标读取明细 DECLARE cur_inwaermx_out CURSOR FOR SELECT u_request_wfjgmx_out.mtrlid, u_request_wfjgmx_out.qty, u_mtrldef.mtrlcode, u_request_wfjgmx_out.printid, u_request_wfjgmx_out.status, u_request_wfjgmx_out.woodcode, u_request_wfjgmx_out.pcode, u_request_wfjgmx_out.unit, u_request_wfjgmx_out.uqty, u_request_wfjgmx_out.rate FROM u_request_wfjgmx_out,u_mtrldef WHERE u_request_wfjgmx_out.wfjgid = :arg_wfjgid AND u_request_wfjgmx_out.scid = :arg_scid AND u_request_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].mtrlcode, :wfjgmx_out[j].printid, :wfjgmx_out[j].status,:wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].unit,:wfjgmx_out[j].uqty,:wfjgmx_out[j].rate; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid,:wfjgmx_out[j].qty, :wfjgmx_out[j].mtrlcode, :wfjgmx_out[j].printid, :wfjgmx_out[j].status,:wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].unit,:wfjgmx_out[j].uqty,:wfjgmx_out[j].rate; LOOP CLOSE cur_inwaermx_out; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_request_wfjgmx_out WHERE u_request_wfjgmx_out.wfjgid = :arg_wfjgid And u_request_wfjgmx_out.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协计划发出明细数量" 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 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_request_wfjg SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_request_wfjg.wfjgid = :arg_wfjgid AND u_request_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() Return (rslt) end function public function integer checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, 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 lde_uqty,lde_consignedqty String ls_mtrlcode SELECT u_request_wfjgmx.uQty, u_request_wfjgmx.consignedqty, u_mtrldef.mtrlcode INTO :lde_uqty, :lde_consignedqty, :ls_mtrlcode FROM u_request_wfjgmx ,u_mtrldef WHERE ( u_request_wfjgmx.scid = :arg_scid ) AND ( u_request_wfjgmx.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgmx.MtrlID = :arg_mtrlid ) AND ( u_mtrldef.MtrlID = u_request_wfjgmx.MtrlID ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外协申请单已安排数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF lde_uqty < lde_consignedqty + arg_addqty THEN rslt = 0 ARG_MSG = "物料["+ls_mtrlcode+"]的外协申请单未安排数量只有"+String(lde_uqty - lde_consignedqty,'#,##0.0#')+",不能安排"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ext: p_reset() 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_request_wfjg SET status = :arg_finishtype, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_request_wfjg.wfjgid = :arg_wfjgid ) And ( u_request_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_request_wfjg SET status = :arg_finishtype, accomplishdate = :null_dt, finishemp = '' WHERE ( u_request_wfjg.wfjgid = :arg_wfjgid ) And ( u_request_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() 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 f_aps_mrp_cklock(arg_scid,ARG_MSG) = 0 THEN rslt = 0 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_request_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_request_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 And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg);Int rslt = 1 Long 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 ifauto = 1 THEN rslt = 0 ARG_MSG = '单据为动建立的单据,不可以修改' 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() RETURN rslt end function public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, 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 lde_uqty,lde_consignedqty String ls_mtrlcode SELECT u_request_wfjgMx_out.Qty, u_request_wfjgMx_out.consignedqty, u_mtrldef.mtrlcode INTO :lde_uqty, :lde_consignedqty, :ls_mtrlcode FROM u_request_wfjgMx_out ,u_mtrldef WHERE ( u_request_wfjgMx_out.scid = :arg_scid ) AND ( u_request_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx_out.MtrlID = :arg_mtrlid ) AND ( u_mtrldef.MtrlID = u_request_wfjgMx_out.MtrlID ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外协申请单发出已安排数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF lde_uqty < lde_consignedqty + arg_addqty THEN rslt = 0 ARG_MSG = "物料["+ls_mtrlcode+"]的外协申请单发出未安排数量只有"+String(lde_uqty - lde_consignedqty,'#,##0.0#')+",不能安排"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ext: p_reset() Return (rslt) end function public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//arg_addqty 必须为外协单位 Int rslt = 1 Long 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 arg_msg = "外协申请单只有在进行或完成状态下才可以执行操作" GOTO ext END IF Decimal lde_uqty,lde_consignedqty,ld_sum_consignedqty String ls_mtrlcode Long ll_orderid,ll_wrkGrpid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode SELECT u_mtrldef.mtrlcode, u_request_wfjgMx.orderid, u_request_wfjgMx.wrkGrpid, u_request_wfjgMx.mtrlid, u_request_wfjgMx.status, u_request_wfjgMx.woodcode, u_request_wfjgMx.pcode, u_request_wfjgMx.uqty, u_request_wfjgMx.consignedqty INTO :ls_mtrlcode, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :lde_uqty, :lde_consignedqty FROM u_mtrldef,u_request_wfjgMx WHERE u_mtrldef.mtrlid = u_request_wfjgMx.mtrlid AND u_request_wfjgMx.scid = :arg_scid AND u_request_wfjgMx.wfjgid = :arg_wfjgid AND u_request_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询外协申请单明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF lde_uqty < lde_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "外协申请物料:"+ls_mtrlcode+",的未安排数量只有"+String(lde_uqty - lde_consignedqty,'#,##0.0###')+",不能安排"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_request_wfjgMx SET consignedqty = consignedqty + :arg_addqty WHERE ( u_request_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx.printid = :arg_printid ) AND ( u_request_wfjgMx.scid = :arg_scid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协申请单已安排数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//好像没用的?? //arg_addqty 必须为外协单位 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 Decimal lde_uqty,lde_consignedqty String ls_mtrlcode SELECT mtrlcode INTO :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 SELECT u_request_wfjgMx_out.uqty, u_request_wfjgMx_out.consignedqty INTO :lde_uqty, :lde_consignedqty FROM u_request_wfjgMx_out WHERE ( u_request_wfjgMx_out.scid = :arg_scid ) AND ( u_request_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx_out.printid = :arg_printid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询外协申请发出物料编码["+ls_mtrlcode+"]已安排数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF lde_uqty < lde_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "外协申请发出物料["+ls_mtrlcode+"]的未安排数量只有"+String(lde_uqty - lde_consignedqty,'#,##0.0###')+",不能安排"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_request_wfjgMx_out SET consignedqty = consignedqty + :arg_addqty WHERE ( u_request_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx_out.scid = :arg_scid ) AND ( u_request_wfjgMx_out.printid = :arg_printid ) 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 and rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer trycmplwfjg (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_request_wfjgMx.uqty - u_request_wfjgmx.consignedqty - u_request_wfjgmx.stopqty FROM u_request_wfjgmx WHERE ( u_request_wfjgmx.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgmx.scid = :arg_scid ) and ( u_request_wfjgmx.stopflag = 0) 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_request_wfjg SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_request_wfjg.wfjgid = :arg_wfjgid ) And ( u_request_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_request_wfjg SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_request_wfjg.wfjgid = :arg_wfjgid ) And ( u_request_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 AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer audit_2 (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Long cnt = 0 Long ll_i IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_order_ml uo_order uo_order = Create uo_order_ml 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 <> 4 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 UPDATE u_request_wfjg SET secauditrep = :arg_emp, secauditdate = getdate(), Status = 1 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid And Status = 4 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协计划最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF Int li_ordertype_order,li_ifwfjgorder Long ll_mtrlid_order FOR ll_i = 1 To it_mxbtmx IF wfjgmxmx[ll_i].orderid > 0 THEN IF uo_order.f_add_rqbuyqty(scid,wfjgmxmx[ll_i].orderid,wfjgmxmx[ll_i].wrkGrpid,3,& wfjgmxmx[ll_i].mtrlid,wfjgmxmx[ll_i].mtrlcode,wfjgmxmx[ll_i].Status,& wfjgmxmx[ll_i].woodcode,wfjgmxmx[ll_i].pcode,wfjgmxmx[ll_i].qty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF SELECT ordertype,mtrlid,ifwforder INTO :li_ordertype_order,:ll_mtrlid_order,:li_ifwfjgorder FROM u_order_ml WHERE u_order_ml.scid = :scid AND u_order_ml.orderid = :wfjgmxmx[ll_i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询明细:'+String(wfjgmxmx[ll_i].printid)+',相关生产计划类型失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新外协主生产计划已申请数 If (li_ordertype_order = 3 Or li_ifwfjgorder = 1) And ll_mtrlid_order = wfjgmxmx[ll_i].mtrlid THEN IF uo_order.addmxcmpl_rqacmpqty(arg_scid,wfjgmxmx[ll_i].orderid,wfjgmxmx[ll_i].qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF NEXT IF uof_update_wfjg_flag(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_order Return (rslt) end function public function integer audit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag long cnt IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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 //更新审核标记 UPDATE u_request_wfjg SET auditrep = :arg_emp, auditdate = getdate(), status = 4 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid AND status = 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 caudit (long arg_scid, long arg_wfjgid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto Long cnt DateTime null_dt SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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 ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF arg_ifcheck_auto = 1 THEN IF ifauto = 1 THEN rslt = 0 ARG_MSG = '单据为动建立的单据,不可以撤审' GOTO ext END IF END IF if status <> 4 then arg_msg = '单据不是在初审状态,不可以撤审' rslt = 0 goto ext end if //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_buytaskmx // WHERE scid = :arg_scid // AND requestbuyid = :arg_wfjgid; //IF sqlca.SQLCode <> 0 THEN // ARG_MSG = '查询申购单是否已开订单失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF // //IF cnt > 0 THEN // ARG_MSG = '申购单已开订单,不能撤审' // rslt = 0 // GOTO ext //END IF //更新审核标记 UPDATE u_request_wfjg SET auditrep = '', auditdate = :null_dt, status = 0 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid AND status = 4; 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 cancel (long arg_scid, long arg_wfjgid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单 //0 FAIL, 1 SUCCESS Int rslt = 1 Long ll_orderid_arr[] Long cnt,ll_i cnt = 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 arg_ifcheck_auto = 1 THEN IF ifauto = 1 THEN rslt = 0 ARG_MSG = '单据为动建立的单据,不可以删除' GOTO ext END IF END IF IF Status <> 0 THEN rslt = 0 ARG_MSG = "外协申请单已经审核,不可以删除" GOTO ext END IF DECLARE cur_mx CURSOR FOR SELECT u_request_wfjgmxmx.orderid FROM u_request_wfjgmxmx WHERE u_request_wfjgmxmx.scid = :arg_scid And u_request_wfjgmxmx.wfjgid = :arg_wfjgid and u_request_wfjgmxmx.orderid > 0 Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ll_orderid_arr[cnt]; DO WHILE commit_transaction.SQLCode = 0 cnt++ FETCH cur_mx Into :ll_orderid_arr[cnt]; LOOP CLOSE cur_mx; cnt = cnt - 1 DELETE FROM u_request_wfjgMx WHERE u_request_wfjgMx.wfjgid = :arg_wfjgid And u_request_wfjgMx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协申请单收货汇总明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF DELETE FROM u_request_wfjgMxmx WHERE u_request_wfjgMxmx.wfjgid = :arg_wfjgid And u_request_wfjgmxmx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协申请单收货明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF DELETE FROM u_request_wfjgMx_out WHERE u_request_wfjgMx_out.wfjgid = :arg_wfjgid And u_request_wfjgMx_out.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协申请单发出明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF DELETE FROM u_request_wfjg WHERE u_request_wfjg.wfjgid = :arg_wfjgid And u_request_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 FOR ll_i = 1 To cnt UPDATE u_order_ml SET u_Order_ml.wfjg_flag = isnull(uv_order_request_wfjg_flag.flag, 0) FROM u_Order_ml LEFT OUTER JOIN uv_order_request_wfjg_flag ON u_Order_ml.scid = uv_order_request_wfjg_flag.scid AND u_Order_ml.OrderID = uv_order_request_wfjg_flag.OrderID WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :ll_orderid_arr[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新相关生产计划外协申请单状态失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF ext: p_reset() Return (rslt) end function public function integer caudit_2 (long arg_scid, long arg_wfjgid, any arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Long ll_i DateTime nulldate SetNull(nulldate) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_order_ml uo_order uo_order = Create uo_order_ml IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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 ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF arg_ifcheck_auto = 1 THEN IF ifauto = 1 THEN rslt = 0 arg_msg = '单据为自动建立的单据,不可以撤审' GOTO ext END IF END IF IF Status <> 1 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.relwfjgid = :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 UPDATE u_request_wfjg SET Status = 4, secauditrep = '', secauditdate = :nulldate WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid And Status = 1 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致外协申请单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF Int li_ordertype_order, li_ifwfjgorder Long ll_mtrlid_order FOR ll_i = 1 To it_mxbtmx IF wfjgmxmx[ll_i].orderid > 0 THEN IF uo_order.f_add_rqbuyqty(scid,wfjgmxmx[ll_i].orderid,wfjgmxmx[ll_i].wrkGrpid,3,& wfjgmxmx[ll_i].mtrlid,wfjgmxmx[ll_i].mtrlcode,& wfjgmxmx[ll_i].Status,wfjgmxmx[ll_i].woodcode,& wfjgmxmx[ll_i].pcode,0 - wfjgmxmx[ll_i].qty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF SELECT ordertype,mtrlid,ifwforder INTO :li_ordertype_order,:ll_mtrlid_order,:li_ifwfjgorder FROM u_order_ml WHERE u_order_ml.scid = :scid AND u_order_ml.orderid = :wfjgmxmx[ll_i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询明细:'+String(wfjgmxmx[ll_i].printid)+',相关生产计划类型失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新外协主生产计划已申请数 If (li_ordertype_order = 3 Or li_ifwfjgorder = 1) And ll_mtrlid_order = wfjgmxmx[ll_i].mtrlid THEN IF uo_order.addmxcmpl_rqacmpqty(arg_scid,wfjgmxmx[ll_i].orderid,0 - wfjgmxmx[ll_i].qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF NEXT IF uof_update_wfjg_flag(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_order p_reset() Return (rslt) end function public function integer audit_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype Long ll_sptid Long ll_flagmx 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 SELECT sptid,flag INTO :ll_sptid,:ll_flagmx FROM u_request_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询明细供应商内容失败'+sqlca.SQLErrText GOTO ext END IF IF ll_flagmx = 1 THEN rslt = 0 ARG_MSG = '只在在待供应商审核的状态下才能执行供应商审核' GOTO ext END IF IF ll_sptid = 0 THEN rslt = 0 ARG_MSG = '没有指定供应商,不能执行明细审核' GOTO ext END IF //更新审核标记 UPDATE u_request_wfjgMx SET auditrep = :arg_opemp, auditdate = getdate(), flag = 1 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid AND printid = :arg_printid 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 caudit_mx (long arg_scid, long arg_wfjgid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype Long cnt DateTime null_dt SetNull(null_dt) IF arg_wfjgid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF SELECT flag INTO :li_flag FROM u_request_wfjgMx WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询外协申请单明细审核状态失败'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 0 THEN rslt = 0 ARG_MSG = '外协申请单明细只有在已审核状态下才能执行撤审' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_order_wfjgmx WHERE scid = :arg_scid AND relwfjgid = :arg_wfjgid AND relprintid = :arg_printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询外协申请单明细是否已开订单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN ARG_MSG = '该外协申请单明细已开订单,不能执行明细撤审' rslt = 0 GOTO ext END IF //更新审核标记 UPDATE u_request_wfjgMx SET auditrep = '', auditdate = :null_dt, flag = 0 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid AND printid = :arg_printid AND flag = 1; 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 stopmx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_stopflag String ls_outtype DateTime null_dt Decimal ld_notconsignedqty Int ll_flag,ll_billtype SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 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 arg_msg = '外协申请单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag INTO :li_stopflag FROM u_request_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_stopflag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF li_stopflag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT u_request_wfjgMx.uQty - u_request_wfjgMx.consignedqty INTO :ld_notconsignedqty FROM u_request_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成订货,不能中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_request_wfjgMx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '' WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid; ELSE UPDATE u_request_wfjgMx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF trycmplwfjg(arg_scid,arg_wfjgid,arg_msg,FALSE) = 0 THEN 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 acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_wrkgrpid, string arg_pfcode, string arg_plancode, string arg_unit, decimal arg_uqty, decimal arg_rate);s_order_wfjgmx s_mx s_mx.iforder = arg_iforder s_mx.orderid = arg_orderid s_mx.ordercode = arg_ordercode s_mx.mtrlid = arg_mtrlid s_mx.qty = arg_qty s_mx.dscrp = arg_dscrp s_mx.mtrlcode = arg_mtrlcode s_mx.printid = arg_printid s_mx.requiredate = arg_requiredate s_mx.jgdscrp = arg_jgdscrp s_mx.status = arg_status s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.wrkgrpid = arg_wrkgrpid s_mx.pfcode = arg_pfcode s_mx.plancode = arg_plancode s_mx.unit = arg_unit s_mx.uqty = arg_uqty s_mx.rate = arg_rate s_mx.sonmtrlid = 0 return acceptmx(s_mx, arg_msg) /* Int rslt = 1 Long cnt = 0,ls_i,ll_j Int li_mtrlkind Long ll_sptmode,ll_sptid,ll_defsptid String ls_unit If it_newbegin = False And it_updatebegin = False Then rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" Goto ext End If If uo_option_requestwfjg_hz = -1000 Then arg_msg = '选项:[121]外协申请单汇总外协,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_wfjg_checkdate = -1000 Then arg_msg = '选项:[312]外协申请单保存不检查交货日期,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If //清除空值 If IsNull(arg_iforder) Then arg_iforder = 0 If IsNull(arg_orderid) Then arg_orderid = 0 If IsNull(arg_ordercode) Then arg_ordercode = '' If IsNull(arg_mtrlid) Then arg_mtrlid = 0 If IsNull(arg_qty) Then arg_qty = 0 If IsNull(arg_pfcode) Then arg_pfcode = '' 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_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_requiredate) Then arg_requiredate = DateTime(Date('1900-01-01'),Time(0)) If IsNull(arg_uqty) Then arg_uqty = 0 If IsNull(arg_unit) Then arg_unit = '' If IsNull(arg_rate) Then arg_rate = 1 If arg_mtrlid = 0 Or (arg_qty = 0 and arg_uqty = 0) Then rslt = 1 Goto ext End If Select mtrlkind,sptmode,dftsptid,unit Into :li_mtrlkind,:ll_sptmode,:ll_sptid,:ls_unit From u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "查询物料:"+arg_mtrlcode+',MRP属性失败,'+commit_transaction.SQLErrText Goto ext End If //处理默认供应商 If ll_sptmode = 0 Then //无默认供应商 ll_defsptid = 0 ElseIf ll_sptmode = 1 Then //按主供应商 ll_defsptid = ll_sptid Else //自动带最低价供应商 Select TOP 1 sptid Into :ll_sptid From u_spt_price Where (mtrlid = :arg_mtrlid) And (status = :arg_status) And (unit = :ls_unit) Order By fprice; If sqlca.SQLCode <> 0 Then ll_sptid = 0 End If ll_defsptid = ll_sptid End If If uo_option_wfjg_checkdate = 0 Then If ifauto = 0 Then If arg_requiredate <> DateTime(Date('1900-01-01'),Time(0)) Then If Requiredate > arg_requiredate Then arg_msg = '交货日期不能在订货日期前' rslt = 0 Goto ext End If End If End If End If If arg_iforder = 1 Then If li_mtrlkind = 1 Then arg_msg = '物料:'+arg_mtrlcode+',MRP属性设为不按计划,所以不能选择计划' rslt = 0 Goto ext End If If arg_orderid = 0 Then arg_msg = '请先择相应的计划' rslt = 0 Goto ext End If End If For ls_i = 1 To it_mxbtmx //合并重复项 If wfjgmxmx[ls_i].mtrlid = arg_mtrlid And & wfjgmxmx[ls_i].orderid = arg_orderid And & wfjgmxmx[ls_i].status = arg_status And & wfjgmxmx[ls_i].woodcode = arg_woodcode And & wfjgmxmx[ls_i].Requiredate = arg_requiredate And & wfjgmxmx[ls_i].wrkGrpid = arg_wrkGrpid And & wfjgmxmx[ls_i].pcode = arg_pcode And & wfjgmxmx[ls_i].pfcode = arg_pfcode Then wfjgmxmx[ls_i].qty = wfjgmxmx[ls_i].qty+arg_qty wfjgmxmx[ls_i].uqty = wfjgmxmx[ls_i].uqty+arg_uqty rslt = 1 Goto _next End If Next //写入内容 it_mxbtmx++ wfjgmxmx[it_mxbtmx].iforder = arg_iforder wfjgmxmx[it_mxbtmx].orderid = arg_orderid wfjgmxmx[it_mxbtmx].ordercode = arg_ordercode wfjgmxmx[it_mxbtmx].mtrlid = arg_mtrlid wfjgmxmx[it_mxbtmx].qty = arg_qty wfjgmxmx[it_mxbtmx].dscrp = arg_dscrp wfjgmxmx[it_mxbtmx].mtrlcode = arg_mtrlcode wfjgmxmx[it_mxbtmx].printid = arg_printid wfjgmxmx[it_mxbtmx].Requiredate = arg_requiredate wfjgmxmx[it_mxbtmx].jgdscrp = arg_jgdscrp wfjgmxmx[it_mxbtmx].status = arg_status wfjgmxmx[it_mxbtmx].woodcode = arg_woodcode wfjgmxmx[it_mxbtmx].pcode = arg_pcode wfjgmxmx[it_mxbtmx].wrkGrpid = arg_wrkGrpid wfjgmxmx[it_mxbtmx].pfcode = arg_pfcode wfjgmxmx[it_mxbtmx].sptid = ll_defsptid wfjgmxmx[it_mxbtmx].plancode = arg_plancode wfjgmxmx[it_mxbtmx].unit = arg_unit wfjgmxmx[it_mxbtmx].uqty = arg_uqty wfjgmxmx[it_mxbtmx].rate = arg_rate _next: If uo_option_requestwfjg_hz = 1 Then For ll_j = 1 To it_mxbt If wfjgmx[ll_j].mtrlid = arg_mtrlid And & wfjgmx[ll_j].status = arg_status And & wfjgmx[ll_j].woodcode = arg_woodcode And & Date(wfjgmx[ll_j].Requiredate) = Date(arg_requiredate) And & wfjgmx[ll_j].unit = arg_unit and & wfjgmx[ll_j].pcode = arg_pcode And & wfjgmx[ll_j].pfcode = arg_pfcode And & wfjgmx[ll_j].plancode = arg_plancode Then wfjgmx[ll_j].qty = wfjgmx[ll_j].qty+arg_qty wfjgmx[ll_j].uqty = wfjgmx[ll_j].uqty+arg_uqty wfjgmx[ll_j].iforder = 0 wfjgmx[ll_j].ordercode = '' wfjgmx[ll_j].orderid = 0 wfjgmx[ll_j].wrkGrpid = 0 rslt = 1 Goto ext End If Next End If it_mxbt++ wfjgmx[it_mxbt].iforder = arg_iforder wfjgmx[it_mxbt].orderid = arg_orderid wfjgmx[it_mxbt].ordercode = arg_ordercode wfjgmx[it_mxbt].mtrlid = arg_mtrlid wfjgmx[it_mxbt].qty = arg_qty wfjgmx[it_mxbt].dscrp = arg_dscrp wfjgmx[it_mxbt].mtrlcode = arg_mtrlcode wfjgmx[it_mxbt].printid = arg_printid wfjgmx[it_mxbt].Requiredate = arg_requiredate wfjgmx[it_mxbt].jgdscrp = arg_jgdscrp wfjgmx[it_mxbt].status = arg_status wfjgmx[it_mxbt].woodcode = arg_woodcode wfjgmx[it_mxbt].pcode = arg_pcode wfjgmx[it_mxbt].wrkGrpid = arg_wrkGrpid wfjgmx[it_mxbt].pfcode = arg_pfcode wfjgmx[it_mxbt].sptid = ll_defsptid wfjgmx[it_mxbt].plancode = arg_plancode wfjgmx[it_mxbt].unit = arg_unit wfjgmx[it_mxbt].uqty = arg_uqty wfjgmx[it_mxbt].rate = arg_rate ext: If rslt = 0 Then p_clearmx() Return(rslt) */ end function public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, ref string arg_msg, long arg_printid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_uqty, decimal arg_rate);s_order_wfjgmx_out s_mx s_mx.mtrlid = arg_mtrlid s_mx.qty = arg_qty s_mx.mtrlcode = arg_mtrlcode s_mx.printid = arg_printid s_mx.status = arg_status s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.unit = arg_unit s_mx.uqty = arg_uqty s_mx.rate = arg_rate return acceptmx_out(s_mx, arg_msg) /* //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_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_printid) THEN arg_printid = 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_uqty) Then arg_uqty = 0 If IsNull(arg_unit) Then arg_unit = '' If IsNull(arg_rate) Then arg_rate = 1 IF arg_mtrlid = 0 OR (arg_qty = 0 and arg_uqty = 0) THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 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 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 wfjgmx_out[ls_i].uqty = wfjgmx_out[ls_i].uqty+arg_uqty 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].mtrlcode = arg_mtrlcode wfjgmx_out[it_mxbt_out].printid = arg_printid 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].unit = arg_unit wfjgmx_out[it_mxbt_out].uqty = arg_uqty wfjgmx_out[it_mxbt_out].rate = arg_rate ext: IF rslt = 0 THEN p_clearmx() Return(rslt) */ end function public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjgid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Decimal lde_uqty,lde_consignedqty //IF arg_wfjgid <= 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_wfjgid AND // u_order_wfjgmx.printid = :arg_printid 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.uqty, // u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty // INTO :lde_uqty, // :lde_consignedqty // FROM u_order_wfjgMx // WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND // ( u_order_wfjgMx.scid = :arg_scid ) AND // ( u_order_wfjgMx.printid = :arg_printid ) USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // ARG_MSG = "因网络或错误物料编码["+arg_mtrlcode+"]导致查询外加工计划已完成数量操作失败"+"~n"+commit_transaction.SQLErrText // GOTO ext //END IF // //IF lde_uqty < lde_consignedqty + arg_wasteqty THEN // rslt = 0 // ARG_MSG = "物料["+arg_mtrlcode+"]的未完成数量只有"+String(lde_uqty - lde_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_wfjgid 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 // // //ext: //IF rslt = 0 THEN // ROLLBACK USING commit_transaction; //ELSEIF arg_ifcommit and rslt = 1 THEN // COMMIT USING commit_transaction; //END IF Return (rslt) end function public function integer stopbuytask (long arg_scid, long arg_wfjgid, string arg_stopreason, 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 f_aps_mrp_cklock(arg_scid,ARG_MSG) = 0 THEN rslt = 0 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 arg_stopreason = Trim(arg_stopreason) IF arg_stopreason = '' THEN rslt = 0 ARG_MSG = "请输入终止原因" GOTO ext END IF UPDATE u_request_wfjg SET Status = 3, accomplishdate = getdate(), stopemp = :publ_operator, stopreason = :arg_stopreason 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() Return (rslt) end function public function integer stopqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit); Int rslt = 1 Int li_flag, li_billtype DateTime null_dt Decimal ld_notconsignedqty, lde_stopqty DateTime server_datetime String ls_stopemp SELECT Top 1 getdate() Into :server_datetime From u_user Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF IsNull(arg_stopqty) THEN arg_stopqty = 0 IF arg_stopqty < 0 THEN arg_msg = '订单终止数不能少于0,请检查' rslt = 0 GOTO ext END IF IF arg_stopqty = 0 THEN SetNull(server_datetime) ls_stopemp = '' ELSE ls_stopemp = publ_operator END IF SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 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 arg_msg = '外协申请单只能在进行状态或自动完成状态才能操作' rslt = 0 GOTO ext END IF SELECT uQty - consignedqty, stopqty INTO :ld_notconsignedqty, :lde_stopqty FROM u_request_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using sqlca ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_stopqty > ld_notconsignedqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未订货数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF UPDATE u_request_wfjgMx SET stopqty = :arg_stopqty, stopemp = :ls_stopemp, stopdate = :server_datetime, stopreason = :arg_stopreason WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using sqlca ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF trycmplwfjg(arg_scid,arg_wfjgid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca ; ELSEIF rslt = 1 And arg_commit THEN COMMIT Using sqlca ; END IF RETURN rslt end function public function integer uof_update_wfjg_flag (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_Order_ml SET u_Order_ml.wfjg_flag = isnull(uv_order_request_wfjg_flag.flag,0) FROM u_request_wfjgmxmx INNER JOIN uv_order_request_wfjg_flag ON u_request_wfjgmxmx.scid = uv_order_request_wfjg_flag.scid AND u_request_wfjgmxmx.orderid = uv_order_request_wfjg_flag.OrderID INNER JOIN u_Order_ml ON uv_order_request_wfjg_flag.scid = u_Order_ml.scid AND uv_order_request_wfjg_flag.OrderID = u_Order_ml.OrderID WHERE u_request_wfjgmxmx.scid = :arg_scid And u_request_wfjgmxmx.wfjgid = :arg_wfjgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关生产计划外协申请单状态失败,'+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer acceptmx (s_order_wfjgmx s_mx, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i,ll_j Int li_mtrlkind Long ll_sptmode,ll_sptid,ll_defsptid String ls_unit If it_newbegin = False And it_updatebegin = False Then rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" Goto ext End If If uo_option_requestwfjg_hz = -1000 Then arg_msg = '选项:[121]外协申请单汇总外协,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_wfjg_checkdate = -1000 Then arg_msg = '选项:[312]外协申请单保存不检查交货日期,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If //清除空值 If IsNull(s_mx.iforder) Then s_mx.iforder = 0 If IsNull(s_mx.orderid) Then s_mx.orderid = 0 If IsNull(s_mx.ordercode) Then s_mx.ordercode = '' If IsNull(s_mx.mtrlid) Then s_mx.mtrlid = 0 If IsNull(s_mx.qty) Then s_mx.qty = 0 If IsNull(s_mx.pfcode) Then s_mx.pfcode = '' If IsNull(s_mx.dscrp) Then s_mx.dscrp = '' If IsNull(s_mx.mtrlcode) Then s_mx.mtrlcode = '' If IsNull(s_mx.printid) Then s_mx.printid = 0 If IsNull(s_mx.jgdscrp) Then s_mx.jgdscrp = '' If IsNull(s_mx.status) Then s_mx.status = '' If IsNull(s_mx.woodcode) Then s_mx.woodcode = '' If IsNull(s_mx.pcode) Then s_mx.pcode = '' If IsNull(s_mx.requiredate) Then s_mx.requiredate = DateTime(Date('1900-01-01'),Time(0)) If IsNull(s_mx.uqty) Then s_mx.uqty = 0 If IsNull(s_mx.unit) Then s_mx.unit = '' If IsNull(s_mx.rate) Then s_mx.rate = 1 If IsNull(s_mx.sonmtrlid) Then s_mx.sonmtrlid = 0 If s_mx.mtrlid = 0 Or (s_mx.qty = 0 and s_mx.uqty = 0) Then rslt = 1 Goto ext End If Select mtrlkind,sptmode,dftsptid,unit Into :li_mtrlkind,:ll_sptmode,:ll_sptid,:ls_unit From u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "查询物料:"+s_mx.mtrlcode+',MRP属性失败,'+commit_transaction.SQLErrText Goto ext End If //处理默认供应商 If ll_sptmode = 0 Then //无默认供应商 ll_defsptid = 0 ElseIf ll_sptmode = 1 Then //按主供应商 ll_defsptid = ll_sptid Else //自动带最低价供应商 Select TOP 1 sptid Into :ll_sptid From u_spt_price Where (mtrlid = :s_mx.mtrlid) And (status = :s_mx.status) And (unit = :ls_unit) Order By fprice; If sqlca.SQLCode <> 0 Then ll_sptid = 0 End If ll_defsptid = ll_sptid End If If uo_option_wfjg_checkdate = 0 Then If ifauto = 0 Then If s_mx.requiredate <> DateTime(Date('1900-01-01'),Time(0)) Then If Requiredate > s_mx.requiredate Then arg_msg = '交货日期不能在订货日期前' rslt = 0 Goto ext End If End If End If End If If s_mx.iforder = 1 Then If li_mtrlkind = 1 Then arg_msg = '物料:'+s_mx.mtrlcode+',MRP属性设为不按计划,所以不能选择计划' rslt = 0 Goto ext End If If s_mx.orderid = 0 Then arg_msg = '请先择相应的计划' rslt = 0 Goto ext End If End If For ls_i = 1 To it_mxbtmx //合并重复项 If wfjgmxmx[ls_i].mtrlid = s_mx.mtrlid And & wfjgmxmx[ls_i].orderid = s_mx.orderid And & wfjgmxmx[ls_i].status = s_mx.status And & wfjgmxmx[ls_i].woodcode = s_mx.woodcode And & wfjgmxmx[ls_i].Requiredate = s_mx.requiredate And & wfjgmxmx[ls_i].wrkGrpid = s_mx.wrkGrpid And & wfjgmxmx[ls_i].pcode = s_mx.pcode And & wfjgmxmx[ls_i].pfcode = s_mx.pfcode Then wfjgmxmx[ls_i].qty = wfjgmxmx[ls_i].qty+s_mx.qty wfjgmxmx[ls_i].uqty = wfjgmxmx[ls_i].uqty+s_mx.uqty rslt = 1 Goto _next End If Next //写入内容 it_mxbtmx++ wfjgmxmx[it_mxbtmx].iforder = s_mx.iforder wfjgmxmx[it_mxbtmx].orderid = s_mx.orderid wfjgmxmx[it_mxbtmx].ordercode = s_mx.ordercode wfjgmxmx[it_mxbtmx].mtrlid = s_mx.mtrlid wfjgmxmx[it_mxbtmx].qty = s_mx.qty wfjgmxmx[it_mxbtmx].dscrp = s_mx.dscrp wfjgmxmx[it_mxbtmx].mtrlcode = s_mx.mtrlcode wfjgmxmx[it_mxbtmx].printid = s_mx.printid wfjgmxmx[it_mxbtmx].Requiredate = s_mx.requiredate wfjgmxmx[it_mxbtmx].jgdscrp = s_mx.jgdscrp wfjgmxmx[it_mxbtmx].status = s_mx.status wfjgmxmx[it_mxbtmx].woodcode = s_mx.woodcode wfjgmxmx[it_mxbtmx].pcode = s_mx.pcode wfjgmxmx[it_mxbtmx].wrkGrpid = s_mx.wrkGrpid wfjgmxmx[it_mxbtmx].pfcode = s_mx.pfcode wfjgmxmx[it_mxbtmx].sptid = ll_defsptid wfjgmxmx[it_mxbtmx].plancode = s_mx.plancode wfjgmxmx[it_mxbtmx].unit = s_mx.unit wfjgmxmx[it_mxbtmx].uqty = s_mx.uqty wfjgmxmx[it_mxbtmx].rate = s_mx.rate wfjgmxmx[it_mxbtmx].sonmtrlid = s_mx.sonmtrlid _next: If uo_option_requestwfjg_hz = 1 Then For ll_j = 1 To it_mxbt If wfjgmx[ll_j].mtrlid = s_mx.mtrlid And & wfjgmx[ll_j].status = s_mx.status And & wfjgmx[ll_j].woodcode = s_mx.woodcode And & Date(wfjgmx[ll_j].Requiredate) = Date(s_mx.requiredate) And & wfjgmx[ll_j].unit = s_mx.unit and & wfjgmx[ll_j].pcode = s_mx.pcode And & wfjgmx[ll_j].pfcode = s_mx.pfcode And & wfjgmx[ll_j].plancode = s_mx.plancode Then wfjgmx[ll_j].qty = wfjgmx[ll_j].qty+s_mx.qty wfjgmx[ll_j].uqty = wfjgmx[ll_j].uqty+s_mx.uqty wfjgmx[ll_j].iforder = 0 wfjgmx[ll_j].ordercode = '' wfjgmx[ll_j].orderid = 0 wfjgmx[ll_j].wrkGrpid = 0 rslt = 1 Goto ext End If Next End If it_mxbt++ wfjgmx[it_mxbt].iforder = s_mx.iforder wfjgmx[it_mxbt].orderid = s_mx.orderid wfjgmx[it_mxbt].ordercode = s_mx.ordercode wfjgmx[it_mxbt].mtrlid = s_mx.mtrlid wfjgmx[it_mxbt].qty = s_mx.qty wfjgmx[it_mxbt].dscrp = s_mx.dscrp wfjgmx[it_mxbt].mtrlcode = s_mx.mtrlcode wfjgmx[it_mxbt].printid = s_mx.printid wfjgmx[it_mxbt].Requiredate = s_mx.requiredate wfjgmx[it_mxbt].jgdscrp = s_mx.jgdscrp wfjgmx[it_mxbt].status = s_mx.status wfjgmx[it_mxbt].woodcode = s_mx.woodcode wfjgmx[it_mxbt].pcode = s_mx.pcode wfjgmx[it_mxbt].wrkGrpid = s_mx.wrkGrpid wfjgmx[it_mxbt].pfcode = s_mx.pfcode wfjgmx[it_mxbt].sptid = ll_defsptid wfjgmx[it_mxbt].plancode = s_mx.plancode wfjgmx[it_mxbt].unit = s_mx.unit wfjgmx[it_mxbt].uqty = s_mx.uqty wfjgmx[it_mxbt].rate = s_mx.rate wfjgmx[it_mxbt].sonmtrlid = s_mx.sonmtrlid ext: If rslt = 0 Then p_clearmx() Return(rslt) end function public function integer acceptmx_out (s_order_wfjgmx_out s_mx, ref string arg_msg);//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(s_mx.mtrlid) THEN s_mx.mtrlid = 0 IF IsNull(s_mx.qty) THEN s_mx.qty = 0 IF IsNull(s_mx.mtrlcode) THEN s_mx.mtrlcode = '' IF IsNull(s_mx.printid) THEN s_mx.printid = 0 IF IsNull(s_mx.status) THEN s_mx.status = '' IF IsNull(s_mx.woodcode) THEN s_mx.woodcode = '' IF IsNull(s_mx.pcode) THEN s_mx.pcode = '' If IsNull(s_mx.uqty) Then s_mx.uqty = 0 If IsNull(s_mx.unit) Then s_mx.unit = '' If IsNull(s_mx.rate) Then s_mx.rate = 1 IF s_mx.mtrlid = 0 OR (s_mx.qty = 0 and s_mx.uqty = 0) THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF //检查物料id SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的产品编号: "+String(s_mx.mtrlcode) GOTO ext END IF FOR ls_i = 1 TO it_mxbt_out //合并重复项 IF wfjgmx_out[ls_i].mtrlid = s_mx.mtrlid AND & wfjgmx_out[ls_i].status = s_mx.status AND & wfjgmx_out[ls_i].woodcode = s_mx.woodcode AND & wfjgmx_out[ls_i].pcode = s_mx.pcode THEN wfjgmx_out[ls_i].qty = wfjgmx_out[ls_i].qty+s_mx.qty wfjgmx_out[ls_i].uqty = wfjgmx_out[ls_i].uqty+s_mx.uqty rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt_out++ wfjgmx_out[it_mxbt_out].mtrlid = s_mx.mtrlid wfjgmx_out[it_mxbt_out].qty = s_mx.qty wfjgmx_out[it_mxbt_out].mtrlcode = s_mx.mtrlcode wfjgmx_out[it_mxbt_out].printid = s_mx.printid wfjgmx_out[it_mxbt_out].status = s_mx.status wfjgmx_out[it_mxbt_out].woodcode = s_mx.woodcode wfjgmx_out[it_mxbt_out].pcode = s_mx.pcode wfjgmx_out[it_mxbt_out].unit = s_mx.unit wfjgmx_out[it_mxbt_out].uqty = s_mx.uqty wfjgmx_out[it_mxbt_out].rate = s_mx.rate ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer uof_add_thqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//arg_addqty 必须为外协单位 Int rslt = 1 Long 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 arg_msg = "外协申请单只有在进行或完成状态下才可以执行操作" GOTO ext END IF Decimal lde_uqty,lde_consignedqty,ld_sum_consignedqty String ls_mtrlcode Long ll_orderid,ll_wrkGrpid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode decimal lde_thqty, lde_fgqty SELECT u_mtrldef.mtrlcode, u_request_wfjgMx.orderid, u_request_wfjgMx.wrkGrpid, u_request_wfjgMx.mtrlid, u_request_wfjgMx.status, u_request_wfjgMx.woodcode, u_request_wfjgMx.pcode, u_request_wfjgMx.uqty, u_request_wfjgMx.consignedqty, u_request_wfjgMx.thqty, u_request_wfjgMx.fgqty INTO :ls_mtrlcode, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :lde_uqty, :lde_consignedqty, :lde_thqty, :lde_fgqty FROM u_mtrldef,u_request_wfjgMx WHERE u_mtrldef.mtrlid = u_request_wfjgMx.mtrlid AND u_request_wfjgMx.scid = :arg_scid AND u_request_wfjgMx.wfjgid = :arg_wfjgid AND u_request_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询外协申请单明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF lde_consignedqty < lde_thqty + arg_addqty THEN rslt = 0 arg_msg = "外协申请物料:"+ls_mtrlcode+",的已安排数量只有"+String(lde_consignedqty - lde_thqty,'#,##0.0###')+",不能退回"+String(arg_addqty,'#,##0.0#') GOTO ext END IF IF lde_thqty + arg_addqty < lde_fgqty THEN rslt = 0 arg_msg = "外协申请物料:"+ls_mtrlcode+",的已返工数量"+String(lde_fgqty,'#,##0.0###')+",不能取消退回"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_request_wfjgMx SET thqty = thqty + :arg_addqty WHERE ( u_request_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx.printid = :arg_printid ) AND ( u_request_wfjgMx.scid = :arg_scid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协申请单已安排退回数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer uof_add_fgqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//arg_addqty 必须为外协单位 Int rslt = 1 Long 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 arg_msg = "外协申请单只有在进行或完成状态下才可以执行操作" GOTO ext END IF Decimal lde_uqty,lde_consignedqty,ld_sum_consignedqty String ls_mtrlcode Long ll_orderid,ll_wrkGrpid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode decimal lde_thqty, lde_fgqty SELECT u_mtrldef.mtrlcode, u_request_wfjgMx.orderid, u_request_wfjgMx.wrkGrpid, u_request_wfjgMx.mtrlid, u_request_wfjgMx.status, u_request_wfjgMx.woodcode, u_request_wfjgMx.pcode, u_request_wfjgMx.uqty, u_request_wfjgMx.consignedqty, u_request_wfjgMx.thqty, u_request_wfjgMx.fgqty INTO :ls_mtrlcode, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :lde_uqty, :lde_consignedqty, :lde_thqty, :lde_fgqty FROM u_mtrldef,u_request_wfjgMx WHERE u_mtrldef.mtrlid = u_request_wfjgMx.mtrlid AND u_request_wfjgMx.scid = :arg_scid AND u_request_wfjgMx.wfjgid = :arg_wfjgid AND u_request_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询外协申请单明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF lde_thqty < lde_fgqty + arg_addqty THEN rslt = 0 arg_msg = "外协申请物料:"+ls_mtrlcode+",的退回未返工数量只有"+String(lde_thqty - lde_fgqty,'#,##0.0###')+",不能返工"+String(arg_addqty,'#,##0.0#') GOTO ext END IF IF lde_fgqty + arg_addqty < 0 THEN rslt = 0 arg_msg = "外协申请物料:"+ls_mtrlcode+",的已返工数量"+String(lde_fgqty,'#,##0.0###')+",不能返工"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_request_wfjgMx SET fgqty = fgqty + :arg_addqty WHERE ( u_request_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_request_wfjgMx.printid = :arg_printid ) AND ( u_request_wfjgMx.scid = :arg_scid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协申请单已安排退回数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer uof_add_order_acmpqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);// arg_addqty > 0 审核 增加 // arg_addqty < 0 撤审 减少 Int rslt = 1 Long ll_i, ll_k Long ll_cnt_order Long ll_orderid, ll_mtrlid_order Int li_ordertype_order, li_ifwfjgorder Decimal lde_addqty uo_order_ml uo_order uo_order = Create uo_order_ml datastore ds_rqwfjg ds_rqwfjg = Create datastore ds_rqwfjg.DataObject = 'ds_order_wfjg_request_wfjg_mxmx' ds_rqwfjg.SetTransObject(sqlca) //1.通过外协申请单,找到对应的主计划, //更新外协主生产计划已进仓数 Decimal lde_addqty_allow, ld_qty Decimal lde_orderqty, lde_acmpqty, lde_stopqty, lde_unacmpqty lde_addqty = Abs(arg_addqty) ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,arg_wfjgid,arg_printid) FOR ll_k = 1 To ll_cnt_order ll_orderid = ds_rqwfjg.Object.u_request_wfjgmxmx_orderid[ll_k] IF ll_orderid = 0 THEN CONTINUE li_ordertype_order = ds_rqwfjg.Object.ordertype[ll_k] li_ifwfjgorder = ds_rqwfjg.Object.ifwforder[ll_k] ll_mtrlid_order = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_orderqty = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_acmpqty = ds_rqwfjg.Object.acmpqty[ll_k] lde_stopqty = ds_rqwfjg.Object.stopqty[ll_k] lde_unacmpqty = ds_rqwfjg.Object.unacmpqty[ll_k] //更新外协主生产计划已进仓数 If (li_ordertype_order = 3 Or li_ifwfjgorder = 1) And ll_mtrlid_order = arg_mtrlid THEN IF arg_addqty > 0 THEN lde_addqty_allow = lde_unacmpqty ELSE lde_addqty_allow = lde_acmpqty END IF IF lde_addqty_allow > 0 THEN ld_qty = Min(lde_addqty, lde_addqty_allow) //本条处理数 lde_addqty -= ld_qty //未处理数 IF ld_qty > 0 THEN IF arg_addqty > 0 THEN //增加 //ld_qty = ld_qty ELSE //减少 ld_qty = 0 - ld_qty END IF IF uo_order.addmxcmpl(arg_scid,ll_orderid,ld_qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF IF uo_order.tryfinishorder(arg_scid,ll_orderid,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF lde_addqty <= 0 THEN EXIT // 完成 END IF END IF NEXT ext: Destroy uo_order Destroy ds_rqwfjg RETURN rslt end function public function integer uof_add_order_dstrqty_bk (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, decimal arg_dec_round, ref string arg_msg);// arg_addqty > 0 审核 增加 // arg_addqty < 0 撤审 减少 Int rslt = 1 Long ll_i, ll_k, ll_m, ll_lp, ll_row_f String ls_mtrlcode_out Decimal ld_costamt_out ,ld_qty_out,ld_cost_out, ld_overqty Long ll_wrkgrpid_out,ll_mtrlid_out String ls_status_out,ls_woodcode_out,ls_pcode_out Long ll_cnt_order Long ll_orderid, ll_mtrlid_order, ll_workgroupid Int li_ordertype_order, li_ifwfjgorder String ls_wrkgrpname Decimal lde_addqty Decimal dec_round //= 2 //计算发出明细保留小数位, 取自外协订单界面 uo_order_ml uo_order uo_order = Create uo_order_ml datastore ds_rqwfjg ds_rqwfjg = Create datastore ds_rqwfjg.DataObject = 'ds_order_wfjg_request_wfjg_mxmx' ds_rqwfjg.SetTransObject(sqlca) datastore ds_mrpmx ds_mrpmx = Create datastore ds_mrpmx.DataObject = 'ds_order_ml_mrpmx_to_wfjg' ds_mrpmx.SetTransObject(sqlca) Dec lde_addqty_out_allow, lde_addqty_out_detrqty_allow, lde_addqty_out_ed, lde_sonscale Long ll_cnt_tree //1.通过外协申请单,找到对应的主计划, //更新外协主生产计划已进仓数 Decimal lde_addqty_allow, ld_qty Decimal lde_orderqty, lde_acmpqty, lde_stopqty, lde_unacmpqty lde_addqty = Abs(arg_addqty) dec_round = arg_dec_round ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,arg_wfjgid,arg_printid) FOR ll_k = 1 To ll_cnt_order ll_orderid = ds_rqwfjg.Object.u_request_wfjgmxmx_orderid[ll_k] IF ll_orderid = 0 THEN CONTINUE li_ordertype_order = ds_rqwfjg.Object.ordertype[ll_k] li_ifwfjgorder = ds_rqwfjg.Object.ifwforder[ll_k] ll_mtrlid_order = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_orderqty = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_acmpqty = ds_rqwfjg.Object.acmpqty[ll_k] lde_stopqty = ds_rqwfjg.Object.stopqty[ll_k] lde_unacmpqty = ds_rqwfjg.Object.unacmpqty[ll_k] ll_cnt_tree = ds_mrpmx.Retrieve(arg_scid,ll_orderid) ll_row_f = ds_mrpmx.Find("u_orderrqmtrl_tree_mtrlid = "+String(arg_mtrlid),1,ds_mrpmx.RowCount()) IF ll_row_f > 0 THEN ll_lp = ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_row_f] FOR ll_m = ll_row_f + 1 To ds_mrpmx.RowCount() IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_m] <= ll_lp THEN EXIT IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_m] = ll_lp + 1 & And ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_m] > 0 THEN ls_mtrlcode_out = ds_mrpmx.Object.u_mtrldef_mtrlcode[ll_m] ll_wrkgrpid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_wrkgrpid[ll_m] ll_mtrlid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_m] ls_status_out = ds_mrpmx.Object.u_orderrqmtrl_tree_status[ll_m] ls_woodcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_woodcode[ll_m] ls_pcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_pcode[ll_m] lde_sonscale = ds_mrpmx.Object.u_orderrqmtrl_tree_sonscale[ll_m] IF lde_sonscale = 0 THEN lde_sonscale = ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_m] / ds_mrpmx.Object.u_orderrqmtrl_tree_truerqqty[ll_row_f] END IF //找有多少未完成数, 分配完成 SELECT sum(truerqqty - dstrqty) , sum(dstrqty) INTO :lde_addqty_out_allow, :lde_addqty_out_detrqty_allow FROM u_orderrqmtrl WHERE scid = :arg_scid AND orderid = :ll_orderid AND mtrlid = :ll_mtrlid_out AND status = :ls_status_out AND woodcode = :ls_woodcode_out AND pcode = :ls_pcode_out And truerqqty > dstrqty ; IF sqlca.SQLCode <> 0 THEN lde_addqty_out_allow = 0 lde_addqty_out_detrqty_allow = 0 END IF IF lde_addqty_out_allow > 0 THEN ld_qty_out = Min(Round(lde_addqty * lde_sonscale,dec_round) - lde_addqty_out_ed, lde_addqty_out_allow) lde_addqty_out_ed += ld_qty_out IF ld_qty_out <> 0 THEN // SELECT top 1 cost INTO :ld_cost_out FROM ow_wfjgware WHERE sptid = :sptid AND mtrlid = :ll_mtrlid_out AND status = :ls_status_out AND woodcode = :ls_woodcode_out AND pcode = :ls_pcode_out AND scid = :scid Order By cost Desc Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ld_cost_out = 0 END IF ld_costamt_out = ld_qty_out * ld_cost_out IF ll_wrkgrpid_out > 0 THEN SELECT wrkgrpname INTO :ls_wrkgrpname FROM u_sc_workgroup Where wrkGrpid = :ll_wrkgrpid_out Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询领用工组信息失败,'+commit_transaction.SQLErrText GOTO ext END IF SELECT TOP 1 workgroupid INTO :ll_workgroupid FROM u_workgroup Where wrkGrpid = :ll_wrkgrpid_out Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询领用工组 '+ls_wrkgrpname+' 相关的工作中心失败,可能是工组没有设置对应的工作中心,请检查'+commit_transaction.SQLErrText GOTO ext END IF ELSE ll_workgroupid = 0 END IF IF uo_order.f_add_dstrqty(scid,ll_orderid,ll_workgroupid,ll_mtrlid_out,ls_mtrlcode_out,ls_status_out,ls_woodcode_out,ls_pcode_out,ld_qty_out,ld_costamt_out,arg_msg,False,-1,ld_overqty) = 0 THEN arg_msg = '更新生产计划已领数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF END IF END IF IF Abs(Round(lde_addqty * lde_sonscale,dec_round)) = Abs(lde_addqty_out_ed) THEN EXIT NEXT IF Abs(Round(lde_addqty * lde_sonscale,dec_round)) = Abs(lde_addqty_out_ed) THEN EXIT END IF NEXT ext: Destroy uo_order Destroy ds_rqwfjg Destroy ds_mrpmx RETURN rslt end function public function integer uof_add_order_dstrqty (long arg_scid, long arg_sptid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, decimal arg_dec_round, ref string arg_msg);//待测 // arg_addqty > 0 审核 增加 // arg_addqty < 0 撤审 减少 Int rslt = 1 Long ll_j, ll_k, ll_m, ll_lp, ll_row_f String ls_mtrlcode_out Decimal ld_costamt_out ,ld_qty_out,ld_cost_out, ld_overqty Long ll_wrkgrpid_out,ll_mtrlid_out String ls_status_out,ls_woodcode_out,ls_pcode_out Long ll_cnt_order Long ll_orderid, ll_mtrlid_order, ll_workgroupid //Int li_ordertype_order, li_ifwfjgorder String ls_wrkgrpname Decimal lde_addqty_out Decimal dec_round //= 2 //计算发出明细保留小数位, 取自外协订单界面 uo_order_ml uo_order uo_order = Create uo_order_ml datastore ds_rqwfjg ds_rqwfjg = Create datastore ds_rqwfjg.DataObject = 'ds_order_wfjg_request_wfjg_mxmx' ds_rqwfjg.SetTransObject(sqlca) datastore ds_mrpmx ds_mrpmx = Create datastore ds_mrpmx.DataObject = 'ds_order_ml_mrpmx_to_wfjg' ds_mrpmx.SetTransObject(sqlca) Dec lde_addqty_out_allow, lde_addqty_out_detrqty_allow, lde_addqty_out_ed, lde_sonscale Long ll_cnt_tree s_order_wfjgmx_out s_mx[] //1.通过外协申请单,找到对应的主计划, dec_round = arg_dec_round ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,arg_wfjgid,arg_printid) FOR ll_k = 1 To ll_cnt_order ll_orderid = ds_rqwfjg.Object.u_request_wfjgmxmx_orderid[ll_k] IF ll_orderid = 0 THEN CONTINUE ll_mtrlid_order = ds_rqwfjg.Object.mtrlid_order[ll_k] ll_cnt_tree = ds_mrpmx.Retrieve(arg_scid,ll_orderid, ll_mtrlid_order) FOR ll_m = 1 To ds_mrpmx.RowCount() ls_mtrlcode_out = ds_mrpmx.Object.u_mtrldef_mtrlcode[ll_m] ll_wrkgrpid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_wrkgrpid[ll_m] ll_mtrlid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_m] ls_status_out = ds_mrpmx.Object.u_orderrqmtrl_tree_status[ll_m] ls_woodcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_woodcode[ll_m] ls_pcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_pcode[ll_m] lde_sonscale = ds_mrpmx.Object.u_orderrqmtrl_tree_sonscale[ll_m] lde_addqty_out_allow = ds_mrpmx.Object.undstrqty[ll_m] lde_addqty_out_detrqty_allow = ds_mrpmx.Object.dstrqty[ll_m] //找有多少未完成数, 分配完成 FOR ll_j = 1 To UpperBound(s_mx) IF s_mx[ll_j].mtrlid = ll_mtrlid_out & And s_mx[ll_j].status = ls_status_out & And s_mx[ll_j].woodcode = ls_woodcode_out & And s_mx[ll_j].pcode = ls_pcode_out THEN lde_addqty_out = s_mx[ll_j].qty GOTO cmplmtrl END IF NEXT s_mx[ll_j].mtrlid = ll_mtrlid_out s_mx[ll_j].status = ls_status_out s_mx[ll_j].woodcode = ls_woodcode_out s_mx[ll_j].pcode = ls_pcode_out s_mx[ll_j].qty = Round(Abs(arg_addqty) * lde_sonscale,dec_round) lde_addqty_out = s_mx[ll_j].qty cmplmtrl: IF lde_addqty_out = 0 THEN CONTINUE //主要考虑的是 1:N的处理 IF lde_addqty_out_allow > 0 THEN ld_qty_out = Min(lde_addqty_out, lde_addqty_out_allow) lde_addqty_out -= ld_qty_out IF ld_qty_out <> 0 THEN // SELECT top 1 cost INTO :ld_cost_out FROM ow_wfjgware WHERE sptid = :arg_sptid AND mtrlid = :ll_mtrlid_out AND status = :ls_status_out AND woodcode = :ls_woodcode_out AND pcode = :ls_pcode_out AND scid = :arg_scid Order By cost Desc Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ld_cost_out = 0 END IF ld_costamt_out = ld_qty_out * ld_cost_out IF ll_wrkgrpid_out > 0 THEN SELECT wrkgrpname INTO :ls_wrkgrpname FROM u_sc_workgroup Where wrkGrpid = :ll_wrkgrpid_out Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询领用工组信息失败,'+commit_transaction.SQLErrText GOTO ext END IF SELECT TOP 1 workgroupid INTO :ll_workgroupid FROM u_workgroup Where wrkGrpid = :ll_wrkgrpid_out Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询领用工组 '+ls_wrkgrpname+' 相关的工作中心失败,可能是工组没有设置对应的工作中心,请检查'+commit_transaction.SQLErrText GOTO ext END IF ELSE ll_workgroupid = 0 END IF IF uo_order.f_add_dstrqty(arg_scid,ll_orderid,ll_workgroupid,ll_mtrlid_out,ls_mtrlcode_out,ls_status_out,ls_woodcode_out,ls_pcode_out,ld_qty_out,ld_costamt_out,arg_msg,False,-1,ld_overqty) = 0 THEN arg_msg = '更新生产计划已领数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF END IF s_mx[ll_j].qty = lde_addqty_out //IF Abs(Round(lde_addqty * lde_sonscale,dec_round)) = Abs(lde_addqty_out_ed) THEN EXIT NEXT //IF Abs(Round(lde_addqty * lde_sonscale,dec_round)) = Abs(lde_addqty_out_ed) THEN EXIT NEXT ext: Destroy uo_order Destroy ds_rqwfjg Destroy ds_mrpmx RETURN rslt end function public function integer uof_add_order_rqacmpqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);// arg_addqty > 0 审核 增加 // arg_addqty < 0 撤审 减少 Int rslt = 1 Long ll_i, ll_k Long ll_cnt_order Long ll_orderid, ll_mtrlid_order Int li_ordertype_order, li_ifwfjgorder Decimal lde_addqty uo_order_ml uo_order uo_order = Create uo_order_ml datastore ds_rqwfjg ds_rqwfjg = Create datastore ds_rqwfjg.DataObject = 'ds_order_wfjg_request_wfjg_mxmx' ds_rqwfjg.SetTransObject(sqlca) //1.通过外协申请单,找到对应的主计划, //更新外协主生产计划已申购数, 更新主生产计划物料需求已申购数 Decimal lde_addqty_allow, ld_qty Decimal lde_orderqty, lde_rqacmpqty, lde_stopqty, lde_unrqacmpqty lde_addqty = Abs(arg_addqty) ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,arg_wfjgid,arg_printid) FOR ll_k = 1 To ll_cnt_order ll_orderid = ds_rqwfjg.Object.u_request_wfjgmxmx_orderid[ll_k] IF ll_orderid = 0 THEN CONTINUE li_ordertype_order = ds_rqwfjg.Object.ordertype[ll_k] li_ifwfjgorder = ds_rqwfjg.Object.ifwforder[ll_k] ll_mtrlid_order = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_orderqty = ds_rqwfjg.Object.mtrlid_order[ll_k] lde_rqacmpqty = ds_rqwfjg.Object.rqacmpqty[ll_k] lde_stopqty = ds_rqwfjg.Object.stopqty[ll_k] lde_unrqacmpqty = ds_rqwfjg.Object.unrqacmpqty[ll_k] //更新外协主生产计划已进仓数 If (li_ordertype_order = 3 Or li_ifwfjgorder = 1) And ll_mtrlid_order = arg_mtrlid THEN IF arg_addqty > 0 THEN lde_addqty_allow = lde_unrqacmpqty ELSE lde_addqty_allow = lde_rqacmpqty END IF IF lde_addqty_allow > 0 THEN ld_qty = Min(lde_addqty, lde_addqty_allow) //本条处理数 lde_addqty -= ld_qty //未处理数 IF ld_qty > 0 THEN IF arg_addqty > 0 THEN //增加 //ld_qty = ld_qty ELSE //减少 ld_qty = 0 - ld_qty END IF IF uo_order.addmxcmpl_rqacmpqty(arg_scid,ll_orderid,ld_qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF lde_addqty <= 0 THEN EXIT // 完成 END IF END IF NEXT ext: Destroy uo_order Destroy ds_rqwfjg RETURN rslt end function on uo_request_wfjg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_request_wfjg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor; String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('121',str_optionvalue,arg_msg) uo_option_requestwfjg_hz = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('312',str_optionvalue,arg_msg) uo_option_wfjg_checkdate = Long(str_optionvalue) end event