ABAP-按照单据类别年月日流水号生成对应单据编号

1.建表

 

2.程序调用

FUNCTION ZFM_GENSEQ_CPF
  IMPORTING
    I_ZTYPE TYPE ZEDBTYPE_CPF
    I_DATE01 LIKE SY-DATUM
  EXPORTING
    E_SEQ TYPE C.



  DATA: LT_SEQ TYPE STANDARD TABLE OF ZTSEQ_CPF,
        LS_SEQ TYPE ZTSEQ_CPF.
  DATA LV_SEQ TYPE N LENGTH 3.



  CALL FUNCTION 'ENQUEUE_EZ_ZTSEQ_CPF'     "加锁
    EXPORTING
      MODE_ZTSEQ_CPF = 'E'
      MANDT          = SY-MANDT
      ZTYPE          = I_ZTYPE
    EXCEPTIONS
      FOREIGN_LOCK   = 1
      SYSTEM_FAILURE = 2
      OTHERS         = 3.
  IF SY-SUBRC = 0.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_SEQ FROM ZTSEQ_CPF          "检索当前流水表中是否存在数据,如果有则加1返回,否则返回001
     WHERE ZTYPE = I_ZTYPE AND  ZYEAR = I_DATE01+0(4)
     AND ZMONTH = I_DATE01+4(2)  AND ZDAY = I_DATE01+6(2).
    READ TABLE LT_SEQ INDEX 1 INTO LS_SEQ.
    IF SY-SUBRC = 0.
      LV_SEQ = LS_SEQ-ZSEQ + 1.
      LS_SEQ-ZSEQ = LV_SEQ.
      MODIFY ZTSEQ_CPF FROM LS_SEQ.                                           "更新数据库表
      CONCATENATE I_ZTYPE '-' I_DATE01+2(2) I_DATE01+4(2) I_DATE01+6(2) LV_SEQ INTO E_SEQ.       "拼接字符串并返回
    ELSE .
      LV_SEQ = '001'.
      CONCATENATE I_ZTYPE '-' I_DATE01+2(2) I_DATE01+4(2) I_DATE01+6(2) LV_SEQ INTO E_SEQ.  "直接返回给定日期001,并更新seq表
      LS_SEQ-MANDT = SY-MANDT.
      LS_SEQ-ZTYPE = I_ZTYPE.
      LS_SEQ-ZYEAR = I_DATE01+0(4).
      LS_SEQ-ZMONTH = I_DATE01+4(2).
      LS_SEQ-ZDAY = I_DATE01+6(2).
      LS_SEQ-ZSEQ = LV_SEQ.
      MODIFY ZTSEQ_CPF FROM LS_SEQ.
    ENDIF.
  ENDIF.

  IF SY-SUBRC = 0.                                         "以上操作成功之后需要解锁
    CALL FUNCTION 'DEQUEUE_EZ_ZTSEQ_CPF'
      EXPORTING
        MODE_ZTSEQ_CPF = 'E'
        MANDT          = SY-MANDT
        ZTYPE          = I_ZTYPE.
  ENDIF.

ENDFUNCTION.

 

posted on 2022-06-14 10:04  SmartTony_07  阅读(627)  评论(0)    收藏  举报

导航