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看下系统标准逻辑是怎么传值的应该就可以。
以上。
post SAP-Garson
原文链接:https://blog.csdn.net/DeveloperMrMeng/article/details/127055180文章来自于网络,如果侵犯了您的权益,请联系站长删除!