REPORT ZMMR_CHANGE_MAT NO STANDARD PAGE HEADING .
*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TYPE-POOLS : SLIS .
TABLES MARA .
*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES : BEGIN OF TY_ITAB ,
MATNR TYPE MARA -MATNR ,
MTART TYPE MARA -MTART ,
MEINS TYPE MARA -MEINS , "基本计量单位
XCHPF TYPE MARA -XCHPF , "批次管理需求的标识
MATKL TYPE MARA -MATKL ,
WGBEZ TYPE T023T -WGBEZ ,
ZQLTY TYPE MARA -ZQLTY ,
ZQLTYT TYPE ZMTQUALITYT -ZQLTYT ,
ZPRDA TYPE MARA -ZPRDA ,
ZPRDAT TYPE ZMTPRDAREAT -ZPRDAT ,
ZDIA TYPE MARA -ZDIA ,
ZTHICKNESS TYPE MARA -ZTHICKNESS ,
ZWIDTH TYPE MARA -ZWIDTH ,
ZLENGTH TYPE MARA -ZLENGTH ,
MAKTXO TYPE MAKT -MAKTX ,
MAKTXN TYPE MAKT -MAKTX ,
END OF TY_ITAB .
*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA :GT_ITAB TYPE STANDARD TABLE OF TY_ITAB ,
GW_ITAB TYPE TY_ITAB .
FIELD-SYMBOLS <ITAB> TYPE TY_ITAB .
*----------------------------------------------------------------------*
* CLASS lcl_main_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_MAIN_ALV DEFINITION .
PUBLIC SECTION .
METHODS : GENERATE_ALV .
PRIVATE SECTION .
DATA : O_SALV TYPE REF TO CL_SALV_TABLE .
METHODS :
SET_PF_STATUS
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_LAYOUT
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_DISPLAY_SETTING
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_COLUMNS
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
REFRESH_ALV ,
ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS
IMPORTING E_SALV_FUNCTION ,
HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING ROW COLUMN ,
HANDLE_LINK_CLICK
FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW COLUMN .
ENDCLASS . "lcl_main_alv DEFINITION
*---------------------------------------------------------------------*
* 选择屏幕
*---------------------------------------------------------------------*
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT - 001 .
SELECT-OPTIONS :
S_MTART FOR MARA -MTART ,
S_MATKL FOR MARA -MATKL ,
S_MATNR FOR MARA -MATNR ,
S_ZQLTY FOR MARA -ZQLTY ,
S_ZPRDA FOR MARA -ZPRDA .
SELECTION-SCREEN END OF BLOCK B1 .
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION .
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT .
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION .
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 100
TEXT = '正在处理,请稍等......' .
PERFORM GET_DATA .
DATA : LO_MAIN_ALV TYPE REF TO LCL_MAIN_ALV .
CREATE OBJECT LO_MAIN_ALV .
LO_MAIN_ALV ->GENERATE_ALV ( ) .
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION .
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
DATA :LT_T023T LIKE TABLE OF T023T WITH HEADER LINE ,
LT_ZMTQUALITYT LIKE TABLE OF ZMTQUALITYT WITH HEADER LINE ,
LT_ZMTPRDAREAT LIKE TABLE OF ZMTPRDAREAT WITH HEADER LINE .
SELECT * FROM T023T INTO TABLE LT_T023T WHERE SPRAS = '1' .
SELECT * FROM ZMTQUALITYT INTO TABLE LT_ZMTQUALITYT WHERE SPRAS = '1' .
SELECT * FROM ZMTPRDAREAT INTO TABLE LT_ZMTPRDAREAT WHERE SPRAS = '1' .
SELECT MARA ~MATNR
MARA ~MTART
MARA ~MEINS
MARA ~XCHPF
MARA ~MATKL
MARA ~ZQLTY
MARA ~ZPRDA
MARA ~ZDIA
MARA ~ZTHICKNESS
MARA ~ZWIDTH
MARA ~ZLENGTH
MAKT ~MAKTX AS MAKTXO
FROM MARA
INNER JOIN MAKT ON MAKT ~MATNR = MARA ~MATNR
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB
WHERE MARA ~MTART IN S_MTART
AND MARA ~MATKL IN S_MATKL
AND MARA ~MATNR IN S_MATNR
AND MARA ~ZQLTY IN S_ZQLTY
AND MARA ~ZPRDA IN S_ZPRDA
AND MAKT ~SPRAS = '1' .
LOOP AT GT_ITAB ASSIGNING <ITAB> .
READ TABLE LT_T023T WITH KEY MATKL = <ITAB> -MATKL .
IF SY -SUBRC = 0 .
<ITAB> -WGBEZ = LT_T023T -WGBEZ .
ENDIF .
READ TABLE LT_ZMTQUALITYT WITH KEY ZQLTY = <ITAB> -ZQLTY .
IF SY -SUBRC = 0 .
<ITAB> -ZQLTYT = LT_ZMTQUALITYT -ZQLTYT .
ENDIF .
READ TABLE LT_ZMTPRDAREAT WITH KEY ZPRDA = <ITAB> -ZPRDA .
IF SY -SUBRC = 0 .
<ITAB> -ZPRDAT = LT_ZMTPRDAREAT -ZPRDAT .
ENDIF .
"物料拼接规则
CALL FUNCTION 'ZMM_CONVERT_MAKTX'
EXPORTING
I_MTART = <ITAB> -MTART
I_MATKL = <ITAB> -MATKL
I_ZQLTY = <ITAB> -ZQLTY
I_ZPRDA = <ITAB> -ZPRDA
I_ZDIA = <ITAB> -ZDIA
I_ZTHICKNESS = <ITAB> -ZTHICKNESS
I_ZWIDTH = <ITAB> -ZWIDTH
I_ZLENGTH = <ITAB> -ZLENGTH
IMPORTING
E_MAKTX = <ITAB> -MAKTXN .
ENDLOOP .
ENDFORM .
*----------------------------------------------------------------------*
* CLASS lcl_main_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_MAIN_ALV IMPLEMENTATION .
METHOD GENERATE_ALV .
*
DATA : LX_MSG TYPE REF TO CX_SALV_MSG .
TRY .
CL_SALV_TABLE =>FACTORY (
IMPORTING
R_SALV_TABLE = O_SALV
CHANGING
T_TABLE = GT_ITAB ) .
CATCH CX_SALV_MSG INTO LX_MSG .
ENDTRY .
CALL METHOD SET_PF_STATUS
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_LAYOUT
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_DISPLAY_SETTING
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_COLUMNS
CHANGING
CO_ALV = O_SALV .
DATA : LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE .
LO_EVENTS = O_SALV ->GET_EVENT ( ) .
SET HANDLER HANDLE_DOUBLE_CLICK FOR LO_EVENTS .
SET HANDLER HANDLE_LINK_CLICK FOR LO_EVENTS .
SET HANDLER ON_USER_COMMAND FOR LO_EVENTS .
DATA :LR_SELS TYPE REF TO CL_SALV_SELECTIONS .
LR_SELS = O_SALV ->GET_SELECTIONS ( ) .
LR_SELS ->SET_SELECTION_MODE ( IF_SALV_C_SELECTION_MODE =>ROW_COLUMN ) .
* 显示 ALV
O_SALV ->DISPLAY ( ) .
ENDMETHOD . "generate_alv
*设置工具栏
METHOD SET_PF_STATUS .
DATA : LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS .
CO_ALV ->SET_SCREEN_STATUS (
PFSTATUS = 'ZALV_STATUS'
REPORT = SY -REPID
SET_FUNCTIONS = CO_ALV ->C_FUNCTIONS_ALL ) .
ENDMETHOD . "set_pf_status
* Settings for Layout
METHOD SET_LAYOUT .
*
DATA : LO_LAYOUT TYPE REF TO CL_SALV_LAYOUT ,
LF_VARIANT TYPE SLIS_VARI ,
LS_LAYOUT TYPE SALV_S_LAYOUT_INFO ,
LS_KEY TYPE SALV_S_LAYOUT_KEY .
*
LO_LAYOUT = CO_ALV ->GET_LAYOUT ( ) .
LS_KEY - REPORT = SY -REPID .
LS_LAYOUT = CL_SALV_LAYOUT_SERVICE =>GET_DEFAULT_LAYOUT (
S_KEY = LS_KEY
RESTRICT = IF_SALV_C_LAYOUT =>RESTRICT_NONE ) .
LF_VARIANT = LS_LAYOUT -LAYOUT .
LO_LAYOUT ->SET_KEY ( LS_KEY ) .
LO_LAYOUT ->SET_DEFAULT ( ABAP_TRUE ) .
LO_LAYOUT ->SET_SAVE_RESTRICTION ( IF_SALV_C_LAYOUT =>RESTRICT_NONE ) .
LO_LAYOUT ->SET_INITIAL_LAYOUT ( LF_VARIANT ) .
ENDMETHOD . "set_layout
METHOD SET_DISPLAY_SETTING .
*
DATA : LO_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS .
LO_DISPLAY = O_SALV ->GET_DISPLAY_SETTINGS ( ) .
LO_DISPLAY ->SET_STRIPED_PATTERN ( 'X' ) .
LO_DISPLAY ->SET_FIT_COLUMN_TO_TABLE_SIZE ( 'X' ) .
* lo_display->set_list_header( 'ALV Test for Display Settings' ).
*
ENDMETHOD . "SET_DISPLAY_SETTING
* 设置列属性
METHOD SET_COLUMNS .
*
DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE ,
LO_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE .
DATA : LV_SCRTEXT_L TYPE SCRTEXT_L .
DATA : COLOR TYPE LVC_S_COLO .
LO_COLS = CO_ALV ->GET_COLUMNS ( ) .
LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) .
LO_COLS ->SET_KEY_FIXATION ( ABAP_TRUE ) .
TRY .
* LO_COLS->SET_CELL_TYPE_COLUMN( 'IT_CELL_TYPES' ).
* LO_COLS->SET_COLOR_COLUMN( 'IT_CELL_COLOR' ).
CATCH CX_SALV_DATA_ERROR . "#EC NO_HANDLER
ENDTRY .
TRY .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'MAKTXO' ) .
LV_SCRTEXT_L = '原物料描述' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'MAKTXN' ) .
LV_SCRTEXT_L = '现物料描述' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
" LO_COLUMN->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ).
CATCH CX_SALV_NOT_FOUND . "#EC NO_HANDLER
ENDTRY .
*小计及排序设置
* DATA: LR_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS.
* LR_AGGREGATIONS = CO_ALV->GET_AGGREGATIONS( ).
* LR_AGGREGATIONS->CLEAR( ).
* DATA: LR_GROUPS TYPE REF TO CL_SALV_SORTS .
* LR_GROUPS = CO_ALV->GET_SORTS( ) .
* LR_GROUPS->CLEAR( ).
*
* TRY.
* LR_AGGREGATIONS->ADD_AGGREGATION( COLUMNNAME = 'KWMENG' ).
* LR_GROUPS->ADD_SORT( COLUMNNAME = 'BUKRS'
* POSITION = 1
** SUBTOTAL = ABAP_TRUE
* SEQUENCE = IF_SALV_C_SORT=>SORT_UP ).
*
* CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING.
* ENDTRY.
ENDMETHOD . "SET_COLUMNS
METHOD HANDLE_DOUBLE_CLICK .
* CASE COLUMN.
* WHEN OTHERS.
* READ TABLE GT_ITAB INTO GW_ITAB INDEX ROW.
* IF SY-SUBRC = 0.
*
* ENDIF.
* ENDCASE.
ENDMETHOD . "HANDLE_DOUBLE_CLICK
METHOD HANDLE_LINK_CLICK .
* CASE COLUMN.
* WHEN 'BELNR'.
* CLEAR GS_TCDOC.
* READ TABLE GT_TCDOC INTO GS_TCDOC INDEX ROW.
* IF SY-SUBRC = 0.
* SET PARAMETER ID 'BLN' FIELD GS_TCDOC-BELNR.
* SET PARAMETER ID 'BUK' FIELD GS_TCDOC-BUKRS.
* SET PARAMETER ID 'GJR' FIELD GS_TCDOC-GJAHR.
* CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
* ENDIF.
* WHEN OTHERS.
* ENDCASE.
ENDMETHOD . "HANDLE_link_click
METHOD ON_USER_COMMAND .
DATA :
LV_RETURN TYPE C .
DATA : O_SELS TYPE REF TO CL_SALV_SELECTIONS ,
T_ROWS TYPE SALV_T_ROW ,
L_ROW TYPE LINE OF SALV_T_ROW .
CASE E_SALV_FUNCTION .
WHEN 'REFRESH' .
PERFORM GET_DATA .
WHEN 'SAVE' .
PERFORM FRM_POPUP_INFO USING TEXT - 002 TEXT - 003 CHANGING LV_RETURN .
IF LV_RETURN = 'J' .
PERFORM FRM_UPDATE_MAT .
ENDIF .
ENDCASE .
ME ->REFRESH_ALV ( ) .
ENDMETHOD . "ON_USER_COMMAND
METHOD REFRESH_ALV .
DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE ,
LV_STBL TYPE LVC_S_STBL .
LO_COLS = O_SALV ->GET_COLUMNS ( ) .
LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) .
LV_STBL -ROW = 'X' .
LV_STBL -COL = 'X' .
O_SALV -> REFRESH ( S_STABLE = LV_STBL ) .
ENDMETHOD . "REFRESH_alv
ENDCLASS . "lcl_main_alv IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form frm_popup_info
*&---------------------------------------------------------------------*
* 弹出框信息
*----------------------------------------------------------------------*
* -->P_TEXT1 text
* -->P_TEXT2 text
* -->P_RETURN text
*----------------------------------------------------------------------*
FORM FRM_POPUP_INFO USING P_TEXT1 P_TEXT2
CHANGING P_RETURN .
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' "#EC *
EXPORTING
DEFAULTOPTION = 'Y'
TEXTLINE1 = P_TEXT1
TITEL = P_TEXT2
CANCEL_DISPLAY = ''
IMPORTING
ANSWER = P_RETURN .
ENDFORM . "FRM_POPUP_INFO
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_MAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_MAT .
DATA : LT_HEADDATA LIKE TABLE OF BAPIE1MATHEADER WITH HEADER LINE ,
LT_MATERIALDESCRIPTION LIKE TABLE OF BAPIE1MAKT WITH HEADER LINE ,
RETURNMESSAGES LIKE TABLE OF BAPIE1RET2 WITH HEADER LINE .
DATA : E_MESSAGE TYPE GTER_TEXT ,
E_SUCC TYPE CHAR01 .
DATA : RETURN LIKE BAPIRET2 .
LOOP AT GT_ITAB INTO GW_ITAB .
REFRESH : LT_HEADDATA[] ,
LT_MATERIALDESCRIPTION[] ,
RETURNMESSAGES[] .
CLEAR : LT_HEADDATA ,
LT_MATERIALDESCRIPTION ,
RETURNMESSAGES .
LT_HEADDATA - FUNCTION = 'UPD' .
LT_HEADDATA -MATERIAL = GW_ITAB -MATNR .
LT_HEADDATA -IND_SECTOR = 'M' .
LT_HEADDATA -MATL_TYPE = GW_ITAB -MTART .
LT_HEADDATA -BASIC_VIEW = 'X' .
APPEND LT_HEADDATA .
"描述
LT_MATERIALDESCRIPTION - FUNCTION = 'UPD' . .
LT_MATERIALDESCRIPTION -MATERIAL = GW_ITAB -MATNR .
LT_MATERIALDESCRIPTION -LANGU_ISO = 'ZH' .
LT_MATERIALDESCRIPTION -MATL_DESC = GW_ITAB -MAKTXN .
APPEND LT_MATERIALDESCRIPTION .
CALL FUNCTION 'BAPI_MATERIAL_SAVEREPLICA'
EXPORTING
NOAPPLLOG = 'X'
NOCHANGEDOC = ''
TESTRUN = ''
INPFLDCHECK = ''
* FLAG_CAD_CALL = ' '
* NO_ROLLBACK_WORK = ' '
* FLAG_ONLINE = ' '
IMPORTING
RETURN = RETURN
TABLES
HEADDATA = LT_HEADDATA
* CLIENTDATA =
* CLIENTDATAX =
* PLANTDATA =
* PLANTDATAX =
* FORECASTPARAMETERS =
* FORECASTPARAMETERSX =
* PLANNINGDATA =
* PLANNINGDATAX =
* STORAGELOCATIONDATA =
* STORAGELOCATIONDATAX =
* VALUATIONDATA =
* VALUATIONDATAX =
* WAREHOUSENUMBERDATA =
* WAREHOUSENUMBERDATAX =
* SALESDATA =
* SALESDATAX =
* STORAGETYPEDATA =
* STORAGETYPEDATAX =
MATERIALDESCRIPTION = LT_MATERIALDESCRIPTION
* UNITSOFMEASURE =
* UNITSOFMEASUREX =
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
* TAXCLASSIFICATIONS =
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
* FORECASTVALUES =
* UNPLNDCONSUMPTION =
* TOTALCONSUMPTION =
RETURNMESSAGES = RETURNMESSAGES .
"LOOP AT RETURNMESSAGES WHERE TYPE = 'E' OR TYPE = 'A'.
"E_MESSAGE = E_MESSAGE && RETURNMESSAGES-MESSAGE.
"ENDLOOP.
IF RETURN - TYPE = 'E' OR RETURN - TYPE = 'A' .
IF RETURN - NUMBER = '157' AND RETURN - ID = 'MG' .
ELSE .
IF RETURN - TYPE = 'E' OR RETURN - TYPE = 'A' .
E_SUCC = 'E' .
E_MESSAGE = E_MESSAGE && RETURN - MESSAGE .
EXIT .
ENDIF .
ENDIF .
ELSE .
E_SUCC = 'S' .
ENDIF .
ENDLOOP .
IF E_SUCC = 'S' .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X' .
MESSAGE '更新成功!' TYPE 'S' .
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
MESSAGE E_MESSAGE TYPE 'E' .
ENDIF .
ENDFORM .