SAP ABAP产生IDOC案例
首先在WE20中配置好PARTNER并分配本次DEMO的MESSAGE TYPE:ACC_GL_POSTING,处理CODE为BAPI。
然后运行程序调用这个消息类型产生会计凭证。
上图:
IDOC相关的事务代码:
以下为示例代码:
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 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
*&---------------------------------------------------------------------* *& Report ZTEST036 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZTEST036. *MESSAGE TYPE ACC_GL_POSTING. *BASIC TYPE ACC_GL_POSTING01. *better idoc type for fi document is FIDCCP02. *for pos interface, using WPUFIB01. *ref: http://blog.vsharing.com/stcao/A819163.html * https://blogs.sap.com/2017/06/23/fi-posting-via-idoc-and-generate-additional-tax-line-in-accounting/ *idoc exec function args - IDOC_WRITE_AND_START_INBOUND. DATA: LS_EDIDC TYPE EDIDC, "control record. LT_EDIDD TYPE TABLE OF EDIDD WITH HEADER LINE, "data recordes itab. LV_DOCNUM TYPE EDIDC-DOCNUM. "idoc returns. *segments of idoc type ACC_GL_POSTING01, can display in we30. DATA: LS_DOCHDR TYPE E1BPACHE08, LS_DOCITM TYPE E1BPACGL08, LS_DOCITM_CURR TYPE E1BPACCR08. DATA: LV_MESSAGE TYPE STRING. *idoc control data. *以下使用的IDOC TYPE需先在合作伙伴参数(WE20)中配置好. *如果使用的IDOC TYPE比较多,可以自建一个配置表保存PARTNER信息,程序中根据IDOC TYPE取即可. *MANDT MANDT CLNT 3 0 Client *PROGM RS38L_FNAM CHAR 30 0 Name of Function Module *RCVPOR EDI_RCVPOR CHAR 10 0 Receiver port (SAP System, EDI subsystem) *RCVPRN EDI_RCVPRN CHAR 10 0 Partner Number of Receiver *RCVPRT EDI_RCVPRT CHAR 2 0 Partner Type of Receiver *SNDPOR EDI_SNDPOR CHAR 10 0 Sender port (SAP System, EDI subsystem) *SNDPRN EDI_SNDPRN CHAR 10 0 Partner Number of Sender *SNDPRT EDI_SNDPRT CHAR 2 0 Partner type of sender *WE20的PARTNER参数保存在表EDP21和EPD13中. CLEAR LS_EDIDC. LS_EDIDC-MESTYP = 'ACC_GL_POSTING'. LS_EDIDC-IDOCTP = 'ACC_GL_POSTING01'. 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 segment E1BPACHE08. LT_EDIDD-SEGNAM = 'E1BPACHE08'. LT_EDIDD-DTINT2 = 0. CLEAR LS_DOCHDR. LS_DOCHDR-USERNAME = 'BASIS'. LS_DOCHDR-HEADER_TXT = 'idoc test'. LS_DOCHDR-COMP_CODE = '6000'. LS_DOCHDR-FISC_YEAR = 2020. LS_DOCHDR-DOC_DATE = '20201005'. LS_DOCHDR-PSTNG_DATE = '20201018'. LS_DOCHDR-DOC_TYPE = 'SA'. LT_EDIDD-SDATA = LS_DOCHDR. APPEND LT_EDIDD. *document items. CLEAR LT_EDIDD. CLEAR LS_DOCITM. "segment E1BPACGL08. LT_EDIDD-SEGNAM = 'E1BPACGL08'. LT_EDIDD-DTINT2 = 0. "item 1. CLEAR LS_DOCITM. LS_DOCITM-ITEMNO_ACC = 1. LS_DOCITM-GL_ACCOUNT = '9999999999'. LS_DOCITM-ITEM_TEXT = 'IDOC LINE ITEM 1'. *LS_DOCITM-COSTCENTER = '6000100380'. *LS_DOCITM-ORDERID = '100000000'. LT_EDIDD-SDATA = LS_DOCITM. APPEND LT_EDIDD. "item2. CLEAR LS_DOCITM. LS_DOCITM-ITEMNO_ACC = 2. LS_DOCITM-GL_ACCOUNT = '9999999999'. LS_DOCITM-ITEM_TEXT = 'IDOC LINE ITEM 2'. *LS_DOCITM-COSTCENTER = '6000100380'. *LS_DOCITM-ORDERID = '100000000'. LT_EDIDD-SDATA = LS_DOCITM. APPEND LT_EDIDD. "segment E1BPACCR08. CLEAR LT_EDIDD. CLEAR LS_DOCITM_CURR. LT_EDIDD-SEGNAM = 'E1BPACCR08'. LT_EDIDD-DTINT2 = 0. "item 1. CLEAR LS_DOCITM_CURR. LS_DOCITM_CURR-ITEMNO_ACC = 1. LS_DOCITM_CURR-CURRENCY = 'CNY'. LS_DOCITM_CURR-AMT_DOCCUR = '123.45'. LT_EDIDD-SDATA = LS_DOCITM_CURR. APPEND LT_EDIDD. "item 2. CLEAR LS_DOCITM_CURR. LS_DOCITM_CURR-ITEMNO_ACC = 2. LS_DOCITM_CURR-CURRENCY = 'CNY'. LS_DOCITM_CURR-AMT_DOCCUR = '-123.45'. "注意没有过账码,负数就是50方. LT_EDIDD-SDATA = LS_DOCITM_CURR. APPEND 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. MESSAGE S001(00) WITH LV_MESSAGE . |
如若转载,请注明出处:https://www.gavindong.com/4021.html