DATA:ls_zfit1004 TYPE zfit1004. "重处理权限配置表.
DATA:ls_zruning_lock TYPE zruning_lock. "加锁配置表.
IF p_ccl = 'X'.“界面添加重处理按钮
SELECT SINGLE * FROM zfit1004 INTO ls_zfit1004 WHERE usnam = sy-uname.
IF sy-subrc <> 0.
MESSAGE '请联系产品维护权限!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
SELECT SINGLE * FROM zruning_lock INTO ls_zruning_lock WHERE zprogram = sy-repid AND flag = 'X'.
IF sy-subrc EQ 0.
DO.
*加锁
CALL FUNCTION 'ENQUEUE_EZ_ZRUNING_LOCK'
EXPORTING
mode_zruning_lock = 'X'
mandt = sy-mandt
zprogram = sy-repid
* X_ZPROGRAM = ' '
_scope = '1'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
EXIT.
ELSE.
IF sy-batch = 'X'.
WAIT UP TO 10 SECONDS.
ELSE.
MESSAGE '该程序已有其他用户在运行,请稍候再试!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDDO.
ENDIF.
*取数记账
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_zfit169 ”取数表
FROM zfit169
WHERE sum_id IN s_sum_id“取数条件
AND get_date IN s_recive“取数条件
AND status <> 'S'.“取数条件(优化:写在后面删除)
DELETE ADJACENT DUPLICATES FROM gt_zfit169 COMPARING sum_id.
IF p_ccl = 'X'.
DELETE gt_zfit169 WHERE status = 'S'.
ELSE.
DELETE gt_zfit169 WHERE status = 'S' OR status = 'I'.”I为加锁标识
ENDIF.
IF gt_zfit169[] IS INITIAL.
MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDIF.
*"将捞出数据在DB打上临时标记
lt_zfit169[] = gt_zfit169[].
WHILE lt_zfit169 IS NOT INITIAL.
CLEAR lt_temp.
APPEND LINES OF lt_zfit169 FROM 1 TO 2000 TO lt_temp.
LOOP AT lt_temp INTO ls_temp.
UPDATE zfit169 SET status = 'I' WHERE sum_id = ls_temp-sum_id.
ENDLOOP.
COMMIT WORK AND WAIT.
DELETE lt_zfit169 FROM 1 TO 2000.
ENDWHILE.
*解锁
CALL FUNCTION 'DEQUEUE_EZ_ZRUNING_LOCK'
EXPORTING
mode_zruning_lock = 'X'
mandt = sy-mandt
zprogram = sy-repid.