成本中心领用接口详解编程语言

广州某粮油公司的接口,因为OA太死板,所以这边接口统一做成字段,值  的形式传递。

抬头结构:ZMMS001

KOSTL    1 类型    KOSTL    CHAR    10    0    成本中心 
BLDAT    1 类型    BLDAT    DATS    8    0    凭证中的凭证日期 
XBLNR    1 类型    XBLNR    CHAR    16    0    参考凭证编号 

行项目结构:ZMMS002

ZEILE    1 类型    MBLPO    NUMC    4    0    物料凭证中的项目 
MATNR    1 类型    MATNR    CHAR    18    0    物料号  
WERKS    1 类型    WERKS_D    CHAR    4    0    工厂 
LGORT    1 类型    LGORT_D    CHAR    4    0    库存地点 
ERFMG    1 类型    ERFMG    QUAN    13    3    以输入单位计的数量  
SGTXT    1 类型    SGTXT    CHAR    50    0    项目文本 
ERFME    1 类型    ERFME    UNIT    3    0    条目单位

函数代码:

FUNCTION ZMM_OAMB1A. 
*"---------------------------------------------------------------------- 
*"*"本地接口: 
*"  TABLES 
*"      T_TAB STRUCTURE  ZJKS001 OPTIONAL 
*"      T_TAB_I STRUCTURE  ZJKS002 OPTIONAL 
*"---------------------------------------------------------------------- 
DATA:S_TAB TYPE ZJKS001."表头结构 
DATA:S_TAB_I TYPE ZJKS002."表体结构 
FIELD-SYMBOLS:  <DYN_WA>,"表头 
<DYN_LA>,"表体 
<DYN_FIELD>."字段 
DATA:GS_ZTMM_WADAT TYPE ZTMM_WADAT. 
DATA:GT_ZMB1A01 TYPE TABLE OF ZMB1A01, 
GS_ZMB1A01 LIKE LINE OF  GT_ZMB1A01. 
DATA:LV_NUM TYPE N. 
DATA:LS_TABH TYPE ZMMS001, 
LS_TABI TYPE ZMMS002. 
DATA:LV_FUNC TYPE CHAR50."结构ID 
DATA:LV_XBLNR TYPE XBLNR1. 
DATA:GS_HEAD TYPE          BAPI2017_GM_HEAD_01, 
GV_CODE TYPE          BAPI2017_GM_CODE VALUE '03', 
GT_ITEM TYPE TABLE OF BAPI2017_GM_ITEM_CREATE, 
GS_ITEM TYPE          BAPI2017_GM_ITEM_CREATE, 
GT_RETU TYPE TABLE OF BAPIRET2, 
GS_RETU TYPE          BAPIRET2, 
GV_MDOC TYPE          BAPI2017_GM_HEAD_RET-MAT_DOC. 
DEFINE MESGADD."返回消息赋值 
S_TAB-FIELDNAME = &1. 
S_TAB-VALUE = &2. 
APPEND S_TAB TO T_TAB. 
END-OF-DEFINITION. 
"************************************************************正式程序 
READ TABLE T_TAB INTO S_TAB WITH KEY FIELDNAME = 'FUNCTION'. 
IF SY-SUBRC = 0. 
LV_FUNC = S_TAB-VALUE. 
IF LV_FUNC = 'OAMB1A'. 
ELSE. 
REFRESH:T_TAB. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '引用错误函数,请联系管理员!'. 
RETURN. 
ENDIF. 
ELSE. 
REFRESH:T_TAB. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '未指定函数!'. 
RETURN. 
ENDIF. 
IF T_TAB[] IS INITIAL OR T_TAB_I[] IS INITIAL. 
REFRESH:T_TAB. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '传入参数不完整,需要完整的表头表体信息!'. 
RETURN. 
ENDIF. 
ASSIGN LS_TABH TO <DYN_WA>."表头结构 
ASSIGN LS_TABI TO <DYN_LA>."表体结构 
LOOP AT T_TAB INTO S_TAB."表头数据装换 
ASSIGN COMPONENT S_TAB-FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. 
IF SY-SUBRC = 0. 
<DYN_FIELD> = S_TAB-VALUE. 
ENDIF. 
ENDLOOP. 
IF LS_TABH-KOSTL IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '成本中心不能为空!'. 
ENDIF. 
GS_HEAD-REF_DOC_NO = LS_TABH-XBLNR. 
GS_HEAD-PR_UNAME = SY-UNAME. 
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE' 
EXPORTING 
OBJECT           = 'ZOALS' 
EXCEPTIONS 
FOREIGN_LOCK     = 1 
OBJECT_NOT_FOUND = 2 
SYSTEM_FAILURE   = 3 
OTHERS           = 4. 
IF SY-SUBRC = 0. 
CALL FUNCTION 'NUMBER_GET_NEXT' 
EXPORTING 
NR_RANGE_NR             = '01' 
OBJECT                  = 'ZOALS' 
IGNORE_BUFFER           = 'X' 
IMPORTING 
NUMBER                  = GS_ZMB1A01-ZJLLSH 
EXCEPTIONS 
INTERVAL_NOT_FOUND      = 1 
NUMBER_RANGE_NOT_INTERN = 2 
OBJECT_NOT_FOUND        = 3 
QUANTITY_IS_0           = 4 
QUANTITY_IS_NOT_1       = 5 
INTERVAL_OVERFLOW       = 6 
BUFFER_OVERFLOW         = 7 
OTHERS                  = 8. 
IF SY-SUBRC = 0. 
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE' 
EXPORTING 
OBJECT           = 'ZOALS' 
EXCEPTIONS 
OBJECT_NOT_FOUND = 1 
OTHERS           = 2. 
ENDIF. 
ENDIF. 
LOOP AT T_TAB_I INTO S_TAB_I."表体数据装换 
AT NEW COL. 
CLEAR LS_TABI. 
ENDAT. 
ASSIGN COMPONENT S_TAB_I-FIELDNAME OF STRUCTURE <DYN_LA> TO <DYN_FIELD>. 
IF SY-SUBRC = 0. 
<DYN_FIELD> = S_TAB_I-VALUE. 
ENDIF. 
AT END OF COL. 
LV_NUM = LV_NUM + 1. 
IF LS_TABI-MATNR IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '物料编码不能为空!'. 
RETURN. 
ENDIF. 
IF LS_TABI-WERKS IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '工厂编码不能为空!'. 
RETURN. 
ENDIF. 
IF LS_TABI-LGORT IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '库位编码不能为空!'. 
RETURN. 
ENDIF. 
IF LS_TABI-ERFMG IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '数量字段不能为空!'. 
RETURN. 
ENDIF. 
IF LS_TABI-ERFME IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '单位不能为空!'. 
RETURN. 
ENDIF. 
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
EXPORTING 
INPUT  = LS_TABI-MATNR 
IMPORTING 
OUTPUT = LS_TABI-MATNR. 
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' 
EXPORTING 
INPUT          = LS_TABI-ERFME 
LANGUAGE       = SY-LANGU 
IMPORTING 
OUTPUT         = LS_TABI-ERFME 
EXCEPTIONS 
UNIT_NOT_FOUND = 1 
OTHERS         = 2. 
IF SY-SUBRC <> 0. 
ENDIF. 
GS_ITEM-MATERIAL = LS_TABI-MATNR. 
GS_ITEM-PLANT = LS_TABI-WERKS. 
IF GS_HEAD-DOC_DATE IS INITIAL. 
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GS_ZTMM_WADAT 
FROM ZTMM_WADAT 
WHERE WERKS = LS_TABI-WERKS 
AND SDATE = SY-DATUM 
AND ETIME >= SY-UZEIT 
AND STIME <= SY-UZEIT. 
IF SY-SUBRC = 0. 
GS_HEAD-DOC_DATE = GS_ZTMM_WADAT-BUDAT. 
GS_HEAD-PSTNG_DATE = GS_ZTMM_WADAT-BUDAT. 
ELSE. 
GS_HEAD-DOC_DATE = SY-DATUM. 
GS_HEAD-PSTNG_DATE = SY-DATUM. 
ENDIF. 
ENDIF. 
GS_ITEM-STGE_LOC = LS_TABI-LGORT. 
GS_ITEM-MOVE_TYPE = '201'. 
GS_ITEM-ENTRY_QNT = LS_TABI-ERFMG. 
GS_ITEM-ENTRY_UOM = LS_TABI-ERFME. 
IF LS_TABH-KOSTL IS INITIAL. 
MESGADD:'RETURN' 'E', 
'MESSAGE' '传递值中成本中心为空,请联系管理员!'. 
RETURN. 
ENDIF. 
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
EXPORTING 
INPUT  = LS_TABH-KOSTL 
IMPORTING 
OUTPUT = LS_TABH-KOSTL. 
*      CONCATENATE '000' LS_TABH-KOSTL INTO GS_ITEM-COSTCENTER. 
*      CONDENSE GS_ITEM-COSTCENTER NO-GAPS. 
GS_ITEM-COSTCENTER = LS_TABH-KOSTL. 
GS_ITEM-ITEM_TEXT = LS_TABI-SGTXT. 
APPEND GS_ITEM TO GT_ITEM. 
"ADD BY LY FOR LOG 
*      GS_ZMB1A01-ZJLLSH = 
GS_ZMB1A01-POSNR = LV_NUM. 
GS_ZMB1A01-XBLNR = GS_HEAD-REF_DOC_NO. 
GS_ZMB1A01-KOSTL = GS_ITEM-COSTCENTER. 
GS_ZMB1A01-MATNR = GS_ITEM-MATERIAL. 
GS_ZMB1A01-WERKS = GS_ITEM-PLANT. 
GS_ZMB1A01-LGORT = GS_ITEM-STGE_LOC. 
GS_ZMB1A01-ERFMG = GS_ITEM-ENTRY_QNT. 
GS_ZMB1A01-ERFME = GS_ITEM-ENTRY_UOM. 
GS_ZMB1A01-DAT = SY-DATUM. 
GS_ZMB1A01-TIM = SY-UZEIT. 
APPEND GS_ZMB1A01 TO GT_ZMB1A01. 
"ADD BY LY FOR LOG 
ENDAT. 
ENDLOOP. 
CLEAR:LV_XBLNR. 
SELECT SINGLE XBLNR INTO LV_XBLNR 
FROM MKPF WHERE XBLNR = LS_TABH-XBLNR. 
IF LV_XBLNR IS NOT INITIAL. 
MESGADD:'RETURN' 'S'. 
RETURN. 
ENDIF. 
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' 
EXPORTING 
GOODSMVT_HEADER  = GS_HEAD 
GOODSMVT_CODE    = GV_CODE 
IMPORTING 
*     GOODSMVT_HEADRET = 
MATERIALDOCUMENT = GV_MDOC 
*     MATDOCUMENTYEAR  = 
TABLES 
GOODSMVT_ITEM    = GT_ITEM 
RETURN           = GT_RETU. 
READ TABLE GT_RETU INTO GS_RETU WITH KEY TYPE = 'E'. 
IF SY-SUBRC = 0. 
LOOP AT GT_RETU INTO GS_RETU WHERE TYPE = 'E'. 
MESGADD:'RETURN' 'E', 
'MESSAGE' GS_RETU-MESSAGE. 
ENDLOOP. 
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 
ELSE. 
LOOP AT GT_ZMB1A01 INTO GS_ZMB1A01. 
GS_ZMB1A01-MBLNR = GV_MDOC. 
MODIFY GT_ZMB1A01 FROM GS_ZMB1A01. 
ENDLOOP. 
MODIFY ZMB1A01 FROM TABLE GT_ZMB1A01. 
MESGADD:'RETURN' 'S', 
'MBLNR'  GV_MDOC. 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 
EXPORTING 
WAIT = 'X'. 
ENDIF. 
ENDFUNCTION.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18649.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论