批量修改SO送达方

该博客介绍了如何在SAP系统中通过编写程序实现批量修改销售订单的收货方。首先,通过打开文件对话框选择Excel文件,然后将Excel数据转换为内部表,接着处理并删除无效数据。最后,遍历内部表更新每个订单的收货方信息,并使用BAPI_SALESORDER_CHANGE函数进行修改,同时处理可能出现的错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

report  ZSDR006.
tablesVBAKVBAP.
data:begin of WA_TAB,
  VBELN type VBAK-VBELN,
  posnr TYPE vbap-posnr,
  KUNNR type VBAK-KUNNR,
  end of WA_TAB.
data:ITAB like table of WA_TAB with header line.

dataSOHD like BAPISDH1,
      SOHDX like BAPISDH1X,
      SOITEM like BAPISDITM occurs with header line,
      SOITEMX like BAPISDITMX occurs with header line.

data:RT type table of BAPIRET2 with header line.
dataRT2 type BAPIRET2.
data:WA_RETURN  type BAPIRET2.
data:SOBP type table of BAPIPARNRC with header line.
data:SUB_SOBP type table of BAPIPARNRC with header line..

data:ROWNUM type I.
constants:
   C_BEGIN_ROW type value 1,
   C_BEGIN_COL type value 1,
   C_END_ROW type value 9999,
   C_END_COL type value 3.

selection-screen begin of block B1 with frame title T1.
parametersSO_FILE(60).
selection-screen end of block B1.

initialization.
  T1 '选择文件'.

at selection-screen on value-request for SO_FILE.
  perform GETDATA using SO_FILE.

start-of-selection.
  perform UPLOADDATA.
  perform EXEUPDATE.

*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->SO_FILE    text
*----------------------------------------------------------------------*
form GETDATA using SO_FILE.
* Data for open dialog
  dataL_FILETAB   type FILETABLE,
        L_RC        type I.
  clear L_FILETAB.
  refresh L_FILETAB.
* Open dialog
  call method CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    exporting
*     WINDOW_TITLE         = 'SAP Custom - Open File'
*     DEFAULT_EXTENSION    =
      DEFAULT_FILENAME     '*.xls'
*     FILE_FILTER          = '*.xls'
      INITIAL_DIRECTORY    'd:\'
      MULTISELECTION       ''
    changing
      FILE_TABLE           L_FILETAB
      RC                   L_RC
    exceptions
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      others               4.
* Get file path
  check L_RC eq 1.
  read table L_FILETAB index into SO_FILE.
endform.                    "getdata

*&---------------------------------------------------------------------*
*&      Form  uploaddata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form UPLOADDATA.

  databegin of I_EXCEL occurs 0.
          include structure ALSMEX_TABLINE.
  dataend of I_EXCEL.
  dataL_ANSWER(1type C.
  dataL_COLUMN type I.
  field-symbols<FS>.
  dataL_PATHNAME like RLGRAP-FILENAME.

  move SO_FILE to L_PATHNAME.
  call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    exporting
      FILENAME                L_PATHNAME
      I_BEGIN_COL             C_BEGIN_COL
      I_BEGIN_ROW             C_BEGIN_ROW
      I_END_COL               C_END_COL
      I_END_ROW               C_END_ROW
    tables
      INTERN                  I_EXCEL
    exceptions
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2
      others                  3.
  if SY-SUBRC <> 0.
    message id SY-MSGID type SY-MSGTY number SY-MSGNO
          with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  else.
    if I_EXCEL[] is initial.
      call function 'POPUP_TO_CONFIRM_WITH_MESSAGE'
        exporting
*         DEFAULTOPTION  = 'Y'
          DIAGNOSETEXT1  'No data in excel'
*         DIAGNOSETEXT2  = ' '
*         DIAGNOSETEXT3  = ' '
          TEXTLINE1      'No data in excel'
*         TEXTLINE2      = ' '
          TITEL          'Confirm'
*         START_COLUMN   = 25
*         START_ROW      = 6
*         CANCEL_DISPLAY = 'X'
        importing
          ANSWER         L_ANSWER.
    else.
      delete I_EXCEL where ROW '0001'.
      sort I_EXCEL by ROW COL.
      loop at I_EXCEL.
        move I_EXCEL-COL to L_COLUMN.
        assign component L_COLUMN of structure ITAB to <FS>.
        move I_EXCEL-VALUE to <FS>.
        at end of ROW.
          append ITAB.
          clear ITAB.
        endat.
      endloop.
    endif.
  endif.
endform.                    "uploaddata

*&---------------------------------------------------------------------*
*&      Form  exeupdate
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form EXEUPDATE.
  SOHDX-UPDATEFLAG 'U'.
  loop at ITAB into WA_TAB.
    SOBP-DOCUMENT WA_TAB-VBELN.
    SOBP-ITM_NUMBER wa_tab-posnr.
    SOBP-UPDATEFLAG 'U'.
    SOBP-PARTN_ROLE 'WE'.
    SOBP-P_NUMB_NEW WA_TAB-KUNNR.
    append SOBP.
    clear WA_TAB.
  endloop.

LOOP at sobp.
   sub_sobp sobp.
   APPEND sub_sobp.
   LOOP at sub_sobp.
  call function 'BAPI_SALESORDER_CHANGE'
    exporting
      SALESDOCUMENT    sub_SOBP-DOCUMENT
      ORDER_HEADER_INX SOHDX
    tables
      RETURN           RT
      PARTNERCHANGES   sub_SOBP.

  loop at RT.
    if rt-type 'E'.
    write:/ RT-MESSAGE.
    ENDIF.
  endloop.

  call function 'BAPI_TRANSACTION_COMMIT'
    exporting
      WAIT   'X'
    importing
      RETURN RT2.
  CLEAR sub_sobp[].
  refresh sub_sobp.
  ENDLOOP.
ENDLOOP.
endform.        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值