SAP各模块常用的BAPI
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAP各模块常⽤的BAPI MM模块
1、 BAPI_MATERIAL_SAVEDATA 创建物料主数据
注意参数EXTENSIONIN的使⽤,可以创建⾃定义字段
例如:WA_BAPI_TE_MARA-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'.
T_EXTENSIONIN-VALUEPART1 = WA_BAPI_TE_MARA.
APPEND T_EXTENSIONIN.
WA_BAPI_TE_MARAX-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONINX-STRUCTURE = 'BAPI_TE_MARAX'.
T_EXTENSIONINX-VALUEPART1 = WA_BAPI_TE_MARAX.
APPEND T_EXTENSIONINX.
2、 BAPI_OBJCL_CREATE 分类视图的创建
3、 BAPI_OBJCL_GETCLASSES 分类视图得到详细信息
4、 BAPI_MATERIAL_SAVEREPLICA 物料视图的扩充
5、 BAPI_GOODSMVT_CREATE 创建物料凭证注意表T158G可以决定goodsmvt_code
GOODSMVT_CODE参数对应值:
01 MB01
02 MB31
03 MB1A
04 MB1B
05 MB1C
06 MB11
07 MB04
6、 BAPI_GOODSMVT_CANCEL 冲销物料凭证
7、 BAPI_PR_CREATE 创建PR
8、 BAPI_PO_CREATE1 创建PO
9、 BAPI_PO_CHANGE 修改PO和删除PO
10、WS_REVERSE_GOODS_ISSUE 冲销交货单的过账发货
11、BAPI_RESERVATION_CREATE1 创建预留如果要检查ATP,必须使⽤
BAPI_RESERVATION_CREATE
12、BAPI_RESERVATION_CHANGE 修改和删除预留
13、PRICES_CHANGE PRICES_POST 更改物料移动平均价或者标准价格
如果要检查ATP,必须使⽤第⼆个
SD模块
1、 BAPI_SALESORDER_CREATEFROMDAT2 创建销售订单
2、 SD_SALESDOCUMENT_CREATE 创建销售订单
3、 BAPI_OUTB_DELIVERY_CREATE_SLS 根据销售订单创建交货单
4、 BAPI_BILLINGDOC_CREATEMULTIPLE 创建发票,注意参数ref_doc_ca
5、 BAPI_SALESORDER_CHANGE 修改或者删除销售订单
6、 MB_CANCEL_GOODS_MOVEMENT 冲销交货单的过账发货
7、 BAPI_BILLINGDOC_CANCEL1 发票的冲销
8、 BAPI_OUTB_DELIVERY_CHANGE 修改外向交货单
9、 SD_DELIVERY_UPDATE_PICKING 修改外向交货单拣配数量
10、WS_DELIVERY_UPDATE 外向交货单的发货过账
11、SD_CUSTOMER_MAINTAIN_ALL 创建客户。
table参数中有很多表,其中X打头代表要插⼊的数据,Y打头代表要删除的数据。
DATA: TMP TYPE STRING,
LEN TYPE I,
FLAG TYPE CHAR1,
SY_SUBRC(2) TYPE C.
CLEAR :E_MESS.
*--判断是否存在同名客户
IF I_KNA1-KUNNR IS INITIAL.
SELECT SINGLE NAME1 INTO TMP
FROM KNA1
WHERE NAME1 = I_KNA1-NAME1
AND NAME2 = I_KNA1-NAME2
.
IF SY-SUBRC = 0.
FLAG = 'X'.
E_STATU = 'E'.
E_MESS = '存在名称相同的客户'.
ENDIF.
ENDIF.
*--判断邮编的长度
LEN = STRLEN( I_KNA1-PSTLZ ).
IF LEN <> 6.
FLAG = 'X'.
E_STATU = 'E'.
E_MESS = '邮编应该是6位数'.
ENDIF.
IF FLAG = ''.
CALL FUNCTION'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = I_KNA1-KUNNR
IMPORTING
OUTPUT = I_KNA1-KUNNR
.
I_KNA1-LAND1 = 'CN'.
I_KNA1-SPRAS = 1.
**--客户的销售数据
I_KNVV-KUNNR = I_KNA1-KUNNR.
* I_KNVV-VKORG = ' ' ."销售组织
I_KNVV-VTWEG = '10' . "分销渠道
I_KNVV-SPART = '00' . "产品组
* I_KNVV-BZIRK = ' ' ."销售地区
* I_KNVV-VKBUR = ' ' ."销售部门
I_KNVV-WAERS = 'RMB' . "货币
I_KNVV-KALKS = '1' . "定价过程
I_KNVV-VERSG = '1' . "客户统计组
I_KNVV-ANTLF = '9'. "最⼤部分交货
I_KNVV-VSBED = '01'. "装运条件
I_KNVV-KZAZU = 'X'. "订单组合chk
I_KNVV-ZTERM = '9101'. "付款条件
I_KNVV-KABSS = '0001'. " 付款担保过程
I_KNVV-KKBER = '9999'. "信贷控制范围
I_KNVV-KTGRD = '01'. "账户分配组
IF I_KNA1-KTOKD = 'A001'.
I_KNVV-KDGRP = '11'. "客户组
I_KNVV-KONDA = '01'. "价格组
I_KNB1-FDGRV = 'E1'. " 现⾦管理组
ELSEIF I_KNA1-KTOKD = 'A002'.
I_KNVV-KDGRP = '21'. "客户组
I_KNVV-KONDA = '02'. "价格组
I_KNB1-FDGRV = 'E2'. " 现⾦管理组
ENDIF.
**--客户的公司数据
I_KNB1-KUNNR = I_KNA1-KUNNR.
I_KNB1-BUKRS = I_KNVV-VKORG.
* I_KNB1-AKONT = ''. "统驭科⽬
I_KNB1-ZTERM = '9101'. "付款条件
I_KNB1-XZVER = 'X'. "付款历史记录chk
**--银⾏
READ TABLE T_XKNBK INDEX 1.
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNBK
FROM KNBK
WHERE KUNNR = I_KNA1-KUNNR
AND BANKS = 'CN'.
IF SY-SUBRC EQ0.
APPEND T_YKNBK.
ENDIF.
ENDIF.
T_XKNBK-KUNNR = I_KNA1-KUNNR.
T_XKNBK-BANKS = 'CN'. "银⾏国家代码
T_XKNBK-BANKL = '20000'. "银⾏码
MODIFY T_XKNBK INDEX 1 TRANSPORTING KUNNR BANKS BANKL.
**--客户联系⼈
READ TABLE T_XKNVK INDEX 1.
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVK
FROM KNVK
WHERE KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC EQ0.
APPEND T_YKNVK.
ENDIF.
ENDIF.
T_XKNVK-KUNNR = I_KNA1-KUNNR.
T_XKNVK-NAMEV = '#'.
T_XKNVK-ABTNR = '0002'.
T_XKNVK-PAFKT = '02'.
MODIFY T_XKNVK INDEX 1 TRANSPORTING KUNNR NAMEV ABTNR PAFKT.
** 合作伙伴
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVP
FROM KNVP
WHERE KUNNR = I_KNA1-KUNNR
AND VKORG = I_KNVV-VKORG
AND VTWEG = '10'
AND SPART = '00'
AND PARVW = 'VE'.
IF SY-SUBRC EQ0.
APPEND T_YKNVP.
ENDIF.
ENDIF.
T_XKNVP-KUNNR = I_KNA1-KUNNR.
T_XKNVP-VKORG = I_KNVV-VKORG ."销售组织
T_XKNVP-VTWEG = '10' ."分销渠道
T_XKNVP-SPART = '00' ."产品组
T_XKNVP-PARVW = 'VE '.
* T_XKNVP-PERNR = ''.
MODIFY T_XKNVP INDEX 1 TRANSPORTING KUNNR VKORG VTWEG SPART PARVW. **税收
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVI
FROM KNVI
WHERE KUNNR = I_KNA1-KUNNR
AND ALAND = 'CN'
AND TATYP = 'MWST'.
IF SY-SUBRC EQ0.
APPEND T_YKNVI.
ENDIF.
ENDIF.
T_XKNVI-KUNNR = I_KNA1-KUNNR.
T_XKNVI-ALAND = 'CN'.
T_XKNVI-TATYP = 'MWST'.
T_XKNVI-TAXKD = '1'.
APPEND T_XKNVI .
CALL FUNCTION'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
I_KNA1 = I_KNA1
I_KNB1 = I_KNB1
I_KNVV = I_KNVV
I_MAINTAIN_ADDRESS_BY_KNA1 = 'X'
I_KNB1_REFERENCE = I_KNB1_REFERENCE
I_FORCE_EXTERNAL_NUMBER_RANGE = I_FORCE_EXTERNAL_NUMBER_RANGE I_NO_BANK_MASTER_UPDATE = I_NO_BANK_MASTER_UPDATE
I_CUSTOMER_IS_CONSUMER = I_CUSTOMER_IS_CONSUMER
I_RAISE_NO_BTE = I_RAISE_NO_BTE
PI_POSTFLAG = 'X'
PI_CAM_CHANGED = PI_CAM_CHANGED
PI_ADD_ON_DATA = PI_ADD_ON_DATA
I_FROM_CUSTOMERMASTER = 'X'
IMPORTING
E_KUNNR = E_KUNNR
O_KNA1 = O_KNA1
TABLES
T_XKNAS = T_XKNAS
T_XKNBK = T_XKNBK
T_XKNB5 = T_XKNB5
T_XKNEX = T_XKNEX
T_XKNVA = T_XKNVA
T_XKNVD = T_XKNVD
T_XKNVI = T_XKNVI
T_XKNVK = T_XKNVK
T_XKNVL = T_XKNVL
T_XKNVP = T_XKNVP
T_XKNZA = T_XKNZA
T_YKNAS = T_YKNAS
T_YKNBK = T_YKNBK
T_YKNB5 = T_YKNB5
T_YKNEX = T_YKNEX
T_YKNVA = T_YKNVA
T_YKNVD = T_YKNVD
T_YKNVI = T_YKNVI
T_YKNVK = T_YKNVK
T_YKNVL = T_YKNVL
T_YKNVP = T_YKNVP
T_YKNZA = T_YKNZA
T_UPD_TXT = T_UPD_TXT
EXCEPTIONS
CLIENT_ERROR = 1
KNA1_INCOMPLETE = 2
KNB1_INCOMPLETE = 3
KNB5_INCOMPLETE = 4
KNVV_INCOMPLETE = 5
KUNNR_NOT_UNIQUE = 6
SALES_AREA_NOT_UNIQUE = 7
SALES_AREA_NOT_VALID = 8
INSERT_UPDATE_CONFLICT = 9
NUMBER_ASSIGNMENT_ERROR = 10
NUMBER_NOT_IN_RANGE = 11
NUMBER_RANGE_NOT_EXTERN = 12
NUMBER_RANGE_NOT_INTERN = 13
ACCOUNT_GROUP_NOT_VALID = 14
PARNR_INVALID = 15
BANK_ADDRESS_INVALID = 16
TAX_DATA_NOT_VALID = 17
NO_AUTHORITY = 18
COMPANY_CODE_NOT_UNIQUE = 19
DUNNING_DATA_NOT_VALID = 20
KNB1_REFERENCE_INVALID = 21
CAM_ERROR = 22
OTHERS = 23
.
IF SY-SUBRC NE0.
SY_SUBRC = SY-SUBRC.
CALL FUNCTION'BAPI_TRANSACTION_ROLLBACK'.
E_STATU = 'E'.
CONCATENATE'客户更新失败(' SY_SUBRC ')'INTO E_MESS. ELSE.
CALL FUNCTION'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
IF SY-SUBRC = 0.
E_STATU = 'S'.
E_MESS = '客户更新成功'.
E_KUNNR = O_KNA1-KUNNR.
ELSE.
E_STATU = 'E'.
CONCATENATE'客户更新失败(' SY_SUBRC ')'INTO E_MESS. ENDIF.
ENDIF.
ENDIF.
PM模块
1、BAPI_OBJCL_CREATE 、
BAPI_OBJCL_CHANGE、
BAPI_OBJCL_GETDETAIL
计量点通⽤属性导⼊
2、MEASUREM_DOCUM_RFC_SINGLE_001 计量凭证创建
FI模块
1、K_HIERARCHY_TABLES_READ 成本要素组明细
2、BAPI_ACC_DOCUMENT_POST 创建会计凭证
3、BAPI_ACC_DOCUMENT_REV_POST 反冲会计凭证可以冲销⾃开发程序⽣成的凭证必须传⼊交易码参数 BAPI_ACC_GL_POSTING_REV_POST 只能冲销标准TCODE⽣成的凭证
4、FCOM_COSTCENTER_CHANGEMULTIPLE
FCOM_COSTCENTER_CREATEMULTIPLE
BAPI_COSTCENTER_CHANGEMULTIPLE :Change One or More Cost Centers
BAPI_COSTCENTER_CHECKMULTIPLE :Check One or More Cost Centers
BAPI_COSTCENTER_CREATEMULTIPLE :Create One or More Cost Centers
BAPI_COSTCENTER_DELETEMULTIPLE :Delete One or More Cost Centers
CALL FUNCTION'FCOM_COSTCENTER_CHANGEMULTIPLE'
EXPORTING
iv_coarea = '9999'
it_costcenter = it_mm
IMPORTING
et_message = lt_mm
EXCEPTIONS
failed = 1
OTHERS = 2.CALL FUNCTION'FCOM_COSTCENTER_CREATEMULTIPLE'
EXPORTING
iv_coarea = '9999'
it_costcenter = it_cc
IMPORTING
et_message = lt_cc
EXCEPTIONS
failed = 1
OTHERS = 2.
1SELECT SINGLE * FROM BKPF INTO L_BKPF
2WHERE BUKRS = IW_BUKRS
3AND BELNR = IW_bELNR
4AND GJAHR = IW-GJAHR.
5
6 REVERSAL-OBJ_TYPE = L_BKPF-AWTYP.
7CONCATENATE IW_-BELNR IW_-BUKRS IW_-GJAHR INTO REVERSAL-OBJ_KEY_R.
8 REVERSAL-OBJ_KEY = REVERSAL-OBJ_KEY_R.
9 REVERSAL-OBJ_KEY = '$'.
10
11CALL FUNCTION'OWN_LOGICAL_SYSTEM_GET'
12IMPORTING
13 OWN_LOGICAL_SYSTEM = REVERSAL-OBJ_SYS
14EXCEPTIONS
15 OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1
16 OTHERS = 2.
17
18 REVERSAL-REASON_REV = '01'. "原因
19 REVERSAL-PSTNG_DATE = SY-DATUM.
20
21CLEAR: RETURN.
22
23CALL FUNCTION'BAPI_ACC_DOCUMENT_REV_POST'
24EXPORTING
25 REVERSAL = REVERSAL
26 BUS_ACT = 'RFBU'
27IMPORTING
28 OBJ_TYPE = OBJTYPE
29 OBJ_KEY = OBJKEY
30 OBJ_SYS = OBJSYS
31TABLES
32 RETURN = RETURN
33 .
4、BAPI_INCOMINGINVOICE_CREATE 发票检验(miro)
5、BAPI_INCOMINGINVOICE_CANCEL 发票校验冲销(mr8m)
PS模块
1、BAPI_PS_INITIALIZATION、BAPI_BUS2001_CREATE、BAPI_PS_PRECOMMIT 创建项⽬定义
2、BAPI_PS_INITIALIZATION、BAPI_BUS2054_CREATE_MULTI、BAPI_PS_PRECOMMIT 创建WBS 创建WBS的时候,注意参数 wbs_left和 wbs_up,这个是创建有层级的WBS必须要填写的
3、KBPP_EXTERN_UPDATE_CO 修改项⽬和WBS的预算
--------------------------------------------------------------------------------------------------------------
BAPI:BAPI_SALESORDER_CHANGE (TCODE:VA02 销售订单修改)
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_SALESORDER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_ITEM text
* -->P_LT_COND text
* -->P_LT_MSG text
* -->P_LS_HEAD text
* <--P_LV_EIND text
*----------------------------------------------------------------------*
UPDATEFLAGS:
U = change flg值的三种不同意义
D = delete
I = add
FORM frm_change_salesorder TABLES tp_item STRUCTURE zrmxsds004
tp_cond STRUCTURE zrmxsds005
tp_message STRUCTURE zifsret01
USING up_head LIKE zrmxsds003
CHANGING cp_eind TYPE c.
DATA: ls_item LIKE zrmxsds004,
ls_cond LIKE zrmxsds005,
ls_msg LIKE zifsret01,
ls_vbep LIKE vbep.
DATA: wa_header TYPE bapisdh1, "表头
wa_headerx TYPE bapisdh1x, "表头标志
wa_partner TYPE bapiparnr, "业务伙伴
wa_partnerc TYPE bapiparnrc,
wa_item TYPE bapisditm, "⾏项⽬
wa_itemx TYPE bapisditmx,
wa_cond TYPE bapicond, "价格条件
wa_condx TYPE bapicondx,
wa_schdl TYPE bapischdl, "交付计划
wa_schdlx TYPE bapischdlx,
wa_return TYPE bapiret2,
wa_sdls TYPE bapisdls,
wa_text TYPE bapisdtext. "⽂本
DATA:
lt_partner TYPE STANDARD TABLE OF bapiparnr,
lt_partnerc TYPE STANDARD TABLE OF bapiparnrc,
lt_item TYPE STANDARD TABLE OF bapisditm,
lt_itemx TYPE STANDARD TABLE OF bapisditmx,
lt_schdl TYPE STANDARD TABLE OF bapischdl,
lt_schdlx TYPE STANDARD TABLE OF bapischdlx,
lt_cond TYPE STANDARD TABLE OF bapicond,
lt_condx TYPE STANDARD TABLE OF bapicondx,
lt_return TYPE STANDARD TABLE OF bapiret2,
lt_text LIKE STANDARD TABLE OF bapisdtext. DATA: lt_sokey TYPE STANDARD TABLE OF zrmxsds015, ls_sokey TYPE zrmxsds015.
*--------------------------------------------------------------------*
* Header
CLEAR: wa_header,wa_headerx.
IF up_head-updateflag = cns_update.
wa_header-pmnttrms = up_head-zterm. "付款条件
wa_headerx-pmnttrms = cns_yes.
wa_headerx-updateflag = cns_update. "Update
*--------------------------------------------------------------------*
* Header texts
*表头⽂本,若传输空值,则清空该字段
CLEAR: wa_text,lt_text[].
wa_text-itm_number = space.
wa_text-text_id = cns_textid.
wa_text-langu = sy-langu.
wa_text-format_col = '*'.
wa_text-text_line = up_head-tknum. "运输合同号APPEND wa_text TO lt_text.
ENDIF.
*--------------------------------------------------------------------*
* Partners
IF up_head-kunnr_re IS NOT INITIAL.
"收票⽅
CLEAR: wa_partnerc.
wa_partnerc-document = up_head-vbeln.
wa_partnerc-itm_number = '000000'.
wa_partnerc-updateflag = cns_update.
wa_partnerc-partn_role = 'RE'.
wa_partnerc-p_numb_new = up_head-kunnr_re. APPEND wa_partnerc TO lt_partnerc.
ENDIF.
IF up_head-kunnr_rg IS NOT INITIAL.
"付款⽅
CLEAR: wa_partnerc.
wa_partnerc-document = up_head-vbeln.
wa_partnerc-itm_number = '000000'.
wa_partnerc-updateflag = cns_update.
wa_partnerc-partn_role = 'RG'.
wa_partnerc-p_numb_new = up_head-kunnr_rg. APPEND wa_partnerc TO lt_partnerc.
ENDIF.
IF up_head-kunnr_we IS NOT INITIAL.
"送达⽅
CLEAR: wa_partnerc.
wa_partnerc-document = up_head-vbeln.
wa_partnerc-itm_number = '000000'.
wa_partnerc-updateflag = cns_update.
wa_partnerc-partn_role = 'WE'.
wa_partnerc-p_numb_new = up_head-kunnr_we. APPEND wa_partnerc TO lt_partnerc.
ENDIF.
*--------------------------------------------------------------------*
* Items
REFRESH: lt_item, lt_cond, lt_schdl,
lt_itemx, lt_condx,lt_schdl.
LOOP AT tp_item INTO ls_item.
IF ls_item-updateflag = cns_new.
"新增⾏项⽬
CLEAR wa_item.
wa_item-itm_number = ls_item-posnr.
wa_item-material = ls_item-mabnr. "物料
wa_item-sales_unit = ls_item-vrkme. "计量单位
wa_item-plant = ls_item-werks. "⼯⼚
wa_item-store_loc = ls_item-lgort. "库存地
APPEND wa_item TO lt_item.
"⾏状态
wa_itemx-itm_number = ls_item-posnr.
wa_itemx-updateflag = cns_new.
wa_itemx-material = cns_yes.
wa_itemx-sales_unit = cns_yes.
wa_itemx-plant = cns_yes.
wa_itemx-store_loc = cns_yes.
APPEND wa_itemx TO lt_itemx.
"Schedule lines
CLEAR: wa_schdl,wa_schdlx.
wa_schdl-itm_number = ls_item-posnr.
wa_schdl-req_qty = ls_item-kwmeng. "数量APPEND wa_schdl TO lt_schdl.
wa_schdlx-itm_number = ls_item-posnr.
wa_schdlx-updateflag = cns_new.
wa_schdlx-req_qty = cns_yes.
APPEND wa_schdlx TO lt_schdlx.
"新增⾏,需要对⾃动⽣成的⽣产订单进⾏下达
CLEAR ls_sokey.
ls_sokey-vbeln = up_head-vbeln.
ls_sokey-posnr = ls_item-posnr.
APPEND ls_sokey TO lt_sokey.
ELSEIF ls_item-updateflag = cns_update.
"更新⾏项⽬信息
* Schedule line
* 仅⾏数量
CLEAR: wa_schdl,wa_schdlx.
wa_schdl-itm_number = ls_item-posnr.
wa_schdl-sched_line = '0001'. "默认都是第⼀⾏ wa_schdl-req_qty = ls_item-kwmeng. "数量APPEND wa_schdl TO lt_schdl.
wa_schdlx-itm_number = ls_item-posnr.
wa_schdlx-sched_line = '0001'.
wa_schdlx-updateflag = cns_update.
wa_schdlx-req_qty = cns_yes.
APPEND wa_schdlx TO lt_schdlx.
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------*
* Item Conditions
* 价格条件,需要设置该参数,才能够修改价格条件
wa_sdls-cond_handl = cns_yes.
LOOP AT tp_cond INTO ls_cond.
IF ls_cond-updateflag = cns_new.
"新增价格条件记录
CLEAR: wa_cond,wa_condx.
wa_cond-itm_number = ls_cond-posnr.
wa_cond-cond_type = ls_cond-kschl. "定价条件
wa_cond-cond_value = ls_cond-kbetr. "价格
wa_cond-currency = ls_cond-koein. "货币或%
wa_cond-cond_unit = ls_cond-kmein. "条件单位
wa_cond-cond_p_unt = ls_cond-kpein. "条件定价单位APPEND wa_cond TO lt_cond.
wa_condx-itm_number = ls_cond-posnr.
wa_condx-cond_type = ls_cond-kschl. "定价条件
wa_condx-updateflag = cns_new.
wa_condx-cond_value = cns_yes. "价格
wa_condx-currency = cns_yes. "货币或%
wa_condx-cond_unit = cns_yes. "条件单位
wa_condx-cond_p_unt = cns_yes. "条件定价单位APPEND wa_condx TO lt_condx.
ELSEIF ls_cond-updateflag = cns_update.
"更新价格条件记录
CLEAR: wa_cond,wa_condx.
"需要读取已经存在⾏的Key
PERFORM frm_get_cond_key USING up_head-vbeln ls_cond-posnr
ls_cond-kschl
CHANGING wa_cond-cond_st_no
wa_cond-cond_count.
wa_cond-itm_number = ls_cond-posnr.
* wa_cond-cond_st_no = 040.
* wa_cond-cond_count = 01.
wa_cond-cond_type = ls_cond-kschl. "定价条件
wa_cond-cond_value = ls_cond-kbetr. "价格
wa_cond-currency = ls_cond-koein. "货币或%
wa_cond-cond_unit = ls_cond-kmein. "条件单位
wa_cond-cond_p_unt = ls_cond-kpein. "条件定价单位APPEND wa_cond TO lt_cond.
wa_condx-itm_number = ls_cond-posnr.
wa_condx-cond_st_no = wa_cond-cond_st_no.
wa_condx-cond_count = wa_cond-cond_count.
wa_condx-cond_type = ls_cond-kschl.
wa_condx-updateflag = cns_update.
wa_condx-cond_value = cns_yes.
wa_condx-currency = cns_yes.
wa_condx-cond_unit = cns_yes.
wa_condx-cond_p_unt = cns_yes.
APPEND wa_condx TO lt_condx.
ELSE.
"报错
ENDIF.
ENDLOOP.
* Call BAPI
CALL FUNCTION'BAPI_SALESORDER_CHANGE' EXPORTING
salesdocument = up_head-vbeln
order_header_in = wa_header
order_header_inx = wa_headerx
* SIMULATION =
* BEHAVE_WHEN_ERROR = ' '
* INT_NUMBER_ASSIGNMENT = ' '
logic_switch = wa_sdls
* NO_STATUS_BUF_INIT = ' '
TABLES
return = lt_return
order_item_in = lt_item
order_item_inx = lt_itemx
* partners = lt_partner
partnerchanges = lt_partnerc
* PARTNERADDRESSES =
* ORDER_CFGS_REF =
* ORDER_CFGS_INST =
* ORDER_CFGS_PART_OF =
* ORDER_CFGS_VALUE =
* ORDER_CFGS_BLOB =
* ORDER_CFGS_VK =
* ORDER_CFGS_REFINST =
schedule_lines = lt_schdl
schedule_linesx = lt_schdlx
order_text = lt_text
* ORDER_KEYS =
conditions_in = lt_cond
conditions_inx = lt_condx
* EXTENSIONIN =
.
* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功LOOP AT lt_return INTO wa_return.
CLEAR ls_msg.
ls_msg-class = 'BUS'.
ls_msg-msgtyp = wa_return-type.
ls_msg-msgno = wa_return-number.
ls_msg-msgtxt = wa_return-message.
APPEND ls_msg TO tp_message.
IF wa_return-type EQ'E'OR
wa_return-type = 'A'OR
wa_return = 'X'.
cp_eind = 'X'. "失败
ENDIF.
ENDLOOP.
IF cp_eind NE'X'.
CALL FUNCTION'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION'BAPI_TRANSACTION_ROLLBACK' .
ENDIF.
CHECK cp_eind NE'X'AND lt_sokey[] IS NOT INITIAL.
* 销售订单⾃动产⽣⽣产订单,对⽣产订单进⾏下达
CALL FUNCTION'Z_RMXPP_PRDORD_RELEASE'
* EXPORTING
* I_WAIT = 3
TABLES
t_sokey = lt_sokey
EXCEPTIONS
no_saleorders = 1
no_valid_saleorders = 2
cannot_find_product_orders = 3
OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "frm_create_salesorder
*&---------------------------------------------------------------------*
*& Form FRM_GET_COND_KEY
*&---------------------------------------------------------------------*
* 读取价格条件记录的Key
*----------------------------------------------------------------------*
* -->P_UP_HEAD_VBELN text
* -->P_LS_COND_POSNR text
* -->P_LS_COND_KSCHL text
* <--P_WA_COND_COND_ST_NO text
* <--P_WA_COND_COND_COUNT text
*----------------------------------------------------------------------*
FORM frm_get_cond_key USING up_vbeln LIKE vbap-vbeln
up_posnr LIKE vbap-posnr
up_kschl LIKE konv-kschl
CHANGING cp_st_no LIKE konv-stunr
cp_count LIKE konv-zaehk.
DATA: lv_knumv LIKE vbak-knumv.
" 由于需要多次判断,预先读取聚集表,将订单的所有⾏读取出来
IF gt_konv[] IS INITIAL.
SELECT SINGLE knumv INTO lv_knumv
FROM vbak
WHERE vbeln = up_vbeln.
SELECT
knumv kposn kschl stunr zaehk
INTO CORRESPONDING FIELDS OF TABLE gt_konv
FROM konv
WHERE knumv = lv_knumv.
* AND kposn = up_posnr.
SORT gt_konv BY kposn kschl.
ENDIF.
CLEAR gwa_konv.
READ TABLE gt_konv INTO gwa_konv
WITH KEY kposn = up_posnr
kschl = up_kschl
BINARY SEARCH.
IF sy-subrc EQ0.
cp_st_no = gwa_konv-stunr.
cp_count = gwa_konv-zaehk.
ENDIF.
ENDFORM. " FRM_GET_COND_KEY
PP模块
⽣产计划的BAPI列表::
Routing(⼯艺路线)
BAPI_ROUTING_CREATE 创建⼯艺路线BAPI - ca03 BAPI_ROUTING_EXISTENCE_CHECK 检查⼯艺路线是否存在
Reference operation set:(参考操作集)
BAPI_REFSETOFOPERATIONS_CREATE 创建参考参考⼯序集
BAPI_REFSETOFOPR_EXISTENCE_CHK 检查参考参考⼯序集
Planned order:(计划订单)
BAPI_PLANNEDORDER_CHANGE 更改计划订单 -md04
BAPI_PLANNEDORDER_CREATE 创建计划订单
BAPI_PLANNEDORDER_DELETE 删除计划订单
BAPI_PLANNEDORDER_EXIST_CHECK 检查计划订单是否存在
BAPI_PLANNEDORDER_GET_DETAIL 获取计划订单详细信息(计划订单)BAPI_PLANNEDORDER_GET_DET_LIST 获得计划订单信息
Planned Independent Requirement:(计划独⽴需求)
BAPI_REQUIREMENTS_CHANGE 更改计划独⽴需求 -md61
BAPI_REQUIREMENTS_CREATE 创建计划独⽴需求
BAPI_REQUIREMENTS_GETDETAIL 显⽰计划独⽴需求
Production order:(⽣产订单)
BAPI_PRODORD_WM_MAT_STAGING WM材料分期
BAPI_PRODORD_SETUSERSTATUS 设置⽤户状态
BAPI_PRODORD_SET_DEL_INDICATOR 设置删除标识
BAPI_PRODORD_SET_DELETION_FLAG 设置删除标识
BAPI_PRODORD_SCHEDULE 进⾏调整
BAPI_PRODORD_REVOKEUSERSTATUS 取消⽤户状态
BAPI_PRODORD_RELEASE 发布
BAPI_PRODORD_GET_LIST 列表抬头订单
BAPI_PRODORD_GET_DETAIL 抬头订单明细
BAPI_PRODORD_EXIST_CHECK 确认检查性
BAPI_PRODORD_CREATE_FROM_REF 创建模板
BAPI_PRODORD_CREATE_FROM_PLORD 创建带有计划订单
BAPI_PRODORD_CREATE_CAP_REQ 产⽣能⼒需求
BAPI_PRODORD_CREATE 创建⽣产订单
BAPI_PRODORD_COSTING 创建成本估计
BAPI_PRODORD_COMPLETE_TECH 完整的技术
BAPI_PRODORD_CLOSE 关闭订单
BAPI_PRODORD_CHECK_MAT_AVAIL 检查物料可⽤性
BAPI_PRODORD_CHANGE 更改⽣产订单
Production order confirmation:(⽣产订单确认)
BAPI_PRODORDCONF_GET_TT_PROP 确认计⼯单
BAPI_PRODORDCONF_GET_TE_PROP 确认计⼯单
BAPI_PRODORDCONF_GETLIST ⽣产订单确认
BAPI_PRODORDCONF_GETDETAIL ⽣产订单确认详细信息
BAPI_PRODORDCONF_GET_HDR_PROP 确认计划订单
BAPI_PRODORDCONF_EXIST_CHK 检查⼯单是否存在
BAPI_PRODORDCONF_CREATE_TT 确认计划⼯单
BAPI_PRODORDCONF_CREATE_TE 确认计划⼯单
BAPI_PRODORDCONF_PDC_UPLOAD_TT PP 确认计⼯单
BAPI_PRODORDCONF_PDC_UPLOAD_TE PP 确认计⼯单
BAPI_PRODORDCONF_CREATE_HDR 输⼊订单确认
BAPI_PRODORDCONF_CREATE_ACT 输⼊订单激活确认
BAPI_PRODORDCONF_CANCEL 取消⽣产订单
BDC Download & Upload for production order: (下载和上传的BDC的⽣产订单)
BAPI_RCVPRORDCF_RECEIVEPRODORD PP-PDC: 下载⽣产订单
BAPI_RCVPRORDCF_RECEIVEWORKC PP-PDC: 下载⼯作中⼼
BAPI_RCVPRODCF_REQUEST_CONF PP-PDC: 上传请求
KANBAN: (看板)
BAPI_KANBAN_CHANGE 更改kanban数据
BAPI_KANBAN_CHANGESTATUS 更改kanban状态
BAPI_KANBAN_CHANGESTATUS1 更改kanban状态1
BAPI_KANBAN_GETLIST 匹配选择标准KANBAN的测定
BAPI_KANBAN_GETLIST_ALL 匹配选择标准KANBAN的测定
BAPI_KANBAN_GETLISTFORSUPPLIE1 匹配选择标准KANBAN的测定
BAPI_KANBAN_GETLISTFORSUPPLIER 为供应商提供kanban数据
BAPI_KANBAN_SETINPROCESS 为供应商提供kanban数据
KANBAN CONTROL CYCLE: (看板)
BAPI_KANBANCC_ADDEVENTDRKANBAN Create Event-Driven KANBAN for Control Cycle BAPI_KANBANCC_CHANGE Change Control Cycle
BAPI_KANBANCC_CREATE Create Control Cycle
BAPI_KANBANCC_DELETE Delete Control Cycles
BAPI_KANBANCC_EXISTCHECK Check Existence of Control Cycle
BAPI_KANBANCC_GETLIST Determine Kanban Control Cycles with Selection Criteria BAPI_KANBANCC_GETLIST_ALL Determine Kanban Control Cycles with Selection Criteria BAPI_KANBANCC_WITHDRAWQUANTITY Quantity Signal for Kanban Control Cycle
REM Confirmation: ( REM确认)
BAPI_REPMANCONF_CANCEL 处理的重复制造取消
BAPI_REPMANCONF_CREATE_MTO 销售订单执⾏重复制造情况
BAPI_REPMANCONF_CREATE_PLOT 执⾏⽣产成本
BAPI_REPMANCONF_CREATE_MTS 在很多情况下,执⾏⽣产成本
BAPI_REPMANCONF_EXIST_CHK 检查对象存在
REM Confirmation1:
BAPI_REPMANCONF1_CANCEL 处理的重复制造取消
BAPI_REPMANCONF1_CREATE_MTO 销售订单执⾏重复制造情况BAPI_REPMANCONF1_CREATE_MTP 在很多情况下,执⾏⽣产成本BAPI_REPMANCONF1_CREATE_MTS 在很多情况下,执⾏⽣产成本BAPI_REPMANCONF1_EXIST_CHK 检查对象存在。