SAP财务记账程序加锁控制

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.

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页