ABAP中创建销售订单BAPI
1.BAPI种类
- BAPI_SALESORDER_CREATEFROMDAT2
- BAPI_CUSTOMERRETURN_CREATE
- SD_SALESDOCUMENT_CREATE
2.BAPI区别
- BAPI_SALESORDER_CREATEFROMDAT2 业务对象限制为BUS2032
- BAPI_CUSTOMERRETURN_CREATE 业务对象限制为BUS2102
- SD_SALESDOCUMENT_CREATE 未限制业务对象类型
- BUS2030 客户询价单
- BUS2031 客户报价
- BUS2032 销售订单
- BUS2034 合同
- BUS2094 贷项订单
- BUS2096 借项订单
- BUS2102 退货订单
- BUS2103 后续免费送货订单
- BAPI_SALESORDER_CREATEFROMDAT2和BAPI_CUSTOMERRETURN_CREATE都在内部调用SD_SALESDOCUMENT_CREATE
- 对于不同订单类型(Z001,Z002…),配置了的SD凭证类型;可在TVAK表中VBTYP字段查看
- 业务对象和SD凭证类型有绑定关系;比如Z008 Z009凭证,SD凭证类型为H(退货)所以需要使用业务对象类型BUS2102的BAPI;或者使用SD_SALESDOCUMENT_CREATE并设置参数BUSINESS_OBJECT = ‘BUS2102’
3.创建抬头行项目输入结构
4.创建接口函数,并配置传入传出参数
5.代码
- 此方法save_text切割的字符串结尾为空格时;会造成空格丢失,需要自行写逻辑处理
- 处理逻辑:缩短切割长度(例如:120);然后判断前一行是否末尾为空格,如果空则将空格写入本行开头
FUNCTION ZSD_IF0012. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_HEAD) TYPE ZSDS_CRM_IF007 *" EXPORTING *" VALUE(RESULTCODE) TYPE CHAR1 *" VALUE(RESULTMSG) TYPE BAPI_MSG *" VALUE(O_VBELN) TYPE VBELN *" TABLES *" T_ITEM STRUCTURE ZSDS_CRM_IF008 *"---------------------------------------------------------------------- DATA: WA_ORDER_HEADER_IN LIKE BAPISDHD1, "抬头 WA_ORDER_HEADER_INX LIKE BAPISDHD1X, "抬头控制 WA_LOGIC_SWITCH LIKE BAPISDLS, "内部控制参数 GV_SALESDOCUMENT_EX LIKE BAPIVBELN-VBELN, "返回SO凭证号 WA_ORDER_ITEMS_IN LIKE BAPISDITM, "行项目 ORDER_ITEMS_IN LIKE TABLE OF BAPISDITM, "行项目 WA_ORDER_ITEMS_INX LIKE BAPISDITMX, "行项目控制 ORDER_ITEMS_INX LIKE TABLE OF BAPISDITMX, "行项目控制 WA_ORDER_PARTNERS LIKE BAPIPARNR, "业务伙伴 ORDER_PARTNERS LIKE TABLE OF BAPIPARNR, "业务伙伴 WA_ORDER_SCHEDULES_IN LIKE BAPISCHDL, "计划行 ORDER_SCHEDULES_IN LIKE TABLE OF BAPISCHDL, "计划行 WA_ORDER_SCHEDULES_INX LIKE BAPISCHDLX, "计划行控制 ORDER_SCHEDULES_INX LIKE TABLE OF BAPISCHDLX, "计划行控制 WA_ORDER_CONDITIONS_IN LIKE BAPICOND, "定价条件 ORDER_CONDITIONS_IN LIKE TABLE OF BAPICOND, "定价条件 WA_ORDER_CONDITIONS_INX LIKE BAPICONDX, "定价条件控制 ORDER_CONDITIONS_INX LIKE TABLE OF BAPICONDX, "定价条件控制 WA_ORDER_TEXT LIKE BAPISDTEXT, "文本 ORDER_TEXT LIKE TABLE OF BAPISDTEXT, "文本 WA_EXTENSIONIN TYPE BAPIPAREX, ORDER_EXTENSIONIN TYPE TABLE OF BAPIPAREX, WA_RETURN LIKE BAPIRET2, "BAPI返回 RETURN LIKE TABLE OF BAPIRET2. "BAPI返回 DATA: WA_BAPE_VBAP TYPE BAPE_VBAP, WA_BAPE_VBAPX TYPE BAPE_VBAPX, WA_BAPE_VBAK TYPE BAPE_VBAK, WA_BAPE_VBAKX TYPE BAPE_VBAKX. DATA: WA_ITEM TYPE ZSDS_CRM_IF008, GS_LOGS TYPE ZALL_LOGS. "日志 DATA: GT_DATA TYPE TABLE OF ZSDT_CRM_IF012, "业务数据 WA_DATA TYPE ZSDT_CRM_IF012. DATA: GV_STRING TYPE STRING, GT_STRING TYPE TABLE OF CHAR_132, WA_STRING TYPE CHAR_132, GV_LENGTH TYPE I. SELECT * FROM ZMPPZB AS A FOR ALL ENTRIES IN @T_ITEM WHERE ZMPXX = @T_ITEM-ZMPXX INTO TABLE @DATA(GT_ZMPPZB). * 获取日志表流水号 CALL FUNCTION 'NUMBER_RANGE_ENQUEUE' EXPORTING OBJECT = 'ZLOG001' EXCEPTIONS FOREIGN_LOCK = 1 OBJECT_NOT_FOUND = 2 SYSTEM_FAILURE = 3 OTHERS = 4. IF SY-SUBRC EQ 0. * Implement suitable error handling here CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING NR_RANGE_NR = '01' OBJECT = 'ZLOG001' IMPORTING NUMBER = GS_LOGS-SEQNR * QUANTITY = * RETURNCODE = 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. * Implement suitable error handling here ENDIF. CALL FUNCTION 'NUMBER_RANGE_DEQUEUE' EXPORTING OBJECT = 'ZLOG001' EXCEPTIONS OBJECT_NOT_FOUND = 1 OTHERS = 2. IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ELSE. RAISE NUM_RANGE_ERROR . ENDIF. IF I_HEAD-SESSION_ID IS INITIAL. RESULTCODE =