批量修改物料的产品层次,ABAP代码

REPORT ZMMR024.
tables:MARA,T179T.
*定义ALV变量
TYPE-POOLS: SLIS.
DATA: FIELDCATALOG   TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP   TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT      TYPE SLIS_LAYOUT_ALV,
      GD_REPID       LIKE SY-REPID,
      GT_EVENTS      TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS  TYPE SLIS_PRINT_ALV,
      GT_SORT        TYPE SLIS_T_SORTINFO_ALV,
      GS_SORT        TYPE SLIS_SORTINFO_ALV,
      G_TITLE        TYPE LVC_TITLE.

DATABEGIN OF HEADDATA OCCURS 10.
        INCLUDE STRUCTURE BAPIMATHEAD.
DATAEND OF HEADDATA.

DATABEGIN OF CLIENTDATA OCCURS 10.
        INCLUDE STRUCTURE BAPI_MARA.
DATAEND OF CLIENTDATA.

DATABEGIN OF CLIENTDATAX OCCURS 10.
        INCLUDE STRUCTURE BAPI_MARAX.
DATAEND OF CLIENTDATAX.

DATABEGIN OF SALESDATA OCCURS 10.
        INCLUDE STRUCTURE BAPI_MVKE.
DATAEND OF SALESDATA.

DATABEGIN OF SALESDATAX OCCURS 10.
        INCLUDE STRUCTURE BAPI_MVKEX.
DATAEND OF SALESDATAX.

DATABEGIN OF RETURN  OCCURS 10.
        INCLUDE STRUCTURE BAPIRET2.
DATAEND OF RETURN .

DATABEGIN OF RETURN1  OCCURS 10.
        INCLUDE STRUCTURE BAPI_MATRETURN2.
DATAEND OF RETURN1 .


DATA:BEGIN OF GT_out OCCURS 0,
      matnr like mara-matnr,
      TYPE like BAPIRET2-TYPE ,
      ID like BAPIRET2-ID ,
      NUMBER like BAPIRET2-NUMBER ,
      MESSAGE like BAPIRET2-MESSAGE ,
      LOG_NO like BAPIRET2-LOG_NO ,
      LOG_MSG_NO like BAPIRET2-LOG_MSG_NO ,
      MESSAGE_V1 like BAPIRET2-MESSAGE_V1 ,
      MESSAGE_V2 like BAPIRET2-MESSAGE_V2 ,
      MESSAGE_V3 like BAPIRET2-MESSAGE_V3 ,
      MESSAGE_V4 like BAPIRET2-MESSAGE_V4 ,
      PARAMETER like BAPIRET2-PARAMETER ,
      ROW like BAPIRET2-ROW ,
      FIELD like BAPIRET2-FIELD ,
      SYSTEM like BAPIRET2-SYSTEM ,
      END OF GT_OUT .

DATA:BEGIN OF GT_MVKE OCCURS 0,
  MATNR like MVKE-MATNR,"
  VKORG like MVKE-VKORG,"
  VTWEG like MVKE-VTWEG,"
  END OF GT_MVKE.

DATA: total TYPE i,
num type i.
num 0.



SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS matnr FOR MARA-MATNR ."
PARAMETERS PRODH like T179T-PRODH ."

SELECTION-SCREEN END OF BLOCK BLOCK1.


INITIALIZATION.


START-OF-SELECTION.

  data gt_T179T like table of T179T with header line.
  DATA: GP_TXT.
  select
    *
    into corresponding fields of table gt_T179T
    from T179T
    where PRODH = PRODH.
    if gt_T179T[] is initial.
      CONCATENATE '无此产品批次!' GP_TXT INTO GP_TXT."连接字符串
      MESSAGE GP_TXT TYPE 'E'.
    endif.
    CLEAR:GP_TXT.

  "获得数据
  PERFORM GET_DATA.
*调用BAPI
  PERFORM DEAL_DATA.
*  "ALV显示
  PERFORM FRM_DISPLAY.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .




  select
    matnr
    VKORG
    VTWEG
    into corresponding fields of table gt_MVKE
    from MVKE
    where matnr in matnr
    and vkorg '4110'.

endform.
*&---------------------------------------------------------------------*
*&      Form  DEAL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DEAL_DATA .
loop at gt_MVKE .

  HEADDATA-MATERIAL = gt_MVKE-matnr.
  CLIENTDATA-PROD_HIER = PRODH.
  CLIENTDATAX-PROD_HIER 'X'.
  SALESDATA-PROD_HIER = PRODH.
  SALESDATAX-PROD_HIER 'X'.
  SALESDATA-SALES_ORG '4110'.
  SALESDATAX-SALES_ORG '4110'.
  SALESDATA-DISTR_CHAN = gt_MVKE-VTWEG.
  SALESDATAX-DISTR_CHAN = gt_MVKE-VTWEG.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    HEADDATA                   = HEADDATA
    CLIENTDATA                 = CLIENTDATA
    CLIENTDATAX                = CLIENTDATAX
*   PLANTDATA                  =
*   PLANTDATAX                 =
*   FORECASTPARAMETERS         =
*   FORECASTPARAMETERSX        =
*   PLANNINGDATA               =
*   PLANNINGDATAX              =
*   STORAGELOCATIONDATA        =
*   STORAGELOCATIONDATAX       =
*   VALUATIONDATA              =
*   VALUATIONDATAX             =
*   WAREHOUSENUMBERDATA        =
*   WAREHOUSENUMBERDATAX       =
    SALESDATA                  = SALESDATA
    SALESDATAX                 = SALESDATAX
*   STORAGETYPEDATA            =
*   STORAGETYPEDATAX           =
*   FLAG_ONLINE                = ' '
*   FLAG_CAD_CALL              = ' '
*   NO_DEQUEUE                 = ' '
*   NO_ROLLBACK_WORK           = ' '
  IMPORTING
    RETURN                     RETURN
  TABLES
*   MATERIALDESCRIPTION        =
*   UNITSOFMEASURE             =
*   UNITSOFMEASUREX            =
*   INTERNATIONALARTNOS        =
*   MATERIALLONGTEXT           =
*   TAXCLASSIFICATIONS         =
   RETURNMESSAGES             = RETURN1
*   PRTDATA                    =
*   PRTDATAX                   =
*   EXTENSIONIN                =
*   EXTENSIONINX               =
          .
if sy-subrc 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait 'X'.
endif.

  read table RETURN1 with key TYPE 'E'.
  if sy-subrc <> 0.
    GT_OUT-matnr = gt_MVKE-matnr.
    GT_OUT-type 'S'.
    GT_OUT-MESSAGE '修改成功'.
    APPEND GT_OUT.
  else.
    MOVE-CORRESPONDING RETURN1 TO GT_OUT.
    GT_OUT-matnr = gt_MVKE-matnr.
    APPEND GT_OUT.
  ENDIF.
  CLEAR:matnr,RETURN[],GT_OUT,HEADDATA,gt_MVKE,RETURN1[],
          CLIENTDATA,CLIENTDATAX,SALESDATA,SALESDATAX.

ENDLOOP.
ENDFORM.
        " DEAL_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .
*创建字段宏定义和输出字段赋值   
PERFORM FRM_BUILD_FIELDCATALOG.

*定义输出模式   GD_LAYOUT
-NO_INPUT           'X'.   GD_LAYOUT
-COLWIDTH_OPTIMIZE  'X'.   GD_LAYOUT
-F2CODE             '&IC1'.  "Sets fcode for when double click(press f2)   
"gd_layout-box_fieldname      = 'BOX'.   GD_LAYOUT
-CELL_MERGE         'X'.   GD_LAYOUT
-ZEBRA              'X'.
*  GD_LAYOUT-INFO_FIELDNAME = 'CLR'.

*使用ALV输出函数   GD_REPID 
= SY-REPID.   
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'        
EXPORTING             I_CALLBACK_PROGRAM       
= GD_REPID
*用户操作的参数             I_CALLBACK_USER_COMMAND  
'USER_COMMAND_4000' "自定义指向代码
*ALV输出状态的参数             I_CALLBACK_PF_STATUS_SET 
'MY_STATUS'"菜单
*输出模式参数             IS_LAYOUT                
= GD_LAYOUT             IT_FIELDCAT              
= FIELDCATALOG[]             IS_PRINT                 
= GD_PRNTPARAMS             I_GRID_TITLE             
= G_TITLE             I_SAVE                   
'X'             
"it_sort                  = gt_sort[]        
TABLES
*用于输出ALV的内表             T_OUTTAB                 
= GT_OUT        
EXCEPTIONS
*定义输出异常时的信息,配合MESSAGE语句使用             PROGRAM_ERROR            
1             
OTHERS                   2.
ENDFORM.                    " FRM_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_BUILD_FIELDCATALOG .   
"创建字段宏定义   
DEFINE ADD_FIELD.     FIELDCATALOG
-FIELDNAME =  &1.   "内表字段名称     FIELDCATALOG
-SELTEXT_M =  &2.    "字段输出名称     FIELDCATALOG
-NO_ZERO   =  &3.    "是否显示零     FIELDCATALOG
-JUST      =  &4.    "对齐方式     FIELDCATALOG
-EMPHASIZE =  &5.    "是否高亮     FIELDCATALOG
-CHECKBOX    = &6.  "是否带单选框     FIELDCATALOG
-EDIT      =  &7.    "可编辑     
APPEND FIELDCATALOG.     
CLEAR FIELDCATALOG.   
END-OF-DEFINITION.
*输出字段赋值   ADD_FIELD 
'MATNR'                    '物料号'         'X' 'L' '' '' ''.   ADD_FIELD 
'TYPE'                    '消息类型'         'X' 'L' '' '' ''.   ADD_FIELD 
'ID'                    '消息类'         'X' 'L' '' '' ''.   ADD_FIELD 
'NUMBER'                    '消息编号'         '' 'L' '' '' ''.   ADD_FIELD 
'MESSAGE'                    '消息文本'         '' 'L' '' '' ''.   ADD_FIELD 
'LOG_NO'                    '日志号'         '' 'L' '' '' ''.   ADD_FIELD 
'LOG_MSG_NO'                    '内部邮件序列号'         'X' 'L' '' '' ''.   ADD_FIELD 
'MESSAGE_V1'                    '消息变量'         '' 'L' '' '' ''.   ADD_FIELD 
'MESSAGE_V2'                    '消息变量'         'X' 'L' '' '' ''.   ADD_FIELD 
'MESSAGE_V3'                    '消息变量'         '' 'L' '' '' ''.   ADD_FIELD 
'MESSAGE_V4'                    '消息变量'         '' 'L' '' '' ''.   ADD_FIELD 
'PARAMETER'                    '参数名称'         '' 'L' '' '' ''.   ADD_FIELD 
'ROW'                    '参数中的行'         '' 'L' '' '' ''.   ADD_FIELD 
'FIELD'                    '参数中的字段'         '' 'L' '' '' ''.   ADD_FIELD 
'SYSTEM'                    '引发消息的逻辑系统'         '' 'L' '' '' ''.
ENDFORM.                    " FRM_BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  user_command_4000
*&---------------------------------------------------------------------*
*       gui的响应事件
*----------------------------------------------------------------------*
*      -->RF_UCOMM     text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM USER_COMMAND_4000 USING RF_UCOMM    LIKE SY-UCOMM                              RS_SELFIELD 
TYPE SLIS_SELFIELD.   
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.   
CASE RF_UCOMM.     
WHEN 'PRINT'.
*      PERFORM prf_print.   

ENDCASE.

*--修改内表后刷新ALV屏幕   
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     
IMPORTING       E_GRID 
= LR_GRID.   
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.   RS_SELFIELD
-REFRESH 'X'.  "自动刷新   
FREE GD_LAYOUT.
ENDFORM.
" INIT_HEADER_DATA
*&---------------------------------------------------------------------*
*&      Form  my_status
*&---------------------------------------------------------------------*
*       标准ALV状态栏和标题栏设置子程序
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM my_status USING extab TYPE slis_t_extab.   
SET PF-STATUS 'MYSTATUS'."状态栏设置   
SET TITLEBAR 'MYTITLE'."标题栏设置
ENDFORM.

posted @ 2017-03-20 10:57  zhenximeiyitian  阅读(390)  评论(0编辑  收藏  举报