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.

 

posted @ 2025-06-27 10:39  yangliu11223  阅读(60)  评论(0)    收藏  举报