SAP 销售订单的字段增强

  1. 在vbak中附加结构中增强字段 ,注意事先不需要创建结构,否则输入你创建的结构名是会报错:结构已存在
  2. 在结构bape_vbak同时增强相同的字段、同时在bape_vbakx结构中增强一个字段名相同但类型为char1的字段
  3. 在vbakkoz、vbakkozx中重复第2步的操作
  4. 调用bapi:BAPI_SALESORDER_CHANGE修改订单 ,一下代码修改vbak的增强字段zsostats的值为99 ,同时修改行项目的计划行的需求类型为CN
    
    * Header
      CLEAR: ls_headerx, ls_header.
      ls_headerx-updateflag = 'U'.
    
      CLEAR ls_bape_vbak.
      ls_bape_vbak-vbeln = pv_vbeln .
      ls_bape_vbak-zsostats = '99' .
      CLEAR ls_bape_vbakx.
      ls_bape_vbakx-vbeln = pv_vbeln .
      ls_bape_vbakx-zsostats = 'X' .
    
      it_parex-structure           = 'BAPE_VBAK'.
      it_parex+30                  = ls_bape_vbak.
      APPEND it_parex.
    
    
      it_parex-structure            = 'BAPE_VBAKX'.
      it_parex+30                   = ls_bape_vbakx.
      APPEND it_parex.
    
      SELECT * INTO TABLE lt_vbap FROM vbap WHERE vbeln = pv_vbeln .
    
      LOOP AT lt_vbap INTO ls_vbap.
        CLEAR ls_schdl .
        ls_schdl-itm_number = ls_vbap-posnr.
        ls_schdl-sched_line = '0001'.
        ls_schdl-sched_type = 'CN' .
        APPEND ls_schdl TO lt_schdl .
        CLEAR ls_schdlx .
        ls_schdlx-itm_number = ls_vbap-posnr.
        ls_schdlx-sched_line = '0001'.
        ls_schdlx-sched_type = 'X' .
        ls_schdlx-updateflag = 'U' .
        APPEND ls_schdlx TO lt_schdlx .
    
    *    CLEAR ls_item .
    *    ls_item-itm_number = ls_vbap-posnr.
    *    APPEND ls_item TO lt_item .
    *    CLEAR ls_itemx .
    *    ls_itemx-itm_number = ls_vbap-posnr.
    *    ls_schdlx-updateflag = 'U' .
    *    APPEND ls_itemx TO lt_itemx .
      ENDLOOP.
    
    
      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          salesdocument    = pv_vbeln
          order_header_in  = ls_header
          order_header_inx = ls_headerx
        TABLES
          return           = lt_return
    *     order_item_in    = lt_item
    *     order_item_inx   = lt_itemx
    *     order_text       = lt_text
          schedule_lines   = lt_schdl
          schedule_linesx  = lt_schdlx
          extensionin      = it_parex.
    
      SORT lt_return BY type .
    
      READ TABLE lt_return INTO ls_return WITH KEY type = 'E' BINARY SEARCH .
      IF sy-subrc EQ 0.
        pv_type = 'E' .
        CLEAR :lv_message, lv_msgno,lv_msgv1 ,lv_msgv2, lv_msgv3,lv_msgv4 .
        lv_msgno = ls_return-number .
        lv_msgv1 = ls_return-message_v1 .
        lv_msgv2 = ls_return-message_v2 .
        lv_msgv3 = ls_return-message_v3 .
        lv_msgv4 = ls_return-message_v4 .
        CALL FUNCTION 'RP_READ_T100'
          EXPORTING
            arbgb = ls_return-id
            msgnr = lv_msgno
            msgv1 = lv_msgv1
            msgv2 = lv_msgv2
            msgv3 = lv_msgv3
            msgv4 = lv_msgv4
            sprsl = sy-langu
          IMPORTING
            text  = lv_message.
        pv_message =  lv_message .
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      ELSE.
        pv_type = 'S' .
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ENDIF.

     

  5. 如果不在vbakkoz、vbakkozx中增强相同字段话,增强字段的值是写不进去的

  6. 以此类推 行项目的增强修改增强字段的为vbap、bape_vbap、bape_vbapx、vbapxoz、vbapxozx

  7. 在sap s/4 hana中订单的条件数据不在表konv中,而是在表prcd_elements中

  8. 取订单详情的bapi为BAPISDORDER_GETDETAILEDLIST,一下代码是为了取条件数据的。改bapi可以一次取多个订单的数据

    
      lv_bapi_view-sdcond = 'X' .
    
      LOOP AT pt_data.
        CLEAR ls_sales_documents .
        ls_sales_documents-vbeln = pt_data-vbeln .
        APPEND ls_sales_documents TO lt_sales_documents .
      ENDLOOP.
    
      CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'
        EXPORTING
          i_bapi_view          = lv_bapi_view
    *     I_MEMORY_READ        =
    *     I_WITH_HEADER_CONDITIONS       = ' '
        TABLES
          sales_documents      = lt_sales_documents
    *     ORDER_HEADERS_OUT    =
    *     ORDER_ITEMS_OUT      =
    *     ORDER_SCHEDULES_OUT  =
    *     ORDER_BUSINESS_OUT   =
    *     ORDER_PARTNERS_OUT   =
    *     ORDER_ADDRESS_OUT    =
    *     ORDER_STATUSHEADERS_OUT        =
    *     ORDER_STATUSITEMS_OUT          =
          order_conditions_out = pt_order_conditions
    *     ORDER_COND_HEAD      =
    *     ORDER_COND_ITEM      =
    *     ORDER_COND_QTY_SCALE =
    *     ORDER_COND_VAL_SCALE =
    *     ORDER_CONTRACTS_OUT  =
    *     ORDER_TEXTHEADERS_OUT          =
    *     ORDER_TEXTLINES_OUT  =
    *     ORDER_FLOWS_OUT      =
    *     ORDER_CFGS_CUREFS_OUT          =
    *     ORDER_CFGS_CUCFGS_OUT          =
    *     ORDER_CFGS_CUINS_OUT =
    *     ORDER_CFGS_CUPRTS_OUT          =
    *     ORDER_CFGS_CUVALS_OUT          =
    *     ORDER_CFGS_CUBLBS_OUT          =
    *     ORDER_CFGS_CUVKS_OUT =
    *     ORDER_BILLINGPLANS_OUT         =
    *     ORDER_BILLINGDATES_OUT         =
    *     ORDER_CREDITCARDS_OUT          =
    *     EXTENSIONOUT         =
        .

     

  9. 以上是销售订单抬头的字段增强,再扩展一下,行项目的字段增强,除了在表vbap中增强以外,还要在结构vbapkoz、vbapkozx增强字段,要注意的是vbapkozx中增强字段类型要使用char1或char01 ,不要使用BAPIUPDATE,订单修改的bapi中写死了只识别char1和char01 ,在这种情况下,参数order_item_inx-updateflag  = 'U'无效,修改不了增强的字段;此情况也可以绕过,参数设置order_item_inx-updateflag  = 'I'。bapi的参数中增强使用bape_vbap和bape_vbapx两个结构。还有要注意的是如果要修改订单行项目的数量 需要 order_item_in 和 schedule_lines ,行项目数据和计划行数据同时修改才可以生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值