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) 收藏 举报
浙公网安备 33010602011771号