$PBExportHeader$uo_sc_task_finish.sru forward global type uo_sc_task_finish from uo_transactionobject end type end forward global type uo_sc_task_finish from uo_transactionobject end type global uo_sc_task_finish uo_sc_task_finish type variables end variables forward prototypes public function integer uf_finishbarcode (long arg_wrkgrpid[], string arg_barcode[], datetime arg_opdate[], ref string arg_msg) end prototypes public function integer uf_finishbarcode (long arg_wrkgrpid[], string arg_barcode[], datetime arg_opdate[], ref string arg_msg);uo_finish uo_finish_wg uo_finish_wg = Create uo_finish Int rslt = 1 Long ll_i, ll_j Long arr_wrkgrpid[] Long ll_cnt = 0 Long ll_scid Long ll_wagemth String arr_taskcode[] Decimal arr_qty[] Boolean arr_task[] Long arr_taskid[] Long arr_empid[] Long arr_workgroupid[] Decimal arr_workprice[] String arr_procode[] String arr_proname[] Long arr_wageid[] Long arr_scid[] Long ll_mxcnt s_finish_mx s_mx[],s_empty[] // 汇总工组 FOR ll_i = 1 To UpperBound(arg_wrkgrpid) arr_task[ll_i] = False SELECT relcode, qty, scid INTO :arr_taskcode[ll_i], :arr_qty[ll_i], :arr_scid[ll_i] FROM u_ordermtrl_workgroup_barcode Where barcode = :arg_barcode[ll_i] And swkpid = :arg_wrkgrpid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单号失败,' + sqlca.SQLErrText GOTO ext END IF IF arr_taskcode[ll_i] <> '' THEN SELECT u_sc_task.taskid, u_sc_task.empid, u_sc_task.workgroupid, ISNULL(U_OrderRqwp.workPrice, 0), u_sc_task.procode, u_sc_task.proname INTO :arr_taskid[ll_i], :arr_empid[ll_i], :arr_workgroupid[ll_i], :arr_workprice[ll_i], :arr_procode[ll_i], :arr_proname[ll_i] FROM u_sc_task LEFT OUTER JOIN U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND u_sc_task.orderid = U_OrderRqwp.orderid AND u_sc_task.mtrlid = U_OrderRqwp.Mtrlid AND u_sc_task.procode = U_OrderRqwp.Procode Where u_sc_task.taskcode = :arr_taskcode[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单信息失败,' +sqlca.SQLErrText GOTO ext END IF arr_wageid[ll_i] = 0 IF arr_empid[ll_i] > 0 Or (arr_empid[ll_i] = 0 And arr_workgroupid[ll_i] = 0 ) THEN SELECT top 1 wageid INTO :arr_wageid[ll_i] FROM u_gz_wageitem WHERE (u_gz_wageitem.wagemode = 12 ) AND ( u_gz_wageitem.useflag = 1 ) ; IF sqlca.SQLCode <> 0 THEN arr_wageid[ll_i] = 0 END IF ELSEIF arr_workgroupid[ll_i] > 0 THEN SELECT top 1 wageid INTO :arr_wageid[ll_i] FROM u_gz_wageitem WHERE (u_gz_wageitem.wagemode = 16 ) AND ( u_gz_wageitem.useflag = 1 ) ; IF sqlca.SQLCode <> 0 THEN arr_wageid[ll_i] = 0 END IF END IF arr_task[ll_i] = True FOR ll_j = 1 To ll_cnt IF arr_wrkgrpid[ll_j] = arg_wrkgrpid[ll_i] THEN GOTO _next END IF NEXT ll_cnt++ arr_wrkgrpid[ll_cnt] = arg_wrkgrpid[ll_i] END IF _next: NEXT Long arr_opdate[], empty_opdate[] Long ll_k FOR ll_i = 1 To ll_cnt ll_scid = 0 // TODO: 获取分部 arr_opdate = empty_opdate FOR ll_j = 1 To UpperBound(arg_wrkgrpid) IF arr_task[ll_j] And & arg_wrkgrpid[ll_j] = arr_wrkgrpid[ll_i] THEN ll_scid = arr_scid[ll_j] FOR ll_k = 1 To UpperBound(arr_opdate) IF Long(String(arg_opdate[ll_j], 'yyyyMM')) = arr_opdate[ll_k] THEN GOTO _nextbarcode END IF NEXT arr_opdate[UpperBound(arr_opdate) + 1] = Long(String(arg_opdate[ll_j], 'yyyyMM')) END IF _nextbarcode: NEXT ll_wagemth = 0 // TODO: 获取工资月份 FOR ll_k = 1 To UpperBound(arr_opdate) ll_wagemth = arr_opdate[ll_k] IF uo_finish_wg.newbegin(ll_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_finish_wg.scid = ll_scid uo_finish_wg.relcode = '' uo_finish_wg.assign_emp = publ_operator uo_finish_wg.wrkgrpid = arr_wrkgrpid[ll_i] uo_finish_wg.wagemth = ll_wagemth uo_finish_wg.dscrp = '' uo_finish_wg.finishdate = DateTime(Today(),Now()) ll_mxcnt = 0 s_mx = s_empty FOR ll_j = 1 To UpperBound(arg_wrkgrpid) IF arr_task[ll_j] And & arg_wrkgrpid[ll_j] = arr_wrkgrpid[ll_i] And & Long(String(arg_opdate[ll_j], 'yyyyMM')) = arr_opdate[ll_k] THEN ll_mxcnt++ s_mx[ll_mxcnt].taskid = arr_taskid[ll_j] s_mx[ll_mxcnt].printid = ll_mxcnt s_mx[ll_mxcnt].comqty = arr_qty[ll_j] s_mx[ll_mxcnt].mxdscrp = '' s_mx[ll_mxcnt].wageid = arr_wageid[ll_j] s_mx[ll_mxcnt].empid = arr_empid[ll_j] s_mx[ll_mxcnt].workgroupid = arr_workgroupid[ll_j] s_mx[ll_mxcnt].workPrice = arr_workprice[ll_j] s_mx[ll_mxcnt].procode = arr_procode[ll_j] s_mx[ll_mxcnt].proname = arr_proname[ll_j] s_mx[ll_mxcnt].storageid = 0 END IF NEXT IF uo_finish_wg.Save(s_mx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT NEXT GOTO ext ext: Destroy uo_finish_wg IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF RETURN rslt end function on uo_sc_task_finish.create call super::create end on on uo_sc_task_finish.destroy call super::destroy end on