关注微信公众号hot583,第一时间获取作者更新~
上海即将解封了。历史不会忘记耻辱的人。也会感谢付出的人。接下来经济如何发展?我们拭目以待。
在SAP系统的SD模块之中,我们经常会遇到需要通过接口或者批量创建销售订单的情形。
前台事务代码是VA01,一般我们使用BAPI:BAPI_SALESORDER_CREATEFROMDAT2 。
如下是DEMO例子tutorial example,希望您喜欢~
导入参数:
参数名称 | 关联类型 | 可选的 | 说明 |
ORDER_HEADER_IN | BAPISDHD1 | 必选 | 抬头 |
ORDER_HEADER_INX | BAPISDHD1X | 可选 | 抬头 |
ORDER_HEADER_IN常用字段:(ORDER_HEADER_INX与之字段对应,类型不同,具体需求根据bapi参数的关联类型结构中查找)
表参数:
参数名称 | 关联类型 | 可选的 | 说明 |
RETURN | BAPIRET2 | 可选 | 返回信息 |
ORDER_ITEMS_IN | BAPISDITM | 可选 | 行项目 |
ORDER_ITEMS_INX | BAPISDITMX | 可选 | |
ORDER_PARTNERS | BAPIPARNR | 必选 | 伙伴 |
ORDER_SCHEDULES_IN | BAPISCHDL | 可选 | 计划行 |
ORDER_SCHEDULES_INX | BAPISCHDLX | 可选 |
备注:
ORDER_ITEMS_IN常用字段:(ORDER_ITEMS_INX字段与之对应,类型不一定相同,具体根据需求去bapi参数的关联类型结构中查找)
字段名 | 类型 | 简短描述 |
ITM_NUMBER | POSNR_VA | 销售凭证项目 |
MATERIAL | MATNR18 | 物料编号(18个字符) |
TARGET_QTY | DZMENG | 目标数量(采用销售单位) |
ORDER_SCHEDULES_IN常用字段:(ORDER_SCHEDULES_INX字段与之对应,类型不一定相同,具体根据需求去bapi参数的关联类型结构中查找)
字段名 | 类型 | 简短描述 |
ITM_NUMBER | POSNR_VA | 销售凭证项目 |
SCHED_LINE | ETENR | 计划行 |
REQ_QTY | WMENG | 各销售单位订单数量 |
如下是demo代码,作为HOT583.com的码农,多年前也是SAP ABAP beginners ,最开始学习会有些难度,
到处去找Tutorial for Constant。如下是详细代码:
*bapi相关定义
DATA:HEADER_IN TYPE BAPISDHD1,
HEADER_INX TYPE BAPISDHD1X.
DATA:SALESDOCUMENT TYPE BAPIVBELN-VBELN.
DATA:RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE,
ITEMS_IN LIKE TABLE OF BAPISDITM WITH HEADER LINE,
ITEMS_INX LIKE TABLE OF BAPISDITMX WITH HEADER LINE,
PARTNERS LIKE TABLE OF BAPIPARNR WITH HEADER LINE,
SCHEDULES_IN LIKE TABLE OF BAPISCHDL WITH HEADER LINE,
SCHEDULES_INX LIKE TABLE OF BAPISCHDLX WITH HEADER LINE.
DATA:BEGIN OF GS_TAITOU,
DOC_TYPE TYPE ZDOC_TYPE07, “订单类型
SALES_ORG TYPE ZSALES_ORG07, “销售组织
DISTR_CHAN TYPE VTWEG, “分销渠道
DIVISION TYPE SPART, “产品组
PARTN_NUMB1 TYPE KUNNR, “售达方-AG
PARTN_NUMB2 TYPE KUNNR, “送达方-WE
PURCH_NO_C TYPE BSTKD, “客户合同编码
END OF GS_TAITOU.
DATA:GT_TAITOU LIKE TABLE OF GS_TAITOU WITH HEADER LINE.
****************************
*中间省略逻辑数据处理部分代码
****************************
LOOP AT GT_TAITOU.
*-清空初始值
CLEAR:HEADER_IN,HEADER_INX,SALESDOCUMENT,
RETURN,RETURN[],
ITEMS_IN,ITEMS_IN[],
ITEMS_INX,ITEMS_INX[],
PARTNERS,PARTNERS[],
SCHEDULES_IN,SCHEDULES_IN[],
SCHEDULES_INX,SCHEDULES_INX[].
*-抬头赋值
HEADER_IN-DOC_TYPE = GT_TAITOU-DOC_TYPE. “销售凭证类型
HEADER_IN-SALES_ORG = GT_TAITOU-SALES_ORG. “销售组织
HEADER_IN-DISTR_CHAN = GT_TAITOU-DISTR_CHAN. “分销渠道
HEADER_IN-DIVISION = GT_TAITOU-DIVISION. “产品组
HEADER_IN-PURCH_NO_C = GT_TAITOU-PURCH_NO_C. “客户合同编码
HEADER_INX-DOC_TYPE = ‘X’. “销售凭证类型
HEADER_INX-SALES_ORG = ‘X’. “销售组织
HEADER_INX-DISTR_CHAN = ‘X’. “分销渠道
HEADER_INX-DIVISION = ‘X’. “产品组
HEADER_INX-PURCH_NO_C = ‘X’. “客户合同编码
*-伙伴
PARTNERS-PARTN_ROLE = ‘AG’. “售达方
PARTNERS-PARTN_NUMB = GT_TAITOU-PARTN_NUMB1.
APPEND PARTNERS.
CLEAR PARTNERS.
PARTNERS-PARTN_ROLE = ‘WE’. “收货方
PARTNERS-PARTN_NUMB = GT_TAITOU-PARTN_NUMB2.
APPEND PARTNERS.
CLEAR PARTNERS.
LOOP AT GT_OUT INTO GS_OUT WHERE
DOC_TYPE = GT_TAITOU-DOC_TYPE “订单类型
AND SALES_ORG = GT_TAITOU-SALES_ORG “销售组织
AND DISTR_CHAN = GT_TAITOU-DISTR_CHAN “分销渠道
AND DIVISION = GT_TAITOU-DIVISION “产品组
AND PURCH_NO_C = GT_TAITOU-PURCH_NO_C. “客户合同编码.
*-行项目赋值
ITEMS_IN-ITM_NUMBER = GS_OUT-ITM_NUMBER. “销售凭证项目
ITEMS_IN-MATERIAL = GS_OUT-MATERIAL. “物料编号
ITEMS_IN-TARGET_QTY = GS_OUT-TARGET_QTY. “目标数量
APPEND ITEMS_IN.
CLEAR ITEMS_IN.
ITEMS_INX-ITM_NUMBER = GS_OUT-ITM_NUMBER. “销售凭证项目
ITEMS_INX-MATERIAL = ‘X’. “物料编号
ITEMS_INX-TARGET_QTY = ‘X’. “目标数量
APPEND ITEMS_INX.
CLEAR ITEMS_INX.
*-计划行赋值
SCHEDULES_IN-ITM_NUMBER = GS_OUT-ITM_NUMBER. “销售凭证项目
SCHEDULES_IN-SCHED_LINE = ‘1’. “计划行
SCHEDULES_IN-REQ_QTY = GS_OUT-TARGET_QTY. “数量
APPEND SCHEDULES_IN.
CLEAR SCHEDULES_IN.
SCHEDULES_INX-ITM_NUMBER = GS_OUT-ITM_NUMBER. “销售凭证项目
SCHEDULES_INX-SCHED_LINE = ‘1’. “计划行
SCHEDULES_INX-REQ_QTY = ‘X’. “数量
APPEND SCHEDULES_INX.
CLEAR SCHEDULES_INX.
ENDLOOP.
*-调用BAPI
CALL FUNCTION ‘BAPI_SALESORDER_CREATEFROMDAT2’
EXPORTING
* SALESDOCUMENTIN =
ORDER_HEADER_IN = HEADER_IN “抬头
ORDER_HEADER_INX = HEADER_INX
IMPORTING
SALESDOCUMENT = SALESDOCUMENT “标准订单
TABLES
RETURN = RETURN “返回值
ORDER_ITEMS_IN = ITEMS_IN “行项目
ORDER_ITEMS_INX = ITEMS_INX
ORDER_PARTNERS = PARTNERS “伙伴
ORDER_SCHEDULES_IN = SCHEDULES_IN “计划行
ORDER_SCHEDULES_INX = SCHEDULES_INX .
IF SALESDOCUMENT IS NOT INITIAL.
*-提交
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
WAIT = ‘X’.
LOOP AT GT_OUT INTO GS_OUT WHERE
DOC_TYPE = GT_TAITOU-DOC_TYPE “订单类型
AND SALES_ORG = GT_TAITOU-SALES_ORG “销售组织
AND DISTR_CHAN = GT_TAITOU-DISTR_CHAN “分销渠道
AND DIVISION = GT_TAITOU-DIVISION “产品组
AND PURCH_NO_C = GT_TAITOU-PURCH_NO_C.
CONCATENATE ‘创建成功:’ SALESDOCUMENT INTO GS_OUT-MESS.
MESSAGE GS_OUT-MESS TYPE ‘S’.
MODIFY GT_OUT FROM GS_OUT.
CLEAR GS_OUT.
IF GT_ITAB[] IS NOT INITIAL.
LOOP AT GT_ITAB INTO GS_ITAB.
INSERT ZTABLE_SO_07 FROM GS_ITAB.
ENDLOOP.
这些代码都是结构化的代码,全部是在测试系统测试无误的。
但是您还是需要注意一下使用方式哦,尽量避免在生产机直接使用。
本文链接 :http://www.hot583.com/2022/05/31/bapi_salesorder_createfromdat2/
本文为作者原创,如果这篇文章对您有用,欢迎转载,
转载请务必注明来源《今日热点在看》http://www.hot583.com/
我的微信公众号【 hot583 】 或者在这个链接联系我
微信原文《全文完》