通过ABAP对冲销会计凭证的IDOC类型ACC_DOCUMENT_REVERSE01测试案例。
先完成系统配置:
WE30
WE20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
*&---------------------------------------------------------------------* *& Report ZTEST036 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZTEST037. *BASIC TYPE ACC_DOCUMENT_REVERSE01. (check with WE82) *MESSAGE TYPE ACC_DOCUMENT_REVERSE. *处理这个IDOC类型的函数为IDOC_INPUT_ACC_DOCUMENT_REVERS. *可通过WE42查询处理代码BAPI得知先调公共函数BAPI_IDOC_INPUT1, *BAPI_IDOC_INPUT1内部根据基本类型从表TBDBE查询FUNCTION_NAME, *最终数据被转发到真实的FUNCTION_NAME进行处理。 *WE57分配函数到IDOC TYPE. *more about idoc:https://wenku.baidu.com/view/77da1e35f5335a8103d2204d.html# *https://www.cnblogs.com/jiangzhengjun/p/4292135.html *https://docs.oracle.com/cd/B14099_19/integrate.1012/b14061/processing.htm *idoc exec function args - IDOC_WRITE_AND_START_INBOUND. DATA: LS_EDIDC TYPE EDIDC, "control record. LS_EDIDD TYPE EDIDD, LT_EDIDD TYPE TABLE OF EDIDD, "data recordes itab. LV_DOCNUM TYPE EDIDC-DOCNUM. "idoc returns. DATA: LS_BUSACT TYPE E1ACC_DOCUMENT_REVERSE, LS_REVINF TYPE E1BPACREV. DATA: LV_MESSAGE TYPE STRING, IDOC_MESSAGE TYPE BDIDOCATTR-MESSAGE. DATA: LV_OBJSYS TYPE C LENGTH 10. SELECT SINGLE * INTO @DATA(LS_BKPF) FROM BKPF WHERE BELNR = '0100000742' AND BUKRS = '6000' AND GJAHR = '2020'. CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET' IMPORTING OWN_LOGICAL_SYSTEM = LV_OBJSYS. *idoc control record. CLEAR LS_EDIDC. LS_EDIDC-MESTYP = 'ACC_DOCUMENT_REVERSE'. LS_EDIDC-IDOCTP = 'ACC_DOCUMENT_REVERSE01'. LS_EDIDC-DIRECT = '2'. LS_EDIDC-RCVPOR = 'SAPS4D'. LS_EDIDC-RCVPRN = 'S4DCLNT300'. LS_EDIDC-RCVPRT = 'LS'. LS_EDIDC-SNDPOR = 'SAPS4D'. LS_EDIDC-SNDPRN = 'S4DCLNT300'. LS_EDIDC-SNDPRT = 'LS'. *idoc data records. "segment E1ACC_DOCUMENT_REVERSE. CLEAR LT_EDIDD[]. CLEAR LS_EDIDD. CLEAR LS_BUSACT. LS_EDIDD-SEGNAM = 'E1ACC_DOCUMENT_REVERSE'. LS_EDIDD-DTINT2 = 0. LS_BUSACT-BUS_ACT = LS_BKPF-GLVOR. LS_EDIDD-SDATA = LS_BUSACT. APPEND LS_EDIDD TO LT_EDIDD. "segment E1BPACREV. CLEAR LS_EDIDD. CLEAR LS_REVINF. LS_EDIDD-SEGNAM = 'E1BPACREV'. LS_EDIDD-DTINT2 = 0. LS_REVINF-OBJ_TYPE = LS_BKPF-AWTYP. LS_REVINF-OBJ_KEY = LS_BKPF-AWKEY. LS_REVINF-OBJ_KEY_R = LS_BKPF-AWKEY. LS_REVINF-OBJ_SYS = LV_OBJSYS. LS_REVINF-COMP_CODE = LS_BKPF-BUKRS. IF SY-DATUM+0(6) = LS_BKPF-BUDAT+0(6). LS_REVINF-REASON_REV = '03'. LS_REVINF-PSTNG_DATE = LS_BKPF-BUDAT. LS_REVINF-FIS_PERIOD = LS_BKPF-MONAT. ELSE. LS_REVINF-REASON_REV = '04'. LS_REVINF-PSTNG_DATE = SY-DATUM. LS_REVINF-FIS_PERIOD = SY-DATUM+4(2). ENDIF. LS_EDIDD-SDATA = LS_REVINF. APPEND LS_EDIDD TO LT_EDIDD. *generate idoc with function IDOC_WRITE_AND_START_INBOUND. CALL FUNCTION 'IDOC_WRITE_AND_START_INBOUND' EXPORTING I_EDIDC = LS_EDIDC DO_COMMIT = 'X' IMPORTING DOCNUM = LV_DOCNUM TABLES I_EDIDD = LT_EDIDD EXCEPTIONS IDOC_NOT_SAVED = 1 OTHERS = 2. CONCATENATE 'Idoc' LV_DOCNUM 'generated.' 'Check with WE02' INTO LV_MESSAGE SEPARATED BY SPACE. *Get short of message of current IDoc status record. CALL FUNCTION 'IDOC_GET_MESSAGE_ATTRIBUTE' EXPORTING IDOC_NUMBER = LV_DOCNUM IMPORTING IDOC_MESSAGE = IDOC_MESSAGE. *MESSAGE S001(00) WITH LV_MESSAGE . WRITE : / LV_MESSAGE. WRITE : / IDOC_MESSAGE. |
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/4055.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。