$PBExportHeader$uo_order_ml_mrp.sru forward global type uo_order_ml_mrp from nonvisualobject end type end forward global type uo_order_ml_mrp from nonvisualobject end type global uo_order_ml_mrp uo_order_ml_mrp type variables boolean ifbuy_mtrl_not_useqty boolean ifwx_mtrl_not_useqty public long deep public long deep_scll end variables forward prototypes public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg) public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg) public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup) public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg); Integer rslt = 1 Integer li_status Integer li_scllflag Integer li_scllsecflag Decimal ld_dstrqty SELECT u_saletaskmx.flag, u_saletaskmx.scllflag INTO :li_status, :li_scllflag FROM u_saletaskmx WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询销售订单明细状态失败," + sqlca.SQLErrText rslt = 0 ELSE IF li_status <> 1 THEN arg_msg = "销售订单明细不是在进行状态,不能计算用料" rslt = 0 GOTO ext ELSE IF li_scllflag = 1 THEN arg_msg = "销售订单明细已用料审核,不能计算用料" rslt = 0 GOTO ext END IF END IF SELECT sum ( DstrQty ) INTO :ld_dstrqty FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_scid AND u_saleRqMtrl_scll.taskID = :arg_taskid AND u_saleRqMtrl_scll.printid = :arg_printid USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询销售订单明细已领料数失败," + sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF ld_dstrqty > 0 THEN arg_msg = "销售订单明细已有领料数,不能计算" rslt = 0 GOTO ext END IF END IF ext: RETURN rslt end function public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg); Integer rslt = 1 Decimal ld_qty String ls_mtrlcode Integer li_ordertype SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料编码失败," + sqlca.SQLErrText rslt = 0 GOTO ext ELSE CHOOSE CASE arg_type CASE 1 SELECT sum ( u_buytaskmx.qty - u_buytaskmx.consignedqty ) INTO :ld_qty FROM u_buytaskmx , u_buytask WHERE u_buytaskmx.scid = :arg_scid AND u_buytaskmx.mtrlid = :arg_mtrlid AND u_buytaskmx.status = :arg_status AND u_buytaskmx.woodcode = :arg_woodcode AND u_buytaskmx.pcode = :arg_pcode AND u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.taskid = u_buytask.taskid AND u_buytaskmx.stopflag = 0 AND u_buytask.status = 1 USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询物料:" + ls_mtrlcode + " 采购未进仓数失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 3 SELECT sum ( u_order_wfjgMx.qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty ) INTO :ld_qty FROM u_order_wfjgMx , u_order_wfjg WHERE u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.mtrlid = :arg_mtrlid AND u_order_wfjgMx.status = :arg_status AND u_order_wfjgMx.woodcode = :arg_woodcode AND u_order_wfjgMx.pcode = :arg_pcode AND u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID AND u_order_wfjg.status = 1 USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询物料:" + ls_mtrlcode + " 外协未进仓数失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 4 SELECT sum ( u_Mtrlware.noallocqty ) INTO :ld_qty FROM u_Mtrlware , u_storage WHERE u_Mtrlware.storageid = u_storage.storageid AND u_Mtrlware.scid = :arg_scid AND u_Mtrlware.mtrlid = :arg_mtrlid AND u_Mtrlware.status = :arg_status AND u_Mtrlware.woodcode = :arg_woodcode AND u_Mtrlware.pcode = :arg_pcode USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询物料:" + ls_mtrlcode + " 库存数失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 5 SELECT sum (u_saleRqMtrl_scll.trueRqqty - u_saleRqMtrl_scll.DstrQty ) INTO :ld_qty FROM u_saleRqMtrl_scll INNER JOIN u_SaleTaskMx ON u_saleRqMtrl_scll.scid = u_SaleTaskMx.scid AND u_saleRqMtrl_scll.taskID = u_SaleTaskMx.TaskID AND u_saleRqMtrl_scll.printid = u_SaleTaskMx.printid WHERE (u_SaleTaskMx.flag = 1) AND u_saleRqMtrl_scll.scid = :arg_scid AND u_saleRqMtrl_scll.mtrlid = :arg_mtrlid AND u_saleRqMtrl_scll.status = :arg_status AND u_saleRqMtrl_scll.woodcode = :arg_woodcode AND u_saleRqMtrl_scll.pcode = :arg_pcode AND not exists (select 1 from u_saleRqMtrl_scll a where a.scid = u_saleRqMtrl_scll.scid and a.taskid = u_saleRqMtrl_scll.taskid and a.printid = u_saleRqMtrl_scll.printid and a.scid = :arg_scid AND a.taskid = :arg_taskid AND a.printid = :arg_printid) USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询物料:" + ls_mtrlcode + " 订单需求数失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF END CHOOSE IF IsNull(ld_qty) THEN ld_qty = 0 END IF END IF ext: arg_ref_qty = ld_qty RETURN rslt end function public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg); Integer rslt = 1 Integer li_pfflag Long arr_mxt Long ll_i Boolean if_special_notuse = FALSE String ls_mtrlcode String ls_mtrlname String ls_mtrlmode String ls_unit String ls_mtrltype Integer li_mtrlkind Integer li_ifselforder Integer li_mtrlorigin Long ll_scid_mtrl Long ll_wrkgrpid_mtrl Decimal ld_buydays Decimal ld_orderdays Decimal ld_wfjgdays Decimal ld_aheaddays Date ld_sdate Date ld_edate DateTime ldt_sdate DateTime ldt_edate DateTime ldt_sdate_2359 Decimal ld_cmplqty Decimal ld_mqty Decimal ld_bqty Decimal ld_wqty Decimal ld_pqty Decimal ld_otherrqqty Decimal ld_samerqqty Long count Long ll_j Decimal cmpl_qty s_pfmx ls_s_pfmx[] DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale , u_PrdPF.SonLoss , u_PrdPF.SonDECLosS , u_PrdPF.SonMtrlid , u_PrdPF.status , u_PrdPF.woodcode , u_PrdPF.pcode , u_PrdPF.wrkGrpid , u_mtrldef.mtrlorigin , u_PrdPF.dscrp FROM u_PrdPF , u_mtrldef WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = '组装' ) And ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) ; deep ++ IF deep > 500 THEN arg_msg = "递归太深" + String(deep) rslt = 0 ELSE SELECT mtrlcode , mtrlname , mtrlmode , mtrltype , unit , mtrlkind , mtrlorigin INTO :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlkind , :li_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资失败," + sqlca.SQLErrText rslt = 0 ELSE IF arg_if_allowuse = 1 THEN IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(2,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // // if uof_get_qty(4,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 then // rslt = 0 // goto ext // end if // if uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_sdate_2359,arg_msg) = 0 then // rslt = 0 // goto label_0 // end if END IF IF deep = 1 THEN ld_cmplqty = arg_qty ELSE arr_mxt = UpperBound(arg_s_mtrl.mtrlid) IF arr_mxt = 0 THEN ld_samerqqty = 0 ELSE FOR ll_i = 1 TO arr_mxt IF arg_s_mtrl.scid[ll_i] = arg_scid AND arg_s_mtrl.taskid[ll_i] = arg_taskid AND arg_s_mtrl.printid[ll_i] = arg_printid AND arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid AND arg_s_mtrl.status[ll_i] = arg_status AND arg_s_mtrl.woodcode[ll_i] = arg_woodcode AND arg_s_mtrl.pcode[ll_i] = arg_pcode AND arg_s_mtrl.wrkgrpid_scll[ll_i] = arg_wrkgrpid_scll THEN ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i] END IF NEXT END IF IF arg_if_allowuse = 1 THEN If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN IF li_mtrlorigin = 2 THEN IF ifbuy_mtrl_not_useqty THEN ld_cmplqty = arg_qty if_special_notuse = TRUE END IF ELSE IF li_mtrlorigin = 3 THEN IF ifwx_mtrl_not_useqty THEN ld_cmplqty = arg_qty if_special_notuse = TRUE END IF END IF END IF END IF IF NOT if_special_notuse THEN IF ld_samerqqty > 0 THEN ld_cmplqty = arg_qty ELSE IF ld_otherrqqty >= ld_mqty + ld_bqty + ld_wqty + ld_pqty THEN ld_cmplqty = arg_qty ELSE IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty) ELSE ld_cmplqty = 0 END IF END IF END IF END IF ELSE ld_cmplqty = arg_qty END IF arr_mxt ++ arg_s_mtrl.scid[arr_mxt] = arg_scid arg_s_mtrl.taskid[arr_mxt] = arg_taskid arg_s_mtrl.printid[arr_mxt] = arg_printid arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid arg_s_mtrl.qty[arr_mxt] = arg_qty arg_s_mtrl.status[arr_mxt] = arg_status arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode arg_s_mtrl.pcode[arr_mxt] = arg_pcode arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty arg_s_mtrl.plantype[arr_mxt] = arg_plantype arg_s_mtrl.mqty[arr_mxt] = ld_mqty arg_s_mtrl.bqty[arr_mxt] = ld_bqty arg_s_mtrl.wqty[arr_mxt] = ld_wqty arg_s_mtrl.pqty[arr_mxt] = ld_pqty // arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype arg_s_mtrl.unit[arr_mxt] = ls_unit arg_s_mtrl.mtrlorigin[arr_mxt] = arg_plantype arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl arg_s_mtrl.wrkgrpid_scll[arr_mxt] = arg_wrkgrpid_scll arg_s_mtrl.lp[arr_mxt] = arg_lp arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.ifmainmtrlid[arr_mxt] = 0 arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid arg_s_mtrl.ifchanged[arr_mxt] = 0 If ((arg_plantype = 2) Or (arg_plantype = 6)) THEN rslt = 1 GOTO ext END IF END IF IF ld_cmplqty <= 0 THEN rslt = 1 ELSE count = 0 OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].mtrlorigin , :ls_s_pfmx[count].dscrp ; DO WHILE sqlca.SQLCode = 0 count ++ FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].mtrlorigin , :ls_s_pfmx[count].dscrp ; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 ELSE FOR ll_j = 1 TO count IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS) ELSE cmpl_qty = 0 END IF rslt = uof_cmpl_rqmtrl_re(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].mtrlorigin,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg) IF rslt = 0 THEN EXIT END IF NEXT END IF END IF END IF END IF ext: RETURN rslt end function public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg); Integer rslt = 1 Integer li_pfflag Long li_mxt Long ll_i String ls_mtrlcode String ls_mtrlname String ls_mtrlmode String ls_unit String ls_mtrltype Integer li_mtrlorigin Integer li_ifselforder Long ll_scid_mtrl Long ll_wrkgrpid_mtrl Long count Long ll_j Decimal cmpl_qty s_pfmx ls_s_pfmx[] DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale , u_PrdPF.SonLoss , u_PrdPF.SonDECLosS , u_PrdPF.SonMtrlid , u_PrdPF.status , u_PrdPF.woodcode , u_PrdPF.pcode , u_PrdPF.wrkGrpid , u_PrdPF.dscrp From u_PrdPF Where ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.pfcode = '组装' ) ; deep ++ IF deep > 2000 THEN arg_msg = "递归太深" + String(deep) rslt = 0 ELSE SELECT mtrlcode , mtrlname , mtrlmode , mtrltype , unit , Mtrlorigin INTO :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资失败," + sqlca.SQLErrText rslt = 0 ELSE IF deep > 1 THEN li_mxt = UpperBound(arg_s_mtrl.mtrlid) li_mxt ++ arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid arg_s_mtrl.qty[li_mxt] = arg_qty arg_s_mtrl.status[li_mxt] = arg_status arg_s_mtrl.woodcode[li_mxt] = arg_woodcode arg_s_mtrl.pcode[li_mxt] = arg_pcode arg_s_mtrl.cmplqty[li_mxt] = arg_qty arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype arg_s_mtrl.unit[li_mxt] = ls_unit arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin arg_s_mtrl.produce_scid[li_mxt] = ll_scid_mtrl arg_s_mtrl.produce_wrkgrpid[li_mxt] = ll_wrkgrpid_mtrl arg_s_mtrl.wrkgrpid_scll[li_mxt] = arg_wrkgrpid_scll arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid END IF CHOOSE CASE li_mtrlorigin CASE 2, 6 rslt = 1 GOTO ext CASE 0 IF ll_scid_mtrl <> arg_scid THEN rslt = 1 GOTO ext END IF END CHOOSE count = 0 OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].dscrp ; DO WHILE sqlca.SQLCode = 0 count ++ FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].dscrp ; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 ELSE FOR ll_j = 1 To count IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS) ELSE cmpl_qty = 0 END IF rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_s_mtrl,arg_msg) IF rslt = 0 THEN EXIT END IF NEXT END IF END IF END IF ext: RETURN rslt end function public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg); Integer rslt = 1 Long ll_i Integer li_ordertype String ls_mtrlcode Long cnt Integer li_ifselforder Long ll_mxpkid ///////// Decimal ld_consignedqty,ld_inqty SELECT sum(consignedqty), sum(inqty) INTO :ld_consignedqty, :ld_inqty FROM u_orderRqMtrl WHERE taskid = :arg_s_mtrl.taskid[1] AND scid = :arg_s_mtrl.scid[1] AND printid = :arg_s_mtrl.printid[1] AND plantype = 2 USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询原用料信息失败," + sqlca.SQLErrText rslt = 0 END IF IF ld_consignedqty > 0 THEN arg_msg = "原用料已有采购已订货数,不能删除" rslt = 0 ELSEIF ld_inqty > 0 THEN arg_msg = "原用料已有采购已订货数,不能删除" rslt = 0 END IF ld_consignedqty = 0 ld_inqty = 0 SELECT sum(consignedqty), sum(inqty) INTO :ld_consignedqty, :ld_inqty FROM u_orderRqMtrl WHERE taskid = :arg_s_mtrl.taskid[1] AND scid = :arg_s_mtrl.scid[1] AND printid = :arg_s_mtrl.printid[1] AND plantype = 3 USING sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询原用料信息失败," + sqlca.SQLErrText rslt = 0 END IF IF ld_consignedqty > 0 THEN arg_msg = "原用料已有外协已订货数,不能删除" rslt = 0 ELSEIF ld_inqty > 0 THEN arg_msg = "原用料已有外协已订货数,不能删除" rslt = 0 END IF ///////////////////// DELETE FROM u_orderRqMtrl WHERE taskid = :arg_s_mtrl.taskid[1] AND scid = :arg_s_mtrl.scid[1] AND printid = :arg_s_mtrl.printid[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除原用料失败," + sqlca.SQLErrText rslt = 0 goto ext END IF FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid) SELECT u_mtrldef.dftsptid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale INTO :arg_s_mtrl.sptid[ll_i], :arg_s_mtrl.mrp_unit[ll_i], :arg_s_mtrl.rate_buy[ll_i], :arg_s_mtrl.rate_scll[ll_i], :arg_s_mtrl.rate_sale[ll_i] FROM u_mtrldef Where mtrlid = :arg_s_mtrl.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_s_mtrl.sptid[ll_i] = 0 CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i] CASE 1 IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i] END IF CASE 2 IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i] END IF CASE 3 IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i] END IF END CHOOSE UPDATE u_orderRqMtrl SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] , truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i] WHERE scid = :arg_s_mtrl.scid[ll_i] AND taskID = :arg_s_mtrl.taskid[ll_i] AND printid = :arg_s_mtrl.printid[ll_i] AND MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND status = :arg_s_mtrl.status[ll_i] AND woodcode = :arg_s_mtrl.woodcode[ll_i] AND pcode = :arg_s_mtrl.pcode[ll_i] AND plantype = :arg_s_mtrl.plantype[ll_i] USING sqlca; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca) IF ll_mxpkid <= 0 THEN arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg rslt = 0 EXIT END IF INSERT INTO u_orderRqMtrl ( scid , taskID , printid, mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty, otherrqqty, minqty, wrkgrpid , status , woodcode , pcode , mxpkid , sptid) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i], :arg_s_mtrl.otherrqqty[ll_i], :arg_s_mtrl.minqty[ll_i], :arg_s_mtrl.wrkgrpid_scll[ll_i] , :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i] , :ll_mxpkid , :arg_s_mtrl.sptid[ll_i]) USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText rslt = 0 EXIT END IF END IF ELSE arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText rslt = 0 EXIT END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//运算保存 Integer rslt = 1 Long ll_i DELETE FROM u_orderRqMtrl_tree WHERE taskid = :arg_s_mtrl.taskid[1] AND scid = :arg_s_mtrl.scid[1] AND printid = :arg_s_mtrl.printid[1] Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid) IF arg_s_mtrl.ifchanged[ll_i] = 0 THEN IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查" rslt = 0 GOTO ext END IF END IF INSERT INTO u_orderRqMtrl_tree ( scid , taskid , mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty , otherrqqty, samerqqty, minqty, maxqty, ckwareqty, wrkgrpid , lp , printid , status , woodcode , pcode , ifmainmtrlid , ifchanged , pmtrlid , pfgroup, mxpkid, promode, pfgroupmode, pfklmode, pfgroupqty ) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i] , :arg_s_mtrl.otherrqqty[ll_i] , :arg_s_mtrl.samerqqty[ll_i] , :arg_s_mtrl.minqty[ll_i] , :arg_s_mtrl.maxqty[ll_i] , :arg_s_mtrl.ckwareqty[ll_i] , :arg_s_mtrl.produce_wrkgrpid[ll_i] , :arg_s_mtrl.lp[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i], :arg_s_mtrl.ifmainmtrlid[ll_i] , :arg_s_mtrl.ifchanged[ll_i] , :arg_s_mtrl.pmtrlid[ll_i], :arg_s_mtrl.pfgroup[ll_i], :arg_s_mtrl.mxpkid[ll_i], :arg_s_mtrl.promode[ll_i], :arg_s_mtrl.pfgroupmode[ll_i], :arg_s_mtrl.pfklmode[ll_i], :arg_s_mtrl.pfgroupqty[ll_i]) Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg); Integer rslt = 1 DELETE FROM u_saleRqMtrl_scll WHERE taskid = :arg_taskid AND scid = :arg_scid And printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除原领料明细失败," + sqlca.SQLErrText rslt = 0 END IF IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i,ls_newid DELETE FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细的物料领料明细失败' GOTO ext END IF //messagebox("",UpperBound(arg_s_mtrl.taskID)) FOR i = 1 TO UpperBound(arg_s_mtrl.taskID) if arg_s_mtrl.ifmainmtrlid[i] = 1 then continue if arg_s_mtrl.qty[i] = 0 then continue ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_saleRqMtrl_scll ( rqmtrlid, scid, taskID, MtrlID, printid, trueRqqty, costamt, status, woodcode, pcode, ifchanged ) VALUES ( :ls_newid, :arg_s_mtrl.scid[i], :arg_s_mtrl.taskID[i], :arg_s_mtrl.MtrlID[i], :arg_s_mtrl.printid[i], :arg_s_mtrl.qty[i], 0, :arg_s_mtrl.status[i], :arg_s_mtrl.woodcode[i], :arg_s_mtrl.pcode[i], :arg_s_mtrl.ifchanged[i] ) USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入订单明细的物料领料明细失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg); Integer rslt = 1 Integer li_pfflag Long li_mxt Long ll_i String ls_mtrlcode String ls_mtrlname String ls_mtrlmode String ls_unit String ls_mtrltype Integer li_mtrlorigin Long count Long ll_j Decimal cmpl_qty s_pfmx ls_s_pfmx[] DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale , u_PrdPF.SonLoss , u_PrdPF.SonDECLosS , u_PrdPF.SonMtrlid , u_PrdPF.status , u_PrdPF.woodcode , u_PrdPF.pcode , u_PrdPF.wrkGrpid , u_PrdPF.dscrp FROM u_PrdPF Where ( u_PrdPF.mtrlid = :arg_mtrlid ) ; deep ++ IF deep > 2000 THEN arg_msg = "递归太深" + String(deep) rslt = 0 ELSE SELECT mtrlcode , mtrlname , mtrlmode , mtrltype , unit , Mtrlorigin INTO :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资失败," + sqlca.SQLErrText rslt = 0 ELSE IF deep > 1 THEN li_mxt = UpperBound(arg_s_mtrl.mtrlid) li_mxt ++ arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid arg_s_mtrl.qty[li_mxt] = arg_qty arg_s_mtrl.status[li_mxt] = arg_status arg_s_mtrl.woodcode[li_mxt] = arg_woodcode arg_s_mtrl.pcode[li_mxt] = arg_pcode arg_s_mtrl.cmplqty[li_mxt] = arg_qty arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype arg_s_mtrl.unit[li_mxt] = ls_unit arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid END IF CHOOSE CASE li_mtrlorigin CASE 2, 6 rslt = 1 GOTO ext END CHOOSE count = 0 OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].sonscale, :ls_s_pfmx[count].sonloss, :ls_s_pfmx[count].sondecloss, :ls_s_pfmx[count].sonmtrlid, :ls_s_pfmx[count].status, :ls_s_pfmx[count].woodcode, :ls_s_pfmx[count].pcode, :ls_s_pfmx[count].wrkgrpid, :ls_s_pfmx[count].dscrp; DO WHILE sqlca.SQLCode = 0 count ++ FETCH pf_cur INTO :ls_s_pfmx[count].sonscale, :ls_s_pfmx[count].sonloss, :ls_s_pfmx[count].sondecloss, :ls_s_pfmx[count].sonmtrlid, :ls_s_pfmx[count].status, :ls_s_pfmx[count].woodcode, :ls_s_pfmx[count].pcode, :ls_s_pfmx[count].wrkgrpid, :ls_s_pfmx[count].dscrp; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 ELSE FOR ll_j = 1 TO count IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS) ELSE cmpl_qty = 0 END IF rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty, arg_s_mtrl,arg_msg) IF rslt = 0 THEN EXIT END IF NEXT END IF END IF END IF ext: RETURN rslt end function public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg); integer rslt = 1 DELETE FROM u_saleRqMtrl_scll WHERE taskid =:arg_taskid AND scid =:arg_scid and dstrqty = 0 and printid = :arg_printid using sqlca; if sqlca.sqlcode <> 0 then arg_msg = "删除原领料明细失败," + sqlca.sqlerrtext rslt = 0 end if if rslt = 0 then rollback using sqlca; else if rslt = 1 and arg_ifcommit then commit using sqlca; end if end if return rslt end function public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg); Integer rslt = 1 Long ll_i Integer li_ordertype String ls_mtrlcode Long cnt Integer li_ifselforder Long ll_mxpkid /////////////////// // FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid) SELECT u_mtrldef.dftsptid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale INTO :arg_s_mtrl.sptid[ll_i], :arg_s_mtrl.mrp_unit[ll_i], :arg_s_mtrl.rate_buy[ll_i], :arg_s_mtrl.rate_scll[ll_i], :arg_s_mtrl.rate_sale[ll_i] FROM u_mtrldef Where mtrlid = :arg_s_mtrl.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",查询物料定义失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i] CASE 1 IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i] END IF CASE 2 IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i] END IF CASE 3 IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i] END IF END CHOOSE UPDATE u_orderRqMtrl SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] , truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i] WHERE scid = :arg_s_mtrl.scid[ll_i] AND taskID = :arg_s_mtrl.taskid[ll_i] AND printid = :arg_s_mtrl.printid[ll_i] AND MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND status = :arg_s_mtrl.status[ll_i] AND woodcode = :arg_s_mtrl.woodcode[ll_i] AND pcode = :arg_s_mtrl.pcode[ll_i] AND plantype = :arg_s_mtrl.plantype[ll_i] AND plancode = :arg_s_mtrl.plancode[ll_i]Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF IF sqlca.SQLNRows = 0 THEN ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,False,sqlca) IF ll_mxpkid <= 0 THEN arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg rslt = 0 GOTO ext END IF INSERT INTO u_orderRqMtrl ( scid , taskID , printid, mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty , wrkgrpid , status , woodcode , pcode , mxpkid , sptid, plancode) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i], :arg_s_mtrl.wrkgrpid_scll[ll_i] , :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i] , :ll_mxpkid , :arg_s_mtrl.sptid[ll_i], :arg_s_mtrl.plancode[ll_i]) Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg); Integer rslt = 1 Long ll_i Integer li_ordertype String ls_mtrlcode Long cnt Integer li_ifselforder Long ll_mxpkid Long ll_sptid /////////////////// // //查找已定义的供应商 FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid) SELECT sptid, mxpkid INTO :ll_sptid, :ll_mxpkid FROM u_orderRqMtrl WHERE scid = :arg_s_mtrl.scid[ll_i] AND taskID = :arg_s_mtrl.taskid[ll_i] AND printid = :arg_s_mtrl.printid[ll_i] AND MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND status = :arg_s_mtrl.status[ll_i] AND woodcode = :arg_s_mtrl.woodcode[ll_i] AND pcode = :arg_s_mtrl.pcode[ll_i] AND plantype = :arg_s_mtrl.plantype[ll_i]; IF sqlca.SQLCode <> 0 THEN ll_sptid = 0 ll_mxpkid = 0 END IF IF IsNull(ll_sptid) THEN ll_sptid = 0 IF IsNull(ll_mxpkid) THEN ll_mxpkid = 0 arg_s_mtrl.sptid[ll_i] = ll_sptid arg_s_mtrl.mxpkid[ll_i] = ll_mxpkid NEXT DELETE FROM u_orderRqMtrl WHERE scid = :arg_s_mtrl.scid[1] AND taskid = :arg_s_mtrl.taskid[1] AND printid = :arg_s_mtrl.printid[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除原用料失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid) SELECT u_mtrldef.dftsptid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale INTO :ll_sptid, :arg_s_mtrl.mrp_unit[ll_i], :arg_s_mtrl.rate_buy[ll_i], :arg_s_mtrl.rate_scll[ll_i], :arg_s_mtrl.rate_sale[ll_i] FROM u_mtrldef Where mtrlid = :arg_s_mtrl.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN ll_sptid = 0 END IF CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i] CASE 1 IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i] END IF CASE 2 IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i] END IF CASE 3 IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i] END IF END CHOOSE IF arg_s_mtrl.sptid[ll_i] = 0 THEN arg_s_mtrl.sptid[ll_i] = ll_sptid END IF UPDATE u_orderRqMtrl SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] , truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i], mxdscrp = :arg_s_mtrl.mxdscrp[ll_i] WHERE scid = :arg_s_mtrl.scid[ll_i] AND taskID = :arg_s_mtrl.taskid[ll_i] AND printid = :arg_s_mtrl.printid[ll_i] AND MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND status = :arg_s_mtrl.status[ll_i] AND woodcode = :arg_s_mtrl.woodcode[ll_i] AND pcode = :arg_s_mtrl.pcode[ll_i] AND plantype = :arg_s_mtrl.plantype[ll_i] AND plancode = :arg_s_mtrl.plancode[ll_i] USING sqlca; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN if arg_s_mtrl.mxpkid[ll_i] = 0 then ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca) IF ll_mxpkid <= 0 THEN arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg rslt = 0 EXIT END IF else ll_mxpkid = arg_s_mtrl.mxpkid[ll_i] end if INSERT INTO u_orderRqMtrl ( scid , taskID , printid, mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty , wrkgrpid , status , woodcode , pcode , mxpkid , sptid, plancode, mxdscrp) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i], :arg_s_mtrl.wrkgrpid_scll[ll_i] , :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i] , :ll_mxpkid , :arg_s_mtrl.sptid[ll_i], :arg_s_mtrl.plancode[ll_i], :arg_s_mtrl.mxdscrp[ll_i]) USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText rslt = 0 EXIT END IF END IF ELSE arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText rslt = 0 EXIT END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i,ls_newid FOR i = 1 TO UpperBound(arg_s_mtrl.taskID) ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_saleRqMtrl_scll ( rqmtrlid, scid, taskID, MtrlID, printid, trueRqqty, costamt, status, woodcode, pcode, ifchanged, plancode) VALUES ( :ls_newid, :arg_s_mtrl.scid[i], :arg_s_mtrl.taskID[i], :arg_s_mtrl.MtrlID[i], :arg_s_mtrl.printid[i], :arg_s_mtrl.qty[i], 0, :arg_s_mtrl.status[i], :arg_s_mtrl.woodcode[i], :arg_s_mtrl.pcode[i], :arg_s_mtrl.ifchanged[i] , :arg_s_mtrl.plancode[i] ) USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入订单明细的物料领料明细失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i,ls_newid DELETE FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细的物料领料明细失败' GOTO ext END IF FOR i = 1 TO UpperBound(arg_s_mtrl.taskID) ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_saleRqMtrl_scll ( rqmtrlid, scid, taskID, MtrlID, printid, trueRqqty, costamt, status, woodcode, pcode, ifchanged, plancode, mxdscrp) VALUES ( :ls_newid, :arg_s_mtrl.scid[i], :arg_s_mtrl.taskID[i], :arg_s_mtrl.MtrlID[i], :arg_s_mtrl.printid[i], :arg_s_mtrl.qty[i], 0, :arg_s_mtrl.status[i], :arg_s_mtrl.woodcode[i], :arg_s_mtrl.pcode[i], :arg_s_mtrl.ifchanged[i], :arg_s_mtrl.plancode[i], :arg_s_mtrl.mxdscrp[i]) USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入订单明细的物料领料明细失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//批增料 Integer rslt = 1 Long ll_i FOR ll_i = 1 To UpperBound(arg_s_mtrl.MtrlID) IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查" rslt = 0 goto ext END IF INSERT INTO u_orderRqMtrl_tree ( scid , taskid , mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty , wrkgrpid , lp , printid , status , woodcode , pcode , ifmainmtrlid , ifchanged , pmtrlid , pfgroup , plancode) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i] , :arg_s_mtrl.wrkgrpid_scll[ll_i] , :arg_s_mtrl.lp[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i], :arg_s_mtrl.ifmainmtrlid[ll_i] , :arg_s_mtrl.ifchanged[ll_i] , :arg_s_mtrl.pmtrlid[ll_i], :arg_s_mtrl.pfgroup[ll_i], :arg_s_mtrl.plancode[ll_i] ) Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText rslt = 0 goto ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//修改运算结果 Integer rslt = 1 Long ll_i DELETE FROM u_orderRqMtrl_tree WHERE u_orderRqMtrl_tree.taskid = :arg_s_mtrl.taskid[1] AND u_orderRqMtrl_tree.scid = :arg_s_mtrl.scid[1] AND u_orderRqMtrl_tree.printid = :arg_s_mtrl.printid[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText rslt = 0 goto ext END IF FOR ll_i = 1 TO UpperBound(arg_s_mtrl.MtrlID) IF arg_s_mtrl.qty[ll_i] = 0 AND arg_s_mtrl.cmplqty[ll_i] <> 0 THEN arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查" rslt = 0 EXIT END IF INSERT INTO u_orderRqMtrl_tree ( scid , taskid , mtrlid , rqqty , truerqqty , plantype , mqty , bqty , wqty , pqty , wrkgrpid , lp , printid , status , woodcode , pcode , ifmainmtrlid , ifchanged , pmtrlid , pfgroup, plancode, mxdscrp, promode, pfgroupmode, pfklmode, pfgroupqty) VALUES ( :arg_s_mtrl.scid[ll_i], :arg_s_mtrl.taskid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i] , :arg_s_mtrl.wrkgrpid_scll[ll_i] , :arg_s_mtrl.lp[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i], :arg_s_mtrl.ifmainmtrlid[ll_i] , :arg_s_mtrl.ifchanged[ll_i] , :arg_s_mtrl.pmtrlid[ll_i], :arg_s_mtrl.pfgroup[ll_i], :arg_s_mtrl.plancode[ll_i], :arg_s_mtrl.mxdscrp[ll_i], :arg_s_mtrl.promode[ll_i], :arg_s_mtrl.pfgroupmode[ll_i], :arg_s_mtrl.pfklmode[ll_i], :arg_s_mtrl.pfgroupqty[ll_i] ) USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText rslt = 0 EXIT END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup); Integer rslt = 1 Integer li_pfflag Long ll_mtrlid_order Integer li_ifmainmtrlid Long arr_mxt Long ll_i Boolean if_special_notuse = False String ls_mtrlcode String ls_mtrlname String ls_mtrlmode String ls_unit String ls_mtrltype Integer li_mtrlorigin Integer li_ifselforder Integer li_mtrlprp Integer li_statusflag Long ll_scid_mtrl Long ll_wrkgrpid_mtrl Integer li_ordertype Decimal ld_cmplqty Decimal ld_mqty Decimal ld_bqty Decimal ld_wqty Decimal ld_pqty Decimal ld_otherrqqty Decimal ld_samerqqty Decimal ld_minqty, ld_maxqty Long count Long ll_j Long li_dftsptid string ls_promode string ls_pfgroupmode string ls_pfklmode Decimal ld_pfgroupqty Decimal cmpl_qty s_pfmx ls_s_pfmx[] s_mtrlcfg_expr s_mtrlcfg[] Long ll_cfg Long ll_cnt_s_mtrlcfg DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale , u_PrdPF.SonLoss , u_PrdPF.SonDECLosS , u_PrdPF.SonMtrlid , u_PrdPF.status , u_PrdPF.woodcode , u_PrdPF.pcode , u_PrdPF.wrkGrpid , u_PrdPF.dscrp , u_PrdPF.pfgroup , u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale, u_PrdPF.promode, u_PrdPF.pfgroupmode, u_PrdPF.pfklmode, u_PrdPF.pfgroupqty FROM u_PrdPF ,u_mtrldef WHERE ( u_PrdPF.pfcode = '组装' ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND u_mtrldef.mtrlid = u_PrdPF.SonMtrlid; deep ++ IF deep > 1000 THEN arg_msg = "递归太深" + String(deep) rslt = 0 GOTO ext END IF IF arg_taskid <> -1 THEN SELECT u_saletaskmx.mtrlid INTO :ll_mtrlid_order FROM u_saletaskmx WHERE u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.scid = :arg_scid And u_saletaskmx.printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询订单明细物料操作失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE IF deep = 1 THEN ll_mtrlid_order = arg_mtrlid ELSE ll_mtrlid_order = -1 END IF END IF SELECT mtrlcode , mtrlname , mtrlmode , mtrltype , unit , Mtrlorigin , mtrlprp , statusflag, dftsptid INTO :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin, :li_mtrlprp, :li_statusflag, :li_dftsptid From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_pmtrlid > 0 AND arg_mtrlid > 0 THEN SELECT u_PrdPF.promode ,u_PrdPF.pfgroupmode ,u_PrdPF.pfklmode ,u_PrdPF.pfgroupqty INTO :ls_promode ,:ls_pfgroupmode ,:ls_pfklmode ,:ld_pfgroupqty FROM u_PrdPF WHERE u_PrdPF.pfcode = '组装' AND u_PrdPF.mtrlid = :arg_pmtrlid AND u_PrdPF.SonMtrlid = :arg_mtrlid; IF SQLCA.SQLCODE <> 0 THEN ls_promode = "" ls_pfgroupmode = "" ls_pfklmode = "" ld_pfgroupqty = 0 END IF END IF SELECT u_mtrldef_maxminqty.minqty, u_mtrldef_maxminqty.maxqty INTO :ld_minqty, :ld_maxqty FROM u_mtrldef_maxminqty WHERE mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode Using sqlca; IF sqlca.SQLCode = -1 THEN arg_msg = "查询物料库存上下限资料失败," + sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_minqty = 0 ld_maxqty = 99999 END IF IF IsNull(ld_minqty) THEN ld_minqty = 0 IF IsNull(ld_maxqty) THEN ld_maxqty = 99999 arr_mxt = UpperBound(arg_s_mtrl.mtrlid) IF arg_mtrlid = ll_mtrlid_order THEN ld_cmplqty = arg_qty li_ifmainmtrlid = 1 ELSE IF arg_if_allowuse = 1 THEN IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(4,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(5,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //找本次运算之前的应用 IF arr_mxt = 0 THEN ld_samerqqty = 0 ELSE FOR ll_i = 1 To arr_mxt IF arg_s_mtrl.scid[ll_i] = arg_scid & And arg_s_mtrl.taskid[ll_i] = arg_taskid & And arg_s_mtrl.printid[ll_i] = arg_printid & And arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid & And arg_s_mtrl.status[ll_i] = arg_status & And arg_s_mtrl.woodcode[ll_i] = arg_woodcode & And arg_s_mtrl.pcode[ll_i] = arg_pcode THEN ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i] END IF NEXT END IF IF arg_if_allowuse = 1 THEN IF li_mtrlorigin = 2 And ifbuy_mtrl_not_useqty THEN ld_cmplqty = arg_qty ELSEIF li_mtrlorigin = 3 And ifwx_mtrl_not_useqty THEN ld_cmplqty = arg_qty ELSE IF ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 THEN //有可用 ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty) ELSE ld_cmplqty = arg_qty END IF END IF // If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN // // IF li_mtrlorigin = 2 THEN // IF ifbuy_mtrl_not_useqty THEN // ld_cmplqty = arg_qty // if_special_notuse = True // END IF // END IF // // IF li_mtrlorigin = 3 THEN // IF ifwx_mtrl_not_useqty THEN // ld_cmplqty = arg_qty // if_special_notuse = True // END IF // END IF // // END IF // // IF Not if_special_notuse THEN // // if ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 then //有可用 // ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty) // else // ld_cmplqty = arg_qty // end if // //// IF ld_samerqqty > 0 THEN //// ld_cmplqty = arg_qty //// ELSE //// //// IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN //// ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty) //// ELSE //// ld_cmplqty = 0 //// END IF //// //// END IF // // END IF ELSE ld_cmplqty = arg_qty END IF END IF arr_mxt ++ arg_s_mtrl.scid[arr_mxt] = arg_scid arg_s_mtrl.taskid[arr_mxt] = arg_taskid arg_s_mtrl.printid[arr_mxt] = arg_printid arg_s_mtrl.mxpkid[arr_mxt] = arr_mxt arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid arg_s_mtrl.status[arr_mxt] = arg_status arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode arg_s_mtrl.pcode[arr_mxt] = arg_pcode arg_s_mtrl.qty[arr_mxt] = arg_qty arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty arg_s_mtrl.plantype[arr_mxt] = li_mtrlorigin arg_s_mtrl.mqty[arr_mxt] = ld_mqty arg_s_mtrl.bqty[arr_mxt] = ld_bqty arg_s_mtrl.wqty[arr_mxt] = ld_wqty arg_s_mtrl.pqty[arr_mxt] = ld_pqty arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.minqty[arr_mxt] = ld_minqty arg_s_mtrl.maxqty[arr_mxt] = ld_maxqty arg_s_mtrl.ckwareqty[arr_mxt] = ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty - ld_minqty arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype arg_s_mtrl.unit[arr_mxt] = ls_unit arg_s_mtrl.Mtrlorigin[arr_mxt] = li_mtrlorigin arg_s_mtrl.mtrlprp[arr_mxt] = li_mtrlprp arg_s_mtrl.mtrlordertype[arr_mxt] = li_ordertype arg_s_mtrl.produce_wrkgrpid[arr_mxt] = arg_wrkgrpid arg_s_mtrl.lp[arr_mxt] = arg_lp //arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.ifmainmtrlid[arr_mxt] = li_ifmainmtrlid arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid arg_s_mtrl.ifchanged[arr_mxt] = 0 arg_s_mtrl.pfgroup[arr_mxt] = arg_pfgroup arg_s_mtrl.promode[arr_mxt] = ls_promode arg_s_mtrl.pfgroupmode[arr_mxt] = ls_pfgroupmode arg_s_mtrl.pfklmode[arr_mxt] = ls_pfklmode arg_s_mtrl.pfgroupqty[arr_mxt] = ld_pfgroupqty arg_s_mtrl.sptid[arr_mxt] = li_dftsptid //如果没有要生产的,不需要再计算下一级 IF ld_cmplqty <= 0 THEN rslt = 1 ELSE CHOOSE CASE li_mtrlorigin CASE 2, 6 //采购, rslt = 1 GOTO ext CASE 0 //自制 // IF ll_scid_mtrl <> arg_scid THEN // rslt = 1 // GOTO ext // ELSE //不排产且不是主计划 IF li_ifselforder = 1 And li_ifmainmtrlid = 0 THEN rslt = 1 GOTO ext END IF // END IF END CHOOSE count = 0 OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].dscrp , :ls_s_pfmx[count].pfgroup , :ls_s_pfmx[count].mrp_unit, :ls_s_pfmx[count].rate_buy, :ls_s_pfmx[count].rate_scll, :ls_s_pfmx[count].rate_sale, :ls_s_pfmx[count].promode, :ls_s_pfmx[count].pfgroupmode, :ls_s_pfmx[count].pfklmode, :ls_s_pfmx[count].pfgroupqty; DO WHILE sqlca.SQLCode = 0 count ++ FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale , :ls_s_pfmx[count].SonLoss , :ls_s_pfmx[count].SonDECLosS , :ls_s_pfmx[count].SonMtrlid , :ls_s_pfmx[count].status , :ls_s_pfmx[count].woodcode , :ls_s_pfmx[count].pcode , :ls_s_pfmx[count].wrkGrpid , :ls_s_pfmx[count].dscrp , :ls_s_pfmx[count].pfgroup , :ls_s_pfmx[count].mrp_unit, :ls_s_pfmx[count].rate_buy, :ls_s_pfmx[count].rate_scll, :ls_s_pfmx[count].rate_sale, :ls_s_pfmx[count].promode, :ls_s_pfmx[count].pfgroupmode, :ls_s_pfmx[count].pfklmode, :ls_s_pfmx[count].pfgroupqty; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF FOR ll_j = 1 To count IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN IF sys_option_sale_order_formula = 0 THEN //销售订单物料运算损耗率计算公式 cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS) ELSE cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) * (1 + ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS) END IF ELSE cmpl_qty = 0 END IF ////////////// // //按辅助单位补数, ? CHOOSE CASE ls_s_pfmx[ll_j].mrp_unit CASE 1 IF ls_s_pfmx[ll_j].rate_buy > 0 THEN cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_buy) * ls_s_pfmx[ll_j].rate_buy END IF CASE 2 IF ls_s_pfmx[ll_j].rate_scll > 0 THEN cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_scll) * ls_s_pfmx[ll_j].rate_scll END IF CASE 3 IF ls_s_pfmx[ll_j].rate_sale > 0 THEN cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_sale) * ls_s_pfmx[ll_j].rate_sale END IF END CHOOSE rslt = uof_cmpl_rqmtrl(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg,ls_s_pfmx[ll_j].wrkGrpid,ls_s_pfmx[ll_j].pfgroup ) IF rslt = 0 THEN EXIT END IF NEXT END IF ext: RETURN rslt end function public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long i, ll_rowcnt String ls_relbuytaskcode, ls_relbuytaskrelcode Int li_scllflag String ls_taskcode Decimal lde_price SELECT u_saletaskmx.scllflag, u_saletask.taskcode INTO :li_scllflag, :ls_taskcode FROM u_saletaskmx INNER join u_saletask on u_saletaskmx.scid = u_saletask.scid AND u_saletaskmx.taskid = u_saletask.taskid WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_relid AND u_saletaskmx.printid = :arg_relprintid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询销售订单明细信息操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_scllflag = 0 THEN rslt = 0 ARG_MSG = "销售订单["+ls_taskcode+"],相关明细还未用料审,不能操作" GOTO ext END IF //查找单号 if arg_plantype <> 3 then datastore ds ds = CREATE datastore ds.DataObject = "ds_orderrqmtrl_buytask" ds.SetTransObject(sqlca) ll_rowcnt = ds.Retrieve(arg_mxpkid) FOR i = 1 TO ll_rowcnt ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + "," ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + "," NEXT IF ls_relbuytaskcode <> "" THEN ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1) END IF IF ls_relbuytaskrelcode <> "" THEN ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1) END IF else //获取外协单号 select taskcode into :ls_relbuytaskcode from u_order_wfjg inner join u_order_wfjgmx on u_order_wfjgmx.wfjgID = u_order_wfjg.wfjgID AND u_order_wfjgmx.scid = u_order_wfjg.scid WHERE u_order_wfjgmx.scid = :arg_scid AND u_order_wfjgmx.wfjgID = :arg_relid AND u_order_wfjgmx.printid = :arg_relprintid; IF sqlca.SQLCode <> 0 THEN ls_relbuytaskcode = '' END IF end if IF arg_plantype = 2 THEN //查第一张采购订单的单价; SELECT top 1 isnull(uprice,0) INTO :lde_price FROM u_buytaskmx INNER join u_buytask on u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.taskid = u_buytask.taskid WHERE u_buytaskmx.relid = :arg_relid AND u_buytaskmx.relprintid = :arg_relprintid AND u_buytaskmx.relid2 = :arg_mxpkid AND u_buytask.status <> 0 Order By u_buytaskmx.taskid ; IF sqlca.SQLCode <> 0 THEN lde_price = 0 END IF ELSEIF arg_plantype = 3 THEN //查外协 END IF UPDATE u_OrderRqMtrl SET consignedqty = consignedqty + :arg_addqty, relbytskcode = :ls_relbuytaskcode, relbytskrelcode = :ls_relbuytaskrelcode, relbytskprice = :lde_price WHERE mxpkid = :arg_mxpkid AND scid = :arg_scid AND taskID = :arg_relid AND printid = :arg_relprintid AND plantype = :arg_plantype USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "更新销售订单明细的已订货数操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "销售订单明细的已订货数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long i, ll_rowcnt String ls_relbuytaskcode, ls_relbuytaskrelcode //查找单号 datastore ds ds = CREATE datastore ds.DataObject = "ds_orderrqmtrl_buytask" ds.settransobject(sqlca) ll_rowcnt = ds.Retrieve(arg_mxpkid) FOR i = 1 TO ll_rowcnt ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + "," ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + "," NEXT IF ls_relbuytaskcode <> "" THEN ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1) END IF IF ls_relbuytaskrelcode <> "" THEN ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1) END IF UPDATE u_OrderRqMtrl SET relbytskcode = :ls_relbuytaskcode, relbytskrelcode = :ls_relbuytaskrelcode WHERE mxpkid = :arg_mxpkid and scid = :arg_scid and taskID = :arg_relid and printid = :arg_relprintid and plantype = :arg_plantype USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致更新销售订单明细的订货单号操作失败"+"~n"+sqlca.SQLErrText GOTO ext elseIF sqlca.SQLNrows = 0 THEN rslt = 0 arg_msg = "销售订单明细的订货单号正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long ll_MtrlID String ls_status, ls_woodcode, ls_pcode Decimal lde_Dstrqty, lde_truerqqty Decimal lde_upscllrate, lde_upscllqty SELECT MtrlID, status, woodcode, pcode, DstrQty, truerqqty INTO :ll_MtrlID, :ls_status, :ls_woodcode, :ls_pcode, :lde_Dstrqty, :lde_truerqqty FROM u_saleRqMtrl_scll WHERE scid = :arg_scid AND taskid = :arg_relid AND printid = :arg_relprintid AND rqmtrlid = :arg_rqmtrlid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询销售订单明细的已领用数失败,'+sqlca.SQLErrText GOTO ext END IF SELECT upscllrate, upscllqty INTO :lde_upscllrate, :lde_upscllqty FROM u_mtrldef WHERE mtrlid = :ll_mtrlid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料明细资料失败,'+sqlca.SQLErrText GOTO ext END IF IF arg_addqty > 0 THEN //增加 IF lde_truerqqty * (1 + lde_upscllrate) + lde_upscllqty < lde_Dstrqty + arg_addqty THEN rslt = 0 arg_msg = "销售订单需求明细的未领用数不足够更新。" GOTO ext END IF ELSE IF lde_Dstrqty < Abs(arg_addqty) THEN rslt = 0 arg_msg = "销售订单需求明细的已领用数不足够更新。" GOTO ext END IF END IF UPDATE u_saleRqMtrl_scll SET DstrQty = dstrqty + :arg_addqty WHERE scid = :arg_scid AND taskid = :arg_relid AND printid = :arg_relprintid AND rqmtrlid = :arg_rqmtrlid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单明细的已领用数失败,'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "销售订单明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF //更新uof_add_rqmtrl_dstrqty IF uof_add_rqmtrl_dstrqty(arg_scid, arg_relid, arg_relprintid, ll_MtrlID, ls_status, ls_woodcode, ls_pcode, arg_addqty, False, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long i, ll_rowcnt Decimal lde_addqty, lde_restqty, lde_qty Long ll_mxpkid IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF lde_qty = arg_addqty //查找单号 datastore ds ds = CREATE datastore ds.DataObject = "ds_orderrqmtrl_scll" ds.SetTransObject(sqlca) ll_rowcnt = ds.Retrieve(arg_scid, arg_relid, arg_relprintid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode) IF lde_qty > 0 THEN FOR i = 1 TO ll_rowcnt lde_addqty = Min(ds.Object.rqqty[i] - ds.Object.dstrqty[i], lde_qty) lde_qty -= lde_addqty ll_mxpkid = ds.Object.mxpkid[i] UPDATE u_OrderRqMtrl SET DstrQty = dstrqty + :lde_addqty WHERE scid = :arg_scid AND taskid = :arg_relid AND printid = :arg_relprintid AND mxpkid = :ll_mxpkid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF lde_qty <= 0 THEN EXIT NEXT ELSE lde_qty = Abs(lde_qty) FOR i = 1 TO ll_rowcnt IF ds.Object.dstrqty[i] > 0 THEN lde_addqty = Min(ds.Object.dstrqty[i], lde_qty) lde_qty -= lde_addqty ll_mxpkid = ds.Object.mxpkid[i] UPDATE u_OrderRqMtrl SET DstrQty = dstrqty - :lde_addqty WHERE scid = :arg_scid AND taskid = :arg_relid AND printid = :arg_relprintid AND mxpkid = :ll_mxpkid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF lde_qty <= 0 THEN EXIT END IF NEXT END IF //IF lde_qty > 0 THEN // rslt = 0 // arg_msg = "销售订单需求明细的已领用数不足够更新。" // GOTO ext //END IF ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF DESTROY ds RETURN rslt end function public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1 Long ll_i String ls_mtrlcode Long cnt Long ll_mxpkid Decimal ld_consignedqty,ld_inqty IF arg_s_mtrl.plantype[1] = 2 THEN //检查采购订单; SELECT count(*) INTO :cnt FROM u_buytask INNER join u_buytaskmx on u_buytask.scid = u_buytaskmx.scid AND u_buytask.taskid = u_buytaskmx.taskid Where u_buytaskmx.relid2 = :arg_s_mtrl.mxpkid[1]; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询原用料采购订单信息失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = "原用料已建立采购订单,不能操作" rslt = 0 GOTO ext END IF ELSEIF arg_s_mtrl.plantype[1] = 3 THEN //检查外协订单 END IF ld_consignedqty = 0 ld_inqty = 0 SELECT consignedqty, inqty INTO :ld_consignedqty, :ld_inqty FROM u_orderRqMtrl WHERE mxpkid = :arg_s_mtrl.mxpkid[1] AND scid = :arg_s_mtrl.scid[1] AND taskid = :arg_s_mtrl.taskid[1] AND printid = :arg_s_mtrl.printid[1] AND plantype = :arg_s_mtrl.plantype[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询原用料信息失败," + sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_s_mtrl.plantype[1] = 2 THEN IF ld_consignedqty > 0 THEN arg_msg = "原用料已有采购已订货数,不能操作" rslt = 0 GOTO ext ELSEIF ld_inqty > 0 THEN arg_msg = "原用料已有采购已进仓数,不能操作" rslt = 0 GOTO ext END IF ELSEIF arg_s_mtrl.plantype[1] = 3 THEN IF ld_consignedqty > 0 THEN arg_msg = "原用料已有外协已订货数,不能操作" rslt = 0 GOTO ext ELSEIF ld_inqty > 0 THEN arg_msg = "原用料已有外协已进仓数,不能操作" rslt = 0 GOTO ext END IF END IF UPDATE u_orderRqMtrl SET RqQty = :arg_s_mtrl.qty[1] , truerqqty = :arg_s_mtrl.cmplqty[1] WHERE mxpkid = :arg_s_mtrl.mxpkid[1] AND scid = :arg_s_mtrl.scid[1] AND taskID = :arg_s_mtrl.taskid[1] AND printid = :arg_s_mtrl.printid[1] AND plantype = :arg_s_mtrl.plantype[1] USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单明细的运算结果操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "销售订单明细的运算结果正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING sqlca; END IF RETURN rslt end function on uo_order_ml_mrp.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml_mrp.destroy TriggerEvent( this, "destructor" ) call super::destroy end on