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 EQ 0.
      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 EQ 0.
      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 EQ 0.
      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 EQ 0.
        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 NE 0.
    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.

复制代码

 

 

复制代码

 1    SELECT SINGLE * FROM BKPF INTO L_BKPF
 2        WHERE BUKRS = IW_BUKRS
 3          AND BELNR = IW_bELNR
 4          AND GJAHR = IW-GJAHR.
 5 
 6       REVERSAL-OBJ_TYPE = L_BKPF-AWTYP.
 7       CONCATENATE IW_-BELNR IW_-BUKRS IW_-GJAHR INTO REVERSAL-OBJ_KEY_R.
 8       REVERSAL-OBJ_KEY = REVERSAL-OBJ_KEY_R.
 9       REVERSAL-OBJ_KEY = '$'.
10 
11       CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
12        IMPORTING
13         OWN_LOGICAL_SYSTEM = REVERSAL-OBJ_SYS
14        EXCEPTIONS
15         OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1
16         OTHERS = 2.
17 
18       REVERSAL-REASON_REV = '01'.  "原因
19       REVERSAL-PSTNG_DATE = SY-DATUM.
20 
21       CLEAR: RETURN.
22 
23       CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'
24         EXPORTING
25           REVERSAL       = REVERSAL
26           BUS_ACT        = 'RFBU'
27         IMPORTING
28           OBJ_TYPE       = OBJTYPE
29           OBJ_KEY        = OBJKEY
30           OBJ_SYS        = OBJSYS
31         TABLES
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 EQ 0.
    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                                               检查对象存在 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值