ABAP如何根据日期取流水号
方法一:先锁表,表里取数,没取到得1,取到+1
DO 5 TIMES. CALL FUNCTION 'ENQUEUE_EZFIT005' EXPORTING mode_zfit005 = 'E' mandt = sy-mandt business_type = iv_btype datum = sy-datum EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc EQ 0. SELECT SINGLE bnumc INTO @DATA(lv_bnumc) FROM zfit005 WHERE business_type EQ @iv_btype AND datum EQ @sy-datum. IF sy-subrc EQ 0. lv_bnumc += 1. CONCATENATE sy-datum lv_bnumc INTO rv_number. CONDENSE rv_number NO-GAPS. UPDATE zfit005 SET bnumc = lv_bnumc WHERE business_type = iv_btype AND datum = sy-datum. ELSE. CONCATENATE sy-datum '00000001' INTO rv_number. DATA(ls_ranggenum) = VALUE zfit005( business_type = iv_btype datum = sy-datum bnumc = 1 ). INSERT zfit005 FROM ls_ranggenum. ENDIF. COMMIT WORK AND WAIT. CALL FUNCTION 'DEQUEUE_EZFIT005' EXPORTING mode_zfit005 = 'E' mandt = sy-mandt business_type = iv_btype datum = sy-datum. EXIT. ELSE. WAIT UP TO '0.1' SECONDS. ENDIF. ENDDO.
方法二:数据库表主键-日期;利用SELECT FOR UPDATE机制:取到即锁,然后数据+1;没有取到,利用insert锁当天第一条数据。
"检查更新流水表 SELECT SINGLE FOR UPDATE * FROM ztmm_batch WHERE cdate = @sy-datum INTO @DATA(ls_zbatch). IF sy-subrc <> 0. ls_zbatch-cdate = lv_cdate. ls_zbatch-batch_num = '0000'. "防止同时第一次获取 INSERT ztmm_batch FROM @( VALUE #( cdate = lv_cdate ) ). IF sy-subrc NE 0. SELECT SINGLE FOR UPDATE * FROM ztmm_batch WHERE cdate = @lv_cdate INTO @ls_zbatch. ENDIF. ENDIF. ls_zbatch-cdate = sy-datum. ls_zbatch-batch_num = ls_zbatch-batch_num + 1. MODIFY ztmm_batch FROM ls_zbatch.
本文来自博客园,作者:yangliu11223,转载请注明原文链接:https://www.cnblogs.com/yangliu11223/p/18951721

浙公网安备 33010602011771号