$PBExportHeader$uo_order_wfjg.sru forward global type uo_order_wfjg from nonvisualobject end type end forward global type uo_order_wfjg from nonvisualobject end type global uo_order_wfjg uo_order_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 sptid String assign_emp string reason int billtype //0-正常;1-异常; 2-退回;4-返工;9-盘盈 DateTime requiredate String dscrp string relcode decimal dec_round = 2 //计算发出明细保留小数位, 取自外协订单界面 int caudit_checkauto int uo_option_wfjg_outmx,uo_option_autocreate_outware int uo_option_ifovertask,uo_option_2unit int uo_option_update_rqmtrlqty_wfjg Transaction commit_transaction PRIVATE: s_order_wfjgmx wfjgmx[] //明细结构数组 s_order_wfjgmx_out wfjgmx_out[],wfjghz_out[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbt_out = 0 //明细结构数组末指针 long it_mxbt_out_hz = 0 Boolean it_newbegin = TRUE //新建标志 Boolean it_updatebegin = FALSE//修改标志 end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer add_dscrp (long arg_scid, long arg_wfjgid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer 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 firstpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer tempstoptask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg) public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit) 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 stopqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rewfjgqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer uof_splitqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_splitqty, datetime arg_newdate, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty_out (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_out (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_uqty, decimal arg_rate, long arg_relprintid, long arg_wrkgrpid) public function integer addmx_sptcheckqty (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_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer finishmx (long arg_scid, long arg_wfjgid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty_out_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_out_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_addqty, 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 acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_wrkgrpid, long arg_relwfjgid, long arg_relprintid, string arg_pfcode, string arg_unit, decimal arg_uqty, decimal arg_rate, decimal arg_taxrate, string arg_plancode, long arg_relwfjgid2, long arg_relprintid2) public function integer uof_add_thqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_thqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_nonconsignedqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_order_wfjgmx s_mx, ref string arg_msg) public function integer stopaddqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rewfjgqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer uof_chk_ware_outhz (long arg_row, ref string arg_msg) public function integer uof_create_outware_wfjg (long arg_scid, string arg_emp, ref string arg_msg) public function integer uof_destroy_outware_wfjg (ref string arg_msg) public function integer uof_add_order_acmpqty (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_stopqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) protected function integer uof_add_dstrqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_orderid, long arg_mtrlid, string arg_pfcode, decimal arg_buyqty, decimal arg_addqty, integer arg_type, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 scid = 0 wfjgid = 0 taskcode = '' reason = '' operator = '' status = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt = 0 it_mxbt_out = 0 it_mxbt_out_hz = 0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0,i,j Long ls_newwfjgid DateTime server_datetime String ls_sccode Long ll_fp_array,ll_fp s_mtrlware_assign_plan s_fp_plan uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = commit_transaction datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(commit_transaction) IF uo_option_wfjg_outmx = -1000 THEN rslt = 0 arg_msg = '选项:[086]外协订单必须有发出明细,外协收货单必须有外协商库存明细,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(dscrp) THEN dscrp = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(arg_operator) THEN arg_operator = '' IF IsNull(reason) THEN reason = '' //==================================================================== // script - save ( ref string arg_msg, boolean arg_ifcommit ) // reason: //-------------------------------------------------------------------- // modified by: yyx date: 2004.02.20 //-------------------------------------------------------------------- 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 cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where sptid = :sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商资料" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "供应商未定义或错误" GOTO ext END IF IF billtype = 1 And reason = '' 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 uo_option_wfjg_outmx = 1 And it_mxbt_out = 0 THEN rslt = 0 arg_msg = "没有正确的发出明细内容" GOTO ext END IF IF uo_option_wfjg_outmx = 1 THEN FOR i = 1 To it_mxbt FOR j = 1 To it_mxbt_out IF wfjgmx[i].printid = wfjgmx_out[j].relprintid THEN GOTO _next_check END IF NEXT rslt = 0 arg_msg = '收货明细第'+String(wfjgmx[i].printid)+'行,没有对应的发出明细,请检查' GOTO ext _next_check: NEXT FOR j = 1 To it_mxbt_out FOR i = 1 To it_mxbt IF wfjgmx[i].printid = wfjgmx_out[j].relprintid THEN GOTO _next_check2 END IF NEXT rslt = 0 arg_msg = '发出明细第'+String(wfjgmx[i].printid)+'行,没有对应的收货明细,请检查' GOTO ext _next_check2: NEXT END IF //必须选物料清单或计划 而且 必须有发出明细的 比较清单数量也必须相应; 2013-06-05 IF sys_option_wfjg_out_cmp = 1 And uo_option_wfjg_outmx = 1 THEN Long ll_mtrlid_in, ll_mtrlid_out Decimal lde_qty_in, lde_qty_out, lde_qty_out_pf String ls_pfcode Decimal lde_truerqqty_in_pf, lde_rqqty_out_pf, lde_sonscale Boolean lb_find = False FOR i = 1 To it_mxbt ll_mtrlid_in = wfjgmx[i].mtrlid lde_qty_in = wfjgmx[i].qty ls_pfcode = wfjgmx[i].pfcode lb_find = False FOR j = 1 To it_mxbt_out IF wfjgmx[i].printid = wfjgmx_out[j].relprintid THEN ll_mtrlid_out = wfjgmx_out[j].mtrlid lde_qty_out = wfjgmx_out[j].qty lde_qty_out_pf = 0 lb_find = True IF ll_mtrlid_in = ll_mtrlid_out THEN lde_qty_out_pf = lde_qty_in //返工类型, 发出物料和收货物料为同一种的,只检查数量关系 lde_sonscale = 1 ELSE IF wfjgmx[i].orderid > 0 THEN //查主计划 SELECT top 1 u_OrderRqMtrl_tree.truerqqty INTO :lde_truerqqty_in_pf FROM u_OrderRqMtrl_tree WHERE ( u_OrderRqMtrl_tree.scid = :scid) AND ( u_OrderRqMtrl_tree.orderid = :wfjgmx[i].orderid) AND ( u_OrderRqMtrl_tree.mtrlid = :ll_mtrlid_in ) And ( u_OrderRqMtrl_tree.pfcode = :ls_pfcode ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细行:'+String(wfjgmx[i].printid)+',查询对应的主计划运算结果资料失败,'+commit_transaction.SQLErrText GOTO ext END IF SELECT top 1 u_OrderRqMtrl_tree.rqqty, u_OrderRqMtrl_tree.sonscale INTO :lde_rqqty_out_pf, :lde_sonscale FROM u_OrderRqMtrl_tree WHERE ( u_OrderRqMtrl_tree.scid = :scid) AND ( u_OrderRqMtrl_tree.orderid = :wfjgmx[i].orderid) AND ( u_OrderRqMtrl_tree.pmtrlid = :ll_mtrlid_in ) AND ( u_OrderRqMtrl_tree.mtrlid = :ll_mtrlid_out ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细行:'+String(wfjgmx[i].printid)+',对应发出明细行:'+String(wfjgmx_out[j].printid)+',查询对应的主计划运算结果资料失败,'+commit_transaction.SQLErrText GOTO ext END IF IF lde_sonscale = 0 THEN lde_sonscale = lde_rqqty_out_pf / lde_truerqqty_in_pf END IF lde_qty_out_pf = Round(lde_qty_in * lde_sonscale, dec_round) ELSE SELECT :lde_qty_in * u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss, u_prdpf.Sonscale INTO :lde_qty_out_pf, :lde_sonscale FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :ll_mtrlid_in ) AND ( u_PrdPF.sonmtrlid = :ll_mtrlid_out ) And ( u_prdpf.pfcode = :ls_pfcode ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细行:'+String(wfjgmx[i].printid)+',对应发出明细行:'+String(wfjgmx_out[j].printid)+',查询对应的物料清单资料失败,'+commit_transaction.SQLErrText GOTO ext END IF lde_qty_out_pf = Round(lde_qty_out_pf, dec_round) END IF END IF IF lde_qty_out <> lde_qty_out_pf THEN Decimal lde_tmprate if lde_sonscale = 1 then lde_tmprate = 0 else //临时,比例在99%以上的算正确 IF lde_qty_out > lde_qty_out_pf THEN lde_tmprate = lde_qty_out_pf / lde_qty_out ELSE lde_tmprate = lde_qty_out / lde_qty_out_pf END IF end if IF lde_tmprate < 0.99 THEN rslt = 0 arg_msg = '系统选项[086,253]限制收货明细与发出明细必须跟物料清单或主计划运算对应~r~n收货明细行'+String(wfjgmx[i].printid)+',对应发出明细行:'+String(wfjgmx_out[j].printid)+',数量比例与限制不相等,请检查' GOTO ext END IF END IF END IF NEXT IF Not lb_find THEN rslt = 0 arg_msg = '系统选项[086,253]限制收货明细与供应商库存明细必须跟物料清单或主计划运算对应~r~n收货明细行'+String(wfjgmx[i].printid)+',找不到对应的发出明细,请检查' GOTO ext END IF NEXT END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :operator Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF opdate = server_datetime //填写单据建立时间(最近修改时间) ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF wfjgid = 0 THEN //新建 ls_newwfjgid = f_sys_scidentity(scid,"u_order_wfjg","wfjgid",arg_msg,True,id_sqlca) //数据commit事务) IF ls_newwfjgid <= 0 THEN rslt = 0 ROLLBACK; GOTO ext END IF IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 2 THEN taskcode = getid(scid,ls_sccode + 'WB',Date(server_datetime),False,commit_transaction) ELSEIF billtype = 4 THEN taskcode = getid(scid,ls_sccode + 'WD',Date(server_datetime),False,commit_transaction) ELSE //IF billtype = 0 Or billtype = 1 Or billtype = 9 THEN taskcode = getid(scid,ls_sccode + 'WJ',Date(server_datetime),False,commit_transaction) END IF IF taskcode = "err" THEN taskcode = '' rslt = 0 arg_msg = "无法获取外加工编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_order_wfjg ( scid, wfjgid, taskcode, sptid, requiredate, status, opemp, assign_emp, permit_emp, dscrp, opdate, billtype, reason, relcode) VALUES ( :scid, :ls_newwfjgid, :taskcode, :sptid, :requiredate, :status, :operator, :assign_emp, :permit_emp, :dscrp, :opdate, :billtype, :reason, :relcode) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入外加工计划操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF wfjgid = ls_newwfjgid ELSE //////////////////////////////////////////////// //更新 UPDATE u_order_wfjg SET sptid = :sptid, requiredate = :requiredate, assign_emp = :assign_emp, dscrp = :dscrp, moddate = getdate(), modemp = :publ_operator, billtype = :billtype, reason = :reason, relcode = :relcode WHERE u_order_wfjg.wfjgid = :wfjgid And u_order_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_order_wfjgmx WHERE u_order_wfjgmx.wfjgid = :wfjgid And u_order_wfjgmx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有分配计划明细 ds_fp_plan_del.Retrieve(scid,wfjgid,3) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 arg_msg = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // //删除原有明细 DELETE FROM u_order_wfjgmx_out_mx WHERE u_order_wfjgmx_out_mx.wfjgid = :wfjgid And u_order_wfjgmx_out_mx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_order_wfjgmx_out WHERE u_order_wfjgmx_out.wfjgid = :wfjgid And u_order_wfjgmx_out.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO u_order_wfjgmx ( scid, wfjgid, mtrlid, qty, price, rebate, dscrp, printid, requiredate, orderid, storageid, jgdscrp, status, iforder, woodcode, pcode, wrkgrpid, relwfjgid, relprintid, pfcode, relcode, unit, uqty, rate, taxrate, plancode, relwfjgid2, relprintid2, thtype) VALUES (:scid, :wfjgid, :wfjgmx[i].mtrlid, :wfjgmx[i].qty, :wfjgmx[i].price, :wfjgmx[i].rebate, :wfjgmx[i].dscrp, :wfjgmx[i].printid, :wfjgmx[i].requiredate, :wfjgmx[i].orderid, :wfjgmx[i].storageid, :wfjgmx[i].jgdscrp, :wfjgmx[i].status, :wfjgmx[i].iforder, :wfjgmx[i].woodcode, :wfjgmx[i].pcode, :wfjgmx[i].wrkgrpid, :wfjgmx[i].relwfjgid, :wfjgmx[i].relprintid, :wfjgmx[i].pfcode, :wfjgmx[i].relcode, :wfjgmx[i].unit, :wfjgmx[i].uqty, :wfjgmx[i].rate, :wfjgmx[i].taxrate, :wfjgmx[i].plancode, :wfjgmx[i].relwfjgid2, :wfjgmx[i].relprintid2, :wfjgmx[i].thtype) 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 IF wfjgmx[i].iffp = 1 And wfjgmx[i].orderid > 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 0 s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 3 s_fp_plan.plankind_relbillid[ll_fp_array] = wfjgid s_fp_plan.plankind_relprintid[ll_fp_array] = wfjgmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = wfjgmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = wfjgmx[i].qty s_fp_plan.status[ll_fp_array] = wfjgmx[i].status s_fp_plan.woodcode[ll_fp_array] = wfjgmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = wfjgmx[i].pcode END IF NEXT FOR j = 1 To it_mxbt_out INSERT INTO u_order_wfjgmx_out_mx ( scid, wfjgid, mtrlid, qty, price, dscrp, printid, storageid, status, woodcode, pcode, unit, uqty, rate, relprintid, wrkgrpid) VALUES (:scid, :wfjgid, :wfjgmx_out[j].mtrlid, :wfjgmx_out[j].qty, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp, :wfjgmx_out[j].printid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].status, :wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode, :wfjgmx_out[j].unit, :wfjgmx_out[j].uqty, :wfjgmx_out[j].rate, :wfjgmx_out[j].relprintid, :wfjgmx_out[j].wrkgrpid ) 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 j = 1 To it_mxbt_out_hz INSERT INTO u_order_wfjgmx_out ( scid, qty, price, mtrlid, wfjgid, dscrp, printid, storageid, status, woodcode, pcode, unit, uqty, rate) VALUES (:scid, :wfjghz_out[j].qty, :wfjghz_out[j].price, :wfjghz_out[j].mtrlid, :wfjgid, :wfjghz_out[j].dscrp , :wfjghz_out[j].printid, :wfjghz_out[j].storageid, :wfjghz_out[j].status, :wfjghz_out[j].woodcode, :wfjghz_out[j].pcode, :wfjghz_out[j].unit, :wfjghz_out[j].uqty, :wfjghz_out[j].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 FOR ll_fp = 1 To ll_fp_array IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],& s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],& s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],& s_fp_plan.planassignqty[ll_fp],& '',publ_operator,s_fp_plan.plantype[ll_fp],& s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],& s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],& s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(s_fp_plan.plankind_relprintid[ll_fp])+',保存库存分配计划明细表失败,'+arg_msg rslt = 0 IF it_newbegin THEN wfjgid = 0 GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_fp_plan Destroy ds_fp_plan_del 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, sptID, requiredate, accomplishdate, Status, Opemp, Assign_Emp, Permit_Emp, Dscrp, opdate , billtype, reason , ctmint, relcode INTO :wfjgID, :TaskCode, :sptID, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :opdate, :billtype, :reason, :ctmint, :relcode FROM u_order_wfjg WHERE u_order_wfjg.wfjgID = :arg_wfjgID And u_order_wfjg.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询外加工计划内容失败(错误外加工计划唯一码)' 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_order_wfjgmx.mtrlid, u_order_wfjgmx.qty, u_order_wfjgmx.price, u_order_wfjgmx.rebate, u_order_wfjgmx.dscrp, u_mtrldef.mtrlcode, u_order_wfjgmx.printid, u_order_wfjgmx.orderid, u_order_wfjgmx.storageid, u_order_wfjgmx.jgdscrp, u_order_wfjgmx.iforder, u_order_wfjgmx.status, u_order_wfjgmx.woodcode, u_order_wfjgmx.pcode, u_order_wfjgmx.wrkGrpid, u_order_wfjgmx.relwfjgid, u_order_wfjgmx.relprintid, u_order_wfjgmx.pfcode, u_order_wfjgmx.unit, u_order_wfjgmx.uqty, u_order_wfjgmx.rate, u_order_wfjgmx.taxrate, u_order_wfjgmx.plancode, u_order_wfjgmx.relwfjgid2, u_order_wfjgmx.relprintid2, u_order_wfjgmx.thtype FROM u_order_wfjgmx,u_mtrldef WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid AND u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.mtrlid = u_mtrldef.mtrlid Using commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty,:wfjgmx[i].price,:wfjgmx[i].rebate, :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode, :wfjgmx[i].printid,:wfjgmx[i].orderid, :wfjgmx[i].storageid,:wfjgmx[i].jgdscrp,:wfjgmx[i].iforder, :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode, :wfjgmx[i].wrkGrpid,:wfjgmx[i].relwfjgid, :wfjgmx[i].relprintid,:wfjgmx[i].pfcode, :wfjgmx[i].unit,:wfjgmx[i].uqty,:wfjgmx[i].rate,:wfjgmx[i].taxrate,:wfjgmx[i].plancode,:wfjgmx[i].relwfjgid2, :wfjgmx[i].relprintid2,:wfjgmx[i].thtype; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty,:wfjgmx[i].price,:wfjgmx[i].rebate, :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode, :wfjgmx[i].printid,:wfjgmx[i].orderid, :wfjgmx[i].storageid,:wfjgmx[i].jgdscrp,:wfjgmx[i].iforder, :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode, :wfjgmx[i].wrkGrpid,:wfjgmx[i].relwfjgid, :wfjgmx[i].relprintid,:wfjgmx[i].pfcode, :wfjgmx[i].unit,:wfjgmx[i].uqty,:wfjgmx[i].rate,:wfjgmx[i].taxrate,:wfjgmx[i].plancode,:wfjgmx[i].relwfjgid2, :wfjgmx[i].relprintid2,:wfjgmx[i].thtype; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjgmx WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid And u_order_wfjgmx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 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_inwaermx_out CURSOR FOR SELECT u_order_wfjgmx_out_mx.mtrlid, u_order_wfjgmx_out_mx.qty, u_order_wfjgmx_out_mx.price, u_order_wfjgmx_out_mx.dscrp, u_mtrldef.mtrlcode, u_mtrldef.unit, u_order_wfjgmx_out_mx.printid, u_order_wfjgmx_out_mx.storageid, u_order_wfjgmx_out_mx.status, u_order_wfjgmx_out_mx.woodcode, u_order_wfjgmx_out_mx.pcode, u_order_wfjgmx_out_mx.unit, u_order_wfjgmx_out_mx.uqty, u_order_wfjgmx_out_mx.rate, u_order_wfjgmx_out_mx.relprintid, u_order_wfjgmx_out_mx.wrkgrpid FROM u_order_wfjgmx_out_mx,u_mtrldef WHERE u_order_wfjgmx_out_mx.wfjgid = :arg_wfjgid AND u_order_wfjgmx_out_mx.scid = :arg_scid AND u_order_wfjgmx_out_mx.mtrlid = u_mtrldef.mtrlid Using commit_transaction; OPEN cur_inwaermx_out; FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid,:wfjgmx_out[j].qty, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp,:wfjgmx_out[j].mtrlcode,:wfjgmx_out[j].unit_def, :wfjgmx_out[j].printid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].status,:wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode,:wfjgmx_out[j].unit,:wfjgmx_out[j].uqty,:wfjgmx_out[j].rate,:wfjgmx_out[j].relprintid, :wfjgmx_out[j].wrkGrpid; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid,:wfjgmx_out[j].qty, :wfjgmx_out[j].price, :wfjgmx_out[j].dscrp,:wfjgmx_out[j].mtrlcode,:wfjgmx_out[j].unit_def, :wfjgmx_out[j].printid, :wfjgmx_out[j].storageid, :wfjgmx_out[j].status,:wfjgmx_out[j].woodcode, :wfjgmx_out[j].pcode,:wfjgmx_out[j].unit,:wfjgmx_out[j].uqty,:wfjgmx_out[j].rate,:wfjgmx_out[j].relprintid, :wfjgmx_out[j].wrkGrpid; LOOP CLOSE cur_inwaermx_out; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjgmx_out_mx WHERE u_order_wfjgmx_out_mx.wfjgid = :arg_wfjgid And u_order_wfjgmx_out_mx.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 // //用游标读取明细 DECLARE cur_out_hz CURSOR FOR SELECT u_order_wfjgmx_out.mtrlid, u_order_wfjgmx_out.qty, u_order_wfjgmx_out.price, u_order_wfjgmx_out.dscrp, u_mtrldef.mtrlcode, u_mtrldef.unit, u_order_wfjgmx_out.printid, u_order_wfjgmx_out.storageid, u_order_wfjgmx_out.status, u_order_wfjgmx_out.woodcode, u_order_wfjgmx_out.pcode, u_order_wfjgmx_out.unit, u_order_wfjgmx_out.uqty, u_order_wfjgmx_out.rate FROM u_order_wfjgmx_out,u_mtrldef WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid AND u_order_wfjgmx_out.scid = :arg_scid AND u_order_wfjgmx_out.mtrlid = u_mtrldef.mtrlid Using commit_transaction; OPEN cur_out_hz; FETCH cur_out_hz INTO :wfjghz_out[k].mtrlid,:wfjghz_out[k].qty, :wfjghz_out[k].price, :wfjghz_out[k].dscrp,:wfjghz_out[k].mtrlcode,:wfjghz_out[k].unit_def, :wfjghz_out[k].printid, :wfjghz_out[k].storageid, :wfjghz_out[k].status,:wfjghz_out[k].woodcode, :wfjghz_out[k].pcode,:wfjghz_out[k].unit,:wfjghz_out[k].uqty,:wfjghz_out[k].rate; DO WHILE commit_transaction.SQLCode = 0 k++ FETCH cur_out_hz INTO :wfjghz_out[k].mtrlid,:wfjghz_out[k].qty, :wfjghz_out[k].price, :wfjghz_out[k].dscrp,:wfjghz_out[k].mtrlcode,:wfjghz_out[k].unit_def, :wfjghz_out[k].printid, :wfjghz_out[k].storageid, :wfjghz_out[k].status,:wfjghz_out[k].woodcode, :wfjghz_out[k].pcode,:wfjghz_out[k].unit,:wfjghz_out[k].uqty,:wfjghz_out[k].rate; LOOP CLOSE cur_out_hz; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_wfjgmx_out WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid And u_order_wfjgmx_out.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协计划发出汇总数量"+commit_transaction.sqlerrtext GOTO ext END IF IF k <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,外协计划发出汇总" GOTO ext END IF it_mxbt_out_hz = k - 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_order_wfjg SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_order_wfjg.wfjgid = :arg_wfjgid AND u_order_wfjg.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加外加工计划备注操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF DSCRP = DSCRP+' '+arg_newdescppart it_newbegin = FALSE it_updatebegin = FALSE ext: IF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单 //0 FAIL, 1 SUCCESS Int rslt = 1 Long ll_fp uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = commit_transaction datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(commit_transaction) IF arg_wfjgid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 ARG_MSG = "外加工计划已经审核,不可以删除" GOTO ext END IF //删除原有分配计划明细 ds_fp_plan_del.Retrieve(arg_scid,arg_wfjgid,3) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 ARG_MSG = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],ARG_MSG,False) = 0 THEN ARG_MSG = '删除分配计划失败,'+ARG_MSG rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // DELETE FROM u_order_wfjgMx WHERE u_order_wfjgMx.wfjgid = :arg_wfjgid And u_order_wfjgMx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协订单收货明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF DELETE FROM u_order_wfjgMx_out WHERE u_order_wfjgMx_out.wfjgid = :arg_wfjgid And u_order_wfjgMx_out.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协订单发出明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF DELETE FROM u_order_wfjgMx_out_mx WHERE u_order_wfjgMx_out_mx.wfjgid = :arg_wfjgid And u_order_wfjgMx_out_mx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协订单发出汇总操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF DELETE FROM u_order_wfjg WHERE u_order_wfjg.wfjgid = :arg_wfjgid And u_order_wfjg.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除外协订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: it_newbegin = False it_updatebegin = False IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_fp_plan Destroy ds_fp_plan_del p_reset() Return (rslt) end function public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Long ll_i Long ll_lp,ll_k, ll_j, ll_m String ls_mtrlcode_out Decimal ld_costamt_out ,ld_qty_out,ld_cost_out Long ll_wrkgrpid_out,ll_mtrlid_out String ls_status_out,ls_woodcode_out,ls_pcode_out Decimal ld_overqty Long ll_workgroupid Long ll_cnt_order,ll_orderid,ll_wrkGrpid,ll_mtrlid,ll_row_f,ll_mtrlid_order Int li_ordertype_order,li_ifwfjgorder String ls_wrkgrpname DateTime nulldate SetNull(nulldate) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_autocreate_outware = -1000 THEN rslt = 0 arg_msg = '选项:[087]外协订单审核自动生成仓库外协发出单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[343]外协订单审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF uo_order_ml uo_order uo_order = Create uo_order_ml uo_request_wfjg uo_wfjg uo_wfjg = Create uo_request_wfjg uo_wfjg.commit_transaction = sqlca 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' ds_mrpmx.SetTransObject(sqlca) 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 billtype = 2 THEN //退回单,自动完成 IF Status = 5 THEN UPDATE u_order_wfjg SET Status = 1, accomplishdate = NULL, finishemp = '' WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid And Status = 5 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协订单取消完成操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF Status = 1 END IF END IF IF Status <> 1 THEN rslt = 0 arg_msg = "外协计划只有在已审核状态才可以执行撤消审核,请核对" GOTO ext END IF IF caudit_checkauto = 0 And & Trim(dscrp) = '返工单审核自动生成的外协订单' THEN arg_msg = '该单据为返工单审核自动生成的外协订单,不能撤审' rslt = 0 GOTO ext END IF IF caudit_checkauto = 0 And & Trim(dscrp) = '盘盈单审核自动生成的外协订单' THEN arg_msg = '该单据为盘盈单审核自动生成的外协订单,不能撤审' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM ow_wfjgmx_in_aft WHERE ( ow_wfjgmx_in_aft.scid = :arg_scid ) And ( ow_wfjgmx_in_aft.relid = :arg_wfjgid ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询外协计划是否已开收货单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "外加工计划已经有相关收货单据,不可以撤消审核" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid WHERE u_sptcheck_mx.reltaskid = :arg_wfjgid AND u_sptcheck.scid = :arg_scid AND u_sptcheck.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询外协计划是否已开质检单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "外加工计划已经有相关外协质检单,不可以撤消审核" GOTO ext END IF IF uo_option_autocreate_outware = 1 THEN //如果使用订单自动生成发出单,则检查是否有非自动生成的发出单(原则上没有) SELECT count(*) INTO :cnt FROM ow_wfjgmx_out,ow_wfjg_out WHERE ( ow_wfjgmx_out.scid = :arg_scid ) AND ( ow_wfjgmx_out.relid = :arg_wfjgid ) AND (ow_wfjg_out.scid = ow_wfjgmx_out.scid) AND (ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid) And (ow_wfjg_out.relid <> :arg_wfjgid ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询外协计划是否已开发货单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSE SELECT count(*) INTO :cnt FROM ow_wfjgmx_out WHERE ( ow_wfjgmx_out.scid = :arg_scid ) And ( ow_wfjgmx_out.relid = :arg_wfjgid ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询外协计划是否已开发货单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF IF cnt > 0 THEN rslt = 0 arg_msg = "外加工计划已经有相关发出单据,不可以撤消审核" GOTO ext END IF //检查是否有退回类型的外协订单 SELECT count(*) INTO :cnt FROM u_order_wfjg INNER JOIN u_order_wfjgMx ON u_order_wfjg.scid = u_order_wfjgMx.scid AND u_order_wfjg.wfjgID = u_order_wfjgMx.wfjgID WHERE u_order_wfjg.scid = :arg_scid AND u_order_wfjgMx.relwfjgid2 = :arg_wfjgid AND u_order_wfjg.billtype = 2 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_order_wfjg SET Status = 0, permit_emp = '', permit_date = :nulldate 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 String ls_unit_rq Decimal lde_rate_rq, lde_addqty FOR ll_i = 1 To it_mxbt //更新主计划 外协需求已订货数 IF uo_option_update_rqmtrlqty_wfjg = 1 THEN IF wfjgmx[ll_i].orderid > 0 THEN IF uo_order.f_assign_rqmtrlqty(scid,wfjgmx[ll_i].orderid,wfjgmx[ll_i].wrkGrpid,& wfjgmx[ll_i].mtrlid,wfjgmx[ll_i].mtrlcode,& wfjgmx[ll_i].Status,wfjgmx[ll_i].woodcode,& wfjgmx[ll_i].pcode,0 - wfjgmx[ll_i].qty,3,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF wfjgmx[ll_i].relwfjgid > 0 THEN //处理单位转换,确认完成数量 SELECT unit, rate INTO :ls_unit_rq, :lde_rate_rq FROM u_request_wfjgMx WHERE ( printid = :wfjgmx[ll_i].relprintid ) AND ( wfjgid = :wfjgmx[ll_i].relwfjgid ) And ( scid = :scid ); IF ls_unit_rq = wfjgmx[ll_i].unit THEN //单位相同, 直接用订单数量 lde_addqty = wfjgmx[ll_i].uqty ELSE //单位不同, 先转库存单位, 在转申购单位 lde_addqty = wfjgmx[ll_i].qty lde_addqty = lde_addqty / lde_rate_rq END IF IF billtype = 2 THEN IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 //增加申请单退回数 IF uo_wfjg.uof_add_thqty(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid,lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 4 THEN //增加申请单返工数 IF uo_wfjg.uof_add_fgqty(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid, 0 - lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 IF uo_wfjg.addmxcmpl(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid, 0 - lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.trycmplwfjg(arg_scid,wfjgmx[ll_i].relwfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //1.通过外协申请单,找到对应的主计划, 更新主计划的已领数 Dec lde_addqty_out_allow, lde_addqty_out_detrqty_allow, lde_addqty_out_ed, lde_sonscale Long ll_cnt_tree Decimal lde_addqty_allow, ld_qty, lde_addqty_ed IF wfjgmx[ll_i].iforder > 0 THEN lde_addqty_out_ed = 0 ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid) // IF lde_addqty > 0 THEN // lde_addqty_ed = 0 // 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 // // SELECT ordertype,mtrlid,ifwforder, acmpqty // INTO :li_ordertype_order,:ll_mtrlid_order,:li_ifwfjgorder, :lde_addqty_allow // FROM u_order_ml // WHERE u_order_ml.scid = :scid // AND u_order_ml.orderid = :ll_orderid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询相关订单明细:'+String(wfjgmx[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 = wfjgmx[ll_i].mtrlid THEN // // IF lde_addqty_allow > 0 THEN // ld_qty = Min(lde_addqty - lde_addqty_ed, lde_addqty_allow) // lde_addqty_ed += ld_qty // // IF ld_qty > 0 THEN // // IF uo_order.addmxcmpl(scid,ll_orderid, 0 - ld_qty,arg_msg,False) = 0 THEN // arg_msg = '更新行:'+String(ll_i)+','+arg_msg // rslt = 0 // GOTO ext // END IF // // IF uo_order.tryfinishorder(scid,ll_orderid,arg_msg,False) = 0 THEN // arg_msg = '更新行:'+String(ll_i)+','+arg_msg // rslt = 0 // GOTO ext // END IF // END IF // END IF // END IF // NEXT // END IF //lde_addqty = 0 - lde_addqty IF lde_addqty > 0 THEN FOR ll_j = 1 To it_mxbt_out IF wfjgmx_out[ll_j].relprintid = wfjgmx[ll_i].printid THEN 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_cnt_tree = ds_mrpmx.Retrieve(arg_scid,ll_orderid) ll_row_f = ds_mrpmx.Find("u_orderrqmtrl_tree_mtrlid = "+String(wfjgmx[ll_i].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 & And ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_m] = wfjgmx_out[ll_j].mtrlid 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(dstrqty) INTO :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 dstrqty > 0; IF sqlca.SQLCode <> 0 THEN lde_addqty_out_allow = 0 lde_addqty_out_detrqty_allow = 0 END IF IF lde_addqty_out_detrqty_allow > 0 THEN ld_qty_out = Min(Round(lde_addqty * lde_sonscale,dec_round) - lde_addqty_out_ed, lde_addqty_out_detrqty_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,0 - ld_qty_out,0 - ld_costamt_out,arg_msg,False,-1,ld_overqty) = 0 THEN arg_msg = '相关订单明细:'+String(wfjgmx[ll_i].printid)+',更新生产计划已领数失败,'+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 END IF NEXT END IF //IF lde_addqty > 0 THEN END IF //IF wfjgmx[ll_i].iforder > 0 THEN END IF //IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 END IF //IF wfjgmx[ll_i].relwfjgid > 0 THEN //处理退回类型的对应订单退回数 IF wfjgmx[ll_i].relwfjgid2 > 0 And wfjgmx[ll_i].relprintid2 > 0 THEN // wfjgmx[ll_i].qty < 0 IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 IF uof_add_thqty(arg_scid, wfjgmx[ll_i].relwfjgid2, wfjgmx[ll_i].relprintid2,wfjgmx[ll_i].mtrlcode, wfjgmx[ll_i].qty,arg_msg, False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE //退回,终止收货 IF stopaddqty(arg_scid, wfjgmx[ll_i].relwfjgid2, wfjgmx[ll_i].relprintid2,wfjgmx[ll_i].mtrlcode, wfjgmx[ll_i].qty,0,'取消终止收货',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_destroy_outware_wfjg( arg_msg) = 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 Destroy ds_rqwfjg Destroy ds_mrpmx 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 ls_buyQty,ls_assignQty String ls_mtrlcode SELECT u_order_wfjgMx.Qty, u_order_wfjgMx.consignedqty, u_mtrldef.mtrlcode INTO :ls_buyQty, :ls_assignQty, :ls_mtrlcode FROM u_order_wfjgMx ,u_mtrldef WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.MtrlID = :arg_mtrlid ) AND ( u_mtrldef.MtrlID = u_order_wfjgMx.MtrlID ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外加工计划已完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ls_buyQty < ls_assignQty + arg_addqty THEN rslt = 0 ARG_MSG = "物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+String(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ext: p_reset() 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, i DateTime null_dt SetNull(null_dt) 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 arg_finishtype = 5 OR arg_finishtype = 6 THEN IF Status <> 1 THEN rslt = 0 ARG_MSG = "外加工计划只有在进行状态才可以执行完成,请核对" GOTO ext END IF ELSE IF arg_finishtype = 1 THEN IF Status <> 6 THEN rslt = 0 ARG_MSG = "外加工计划只有在手动完成状态下才可以执行取消手动完成,请核对" GOTO ext END IF END IF END IF IF arg_finishtype = 5 OR arg_finishtype = 6 THEN UPDATE u_order_wfjg SET status = :arg_finishtype, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) And ( u_order_wfjg.scid = :arg_scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF ELSE UPDATE u_order_wfjg SET status = :arg_finishtype, accomplishdate = :null_dt, finishemp = '' WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) And ( u_order_wfjg.scid = :arg_scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致取消手动完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF //更新明细完成状态 FOR i = 1 To it_mxbt IF finishmx(arg_scid, arg_wfjgid, wfjgmx[i].printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer firstpermit (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,ll_0_mtrlwareid Int li_thflag Long ll_lp,ll_k, ll_j, ll_m String ls_mtrlcode_out Decimal ld_costamt_out ,ld_qty_out,ld_cost_out Long ll_wrkgrpid_out,ll_mtrlid_out String ls_status_out,ls_woodcode_out,ls_pcode_out Decimal ld_overqty Long ll_workgroupid Long ll_cnt_order,ll_orderid,ll_wrkGrpid,ll_mtrlid,ll_row_f,ll_mtrlid_order Int li_ordertype_order,li_ifwfjgorder String ls_wrkgrpname String ls_unit Decimal ld_rate IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_autocreate_outware = -1000 THEN rslt = 0 arg_msg = '选项:[087]外协订单审核自动生成仓库外协发出单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[343]外协订单审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF uo_request_wfjg uo_wfjg uo_wfjg = Create uo_request_wfjg uo_wfjg.commit_transaction = sqlca 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' ds_mrpmx.SetTransObject(sqlca) 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_order_wfjg SET Permit_Emp = :arg_emp, Permit_date = getdate(), Status = 1 WHERE wfjgid = :arg_wfjgid AND scid = :arg_scid And Status = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF String ls_unit_rq Decimal lde_rate_rq, lde_addqty FOR ll_i = 1 To it_mxbt //更新主计划 外协需求已订货数 IF uo_option_update_rqmtrlqty_wfjg = 1 THEN IF wfjgmx[ll_i].orderid > 0 THEN IF uo_order.f_assign_rqmtrlqty(scid,wfjgmx[ll_i].orderid,wfjgmx[ll_i].wrkGrpid,& wfjgmx[ll_i].mtrlid,wfjgmx[ll_i].mtrlcode,wfjgmx[ll_i].Status,& wfjgmx[ll_i].woodcode,wfjgmx[ll_i].pcode,wfjgmx[ll_i].qty,3,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF //更新外协申请单已订货数 IF wfjgmx[ll_i].relwfjgid > 0 THEN Dec lde_thqty, lde_fgqty //处理单位转换,确认完成数量 SELECT unit, rate INTO :ls_unit_rq, :lde_rate_rq FROM u_request_wfjgMx WHERE ( printid = :wfjgmx[ll_i].relprintid ) AND ( wfjgid = :wfjgmx[ll_i].relwfjgid ) And ( scid = :scid ) Using commit_transaction; IF ls_unit_rq = wfjgmx[ll_i].unit THEN //单位相同, 直接用订单数量 lde_addqty = wfjgmx[ll_i].uqty ELSE //单位不同, 先转库存单位, 在转申购单位 lde_addqty = wfjgmx[ll_i].qty lde_addqty = lde_addqty / lde_rate_rq END IF IF billtype = 2 THEN //增加申请单退回数 IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 IF uo_wfjg.uof_add_thqty(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid, 0 - lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 4 THEN //增加申请单返工数 IF uo_wfjg.uof_add_fgqty(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid, lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF wfjgmx[ll_i].thtype = 0 THEN // 退回, 终止收货的 除外 IF uo_wfjg.addmxcmpl(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid,& lde_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //尝试自动完成申请单 IF uo_wfjg.trycmplwfjg(arg_scid,wfjgmx[ll_i].relwfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //1.通过外协申请单,找到对应的主计划, 更新主计划的已领数 Dec lde_addqty_out_allow, lde_addqty_out_detrqty_allow, lde_addqty_out_ed, lde_sonscale Long ll_cnt_tree Decimal lde_addqty_allow, ld_qty, lde_addqty_ed IF wfjgmx[ll_i].iforder > 0 THEN lde_addqty_out_ed = 0 ll_cnt_order = ds_rqwfjg.Retrieve(arg_scid,wfjgmx[ll_i].relwfjgid,wfjgmx[ll_i].relprintid) // IF lde_addqty > 0 THEN // lde_addqty_ed = 0 // 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 // // SELECT ordertype,mtrlid,ifwforder, orderqty - acmpqty - stopqty // INTO :li_ordertype_order,:ll_mtrlid_order,:li_ifwfjgorder, :lde_addqty_allow // FROM u_order_ml // WHERE u_order_ml.scid = :scid // AND u_order_ml.orderid = :ll_orderid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询相关订单明细:'+String(wfjgmx[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 = wfjgmx[ll_i].mtrlid THEN // // IF lde_addqty_allow > 0 THEN // ld_qty = Min(lde_addqty - lde_addqty_ed, lde_addqty_allow) // lde_addqty_ed += ld_qty // // IF ld_qty > 0 THEN // IF uo_order.addmxcmpl(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(scid,ll_orderid,arg_msg,False) = 0 THEN // arg_msg = '更新行:'+String(ll_i)+','+arg_msg // rslt = 0 // GOTO ext // END IF // END IF // END IF // END IF // NEXT // END IF //更新对应主计划的已领数 IF lde_addqty > 0 THEN FOR ll_j = 1 To it_mxbt_out IF wfjgmx_out[ll_j].relprintid = wfjgmx[ll_i].printid THEN 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_cnt_tree = ds_mrpmx.Retrieve(arg_scid,ll_orderid) ll_row_f = ds_mrpmx.Find("u_orderrqmtrl_tree_mtrlid = "+String(wfjgmx[ll_i].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 & And ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_m] = wfjgmx_out[ll_j].mtrlid 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(rqqty - 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 rqqty > 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 = '相关订单明细:'+String(wfjgmx[ll_i].printid)+',更新生产计划已领数失败,'+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 //如果系1:N时是有问题的 NEXT IF Abs(Round(lde_addqty * lde_sonscale,dec_round)) = Abs(lde_addqty_out_ed) THEN EXIT END IF NEXT END IF NEXT END IF //IF lde_addqty > 0 THEN END IF //if wfjgmx[ll_i].thtype = 0 then END IF //IF wfjgmx[ll_i].iforder > 0 THEN END IF //IF wfjgmx[ll_i].relwfjgid > 0 THEN //处理退回类型的对应外协订单退回数 IF wfjgmx[ll_i].relwfjgid2 > 0 And wfjgmx[ll_i].relprintid2 > 0 THEN // wfjgmx[ll_i].qty < 0 IF wfjgmx[ll_i].thtype = 0 THEN //退回, 重新发出 IF uof_add_thqty(arg_scid, wfjgmx[ll_i].relwfjgid2, wfjgmx[ll_i].relprintid2,wfjgmx[ll_i].mtrlcode, 0 - wfjgmx[ll_i].qty,arg_msg, False) = 0 THEN arg_msg = '更新行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE //退回,终止收货 IF stopaddqty(arg_scid, wfjgmx[ll_i].relwfjgid2, wfjgmx[ll_i].relprintid2,wfjgmx[ll_i].mtrlcode, 0 - wfjgmx[ll_i].qty,0,'终止收货',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_create_outware_wfjg(arg_scid, arg_emp, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 2 THEN //退回单,自动完成 UPDATE u_order_wfjg SET Status = 5, accomplishdate = getdate(), finishemp = :publ_operator 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 Status = 5 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 //Destroy uo_ware Destroy ds_rqwfjg 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 p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>1 and Status<>2 THEN rslt=0 arG_MSG="外加工计划只有在进行状态或暂停状态才可以执行暂停/取消暂停操作" goto ext END IF if Status=1 then UPDATE u_order_wfjg SET Status = 2 , stopemp=:publ_operator WHERE wfjgid = :arg_wfjgid and scid = :arg_scid using commit_transaction ; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致暂停外加工计划操作失败"+"~n"+commit_transaction.SQLErrText goto ext end if else UPDATE u_order_wfjg SET Status = 1,stopemp='' WHERE wfjgid = :arg_wfjgid and scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致取消暂停外加工计划操作失败"+"~n"+commit_transaction.SQLErrText goto ext end if end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if rslt=0 then rollback using commit_transaction; elseif arg_ifcommit and rslt = 1 then COMMIT using commit_transaction; end if p_reset() return (rslt) end function public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//trycmplbuytask(arg_taskid,arg_msg,arg_ifcommit) Int rslt = 1,cnt = 0 DateTime null_dt SetNull(null_dt) IF arg_wfjgid <= 0 THEN rslt = 0 arg_msg = '错误外加工计划唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 1 IF status <> 1 THEN arg_msg = "外加工计划只有在进行状态下才可以执行设完成状态" ELSEIF status <> 5 THEN arg_msg = "外加工计划只有在完成状态下才可以执行撤消完成状态" END IF GOTO ext END IF Decimal ls_zerook Boolean if_finish if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_order_wfjgMx.qty * (1 - u_mtrldef.downrate) - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty - u_order_wfjgMx.stopqty - u_order_wfjgMx.thqty FROM u_order_wfjgMx,u_mtrldef WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.stopflag = 0 ) and ( u_order_wfjgMx.mtrlid = u_mtrldef.mtrlid ) USING commit_transaction ; OPEN zero_cur; FETCH zero_cur INTO :ls_zerook; DO WHILE commit_transaction.SQLCode = 0 IF if_finish THEN IF ls_zerook > 0 THEN if_finish = FALSE END IF FETCH zero_cur INTO :ls_zerook; LOOP CLOSE zero_cur; IF status = 1 AND if_finish THEN UPDATE u_order_wfjg SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) And ( u_order_wfjg.scid = :arg_scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致外加工计划完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF IF status = 5 AND NOT if_finish THEN UPDATE u_order_wfjg SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid ) And ( u_order_wfjg.scid = :arg_scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致外加工计划撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit 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);//UPDATEbegin(long arg_taskid,ref string arg_msg) //从置对象,设定业务类型与关联ID,准备更新进仓单 //0 fail 1 success Long rslt = 1,CNT = 0 IF arg_wfjgid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 ARG_MSG = '已经处于审核或完成等状态,不可以修改,如果外加工计划未完成并要修改请先撤销审核' GOTO ext END IF it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() 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 ls_buyQty,ls_assignQty String ls_mtrlcode SELECT u_order_wfjgMx_out.Qty, u_order_wfjgMx_out.consignedqty, u_mtrldef.mtrlcode INTO :ls_buyQty, :ls_assignQty, :ls_mtrlcode FROM u_order_wfjgMx_out ,u_mtrldef WHERE ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx_out.scid = :arg_scid ) AND ( u_order_wfjgMx_out.MtrlID = :arg_mtrlid ) AND ( u_mtrldef.MtrlID = u_order_wfjgMx_out.MtrlID ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外加工计划已完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ls_buyQty < ls_assignQty + arg_addqty THEN rslt = 0 ARG_MSG = "物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+String(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ext: p_reset() Return (rslt) end function public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 String ls_mtrlcode Long ll_printid SELECT u_order_wfjgMx_out.printid INTO :ll_printid FROM u_order_wfjgMx_out WHERE ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx_out.scid = :arg_scid ) AND ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) AND ( u_order_wfjgMx_out.status = :arg_status ) AND ( u_order_wfjgMx_out.woodcode = :arg_woodcode ) AND ( u_order_wfjgMx_out.pcode = :arg_pcode ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外加工计划已完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF addmxcmpl_out(arg_scid, arg_wfjgid, ll_printid, arg_addqty, arg_msg, arg_ifcommit) = 0 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt //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 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 ls_buyqty,ls_consignedqty //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_order_wfjgMx_out.qty, // u_order_wfjgMx_out.consignedqty + u_order_wfjgMx_out.stopqty // INTO :ls_buyqty, // :ls_consignedqty // FROM u_order_wfjgMx_out // WHERE ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND // ( u_order_wfjgMx_out.scid = :arg_scid ) AND // ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) AND // ( u_order_wfjgMx_out.status = :arg_status ) AND // ( u_order_wfjgMx_out.woodcode = :arg_woodcode ) AND // ( u_order_wfjgMx_out.pcode = :arg_pcode ) USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询外加工计划已完成数量操作失败"+"~n"+commit_transaction.SQLErrText // GOTO ext //END IF // //IF ls_buyqty < ls_consignedqty + arg_addqty THEN // rslt = 0 // arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+String(arg_addqty,'#,##0.0#') // GOTO ext //END IF // //UPDATE u_order_wfjgMx_out // SET consignedqty = consignedqty + :arg_addqty // WHERE ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND // ( u_order_wfjgMx_out.scid = :arg_scid ) AND // ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) AND // ( u_order_wfjgMx_out.status = :arg_status ) AND // ( u_order_wfjgMx_out.woodcode = :arg_woodcode ) AND // ( u_order_wfjgMx_out.pcode = :arg_pcode ) USING commit_transaction; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或错误产品唯一码导致外加工计划完成数量操作失败"+"~n"+commit_transaction.SQLErrText // GOTO ext //END IF // // //it_newbegin = FALSE //it_updatebegin = FALSE //ext: //IF rslt = 0 THEN // ROLLBACK USING commit_transaction; //ELSEIF arg_ifcommit and rslt = 1 THEN // COMMIT USING commit_transaction; //END IF // // //p_reset() //Return (rslt) end function public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Decimal ls_buyqty,ls_consignedqty IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_wfjg_orderid <= 0 THEN rslt = 0 ARG_MSG = '错误外加工计划唯一码' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_wfjgmx WHERE u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND u_order_wfjgmx.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 long ll_mtrlid SELECT u_order_wfjgMx.mtrlid INTO :ll_mtrlid FROM u_mtrldef,u_order_wfjgMx WHERE u_mtrldef.mtrlid = u_order_wfjgMx.mtrlid AND u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.wfjgid = :arg_wfjg_orderid AND u_order_wfjgMx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF Decimal ld_uprate,ld_upqty IF uo_option_ifovertask = 1 THEN //不允许超收 SELECT u_order_wfjgMx.qty, u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty INTO :ls_buyqty, :ls_consignedqty FROM u_order_wfjgMx WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjg_orderid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgmx.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 ls_buyqty < ls_consignedqty + arg_wasteqty THEN rslt = 0 ARG_MSG = "物料["+arg_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_wasteqty,'#,##0.0#') GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN //允许但按比例限制 SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+Trim(arg_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT u_order_wfjgMx.qty, u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty INTO :ls_buyqty, :ls_consignedqty FROM u_order_wfjgMx WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjg_orderid ) AND ( u_order_wfjgMx.scid = :arg_scid ) AND ( u_order_wfjgMx.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 ls_buyqty * (1 + ld_uprate) + ld_upqty < ls_consignedqty + arg_wasteqty THEN rslt = 0 arg_msg = "物料:"+arg_mtrlcode+"未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+"允许超收上限:"+string(ls_buyqty * (1 + ld_uprate) + ld_upqty - ls_consignedqty,'#,##0.00##')+",不能入库"+String(arg_wasteqty,'#,##0.0#') GOTO ext END IF END IF UPDATE u_order_wfjgmx SET u_order_wfjgmx.wasteqty = u_order_wfjgmx.wasteqty + :arg_wasteqty WHERE u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND u_order_wfjgmx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致更新外加工计划损耗操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新单据完成状态 IF trycmplbuytask(arg_scid,arg_wfjg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_wfjg_orderid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF 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);Int rslt = 1 Long cnt = 0 Long ll_row_f IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[343]外协订单审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' 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 arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "外协计划只有在进行状态下才可以执行进仓" ELSEIF status <> 5 THEN arg_msg = "外协计划只有在完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_buyqty,ls_consignedqty String ls_mtrlcode,ls_taskcode Long ll_orderid,ll_wrkGrpid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode Long ll_iforder Long ll_cnt_order,ll_mtrlid_order Int li_ordertype_order_ml Decimal ld_uprate,ld_upqty String ls_pfcode SELECT u_mtrldef.mtrlcode, u_order_wfjgMx.orderid, u_order_wfjgMx.wrkGrpid, u_order_wfjgMx.mtrlid, u_order_wfjgMx.status, u_order_wfjgMx.woodcode, u_order_wfjgMx.pcode, u_order_wfjgmx.iforder, u_order_wfjgmx.pfcode, u_order_wfjg.taskcode, u_order_wfjgMx.qty, u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty + u_order_wfjgMx.stopqty INTO :ls_mtrlcode, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ll_iforder, :ls_pfcode, :ls_taskcode, :ls_buyqty, :ls_consignedqty FROM u_mtrldef,u_order_wfjgMx,u_order_wfjg WHERE u_mtrldef.mtrlid = u_order_wfjgMx.mtrlid AND u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.wfjgid = :arg_wfjgid AND u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgid = u_order_wfjg.wfjgid AND u_order_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 uo_option_ifovertask = 1 THEN //不允许超收 IF ls_buyqty < ls_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+",的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制 SELECT uprate,upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ls_buyqty * (1 + ld_uprate) + ld_upqty < ls_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+"允许超收上限:"+String(ls_buyqty * (1 + ld_uprate) + ld_upqty - ls_consignedqty,'#,##0.00##')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF END IF UPDATE u_order_wfjgMx SET consignedqty = consignedqty + :arg_addqty WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.printid = :arg_printid ) AND ( u_order_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 //更新单据完成状态 IF trycmplbuytask(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_wfjgid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF //更新相关发出明细已领数 IF uof_add_dstrqty(arg_scid, arg_wfjgid, arg_printid, ll_orderid, ll_mtrlid, ls_pfcode, ls_buyqty, arg_addqty, 0,arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_update_rqmtrlqty_wfjg = 1 THEN IF ll_orderid > 0 And ll_iforder = 1 THEN SELECT count(*),ordertype,mtrlid INTO :ll_cnt_order,:li_ordertype_order_ml,:ll_mtrlid_order FROM u_order_ml WHERE scid = :arg_scid AND orderid = :ll_orderid GROUP BY ordertype,mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询相关订单:'+ls_taskcode+' 明细:'+String(arg_printid)+',相关生产计划:'+String(ll_orderid)+'计划类型失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_cnt_order > 0 THEN IF uo_order.f_assign_inqty(arg_scid,ll_orderid,ll_wrkGrpid,3,& ll_mtrlid,ls_mtrlcode,ls_status,& ls_woodcode,ls_pcode,arg_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF arg_msg = uo_order.arg_msg_str END IF END IF END IF //更新外协主计划进仓数 IF uof_add_order_acmpqty(arg_scid,arg_wfjgid, arg_printid,arg_addqty, 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 stopqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rewfjgqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long ll_row_f DateTime server_datetime DateTime null_dt String ls_stopemp Decimal ld_notconsignedqty,ld_rewfjgqty_ori decimal ld_r_uqty,ld_r_consignedqty,ls_buyqty, lde_add_stopqty,lde_stopqty Long ll_relwfjgid,ll_relprintid long ll_orderid, ll_mtrlid String ls_pfcode decimal lde_sonscale IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_request_wfjg uo_rqwfjg uo_rqwfjg = create uo_request_wfjg uo_rqwfjg.commit_transaction = commit_transaction 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 IsNull(arg_stopqty) THEN arg_stopqty = 0 IF IsNull(arg_rewfjgqty) THEN arg_rewfjgqty = 0 IF arg_stopqty < 0 THEN arG_MSG = '订单终止数不能少于0,请检查' rslt = 0 GOTO ext END IF IF arg_rewfjgqty > arg_stopqty THEN arG_MSG = '重新外协数不能大于终止数,请检查' rslt = 0 GOTO ext END IF IF arg_stopqty = 0 THEN SetNull(server_datetime) ls_stopemp = '' arg_stopreason = '' ELSE ls_stopemp = publ_operator END IF SetNull(null_dt) 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 u_order_wfjgMx.Qty - u_order_wfjgMx.consignedqty - u_order_wfjgmx.wasteqty - u_order_wfjgmx.thqty, u_order_wfjgMx.relwfjgid, u_order_wfjgMx.relprintid, u_order_wfjgMx.orderid, u_order_wfjgMx.mtrlid, u_order_wfjgMx.pfcode, u_order_wfjgMx.Qty, u_order_wfjgMx.stopqty INTO :ld_notconsignedqty, :ll_relwfjgid, :ll_relprintid, :ll_orderid, :ll_mtrlid, :ls_pfcode, :ls_buyqty, :lde_stopqty 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 arG_MSG = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF lde_add_stopqty = arg_stopqty - lde_stopqty IF arg_stopqty > ld_notconsignedqty THEN arG_MSG = '明细物料'+arg_mtrlcode+'未收货数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF IF ll_relwfjgid > 0 THEN SELECT qty,consignedqty INTO :ld_r_uqty,:ld_r_consignedqty FROM u_request_wfjgMx WHERE scid = :arg_scid AND wfjgid = :ll_relwfjgid And printid = :ll_relprintid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询物料'+arg_mtrlcode+'相关申购单信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_rewfjgqty > ld_r_consignedqty THEN rslt = 0 arG_MSG = '物料'+arg_mtrlcode+'相关外协申请单的已订货数为:'+String(ld_r_consignedqty,'#,##0.##########')+',不能重新外协:'+String(arg_rewfjgqty,'#,##0.##########') GOTO ext END IF SELECT rewfjgqty INTO :ld_rewfjgqty_ori FROM u_order_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询明细物料'+arg_mtrlcode+'原重新外协数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_request_wfjgMx SET consignedqty = consignedqty + :ld_rewfjgqty_ori - :arg_rewfjgqty WHERE scid = :arg_scid AND wfjgid = :ll_relwfjgid And printid = :ll_relprintid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arG_MSG = '更新明细'+arg_mtrlcode+'相关外协申请单的已订货数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_rqwfjg.trycmplwfjg(arg_scid,ll_relwfjgid,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_order_wfjgMx SET stopqty = :arg_stopqty, rewfjgqty = :arg_rewfjgqty, stopemp = :ls_stopemp, stopdate = :server_datetime, stopreason = :arg_stopreason WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新单据完成状态 IF trycmplbuytask(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_wfjgid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ////lhd2013-8-7 //更新相关发出明细已领数 IF uof_add_dstrqty(arg_scid, arg_wfjgid, arg_printid, ll_orderid, ll_mtrlid, ls_pfcode, ls_buyqty, lde_add_stopqty,1, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ////lhd2013-8-7_end ////更新外协主计划终止数 //IF uof_add_order_stopqty(arg_scid,arg_wfjgid, arg_printid,arg_addqty, arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF ext: destroy uo_rqwfjg 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 uof_splitqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_splitqty, datetime arg_newdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Decimal ld_notconsignedqty,ld_uqty Long ll_new_pid IF IsNull(arg_splitqty) THEN arg_splitqty = 0 IF arg_splitqty <= 0 THEN arG_MSG = '订单拆分数不能少于或等于0,请检查' 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 u_order_wfjgMx.Qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.stopqty - u_order_wfjgMx.wasteqty, u_order_wfjgMx.Qty INTO :ld_notconsignedqty, :ld_uqty FROM u_order_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_splitqty > ld_notconsignedqty THEN arG_MSG = '明细物料'+arg_mtrlcode+'未收货数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能拆分:'+String(arg_splitqty,'#,##0.##########') rslt = 0 GOTO ext END IF IF arg_splitqty = ld_uqty THEN rslt = 0 arG_MSG = '拆分数不能与采购数量相同' GOTO ext END IF SELECT max(printid) INTO :ll_new_pid FROM u_order_wfjgMx WHERE scid = :arg_scid And wfjgid = :arg_wfjgid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '查询明细行ID失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ll_new_pid = ll_new_pid + 1 INSERT INTO u_order_wfjgMx ( scid, qty, price, rebate, mtrlid, wfjgID, dscrp, printid, requiredate, orderid, storageid, jgdscrp, status, iforder, woodcode, pcode, wrkGrpid, relwfjgid, relprintid, pfcode, relcode, unit, uqty, rate) SELECT scid, :arg_splitqty, price, rebate, mtrlid, wfjgID, dscrp, :ll_new_pid, :arg_newdate, orderid, storageid, jgdscrp, status, iforder, woodcode, pcode, wrkGrpid, relwfjgid, relprintid, pfcode, relcode, unit, case rate when 0 then :arg_splitqty else :arg_splitqty / rate END , rate FROM u_order_wfjgMx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wfjgid = 0 //还原taskid rslt = 0 arG_MSG = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF UPDATE u_order_wfjgMx SET uqty = case rate when 0 then uqty - :arg_splitqty else uqty - :arg_splitqty / rate end , qty = qty - :arg_splitqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新原明细行数量失败,'+commit_transaction.SQLErrText rslt = 0 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 stopqty_out (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_datetime DateTime null_dt String ls_stopemp Decimal ld_notconsignedqty,ld_rewfjgqty_ori Decimal ld_r_uqty,ld_r_consignedqty Long ll_relwfjgid,ll_relprintid IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 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 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 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 u_order_wfjgMx_out.Qty - u_order_wfjgMx_out.consignedqty INTO :ld_notconsignedqty FROM u_order_wfjgMx_out WHERE u_order_wfjgMx_out.scid = :arg_scid AND u_order_wfjgMx_out.wfjgid = :arg_wfjgid And u_order_wfjgMx_out.printid = :arg_printid Using commit_transaction ; 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_order_wfjgMx_out 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 commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新发出明细终止数 IF stopqty_out_mx(arg_scid, arg_wfjgid, arg_printid, arg_mtrlcode, arg_stopqty, arg_msg, False) = 0 THEN rslt = 0 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_out (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_uqty, decimal arg_rate, long arg_relprintid, long arg_wrkgrpid);//return 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,ls_i IF uo_option_2unit = -1000 THEN rslt = 0 arg_msg = '选项:[067]外协双单位核算,读取初始默认值失败,操作取消!' GOTO ext END IF IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" 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_price) THEN arg_price = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_relprintid) THEN arg_relprintid = 0 IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 IF arg_mtrlid = 0 Or arg_qty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF IF uo_option_2unit = 1 THEN IF arg_uqty = 0 THEN arg_msg = '发出明细,行:'+String(arg_printid)+ ',请输入计价数量' rslt = 0 GOTO ext END IF IF Trim(arg_unit) = '' THEN arg_msg = '发出明细,行:'+String(arg_printid)+ ',请选择计价单位' rslt = 0 GOTO ext END IF END IF IF arg_price < 0 THEN rslt = 0 arg_msg = "发出明细,物料:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF //检查物料id SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "发出明细,查询操作失败,物料编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "发出明细,错误的产品编号: "+String(arg_mtrlcode) GOTO ext END IF If (sys_option_nostorageid_wfjg = 1 Or sys_option_autocreate_outware = 1) And & dscrp <> '返工单审核自动生成的外协订单' And & dscrp <> '盘盈单审核自动生成的外协订单' THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_storage Where u_storage.storageid = :arg_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库编号>>发出明细" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的仓库编号>>发出明细" GOTO ext END IF END IF IF arg_iforder = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml WHERE u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :scid; IF sqlca.SQLCode <> 0 Or cnt = 0 THEN rslt = 0 arg_msg = '生产计划:'+arg_ordercode+'不存在' GOTO ext END IF END IF FOR ls_i = 1 To it_mxbt_out //合并重复项 IF wfjgmx_out[ls_i].mtrlid = arg_mtrlid And & wfjgmx_out[ls_i].orderid = arg_orderid And & wfjgmx_out[ls_i].status = arg_status And & wfjgmx_out[ls_i].woodcode = arg_woodcode And & wfjgmx_out[ls_i].pcode = arg_pcode And & wfjgmx_out[ls_i].unit = arg_unit And & wfjgmx_out[ls_i].relprintid = arg_relprintid And & wfjgmx_out[ls_i].wrkgrpid = arg_wrkgrpid 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 GOTO _hz END IF NEXT //写入内容 it_mxbt_out++ wfjgmx_out[it_mxbt_out].iforder = arg_iforder wfjgmx_out[it_mxbt_out].orderid = arg_orderid wfjgmx_out[it_mxbt_out].ordercode = arg_ordercode wfjgmx_out[it_mxbt_out].mtrlid = arg_mtrlid wfjgmx_out[it_mxbt_out].qty = arg_qty wfjgmx_out[it_mxbt_out].dscrp = arg_dscrp wfjgmx_out[it_mxbt_out].mtrlcode = arg_mtrlcode wfjgmx_out[it_mxbt_out].printid = arg_printid wfjgmx_out[it_mxbt_out].price = arg_price wfjgmx_out[it_mxbt_out].storageid = arg_storageid wfjgmx_out[it_mxbt_out].status = arg_status wfjgmx_out[it_mxbt_out].woodcode = arg_woodcode wfjgmx_out[it_mxbt_out].pcode = arg_pcode wfjgmx_out[it_mxbt_out].relprintid = arg_relprintid wfjgmx_out[it_mxbt_out].wrkgrpid = arg_wrkgrpid IF uo_option_2unit = 0 THEN arg_uqty = arg_qty END IF wfjgmx_out[it_mxbt_out].unit = arg_unit wfjgmx_out[it_mxbt_out].uqty = arg_uqty IF arg_uqty <> 0 THEN wfjgmx_out[it_mxbt_out].rate = arg_qty / arg_uqty ELSE wfjgmx_out[it_mxbt_out].rate = 0 END IF _hz: FOR ls_i = 1 To it_mxbt_out_hz //合并重复项 IF wfjghz_out[ls_i].mtrlid = arg_mtrlid And & wfjghz_out[ls_i].status = arg_status And & wfjghz_out[ls_i].woodcode = arg_woodcode And & wfjghz_out[ls_i].pcode = arg_pcode And & wfjghz_out[ls_i].unit = arg_unit THEN wfjghz_out[ls_i].qty = wfjghz_out[ls_i].qty + arg_qty wfjghz_out[ls_i].uqty = wfjghz_out[ls_i].uqty + arg_uqty IF uof_chk_ware_outhz(ls_i, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rslt = 1 GOTO ext END IF NEXT it_mxbt_out_hz++ wfjghz_out[it_mxbt_out_hz].mtrlid = arg_mtrlid wfjghz_out[it_mxbt_out_hz].qty = arg_qty wfjghz_out[it_mxbt_out_hz].dscrp = arg_dscrp wfjghz_out[it_mxbt_out_hz].mtrlcode = arg_mtrlcode wfjghz_out[it_mxbt_out_hz].printid = it_mxbt_out_hz wfjghz_out[it_mxbt_out_hz].price = arg_price wfjghz_out[it_mxbt_out_hz].storageid = arg_storageid wfjghz_out[it_mxbt_out_hz].status = arg_status wfjghz_out[it_mxbt_out_hz].woodcode = arg_woodcode wfjghz_out[it_mxbt_out_hz].pcode = arg_pcode IF uo_option_2unit = 0 THEN arg_uqty = arg_qty END IF wfjghz_out[it_mxbt_out_hz].unit = arg_unit wfjghz_out[it_mxbt_out_hz].uqty = arg_uqty IF arg_uqty <> 0 THEN wfjghz_out[it_mxbt_out_hz].rate = arg_qty / arg_uqty ELSE wfjghz_out[it_mxbt_out_hz].rate = 0 END IF IF uof_chk_ware_outhz(it_mxbt_out_hz, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //发出明细 对应 汇总明细的printid ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer addmx_sptcheckqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_wfjgid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "采购订单只有在进行状态下才可以执行质检" ELSEIF status <> 5 THEN arg_msg = "采购订单只有在完成状态下才可以撤销质检" END IF GOTO ext END IF Decimal ld_qty,ld_sptcheckqty Long ll_mtrlid String ls_mtrlcode Decimal ld_uprate,ld_upqty,ld_stopqty SELECT u_mtrldef.mtrlcode, u_order_wfjgMx.qty, u_order_wfjgMx.sptcheckqty, u_order_wfjgMx.stopqty, u_order_wfjgMx.mtrlid INTO :ls_mtrlcode, :ld_qty, :ld_sptcheckqty, :ld_stopqty, :ll_mtrlid FROM u_mtrldef,u_order_wfjgMx WHERE u_mtrldef.mtrlid = u_order_wfjgMx.mtrlid AND 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 = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_ifovertask = 1 THEN //不允许超收 IF ld_qty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未质检数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能质检"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制 SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ld_qty * (1 + ld_uprate) + ld_upqty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty, '#,##0.0#########')+"允许超收上限:"+String(ld_qty * (1 + ld_uprate) + ld_upqty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能入库"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF END IF IF arg_addqty < 0 And arg_addqty + ld_sptcheckqty < 0 THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"已质检数量只有"+String(ld_sptcheckqty, '#,##0.0###')+",不能撤审质检数量"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF UPDATE u_order_wfjgMx SET sptcheckqty = sptcheckqty + :arg_addqty WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx.printid = :arg_printid ) AND ( u_order_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 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_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 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 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 ls_buyqty,ls_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_order_wfjgMx_out.qty, u_order_wfjgMx_out.consignedqty + u_order_wfjgMx_out.stopqty, u_mtrldef.mtrlcode INTO :ls_buyqty, :ls_consignedqty, :ls_mtrlcode FROM u_order_wfjgMx_out INNER join u_mtrldef on u_order_wfjgMx_out.mtrlid = u_mtrldef.mtrlid WHERE ( u_order_wfjgMx_out.scid = :arg_scid ) AND ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_order_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 ls_buyqty > 0 THEN //正常发出订单 IF ls_buyqty < ls_consignedqty + arg_addqty THEN rslt = 0 arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ELSE //退回订单 IF Abs(ls_buyqty) < Abs(ls_consignedqty + arg_addqty) THEN rslt = 0 arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+String(arg_addqty,'#,##0.0#') GOTO ext END IF END IF UPDATE u_order_wfjgMx_out SET consignedqty = consignedqty + :arg_addqty WHERE ( u_order_wfjgMx_out.scid = :arg_scid ) AND ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) AND ( u_order_wfjgMx_out.printid = :arg_printid ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协订单完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新发出明细完成数 IF addmxcmpl_out_mx(arg_scid, arg_wfjgid, arg_printid, ls_mtrlcode, arg_addqty, 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 p_reset() Return (rslt) end function public function integer finishmx (long arg_scid, long arg_wfjgid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);//先更新单据的状态, 在更新明细的状态 Int rslt = 1 Long cnt = 0 IF arg_wfjgid <= 0 THEN rslt = 0 arg_msg = '错误外协订单唯一码' GOTO ext END IF IF arg_printid <= 0 THEN rslt = 0 arg_msg = '错误外协订单明细ID唯一码' GOTO ext END IF Int li_status, li_stopflag Int li_finishflag = 0 String ls_finishemp DateTime ldt_finishdate Decimal lde_qty,lde_consignedqty, lde_wasteqty, lde_thqty Long ll_mtrlid Decimal ld_upqty,lde_stopqty, lde_downrate SELECT status INTO :li_status FROM u_order_wfjg WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询外协订单状态失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_status = 5 Or li_status = 6 Or li_status = 3 THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE SELECT u_order_wfjgmx.mtrlid, u_order_wfjgmx.qty, u_order_wfjgmx.consignedqty, u_order_wfjgmx.stopqty, u_order_wfjgmx.stopflag, u_order_wfjgMx.wasteqty, u_order_wfjgMx.thqty, u_mtrldef.downrate INTO :ll_mtrlid, :lde_qty, :lde_consignedqty, :lde_stopqty, :li_stopflag, :lde_wasteqty, :lde_thqty, :lde_downrate FROM u_mtrldef,u_order_wfjgmx WHERE u_mtrldef.mtrlid = u_order_wfjgmx.mtrlid AND 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 = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_stopflag = 1 THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE IF lde_qty * (1 - lde_downrate) - lde_wasteqty - lde_stopqty - lde_consignedqty - lde_thqty <= 0 THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE li_finishflag = 0 ls_finishemp = '' SetNull(ldt_finishdate ) END IF END IF END IF UPDATE u_order_wfjgmx SET finishflag = :li_finishflag, finishemp = :ls_finishemp, finishdate = :ldt_finishdate 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 = '更新外协订单明细完成状态失败,'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = '更新外协订单明细信息不存在,'+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF //p_reset() Return (rslt) end function public function integer stopqty_out_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // 事件: uo_order_wfjg.stopqty_out_mx() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value long arg_scid // value long arg_wfjgid // value long arg_printid // value string arg_mtrlcode // value decimal arg_stopqty // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年01月03日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Int rslt = 1 Long ll_cnt = 1, i s_order_wfjgmx_out s_out_mx[] Long ll_printid Decimal lde_qty, lde_consignedqty, lde_stopqty Int li_stopflag Decimal lde_addqty, lde_restqty //lde_addqty = arg_qty //用游标读取明细 DECLARE cur_out_mx CURSOR FOR SELECT u_order_wfjgmx_out_mx.printid, u_order_wfjgmx_out_mx.qty, u_order_wfjgmx_out_mx.consignedqty, u_order_wfjgmx_out_mx.stopqty, u_order_wfjgmx_out_mx.stopflag FROM u_order_wfjgmx_out_mx INNER JOIN u_order_wfjgMx_out ON u_order_wfjgmx_out_mx.scid = u_order_wfjgMx_out.scid AND u_order_wfjgmx_out_mx.wfjgid = u_order_wfjgMx_out.wfjgID AND u_order_wfjgmx_out_mx.mtrlid = u_order_wfjgMx_out.MtrlID AND u_order_wfjgmx_out_mx.status = u_order_wfjgMx_out.status AND u_order_wfjgmx_out_mx.woodcode = u_order_wfjgMx_out.woodcode AND u_order_wfjgmx_out_mx.pcode = u_order_wfjgMx_out.pcode AND u_order_wfjgmx_out_mx.unit = u_order_wfjgMx_out.unit WHERE u_order_wfjgMx_out.scid = :arg_scid AND u_order_wfjgMx_out.wfjgid = :arg_wfjgid AND u_order_wfjgMx_out.printid = :arg_printid Using commit_transaction; OPEN cur_out_mx; FETCH cur_out_mx Into :s_out_mx[ll_cnt].printid, :s_out_mx[ll_cnt].qty, :s_out_mx[ll_cnt].consignedqty, :s_out_mx[ll_cnt].stopqty, :s_out_mx[ll_cnt].stopflag; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ FETCH cur_out_mx Into :s_out_mx[ll_cnt].printid, :s_out_mx[ll_cnt].qty, :s_out_mx[ll_cnt].consignedqty, :s_out_mx[ll_cnt].stopqty, :s_out_mx[ll_cnt].stopflag; LOOP CLOSE cur_out_mx; ll_cnt -= 1 //arg_stopqty 必定 >0 lde_restqty = arg_stopqty FOR i = 1 To ll_cnt ll_printid = s_out_mx[i].printid IF s_out_mx[i].qty - s_out_mx[i].consignedqty <= 0 THEN UPDATE u_order_wfjgmx_out_mx SET stopqty = 0 WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :ll_printid Using commit_transaction ; ELSE lde_addqty = Min(lde_restqty, s_out_mx[i].qty - s_out_mx[i].consignedqty) lde_restqty -= lde_addqty UPDATE u_order_wfjgmx_out_mx SET stopqty = :lde_addqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :ll_printid Using commit_transaction ; END IF IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT //更新发出明细终止数 //IF arg_stopqty > 0 THEN // lde_restqty = arg_stopqty // FOR i = 1 To ll_cnt // ll_printid = s_out_mx[i].printid // IF s_out_mx[i].qty - s_out_mx[i].consignedqty - s_out_mx[i].stopqty <= 0 THEN CONTINUE // // lde_addqty = Min(lde_restqty, s_out_mx[i].qty - s_out_mx[i].consignedqty - s_out_mx[i].stopqty) // lde_restqty -= lde_addqty // // UPDATE u_order_wfjgmx_out_mx // SET stopqty = stopqty + :lde_addqty // WHERE scid = :arg_scid // AND wfjgid = :arg_wfjgid // And printid = :ll_printid Using commit_transaction ; // IF commit_transaction.SQLCode <> 0 THEN // arG_MSG = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF lde_restqty <= 0 THEN EXIT // NEXT //ELSE // lde_restqty = Abs(arg_stopqty) // FOR i = 1 To ll_cnt // ll_printid = s_out_mx[i].printid // IF s_out_mx[i].stopqty <= 0 THEN CONTINUE // // lde_addqty = Min(lde_restqty, s_out_mx[i].stopqty) // lde_restqty -= lde_addqty // // UPDATE u_order_wfjgmx_out_mx // SET stopqty = stopqty - :lde_addqty // WHERE scid = :arg_scid // AND wfjgid = :arg_wfjgid // And printid = :ll_printid Using commit_transaction ; // IF commit_transaction.SQLCode <> 0 THEN // arG_MSG = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF lde_restqty <= 0 THEN EXIT // NEXT //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 addmxcmpl_out_mx (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // 事件: uo_order_wfjg.addmxcmpl_out_mx() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value long arg_scid // value long arg_wfjgid // value long arg_printid // value string arg_mtrlcode // value decimal arg_addqty // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年01月03日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Int rslt = 1 Long ll_cnt = 1, i s_order_wfjgmx_out s_out_mx[] Long ll_printid Decimal lde_qty, lde_consignedqty, lde_stopqty Int li_stopflag Decimal lde_addqty, lde_restqty //lde_addqty = arg_qty //用游标读取明细 DECLARE cur_out_mx CURSOR FOR SELECT u_order_wfjgmx_out_mx.printid, u_order_wfjgmx_out_mx.qty, u_order_wfjgmx_out_mx.consignedqty, u_order_wfjgmx_out_mx.stopqty, u_order_wfjgmx_out_mx.stopflag FROM u_order_wfjgmx_out_mx INNER JOIN u_order_wfjgMx_out ON u_order_wfjgmx_out_mx.scid = u_order_wfjgMx_out.scid AND u_order_wfjgmx_out_mx.wfjgid = u_order_wfjgMx_out.wfjgID AND u_order_wfjgmx_out_mx.mtrlid = u_order_wfjgMx_out.MtrlID AND u_order_wfjgmx_out_mx.status = u_order_wfjgMx_out.status AND u_order_wfjgmx_out_mx.woodcode = u_order_wfjgMx_out.woodcode AND u_order_wfjgmx_out_mx.pcode = u_order_wfjgMx_out.pcode AND u_order_wfjgmx_out_mx.unit = u_order_wfjgMx_out.unit WHERE u_order_wfjgMx_out.scid = :arg_scid AND u_order_wfjgMx_out.wfjgid = :arg_wfjgid AND u_order_wfjgMx_out.printid = :arg_printid Using commit_transaction; OPEN cur_out_mx; FETCH cur_out_mx Into :s_out_mx[ll_cnt].printid, :s_out_mx[ll_cnt].qty, :s_out_mx[ll_cnt].consignedqty, :s_out_mx[ll_cnt].stopqty, :s_out_mx[ll_cnt].stopflag; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ FETCH cur_out_mx Into :s_out_mx[ll_cnt].printid, :s_out_mx[ll_cnt].qty, :s_out_mx[ll_cnt].consignedqty, :s_out_mx[ll_cnt].stopqty, :s_out_mx[ll_cnt].stopflag; LOOP CLOSE cur_out_mx; ll_cnt -= 1 //更新发出明细完成数 IF arg_addqty > 0 THEN //增加完成 lde_restqty = arg_addqty FOR i = 1 To ll_cnt ll_printid = s_out_mx[i].printid IF s_out_mx[i].qty > 0 THEN //审核, 正常增完成数 IF s_out_mx[i].qty - s_out_mx[i].consignedqty - s_out_mx[i].stopqty <= 0 THEN CONTINUE lde_addqty = Min(lde_restqty, s_out_mx[i].qty - s_out_mx[i].consignedqty - s_out_mx[i].stopqty) lde_restqty -= lde_addqty ELSE //撤审,退回减完成数 IF Abs(s_out_mx[i].consignedqty) = 0 THEN CONTINUE lde_addqty = Min(lde_restqty, Abs(s_out_mx[i].consignedqty)) lde_restqty -= lde_addqty lde_addqty = 0 - lde_addqty END IF UPDATE u_order_wfjgmx_out_mx SET consignedqty = consignedqty + :lde_addqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :ll_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新明细'+arg_mtrlcode+'完成数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF lde_restqty <= 0 THEN EXIT NEXT ELSE lde_restqty = Abs(arg_addqty) FOR i = 1 To ll_cnt ll_printid = s_out_mx[i].printid IF s_out_mx[i].qty > 0 THEN //审核, 正常增完成数 IF s_out_mx[i].consignedqty <= 0 THEN CONTINUE lde_addqty = Min(lde_restqty, s_out_mx[i].consignedqty) lde_restqty -= lde_addqty ELSE //撤审,退回减完成数 IF Abs(s_out_mx[i].qty) - Abs(s_out_mx[i].consignedqty) - Abs(s_out_mx[i].stopqty) <= 0 THEN CONTINUE lde_addqty = Min(lde_restqty, Abs(s_out_mx[i].qty) - Abs(s_out_mx[i].consignedqty) - Abs(s_out_mx[i].stopqty)) lde_restqty -= lde_addqty lde_addqty = 0 - lde_addqty END IF UPDATE u_order_wfjgmx_out_mx SET consignedqty = consignedqty - :lde_addqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :ll_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新明细'+arg_mtrlcode+'完成数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF lde_restqty <= 0 THEN EXIT NEXT 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 stopbuytask (long arg_scid, long arg_wfjgid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0, i 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 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_order_wfjg SET Status = 5, 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 //更新明细完成状态 FOR i = 1 To it_mxbt IF finishmx(arg_scid, arg_wfjgid, wfjgmx[i].printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT 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 acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_wrkgrpid, long arg_relwfjgid, long arg_relprintid, string arg_pfcode, string arg_unit, decimal arg_uqty, decimal arg_rate, decimal arg_taxrate, string arg_plancode, long arg_relwfjgid2, long arg_relprintid2); 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.price = arg_price s_mx.dscrp = arg_dscrp s_mx.mtrlcode = arg_mtrlcode s_mx.printid = arg_printid s_mx.requiredate = arg_requiredate s_mx.storageid = arg_storageid 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.relwfjgid = arg_relwfjgid s_mx.relprintid = arg_relprintid s_mx.pfcode = arg_pfcode s_mx.unit = arg_unit s_mx.uqty = arg_uqty s_mx.rate = arg_rate s_mx.taxrate = arg_taxrate s_mx.plancode = arg_plancode s_mx.relwfjgid2 = arg_relwfjgid2 s_mx.relprintid2 = arg_relprintid2 s_mx.rebate = 1 s_mx.thtype = 0 return acceptmx(s_mx, arg_msg) /* Int rslt = 1 Long cnt = 0,ls_i Int li_mtrlkind,li_iffp String ls_relcode int li_iflimitprice uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF uo_option_2unit = -1000 THEN rslt = 0 arg_msg = '选项:[067]外协双单位核算,读取初始默认值失败,操作取消!' GOTO ext END IF IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" 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_price) THEN arg_price = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_jgdscrp) THEN arg_jgdscrp = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_relwfjgid) THEN arg_relwfjgid = 0 IF IsNull(arg_relprintid) THEN arg_relprintid = 0 IF IsNull(arg_pfcode) THEN arg_pfcode = '' if isnull(arg_taxrate) then arg_taxrate = 0 if isnull(arg_plancode) then arg_plancode = '' IF IsNull(arg_relwfjgid2) THEN arg_relwfjgid2 = 0 IF IsNull(arg_relprintid2) THEN arg_relprintid2 = 0 IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF uo_option_2unit = 1 THEN IF arg_uqty = 0 THEN arg_msg = '收货明细,行:'+String(arg_printid)+ ',请输入计价数量' rslt = 0 GOTO ext END IF IF Trim(arg_unit) = '' THEN arg_msg = '收货明细,行:'+String(arg_printid)+ ',请选择计价单位' rslt = 0 GOTO ext END IF END IF IF arg_price < 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",物料:" + String(arg_mtrlcode)+",单价错误" GOTO ext END IF if arg_taxrate < 0 then rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",物料:" + String(arg_mtrlcode)+",税率错误" GOTO ext END IF SELECT mtrlkind,iffp, iflimitprice INTO :li_mtrlkind,:li_iffp, :li_iflimitprice FROM u_mtrldef WHERE u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",查询物料:"+arg_mtrlcode+',属性失败,'+commit_transaction.SQLErrText GOTO ext END IF if sys_option_nostorageid_wfjg = 1 then cnt = 0 SELECT count(*) INTO :cnt FROM u_storage WHERE u_storage.storageid = :arg_storageid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",查询操作失败,仓库编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",错误的仓库编号" GOTO ext END IF end if IF arg_relwfjgid > 0 THEN IF arg_relprintid = 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",错误的外协申请单明细ID" GOTO ext END IF SELECT taskcode INTO :ls_relcode FROM u_request_wfjg WHERE scid = :scid AND wfjgid = :arg_relwfjgid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(arg_printid)+",查询外协申请单单失败,"+commit_transaction.SQLErrText GOTO ext END IF ELSE ls_relcode = '' END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '收货明细,行:'+String(arg_printid)+',查询物料清单失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '收货明细,行:'+String(arg_printid)+',查询物料清单不存在,请检查' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '收货明细,行:'+String(arg_printid)+',查询物料清单重复,请检查' rslt = 0 GOTO ext END IF IF Date(Requiredate) > Date(arg_requiredate) THEN arg_msg = '收货明细,行:'+String(arg_printid)+',回厂日期不能在下单日期前' rslt = 0 GOTO ext END IF decimal lde_mrate, lde_rebate lde_mrate = 1 lde_rebate = 1 Long ll_moneyid_native SELECT moneyid INTO :ll_moneyid_native From cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '收货明细,行:'+String(arg_printid)+',查询本位币币种id失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_iflimitprice = 1 THEN IF f_power_ind(3709,sys_msg_pow) Or Not sys_power_issuper THEN IF uo_sptprice.uof_check_price(0,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_jgdscrp,ll_moneyid_native,arg_price * lde_mrate * lde_rebate,Requiredate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF 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].price = arg_price wfjgmx[it_mxbt].Requiredate = arg_requiredate wfjgmx[it_mxbt].storageid = arg_storageid 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].relwfjgid = arg_relwfjgid wfjgmx[it_mxbt].relprintid = arg_relprintid wfjgmx[it_mxbt].pfcode = arg_pfcode wfjgmx[it_mxbt].relcode = ls_relcode wfjgmx[it_mxbt].taxrate = arg_taxrate wfjgmx[it_mxbt].iffp = li_iffp wfjgmx[it_mxbt].plancode = arg_plancode wfjgmx[it_mxbt].relwfjgid2 = arg_relwfjgid2 wfjgmx[it_mxbt].relprintid2 = arg_relprintid2 //IF uo_option_2unit = 0 THEN // arg_uqty = arg_qty //END IF wfjgmx[it_mxbt].unit = arg_unit wfjgmx[it_mxbt].uqty = arg_uqty IF arg_uqty <> 0 THEN wfjgmx[it_mxbt].rate = arg_qty / arg_uqty ELSE wfjgmx[it_mxbt].rate = 0 END IF ext: destroy uo_sptprice 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, string arg_mtrlcode, decimal arg_thqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_notconsignedqty,lde_thqty Int li_status Long ll_orderid,ll_mtrlid,ll_row_f Long ll_lp,ll_k String ls_mtrlcode_out Decimal ld_costamt_out ,ld_qty_out,ld_cost_out Long ll_wrkgrpid_out,ll_mtrlid_out String ls_status_out,ls_woodcode_out,ls_pcode_out Decimal ld_overqty,ld_arrry_qty Long ll_workgroupid String ls_wrkgrpname String ls_pfcode Long cnt Decimal ls_buyqty decimal lde_sonscale uo_order_wfjg uo_wfjg uo_wfjg = Create uo_order_wfjg uo_wfjg.commit_transaction = sqlca uo_order_ml uo_order uo_order = Create uo_order_ml //datastore ds_mrpmx //ds_mrpmx = Create datastore //ds_mrpmx.DataObject = 'ds_order_ml_mrpmx' //ds_mrpmx.SetTransObject(sqlca) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF IsNull(arg_thqty) THEN arg_thqty = 0 IF arg_thqty = 0 THEN GOTO ext END IF SELECT u_order_wfjg.status INTO :li_status FROM u_order_wfjg WHERE u_order_wfjg.scid = :arg_scid AND u_order_wfjg.wfjgid = :arg_wfjgid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF li_status <> 1 And li_status <> 5 THEN arg_msg = '订单只能在进行状态或自动完成状态才能操作' rslt = 0 GOTO ext END IF SELECT u_order_wfjgMx.Qty - u_order_wfjgMx.consignedqty - u_order_wfjgmx.wasteqty - u_order_wfjgmx.stopqty - u_order_wfjgmx.thqty, u_order_wfjgmx.thqty, u_order_wfjgmx.orderid, u_order_wfjgMx.mtrlid, u_order_wfjgMx.pfcode, u_order_wfjgMx.Qty INTO :ld_notconsignedqty, :lde_thqty, :ll_orderid, :ll_mtrlid, :ls_pfcode, :ls_buyqty 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 sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_thqty > 0 THEN IF arg_thqty > ld_notconsignedqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未完成数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能退回:'+String(arg_thqty,'#,##0.##########') rslt = 0 GOTO ext END IF ELSE //<0 IF Abs(arg_thqty) > lde_thqty THEN arg_msg = '明细物料'+arg_mtrlcode+'已退回数只有:'+String(lde_thqty,'#,##0.##########') +'不能撤销退回:'+String(arg_thqty,'#,##0.##########') rslt = 0 GOTO ext END IF END IF //更新相关发出明细已领数 IF uof_add_dstrqty(arg_scid, arg_wfjgid, arg_printid, ll_orderid, ll_mtrlid, ls_pfcode, ls_buyqty, arg_thqty, 0,arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_order_wfjgMx SET thqty = thqty + :arg_thqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新单据完成状态 IF uo_wfjg.trycmplbuytask(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF uo_wfjg.finishmx(arg_scid, arg_wfjgid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_wfjg Destroy uo_order //Destroy ds_mrpmx 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 uof_add_nonconsignedqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_order_wfjgMx SET nonconsignedqty = Qty - consignedqty - wasteqty - stopqty - thqty WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新单据完成状态 IF trycmplbuytask(arg_scid,arg_wfjgid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_wfjgid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 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 Int li_mtrlkind,li_iffp String ls_relcode int li_iflimitprice uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF uo_option_2unit = -1000 THEN rslt = 0 arg_msg = '选项:[067]外协双单位核算,读取初始默认值失败,操作取消!' GOTO ext END IF IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" 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.price) THEN s_mx.price = 0 IF IsNull(s_mx.rebate) THEN s_mx.rebate = 1 IF s_mx.rebate = 0 THEN s_mx.rebate = 1 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.storageid) THEN s_mx.storageid = 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.relwfjgid) THEN s_mx.relwfjgid = 0 IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0 IF IsNull(s_mx.pfcode) THEN s_mx.pfcode = '' if isnull(s_mx.taxrate) then s_mx.taxrate = 0 if isnull(s_mx.plancode) then s_mx.plancode = '' IF IsNull(s_mx.relwfjgid2) THEN s_mx.relwfjgid2 = 0 IF IsNull(s_mx.relprintid2) THEN s_mx.relprintid2 = 0 IF IsNull(s_mx.thtype) THEN s_mx.thtype = 0 IF s_mx.mtrlid = 0 OR s_mx.qty = 0 THEN rslt = 1 GOTO ext END IF IF uo_option_2unit = 1 THEN IF s_mx.uqty = 0 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+ ',请输入计价数量' rslt = 0 GOTO ext END IF IF Trim(s_mx.unit) = '' THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+ ',请选择计价单位' rslt = 0 GOTO ext END IF END IF IF s_mx.price < 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",物料:" + String(s_mx.mtrlcode)+",单价错误" GOTO ext END IF if s_mx.taxrate < 0 then rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",物料:" + String(s_mx.mtrlcode)+",税率错误" GOTO ext END IF IF s_mx.rebate <= 0 or s_mx.rebate > 1 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+",物料:" + String(s_mx.mtrlcode)+",折扣错误,只能取范围(0, 1]" rslt = 0 GOTO ext END IF SELECT mtrlkind,iffp, iflimitprice INTO :li_mtrlkind,:li_iffp, :li_iflimitprice FROM u_mtrldef WHERE u_mtrldef.mtrlid = :s_mx.mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",查询物料:"+s_mx.mtrlcode+',属性失败,'+commit_transaction.SQLErrText GOTO ext END IF if sys_option_nostorageid_wfjg = 1 then cnt = 0 SELECT count(*) INTO :cnt FROM u_storage WHERE u_storage.storageid = :s_mx.storageid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",查询操作失败,仓库编号" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",错误的仓库编号" GOTO ext END IF end if IF s_mx.relwfjgid > 0 THEN IF s_mx.relprintid = 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",错误的外协申请单明细ID" GOTO ext END IF SELECT taskcode INTO :ls_relcode FROM u_request_wfjg WHERE scid = :scid AND wfjgid = :s_mx.relwfjgid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '收货明细,行:'+String(s_mx.printid)+",查询外协申请单单失败,"+commit_transaction.SQLErrText GOTO ext END IF ELSE ls_relcode = '' END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :s_mx.mtrlid AND pfcode = :s_mx.pfcode USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+',查询物料清单失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+',查询物料清单不存在,请检查' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+',查询物料清单重复,请检查' rslt = 0 GOTO ext END IF IF Date(Requiredate) > Date(s_mx.requiredate) THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+',回厂日期不能在下单日期前' rslt = 0 GOTO ext END IF decimal lde_mrate, lde_rebate lde_mrate = 1 lde_rebate = 1 Long ll_moneyid_native SELECT moneyid INTO :ll_moneyid_native From cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '收货明细,行:'+String(s_mx.printid)+',查询本位币币种id失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_iflimitprice = 1 THEN IF f_power_ind(3709,sys_msg_pow) Or Not sys_power_issuper THEN IF uo_sptprice.uof_check_price(0,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.jgdscrp,ll_moneyid_native,s_mx.price * lde_mrate * lde_rebate,Requiredate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF //写入内容 it_mxbt++ wfjgmx[it_mxbt].printid = s_mx.printid 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].mtrlcode = s_mx.mtrlcode wfjgmx[it_mxbt].qty = s_mx.qty wfjgmx[it_mxbt].unit = s_mx.unit wfjgmx[it_mxbt].uqty = s_mx.uqty IF s_mx.uqty <> 0 THEN wfjgmx[it_mxbt].rate = s_mx.qty / s_mx.uqty ELSE wfjgmx[it_mxbt].rate = 0 END IF wfjgmx[it_mxbt].price = s_mx.price wfjgmx[it_mxbt].rebate = s_mx.rebate wfjgmx[it_mxbt].storageid = s_mx.storageid 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].plancode = s_mx.plancode wfjgmx[it_mxbt].dscrp = s_mx.dscrp wfjgmx[it_mxbt].Requiredate = s_mx.requiredate wfjgmx[it_mxbt].wrkgrpid = s_mx.wrkgrpid wfjgmx[it_mxbt].relwfjgid = s_mx.relwfjgid wfjgmx[it_mxbt].relprintid = s_mx.relprintid wfjgmx[it_mxbt].pfcode = s_mx.pfcode wfjgmx[it_mxbt].relcode = ls_relcode wfjgmx[it_mxbt].taxrate = s_mx.taxrate wfjgmx[it_mxbt].iffp = li_iffp wfjgmx[it_mxbt].relwfjgid2 = s_mx.relwfjgid2 wfjgmx[it_mxbt].relprintid2 = s_mx.relprintid2 wfjgmx[it_mxbt].thtype = s_mx.thtype ext: destroy uo_sptprice IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer stopaddqty (long arg_scid, long arg_wfjgid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rewfjgqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);//arg_stopqty //本次要终止的数量 ; > 0增加终止; <0 减少终止; Int rslt = 1 Long ll_mtrlid Decimal lde_qty, lde_stopqty, lde_rewfjgqty Decimal ld_notconsignedqty IF IsNull(arg_stopqty) THEN arg_stopqty = 0 IF IsNull(arg_rewfjgqty) THEN arg_rewfjgqty = 0 SELECT u_order_wfjgMx.Qty - u_order_wfjgMx.consignedqty - u_order_wfjgmx.wasteqty - u_order_wfjgmx.thqty, u_order_wfjgMx.mtrlid, u_order_wfjgMx.Qty, u_order_wfjgMx.stopqty INTO :ld_notconsignedqty, :ll_mtrlid, :lde_qty, :lde_stopqty 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 arG_MSG = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_mtrlcode = "" THEN SELECT mtrlcode INTO :arg_mtrlcode FROM u_mtrldef Where mtrlid = :ll_mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '查询明细物料资料失败' rslt = 0 GOTO ext END IF END IF IF arg_stopqty > 0 THEN IF arg_stopqty > ld_notconsignedqty THEN arG_MSG = '明细物料'+arg_mtrlcode+'未完成数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF ELSE IF Abs(arg_stopqty) > lde_stopqty THEN arG_MSG = '明细物料'+arg_mtrlcode+'已终止数只有:'+String(lde_stopqty,'#,##0.##########') +'不能取消终止:'+String(Abs(arg_stopqty),'#,##0.##########') rslt = 0 GOTO ext END IF END IF lde_stopqty = lde_stopqty + arg_stopqty //最新的终止数 IF stopqty(arg_scid, arg_wfjgid, arg_printid, arg_mtrlcode,lde_stopqty, arg_rewfjgqty ,arg_stopreason,arG_MSG,arg_ifcommit ) = 0 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_chk_ware_outhz (long arg_row, ref string arg_msg);Int rslt = 1 ////////////////////////////////////// // //==================================================================== // 按外协订单发出明细内容自动建立 //==================================================================== Int li_thflag Long i Decimal ld_sumqty IF uo_option_autocreate_outware = 1 And Trim(dscrp) <> '返工单审核自动生成的外协订单' And Trim(dscrp) <> '盘盈单审核自动生成的外协订单' THEN IF wfjghz_out[arg_row].qty > 0 THEN //检查库存 SELECT sum(noallocqty) INTO :ld_sumqty FROM u_mtrlware WHERE mtrlid = :wfjghz_out[arg_row].mtrlid AND storageid = :wfjghz_out[arg_row].storageid AND status = :wfjghz_out[arg_row].status AND woodcode = :wfjghz_out[arg_row].woodcode And pcode = :wfjghz_out[arg_row].pcode Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询 '+wfjghz_out[arg_row].mtrlcode+' 库存数量失败'+'~r~n'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_sumqty) THEN ld_sumqty = 0 IF ld_sumqty < wfjghz_out[arg_row].qty THEN rslt = 0 arg_msg = wfjghz_out[arg_row].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjghz_out[arg_row].qty,'#,##0.##########')+',不能自动生成发出单' GOTO ext END IF ELSEIF billtype = 2 And wfjghz_out[arg_row].qty < 0 THEN //退回的,检查供应商库存 SELECT sum(noallocqty) INTO :ld_sumqty FROM ow_wfjgware WHERE mtrlid = :wfjghz_out[arg_row].mtrlid AND sptid = :sptid AND status = :wfjghz_out[arg_row].status AND woodcode = :wfjghz_out[arg_row].woodcode And pcode = :wfjghz_out[arg_row].pcode Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询 '+wfjghz_out[arg_row].mtrlcode+' 外协商库存数量失败'+'~r~n'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_sumqty) THEN ld_sumqty = 0 IF ld_sumqty < Abs(wfjghz_out[arg_row].qty) THEN rslt = 0 arg_msg = wfjghz_out[arg_row].mtrlcode+' 外协商库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjghz_out[arg_row].qty,'#,##0.##########')+',不能自动生成退回单' GOTO ext END IF END IF END IF /////////////////////////////////////// // ext: RETURN rslt end function public function integer uof_create_outware_wfjg (long arg_scid, string arg_emp, ref string arg_msg);Int rslt = 1 Long cnt Int li_thflag Long ll_0_mtrlwareid Dec ld_rate String ls_unit //==================================================================== // 按外协订单发出明细内容自动建立 //==================================================================== uo_outware_wfjg uo_ware uo_ware = Create uo_outware_wfjg uo_ware.commit_transaction = sqlca Long i,j Long ll_mx Decimal ld_sumqty,ld_acceptqty,ld_lastqty Long ll_mtrlwareid[] Decimal ld_noallocqty[] Long ll_printid = 0 IF uo_option_autocreate_outware = 1 And Trim(dscrp) <> '返工单审核自动生成的外协订单' And Trim(dscrp) <> '盘盈单审核自动生成的外协订单' THEN IF it_mxbt_out_hz > 0 THEN DateTime server_dt SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF uo_ware.newbegin(scid,4,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.outdate = requiredate uo_ware.outrep = arg_emp uo_ware.dscrp = '外协订单 '+taskcode+' 自动生成' uo_ware.relid = wfjgid //相关ID uo_ware.sptid = sptid uo_ware.part = taskcode uo_ware.if_getid_ture = False //自动区分类型,发出/退回 IF wfjghz_out[1].qty >= 0 THEN uo_ware.thflag = 0 li_thflag = 0 ELSE uo_ware.thflag = 1 li_thflag = 1 END IF //检查是否够库存 FOR i = 1 To it_mxbt_out_hz IF li_thflag = 0 THEN //发出单,检查库存数 SELECT sum(noallocqty) INTO :ld_sumqty FROM u_mtrlware WHERE mtrlid = :wfjghz_out[i].mtrlid AND storageid = :wfjghz_out[i].storageid AND status = :wfjghz_out[i].status AND woodcode = :wfjghz_out[i].woodcode And pcode = :wfjghz_out[i].pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询 '+wfjghz_out[i].mtrlcode+' 库存数量失败'+'~r~n'+commit_transaction.SQLErrText GOTO ext END IF IF IsNull(ld_sumqty) THEN ld_sumqty = 0 IF ld_sumqty < wfjghz_out[i].qty THEN rslt = 0 arg_msg = wfjghz_out[i].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjghz_out[i].qty,'#,##0.##########')+',不能自动生成发出单' GOTO ext END IF ELSE //退回单,检查库存id cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrlware WHERE mtrlid = :wfjghz_out[i].mtrlid AND storageid = :wfjghz_out[i].storageid AND status = :wfjghz_out[i].status AND woodcode = :wfjghz_out[i].woodcode And pcode = :wfjghz_out[i].pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询 '+wfjghz_out[i].mtrlcode+' 退回仓库是否有库存记录失败'+'~r~n'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN ll_0_mtrlwareid = f_sys_scidentity(arg_scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) IF ll_0_mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrlware(scid, mtrlwareid, mtrlid, storageid, status, woodcode, pcode) VALUES(:arg_scid, :ll_0_mtrlwareid, :wfjghz_out[i].mtrlid, :wfjghz_out[i].storageid, :wfjghz_out[i].status, :wfjghz_out[i].woodcode, :wfjghz_out[i].pcode) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '物料:'+wfjghz_out[i].mtrlcode+' 退回仓增加0库存记录失败'+'~r~n'+commit_transaction.SQLErrText GOTO ext END IF END IF END IF NEXT //插入明细 FOR i = 1 To it_mxbt_out_hz ll_mx = 1 DECLARE cur_mx CURSOR FOR SELECT noallocqty,mtrlwareid FROM u_mtrlware WHERE mtrlid = :wfjghz_out[i].mtrlid AND storageid = :wfjghz_out[i].storageid AND status = :wfjghz_out[i].status AND woodcode = :wfjghz_out[i].woodcode AND pcode = :wfjghz_out[i].pcode ORDER BY noallocqty DESC Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; DO WHILE commit_transaction.SQLCode = 0 ll_mx++ FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx]; LOOP CLOSE cur_mx; ld_lastqty = wfjghz_out[i].qty FOR j = 1 To ll_mx - 1 IF ld_lastqty <= ld_noallocqty[j] THEN ld_acceptqty = ld_lastqty ld_lastqty = 0 ELSE ld_acceptqty = ld_noallocqty[j] ld_lastqty = ld_lastqty - ld_noallocqty[j] END IF ll_printid++ IF wfjghz_out[i].rate <= 0 THEN ld_rate = 1 ls_unit = wfjghz_out[i].unit_def ELSE ld_rate = wfjghz_out[i].rate ls_unit = wfjghz_out[i].unit END IF IF uo_ware.acceptmx(ll_mtrlwareid[j],& ld_acceptqty / ld_rate,& ls_unit,& ld_acceptqty,0,& wfjghz_out[i].dscrp,& ll_printid,& arg_msg,& 1,& wfjgid,& wfjghz_out[i].printid,& 0,0) = 0 THEN rslt = 0 GOTO ext END IF IF ld_lastqty = 0 THEN EXIT NEXT IF ld_lastqty > 0 THEN arg_msg = wfjghz_out[i].mtrlcode+' 库存欠数量:'+String(ld_lastqty,'#,##0.##########')+',不能自动生成发出单' rslt = 0 GOTO ext END IF NEXT //保存发出单 IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.getinfo(scid,uo_ware.outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //审核发出单 IF uo_ware.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // END IF // IF billtype = 2 THEN //退回单,自动更新原外协订单的已退回数 // // END IF END IF ext: Destroy uo_ware RETURN rslt end function public function integer uof_destroy_outware_wfjg (ref string arg_msg);Int rslt = 1 Long cnt //撤审并删除自动生成的仓库外协发出单 uo_outware_wfjg uo_ware uo_ware = Create uo_outware_wfjg uo_ware.commit_transaction = sqlca IF uo_option_autocreate_outware = 1 And Trim(dscrp) <> '返工单审核自动生成的外协订单' THEN cnt = 0 SELECT count(*) INTO :cnt FROM ow_wfjg_out WHERE relid = :wfjgid AND billtype = 4 And scid = :scid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有自动建立的外协发出单失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 1 THEN Long ll_outwareid SELECT outwareid INTO :ll_outwareid FROM ow_wfjg_out WHERE relid = :wfjgid AND billtype = 4 And scid = :scid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询自动建立的外协发出单信息失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF IF uo_ware.getinfo(scid,ll_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.del(scid,ll_outwareid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF // ext: Destroy uo_ware RETURN rslt end function public function integer uof_add_order_acmpqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);// 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 //ll_i = arg_row lde_addqty = Abs(arg_addqty) String ls_mtrlcode,ls_taskcode Long ll_mtrlid Long ll_iforder Int li_ordertype_order_ml Long ll_relwfjgid, ll_relprintid SELECT u_mtrldef.mtrlcode, u_order_wfjgMx.orderid, u_order_wfjgMx.mtrlid, u_order_wfjgmx.iforder, u_order_wfjg.taskcode, u_order_wfjgMx.relwfjgid, u_order_wfjgMx.relprintid INTO :ls_mtrlcode, :ll_orderid, :ll_mtrlid, :ll_iforder, :ls_taskcode, :ll_relwfjgid, :ll_relprintid FROM u_mtrldef,u_order_wfjgMx,u_order_wfjg WHERE u_mtrldef.mtrlid = u_order_wfjgMx.mtrlid AND u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.wfjgid = :arg_wfjgid AND u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgid = u_order_wfjg.wfjgid AND u_order_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 ll_iforder > 0 THEN ll_cnt_order = ds_rqwfjg.Retrieve(scid,ll_relwfjgid,ll_relprintid) 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 = ll_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(scid,ll_orderid,ld_qty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_order.tryfinishorder(scid,ll_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF lde_addqty <= 0 THEN EXIT // 完成 END IF END IF NEXT END IF ext: Destroy uo_order Destroy ds_rqwfjg IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_add_order_stopqty (long arg_scid, long arg_wfjgid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);// 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 //ll_i = arg_row lde_addqty = Abs(arg_addqty) String ls_mtrlcode,ls_taskcode Long ll_mtrlid Long ll_iforder Int li_ordertype_order_ml Long ll_relwfjgid, ll_relprintid SELECT u_mtrldef.mtrlcode, u_order_wfjgMx.orderid, u_order_wfjgMx.wrkGrpid, u_order_wfjgMx.mtrlid, u_order_wfjgmx.iforder, u_order_wfjg.taskcode, u_order_wfjgMx.relwfjgid, u_order_wfjgMx.relprintid INTO :ls_mtrlcode, :ll_orderid, :ll_mtrlid, :ll_iforder, :ls_taskcode, :ll_relwfjgid, :ll_relprintid FROM u_mtrldef,u_order_wfjgMx,u_order_wfjg WHERE u_mtrldef.mtrlid = u_order_wfjgMx.mtrlid AND u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.wfjgid = :arg_wfjgid AND u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgid = u_order_wfjg.wfjgid AND u_order_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 ll_iforder > 0 THEN ll_cnt_order = ds_rqwfjg.Retrieve(scid,ll_relwfjgid,ll_relprintid) 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 = ll_mtrlid THEN IF arg_addqty > 0 THEN lde_addqty_allow = lde_unacmpqty ELSE lde_addqty_allow = lde_stopqty 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(scid,ll_orderid,ld_qty,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // IF uo_order.tryfinishorder(scid,ll_orderid,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF END IF IF lde_addqty <= 0 THEN EXIT // 完成 END IF END IF NEXT END IF ext: Destroy uo_order Destroy ds_rqwfjg IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function protected function integer uof_add_dstrqty (long arg_scid, long arg_wfjgid, long arg_printid, long arg_orderid, long arg_mtrlid, string arg_pfcode, decimal arg_buyqty, decimal arg_addqty, integer arg_type, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long ll_k, ll_row_f,cnt Long ll_lp Long ll_sonmtrlid_array[],ll_array,k Decimal ld_qty_array[] String ls_mtrlcode_out, ls_status_out, ls_woodcode_out, ls_pcode_out Long ll_wrkgrpid_out, ll_mtrlid_out Decimal ld_qty_out, ld_arrry_qty Decimal lde_sonscale String ls_ordercode, ls_mtrlcode Decimal ld_cost_out,ld_costamt_out,ld_overqty String ls_wrkgrpname Long ll_workgroupid datastore ds_mrpmx ds_mrpmx = Create datastore ds_mrpmx.DataObject = 'ds_order_ml_mrpmx' ds_mrpmx.SetTransObject(sqlca) uo_order_ml uo_order uo_order = Create uo_order_ml //arg_type 0-收货更新,1-终止更新 //更新相关发出明细已领数 IF arg_orderid > 0 THEN SELECT ordercode INTO :ls_ordercode FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ls_ordercode = "" END IF SELECT mtrlcode Into :ls_mtrlcode From u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN ls_mtrlcode = "" END IF ds_mrpmx.Retrieve(arg_scid,arg_orderid) ll_row_f = ds_mrpmx.Find("u_orderrqmtrl_tree_mtrlid = "+String(arg_mtrlid),1,ds_mrpmx.RowCount()) IF ll_row_f = 0 THEN rslt = 0 arg_msg = '订单明细:'+String(arg_printid)+' 相应主生产计划['+ls_ordercode+']运算明细找不到资料['+ls_mtrlcode+'],请检查计划运算结果' GOTO ext END IF IF ll_row_f > 0 THEN ll_lp = ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_row_f] FOR ll_k = ll_row_f + 1 To ds_mrpmx.RowCount() IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_k] <= ll_lp THEN EXIT IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_k] = ll_lp + 1 And ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_k] > 0 THEN ls_mtrlcode_out = ds_mrpmx.Object.u_mtrldef_mtrlcode[ll_k] ll_wrkgrpid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_wrkgrpid[ll_k] ll_mtrlid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_k] ls_status_out = ds_mrpmx.Object.u_orderrqmtrl_tree_status[ll_k] ls_woodcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_woodcode[ll_k] ls_pcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_pcode[ll_k] lde_sonscale = ds_mrpmx.Object.u_orderrqmtrl_tree_sonscale[ll_k] IF lde_sonscale = 0 THEN lde_sonscale = ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_k] / ds_mrpmx.Object.u_orderrqmtrl_tree_truerqqty[ll_row_f] END IF ld_qty_out = Round(arg_addqty * lde_sonscale,dec_round) //ld_qty_out = arg_addqty / ds_mrpmx.Object.u_orderrqmtrl_tree_truerqqty[ll_row_f] * ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_k] UPDATE u_order_wfjgMx_out SET DstrQty = DstrQty + :ld_qty_out WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND mtrlid = :ll_mtrlid_out AND status = :ls_status_out AND woodcode = :ls_woodcode_out AND pcode = :ls_pcode_out Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '订单明细:'+String(arg_printid)+' 更新相关发出明细已领数失败,'+commit_transaction.SQLErrText GOTO ext END IF //yyx2015-5-22 终止收货明细更新主生产计划发出明细的已领数 IF arg_type = 1 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(arg_scid,arg_orderid,ll_workgroupid,ll_mtrlid_out,ls_mtrlcode_out,ls_status_out,ls_woodcode_out,ls_pcode_out,0 - ld_qty_out,0 - ld_costamt_out,arg_msg,False,-1,ld_overqty) = 0 THEN arg_msg = '相关订单明细:'+String(arg_printid)+',更新生产计划已领数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF //yyx2015-5-22 end END IF NEXT END IF ELSE cnt = 0 SELECT count(*) INTO :cnt FROM u_order_wfjgmx_out_mx WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid And relprintid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '订单明细:'+String(arg_printid)+' 更新相关发出明细失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN ll_array = 0 DECLARE cur_inmx CURSOR FOR SELECT u_PrdPF.SonMtrlid, :arg_addqty * u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.pfcode = :arg_pfcode ) ; OPEN cur_inmx; FETCH cur_inmx Into :ll_mtrlid_out,:ld_arrry_qty; DO WHILE sqlca.SQLCode = 0 ll_array++ ll_sonmtrlid_array[ll_array] = ll_mtrlid_out ld_qty_array[ll_array] = ld_arrry_qty FETCH cur_inmx Into :ll_mtrlid_out,:ld_arrry_qty; LOOP CLOSE cur_inmx; IF ll_array = 0 THEN IF sys_option_wfjg_outmx = 0 Or sys_option_wfjg_out_cmp = 0 THEN //可以没有发出明细 ELSE arg_msg = '订单明细:'+String(arg_printid)+' 没有设置下级物料清单,请检查物料清单' rslt = 0 GOTO ext END IF END IF FOR k = 1 To ll_array UPDATE u_order_wfjgMx_out SET DstrQty = DstrQty + :ld_qty_array[k] WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND mtrlid = :ll_sonmtrlid_array[k] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '订单明细:'+String(arg_printid)+' 更新相关发出明细已领数失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE ll_array = 0 DECLARE cur_inmx2 CURSOR FOR SELECT u_order_wfjgmx_out_mx.mtrlid, :arg_addqty * u_order_wfjgmx_out_mx.qty / :arg_buyqty FROM u_order_wfjgmx_out_mx WHERE ( u_order_wfjgmx_out_mx.scid = :arg_scid ) AND ( u_order_wfjgmx_out_mx.wfjgid = :arg_wfjgid ) And ( u_order_wfjgmx_out_mx.relprintid = :arg_printid ) ; OPEN cur_inmx2; FETCH cur_inmx2 Into :ll_mtrlid_out,:ld_arrry_qty; DO WHILE sqlca.SQLCode = 0 ll_array++ ll_sonmtrlid_array[ll_array] = ll_mtrlid_out ld_qty_array[ll_array] = ld_arrry_qty FETCH cur_inmx2 Into :ll_mtrlid_out,:ld_arrry_qty; LOOP CLOSE cur_inmx2; IF ll_array = 0 THEN arg_msg = '订单明细:'+String(arg_printid)+' 没有设置相应发出明细,请检查订单的发出明细' rslt = 0 GOTO ext END IF FOR k = 1 To ll_array UPDATE u_order_wfjgMx_out SET DstrQty = DstrQty + :ld_qty_array[k] WHERE scid = :arg_scid AND wfjgid = :arg_wfjgid AND mtrlid = :ll_sonmtrlid_array[k] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '订单明细:'+String(arg_printid)+' 更新相关发出明细已领数失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF END IF ext: Destroy ds_mrpmx Destroy uo_order RETURN rslt end function on uo_order_wfjg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_wfjg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('086',str_optionvalue,arg_msg) uo_option_wfjg_outmx = Long(str_optionvalue) f_get_sys_option_value('087',str_optionvalue,arg_msg) uo_option_autocreate_outware = Long(str_optionvalue) f_get_sys_option_value('010',str_optionvalue,arg_msg) uo_option_ifovertask = Long(str_optionvalue) f_get_sys_option_value('067',str_optionvalue,arg_msg) uo_option_2unit = Long(str_optionvalue) f_get_sys_option_value('343',str_optionvalue,arg_msg) uo_option_update_rqmtrlqty_wfjg = Long(str_optionvalue) end event