VA05批量更新BAPI:SD_BULK_CHANGE

碰到一个需求,需要实现VA05批量更新定价的功能,前台VA05可以对销售订单进行批量更新工厂,物料,定价,货币,DEBUG了一下发现底层调用的函数为SD_BULK_CHANGE。

其实批量更新销售订单上的定价使用BAPI_SALESORDER_CHANGE就可以完成,代码如下:

  DATA:
    GV_SALESDOCUMENT    TYPE VBAK-VBELN,
    GS_ORDER_HEADER_IN  TYPE BAPISDH1,
    GS_ORDER_HEADER_INX TYPE BAPISDH1X,
    GS_LOGIC_SWITCH     TYPE BAPISDLS,
    GT_ITEM             TYPE STANDARD TABLE OF BAPISDITM,
    GS_ITEM             TYPE BAPISDITM,
    GT_ITEMX            TYPE STANDARD TABLE OF BAPISDITMX,
    GS_ITEMX            TYPE BAPISDITMX,
    GT_RETURN           TYPE BAPIRET2_T.

  GV_SALESDOCUMENT = '0000004517'.                "SO号

  GS_ORDER_HEADER_INX-UPDATEFLAG = 'U'.           "更新标识

  GS_LOGIC_SWITCH-PRICING    = 'B'.               "定价类型B
  GS_LOGIC_SWITCH-COND_HANDL = 'X'.               "重新处理条件

  GS_ITEM-ITM_NUMBER = '000010'.                  "明细号
  APPEND GS_ITEM TO GT_ITEM.

  GS_ITEMX-ITM_NUMBER = '000010'.                 "明细号
  GS_ITEMX-UPDATEFLAG = 'U'.                      "更新标识
  APPEND GS_ITEMX TO GT_ITEMX.

  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
    EXPORTING
      SALESDOCUMENT    = GV_SALESDOCUMENT
      ORDER_HEADER_INX = GS_ORDER_HEADER_INX
      LOGIC_SWITCH     = GS_LOGIC_SWITCH
    TABLES
      RETURN           = GT_RETURN
      ORDER_ITEM_IN    = GT_ITEM
      ORDER_ITEM_INX   = GT_ITEMX.

  CL_DEMO_OUTPUT=>DISPLAY( GT_RETURN ) .

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.

VA05前台使用的则是SD_BULK_CHANGE去更新定价,该函数对应前台下拉菜单的四个批量更新功能,我这里只针对批量更新定价写了测试代码,其他的后面用到再测吧

*&---------------------------------------------------------------------*
*& Report ZTEST_UPDATE_PRICE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_UPDATE_PRICE.
TABLES:VBAP.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:
    S_VBELN FOR VBAP-VBELN.
SELECTION-SCREEN END OF BLOCK B1.

START-OF-SELECTION.
  PERFORM FRM_UPDATE_PRICE.
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_PRICE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_UPDATE_PRICE .
  DATA:
    LT_DOCUMENTS     TYPE STANDARD TABLE OF VBMTV,
    LV_FUNTION       TYPE SY-UCOMM VALUE 'MPRX',
    LS_DYNPRO_FIELDS TYPE RV45C,
    LS_ERROR         TYPE VBFS.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE LT_DOCUMENTS
   FROM VBAP
  WHERE VBELN IN S_VBELN.

  LOOP AT LT_DOCUMENTS ASSIGNING FIELD-SYMBOL(<FS_DOCUMENTS>).
    <FS_DOCUMENTS>-SELKZ = 'X'.
  ENDLOOP.

  CALL FUNCTION 'SD_BULK_CHANGE'
    EXPORTING
      FUNCTION             = LV_FUNTION
      DYNPRO_FIELDS        = LS_DYNPRO_FIELDS
      IV_SUPPRESS_MESSAGES = 'X'
    IMPORTING
      PROTOKOLL            = LS_ERROR
    TABLES
      DOCUMENTS            = LT_DOCUMENTS.

  CL_DEMO_OUTPUT=>DISPLAY( LS_ERROR ).

*  COMMIT WORK.
ENDFORM.

 

批量更新物料、工厂等操作,可以在这个函数里面打断点,前台执行DEBUG看下系统标准逻辑是怎么传值的应该就可以。

以上。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用BAPI_ROUTING_CHANGE进行SAP工艺路线的修改,需要按照以下步骤进行: 1. 准备数据:需要准备工艺路线的版本号、工厂代码、物料号等必要的信息,同时需要准备修改参数的数据。修改参数需要按照BAPI_ROUTING_CHANGE的输入参数格式进行组织。 2. 调用BAPI_ROUTING_CHANGE:使用SAP的RFC函数模块来调用BAPI_ROUTING_CHANGE,将准备好的数据作为输入参数传递给BAPI_ROUTING_CHANGE。BAPI_ROUTING_CHANGE会根据输入参数来修改工艺路线。 3. 处理返回值:BAPI_ROUTING_CHANGE会返回修改后的工艺路线的版本号等信息,需要对返回值进行处理,判断是否修改成功。 以下是一个简单的示例代码,用于使用BAPI_ROUTING_CHANGE修改SAP工艺路线: ``` DATA: lt_routing TYPE STANDARD TABLE OF bapi_routing_operation, ls_routing LIKE LINE OF lt_routing. * 准备工艺路线数据 ls_routing-operation = '0010'. ls_routing-work_center = 'WC001'. ls_routing-component = 'MAT001'. ls_routing.component_qty = '1.0'. APPEND ls_routing TO lt_routing. * 准备修改参数 DATA: lt_change TYPE STANDARD TABLE OF bapi_routing_change, ls_change LIKE LINE OF lt_change. ls_change-operation = '0010'. ls_change-change_flag = 'U'. ls_change-operation_longtext = '这是一条测试的长文本。'. APPEND ls_change TO lt_change. * 调用BAPI_ROUTING_CHANGE CALL FUNCTION 'BAPI_ROUTING_CHANGE' EXPORTING routing_header = ls_routing_header client = sy-mandt TABLES routing_operation = lt_routing change_operation = lt_change EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ``` 在这个示例代码中,我们首先准备了工艺路线的数据,然后准备修改参数,最后调用BAPI_ROUTING_CHANGE进行修改。请注意,在实际使用中,需要根据具体情况对代码进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值