取下一个物料号码
FUNCTION?ZMMF_GET_NEXT_MATNR
.
*"----------------------------------------------------------------------
*"*"本地接口:
*"??IMPORTING
*"?????VALUE(I_MATKL)?TYPE??MARA-MATKL
*"?????VALUE(I_ZPRDA)?TYPE??MARA-ZPRDA
*"?????VALUE(I_ZQLTY)?TYPE??MARA-ZQLTY
*"?????VALUE(I_TESTRUN)?TYPE??CHAR1?OPTIONAL
*"??EXPORTING
*"?????VALUE(E_MATNR)?TYPE??MATNR
*"?????VALUE(E_RETURN)?TYPE??BAPIRET2
*"??EXCEPTIONS
*"??????INTERVAL_OVERFLOW
*"----------------------------------------------------------------------
?? DATA :
*????????LV_MATNR???????TYPE?I?VALUE?13,?"物料號長度
????LV_MATKL_LEN??? TYPE? I ,
????LV_MAXNBR?????? TYPE?P ,
????LV_LSLEN??????? TYPE? I ,
????LV_NRLEVEL_LEN? TYPE? I .
??LV_LSLEN? =? 3 .
??LV_MAXNBR? =? 1 .
?? DO?LV_LSLEN? TIMES .
????LV_MAXNBR? =?LV_MAXNBR?*? 10 .
?? ENDDO .
??LV_MAXNBR? =?LV_MAXNBR? -? 1 .
?? IF?I_ZPRDA? =? '' .
????I_ZPRDA? =? '000' .
?? ENDIF .
?? IF?I_ZQLTY? =? '' .
????I_ZQLTY? =? '000' .
?? ENDIF .
?? CLEAR :E_RETURN ,ZMMT_MATNR .
?? SELECT? SINGLE? FOR? UPDATE?*? FROM?ZMMT_MATNR
???? WHERE?MATKL? =?I_MATKL
?????? AND?ZPRDA? =?I_ZPRDA
?????? AND?ZQLTY? =?I_ZQLTY .
?? IF?SY -SUBRC? =? 0 .
???? IF???ZMMT_MATNR -NRLEVEL?>=?LV_MAXNBR .
??????E_RETURN - TYPE? =? 'E' .
??????E_RETURN - MESSAGE? =?I_MATKL?&&?I_ZPRDA?&&?I_ZQLTY?&&? '號碼段已用完' .
?????? MESSAGE?E_RETURN - MESSAGE? TYPE? 'E'
??????????????????????? RAISING?INTERVAL_OVERFLOW . .
???? ENDIF .
???? ADD? 1? TO?ZMMT_MATNR -NRLEVEL .
???? UPDATE?ZMMT_MATNR .
?? ELSE .
????ZMMT_MATNR -MATKL? =?I_MATKL .
????ZMMT_MATNR -ZPRDA? =?I_ZPRDA .
????ZMMT_MATNR -ZQLTY? =?I_ZQLTY .
????ZMMT_MATNR -NRLEVEL? =? '00000000000000000001' .
???? INSERT?ZMMT_MATNR .
?? ENDIF .
??LV_NRLEVEL_LEN? =? 20? -?LV_LSLEN .
??E_MATNR? =?I_MATKL?&&?I_ZPRDA?&&?I_ZQLTY?&&?ZMMT_MATNR -NRLEVEL+LV_NRLEVEL_LEN (LV_LSLEN ) .
?? CALL? FUNCTION? 'CONVERSION_EXIT_MATN1_INPUT'
???? EXPORTING
?????? INPUT???????? =?E_MATNR
???? IMPORTING
?????? OUTPUT??????? =?E_MATNR
???? EXCEPTIONS
??????LENGTH_ERROR? =? 1
?????? OTHERS??????? =? 2 .
?? SELECT? SINGLE?@ABAP_TRUE? FROM?MARA? INTO?@DATA (ISEXIT )
???? WHERE?MATNR? =?@E_MATNR .
?? IF?ISEXIT? =?ABAP_TRUE .
???? COMMIT? WORK? AND? WAIT .
???? CALL? FUNCTION? 'ZMMF_GET_NEXT_MATNR'
?????? EXPORTING
????????I_MATKL??? =?I_MATKL
????????I_ZPRDA??? =?I_ZPRDA
????????I_ZQLTY??? =?I_ZQLTY
????????I_TESTRUN? =?I_TESTRUN
?????? IMPORTING
????????E_MATNR??? =?E_MATNR .
?? ENDIF .
?? IF?I_TESTRUN? =? 'X' .
???? ROLLBACK? WORK .
?? ELSE .
???? COMMIT? WORK? AND? WAIT .
?? ENDIF .
ENDFUNCTION .
*"----------------------------------------------------------------------
*"*"本地接口:
*"??IMPORTING
*"?????VALUE(I_MATKL)?TYPE??MARA-MATKL
*"?????VALUE(I_ZPRDA)?TYPE??MARA-ZPRDA
*"?????VALUE(I_ZQLTY)?TYPE??MARA-ZQLTY
*"?????VALUE(I_TESTRUN)?TYPE??CHAR1?OPTIONAL
*"??EXPORTING
*"?????VALUE(E_MATNR)?TYPE??MATNR
*"?????VALUE(E_RETURN)?TYPE??BAPIRET2
*"??EXCEPTIONS
*"??????INTERVAL_OVERFLOW
*"----------------------------------------------------------------------
?? DATA :
*????????LV_MATNR???????TYPE?I?VALUE?13,?"物料號長度
????LV_MATKL_LEN??? TYPE? I ,
????LV_MAXNBR?????? TYPE?P ,
????LV_LSLEN??????? TYPE? I ,
????LV_NRLEVEL_LEN? TYPE? I .
??LV_LSLEN? =? 3 .
??LV_MAXNBR? =? 1 .
?? DO?LV_LSLEN? TIMES .
????LV_MAXNBR? =?LV_MAXNBR?*? 10 .
?? ENDDO .
??LV_MAXNBR? =?LV_MAXNBR? -? 1 .
?? IF?I_ZPRDA? =? '' .
????I_ZPRDA? =? '000' .
?? ENDIF .
?? IF?I_ZQLTY? =? '' .
????I_ZQLTY? =? '000' .
?? ENDIF .
?? CLEAR :E_RETURN ,ZMMT_MATNR .
?? SELECT? SINGLE? FOR? UPDATE?*? FROM?ZMMT_MATNR
???? WHERE?MATKL? =?I_MATKL
?????? AND?ZPRDA? =?I_ZPRDA
?????? AND?ZQLTY? =?I_ZQLTY .
?? IF?SY -SUBRC? =? 0 .
???? IF???ZMMT_MATNR -NRLEVEL?>=?LV_MAXNBR .
??????E_RETURN - TYPE? =? 'E' .
??????E_RETURN - MESSAGE? =?I_MATKL?&&?I_ZPRDA?&&?I_ZQLTY?&&? '號碼段已用完' .
?????? MESSAGE?E_RETURN - MESSAGE? TYPE? 'E'
??????????????????????? RAISING?INTERVAL_OVERFLOW . .
???? ENDIF .
???? ADD? 1? TO?ZMMT_MATNR -NRLEVEL .
???? UPDATE?ZMMT_MATNR .
?? ELSE .
????ZMMT_MATNR -MATKL? =?I_MATKL .
????ZMMT_MATNR -ZPRDA? =?I_ZPRDA .
????ZMMT_MATNR -ZQLTY? =?I_ZQLTY .
????ZMMT_MATNR -NRLEVEL? =? '00000000000000000001' .
???? INSERT?ZMMT_MATNR .
?? ENDIF .
??LV_NRLEVEL_LEN? =? 20? -?LV_LSLEN .
??E_MATNR? =?I_MATKL?&&?I_ZPRDA?&&?I_ZQLTY?&&?ZMMT_MATNR -NRLEVEL+LV_NRLEVEL_LEN (LV_LSLEN ) .
?? CALL? FUNCTION? 'CONVERSION_EXIT_MATN1_INPUT'
???? EXPORTING
?????? INPUT???????? =?E_MATNR
???? IMPORTING
?????? OUTPUT??????? =?E_MATNR
???? EXCEPTIONS
??????LENGTH_ERROR? =? 1
?????? OTHERS??????? =? 2 .
?? SELECT? SINGLE?@ABAP_TRUE? FROM?MARA? INTO?@DATA (ISEXIT )
???? WHERE?MATNR? =?@E_MATNR .
?? IF?ISEXIT? =?ABAP_TRUE .
???? COMMIT? WORK? AND? WAIT .
???? CALL? FUNCTION? 'ZMMF_GET_NEXT_MATNR'
?????? EXPORTING
????????I_MATKL??? =?I_MATKL
????????I_ZPRDA??? =?I_ZPRDA
????????I_ZQLTY??? =?I_ZQLTY
????????I_TESTRUN? =?I_TESTRUN
?????? IMPORTING
????????E_MATNR??? =?E_MATNR .
?? ENDIF .
?? IF?I_TESTRUN? =? 'X' .
???? ROLLBACK? WORK .
?? ELSE .
???? COMMIT? WORK? AND? WAIT .
?? ENDIF .
ENDFUNCTION .
總結
- 上一篇: 使用BAPI_CONTRACT_CREA
- 下一篇: SAP设置信贷控制范围有什么作用?