INCLUDE OOALV
*****************************************************************
* System :
* Module : PM
* Program ID : ZPMR005
* Program : 维修订单打印
* Author : 刘华
* Date : 20211115
* Description : 维修订单打印
*****************************************************************
* Modified Recorder :
* Date C#NO Author Content
* ----------- ------- ------------------ ---------------
* 修改日期 C票或变更文档ID 修改者 修改内容
*****************************************************************
REPORT ZPMR005.
*----------------------------------------------------------------------*
* <1.1-声明 包含程序> INCLUDE PROGRAMS *
*----------------------------------------------------------------------*
***********《所有全局变量、类都写在 TOP INCLUDE 程序中》**************
INCLUDE ZPMR005TOP.
***********《选择屏幕 SEL INCLUDE 程序中》*****************
INCLUDE ZPMR005SEL.
************《PBO PAI 模块》*****************
INCLUDE ZPMR005O01.
INCLUDE ZPMR005I01.
************《所有逻辑代码都写在 F0* INCLUDE 程序中》*****************
INCLUDE ZPMR005F01.
*&---------------------------------------------------------------------*
* INITIALIZATION 初始化
INITIALIZATION.
S_ERDAT-SIGN = 'I'.
S_ERDAT-OPTION = 'EQ'.
S_ERDAT-LOW = SY-DATUM.
S_ERDAT-HIGH = SY-DATUM.
APPEND S_ERDAT TO S_ERDAT.
CLEAR S_ERDAT.
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* "必填校验
* PERFORM frm_field_obligatory.
"逻辑处理
PERFORM FRM_GET_DATA.
"调用屏幕
CALL SCREEN 9000.
*ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& 包含 ZPMR003TOP
*&---------------------------------------------------------------------*
TABLES:AFIH,AUFK,VBRK,VBAP,VBRP,LIPS,LIKP,PA0001.
INCLUDE <ICON>.
TYPE-POOLS: SLIS.
DATA: GV_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER,
GV_ALV TYPE REF TO CL_GUI_ALV_GRID , "ALV网格
GV_ROW_ALV TYPE REF TO CL_GUI_ALV_GRID_BASE,
GT_EXCLUDE TYPE UI_FUNCTIONS, "用于去掉不要的菜单栏
GV_INDEX_COLUMNS TYPE LVC_T_COL, "选择列
GT_FIELDCAT TYPE LVC_T_FCAT, "FCAT
GS_FIELDCAT TYPE LINE OF LVC_T_FCAT, "FCAT
GT_F4 TYPE LVC_T_F4 WITH HEADER LINE, "搜索帮助
GS_LAYOUT TYPE LVC_S_LAYO , "布局结构
GS_VARIANT TYPE DISVARIANT, "字段格式保存
GT_SORT TYPE LVC_T_SORT, "用于排序
GT_INDEX TYPE LVC_T_COL, "选择列
GT_FILT TYPE LVC_T_FILT. "用于过滤
DATA: GT_NU3_ROWS TYPE LVC_T_ROW,
GT_NU3_NO TYPE LVC_T_ROID,
GS_NU3_NO TYPE LVC_S_ROID.
DATA:GV_LINES TYPE I.
DATA:GS_STABLE TYPE LVC_S_STBL. "刷新稳定
DATA:G_FLAG TYPE C.
*&---------------------------------------------------------------------*
* DEFINE VARIABLE 变量
*&---------------------------------------------------------------------*
DATA:GV_OK_CODE LIKE SY-UCOMM.
*&---------------------------------------------------------------------*
* DEFIEN INNER TABLE 内表
*&---------------------------------------------------------------------*
DATA:BEGIN OF GS_DATA,
* CHECK TYPE C,
AUFNR TYPE AUFK-AUFNR , " 订单编码
KTEXT TYPE AUFK-KTEXT , " 订单描述
ERDAT TYPE AUFK-ERDAT , " 创建日期
VAPLZ TYPE AUFK-VAPLZ , " 工作中心
INGPR TYPE AFIH-INGPR , " 计划员组
IWERK TYPE AFIH-IWERK , " 工厂
BEBER TYPE ILOA-BEBER , " 厂区
TPLNR TYPE ILOA-TPLNR , " 功能位置
PLTXT TYPE IFLOTX-PLTXT , " 功能位置描述
EQUNR TYPE AFIH-EQUNR , " 设备编码
EQKTX TYPE EQKT-EQKTX , " 设备描述
ANLNR TYPE ILOA-ANLNR , " 资产编码
TXT04 TYPE TJ30T-TXT04 , " 订单状态
ILOAN TYPE AFIH-ILOAN , "
OBJNR TYPE AUFK-OBJNR , "
RSNUM TYPE AFKO-RSNUM , "
BUKRS TYPE AUFK-BUKRS , "
ERFZEIT TYPE AUFK-ERFZEIT , "
AUART TYPE AUFK-AUART , "
QMNUM TYPE AFIH-QMNUM , "
GEWRK TYPE EQUZ-GEWRK , "
END OF GS_DATA.
DATA:GT_DATA LIKE TABLE OF GS_DATA.
*----------------------------------------------------------------------*
* DEFINE THE MACROS/宏
*----------------------------------------------------------------------*
DEFINE DF_SET_FIELDCAT.
CLEAR GS_FIELDCAT .
GS_FIELDCAT-FIELDNAME = &1."内表的字段
GS_FIELDCAT-OUTPUTLEN = &2."输出长度
GS_FIELDCAT-COLTEXT = &3."列标题
GS_FIELDCAT-NO_ZERO = &4."关键字列
GS_FIELDCAT-CHECKBOX = &5 ."作为复选框
GS_FIELDCAT-REF_TABLE = &6."参照表
GS_FIELDCAT-REF_FIELD = &7."参照字段
GS_FIELDCAT-CONVEXIT = &8."可编辑
GS_FIELDCAT-DD_OUTLEN = &9."可编辑
* GS_FIELDCAT-DECIMALS_O = ."小数位长度
* GS_FIELDCAT-EMPHASIZE = ."列颜色
* GS_FIELDCAT-EDIT_MASK = ."转换例程
* GS_FIELDCAT-DO_SUM = . "汇总
* GS_FIELDCAT-NO_ZERO = . "不输出0
* GS_FIELDCAT-STYLE = . "样式
* GS_FIELDCAT-FIX_COLUMN = ."固定列
APPEND GS_FIELDCAT TO GT_FIELDCAT[] .
END-OF-DEFINITION.
*---------------------------------------------------------------------*
* 定义 类
*---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_TOOLBAR "自定义工具栏
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
HANDLE_USER_COMMAND "自定义按钮
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM,
*--基于单元格的效验
HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM,
*--在数据修改完成之后
HANDLE_DATA_CHANGED_FINISHED FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS ,
*--搜索帮助
HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN ES_ROW_NO.
ENDCLASS.
*&---------------------------------------------------------------------*
*& 包含 ZPMR003SEL
*&---------------------------------------------------------------------*
* DEFINE SCREEN 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SCST WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_WERK FOR AFIH-IWERK OBLIGATORY MEMORY ID IWK,
S_AUFNR FOR AUFK-AUFNR MEMORY ID ANR,
S_ERDAT FOR AUFK-ERDAT OBLIGATORY,
S_INGPR FOR AFIH-INGPR .
SELECTION-SCREEN END OF BLOCK SCST.
*&---------------------------------------------------------------------*
*& 包含 ZPMR003O01
*&---------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'S001'.
SET TITLEBAR 'T001'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE DISPLAY_ALV OUTPUT.
PERFORM FRM_DISPLAY_ALV.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZPMR003I01
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
gv_ok_code = sy-ucomm.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
DATA: lv_index TYPE i.
CASE gv_ok_code.
WHEN '&F03' OR '&F15' OR '&F12'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
CLEAR:gv_ok_code.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZPMR003F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT AUFK~AUFNR,
AUFK~KTEXT,
AUFK~ERDAT,
AUFK~VAPLZ,
AUFK~OBJNR,
AUFK~ERFZEIT,
AUFK~BUKRS,
AFIH~INGPR,
AFIH~IWERK,
AFIH~EQUNR,
AFIH~ILOAN,
AFIH~QMNUM,
* AFIH~GEWRK,
AUFK~AUART,
EQKT~EQKTX
INTO CORRESPONDING FIELDS OF TABLE @GT_DATA
FROM AUFK
INNER JOIN AFIH ON AUFK~AUFNR = AFIH~AUFNR
LEFT JOIN EQKT ON EQKT~EQUNR = AFIH~EQUNR
WHERE AFIH~IWERK IN @S_WERK
AND AUFK~AUFNR IN @S_AUFNR
AND AUFK~ERDAT IN @S_ERDAT
AND AFIH~INGPR IN @S_INGPR
AND AUFK~AUART IN ('GD01','GD02','GD03','GD04' ).
SELECT GT_DATA~EQUNR,
GT_DATA~AUFNR,
ILOA~ILOAN,
ILOA~BEBER
FROM ILOA
INNER JOIN EQUZ ON ILOA~ILOAN = EQUZ~ILOAN
INNER JOIN @GT_DATA AS GT_DATA ON GT_DATA~EQUNR = EQUZ~EQUNR AND EQUZ~DATBI = '99991231'
INTO TABLE @DATA(LT_ILOA).
SELECT GT_DATA~EQUNR,
GT_DATA~AUFNR,
ILOA~ILOAN,
ILOA~TPLNR,
IFLOTX~PLTXT,
ILOA~ANLNR
FROM ILOA
INNER JOIN @GT_DATA AS GT_DATA ON GT_DATA~ILOAN = ILOA~ILOAN
LEFT JOIN IFLOTX ON ILOA~TPLNR = IFLOTX~TPLNR
INTO TABLE @DATA(LT_ILOA1).
SELECT GT_DATA~AUFNR,
GT_DATA~OBJNR,
TJ30T~STSMA,
TJ30T~TXT04
FROM JEST
INNER JOIN @GT_DATA AS GT_DATA ON GT_DATA~OBJNR = JEST~OBJNR
INNER JOIN JSTO ON JSTO~OBJNR = GT_DATA~OBJNR
INNER JOIN TJ30T ON TJ30T~ESTAT = JEST~STAT AND TJ30T~STSMA = JSTO~STSMA
WHERE JEST~INACT IS INITIAL
INTO TABLE @DATA(LT_TJ30T).
IF GT_DATA IS NOT INITIAL.
SELECT RSNUM,
AUFNR
INTO TABLE @DATA(LT_AFKO)
FROM AFKO
FOR ALL ENTRIES IN @GT_DATA
WHERE AUFNR = @GT_DATA-AUFNR.
ENDIF.
SORT LT_ILOA BY AUFNR EQUNR.
SORT LT_ILOA BY AUFNR ILOAN.
SORT LT_TJ30T BY AUFNR OBJNR.
SORT LT_AFKO BY AUFNR.
LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<FS_DATA>).
AUTHORITY-CHECK OBJECT 'ZPM001'
ID 'ZIWERK' FIELD <FS_DATA>-IWERK
ID 'ZINGRP' FIELD <FS_DATA>-INGPR.
IF SY-SUBRC <> 0.
DELETE GT_DATA INDEX LV_INDEX.
CONTINUE.
* Implement a suitable exception handling here
ENDIF.
READ TABLE LT_ILOA INTO DATA(LS_ILOA) WITH KEY AUFNR = <FS_DATA>-AUFNR EQUNR = <FS_DATA>-EQUNR BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_DATA>-BEBER = LS_ILOA-BEBER.
ENDIF.
READ TABLE LT_ILOA1 INTO DATA(LS_ILOA1) WITH KEY AUFNR = <FS_DATA>-AUFNR ILOAN = <FS_DATA>-ILOAN BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_DATA>-TPLNR = LS_ILOA1-TPLNR.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'
EXPORTING
INPUT = <FS_DATA>-TPLNR
IMPORTING
OUTPUT = <FS_DATA>-TPLNR.
<FS_DATA>-ANLNR = LS_ILOA1-ANLNR.
<FS_DATA>-PLTXT = LS_ILOA1-PLTXT.
ENDIF.
READ TABLE LT_TJ30T INTO DATA(LS_TJ30T) WITH KEY AUFNR = <FS_DATA>-AUFNR OBJNR = <FS_DATA>-OBJNR BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_DATA>-TXT04 = LS_TJ30T-TXT04.
ENDIF.
READ TABLE LT_AFKO INTO DATA(LS_AFKO) WITH KEY AUFNR = <FS_DATA>-AUFNR BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_DATA>-RSNUM = LS_AFKO-RSNUM.
ENDIF.
SELECT SINGLE GEWRK INTO @DATA(LV_GEWRK) FROM EQUZ WHERE EQUNR = @<FS_DATA>-EQUNR.
IF SY-SUBRC = 0.
<FS_DATA>-GEWRK = LV_GEWRK.
ENDIF.
ENDLOOP.
SORT GT_DATA DESCENDING BY ERDAT ERFZEIT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
IF GV_ALV IS INITIAL . "ALV对象如果为空,则生成对象,把ALV放入容器中
CREATE OBJECT GV_CONTAINER
EXPORTING
REPID = SY-REPID
DYNNR = '9000'
EXTENSION = 2050
SIDE = CL_GUI_DOCKING_CONTAINER=>PROPERTY_FLOATING.
CREATE OBJECT GV_ALV
EXPORTING
I_PARENT = GV_CONTAINER.
PERFORM FRM_BUILD_FIELDCAT.
PERFORM FRM_EXCLUDE_TB_FUNCTIONS CHANGING GT_EXCLUDE. "去掉不用的菜单按钮
PERFORM FRM_PREPARE_LAYOUT CHANGING GS_LAYOUT . "获取样式
PERFORM FRM_EVENTLOAD. "读取事件(总)
* PERFORM FRM_ADJUST_EDITTABLES . "调整可更改的单元格
* PERFORM FRM_INIT_STYLE_TAB .
*-----显示ALV-------------------------------------------
CLEAR GS_VARIANT.
GS_VARIANT = SY-REPID.
CALL METHOD GV_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
IS_VARIANT = GS_VARIANT
I_SAVE = 'A'
CHANGING
IT_OUTTAB = GT_DATA[]
IT_FIELDCATALOG = GT_FIELDCAT
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD GV_ALV->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ELSE .
*----------------------------刷新ALV----------------------
PERFORM FRM_REFURBISH_ALV. "刷新ALV
ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_REFURBISH_ALV
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM FRM_REFURBISH_ALV.
* PERFORM FRM_ADJUST_EDITTABLES . " 调整可更改的单元格
*----------------------------刷新ALV----------------------
GS_STABLE-ROW = 'X'.
GS_STABLE-COL = 'X'.
CALL METHOD GV_ALV->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = GS_STABLE
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM FRM_BUILD_FIELDCAT .
DATA:LV_FIELDNAME TYPE CHAR20,
LV_FIELDVALUE TYPE CHAR20,
LV_COLINDEX TYPE CHAR2.
REFRESH: GT_FIELDCAT .
DF_SET_FIELDCAT 'AUART' '' '订单类型' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'AUFNR' '' '订单编码' '' '' '' '' 'ALPHA' ''.
DF_SET_FIELDCAT 'KTEXT' '' '订单描述' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'ERDAT' '' '创建日期' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'ERFZEIT' '' '创建时间' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'VAPLZ' '' '工作中心' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'INGPR' '' '计划员组' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'IWERK' '' '工厂' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'BEBER' '' '厂区' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'TPLNR' '' '功能位置' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'PLTXT' '' '功能位置描述' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'EQUNR' '' '设备编码' '' '' '' '' 'ALPHA' ''.
DF_SET_FIELDCAT 'EQKTX' '' '设备描述' '' '' '' '' '' ''.
DF_SET_FIELDCAT 'ANLNR' '' '资产编码' '' '' '' '' 'ALPHA' ''.
DF_SET_FIELDCAT 'TXT04' '' '订单状态' '' '' '' '' '' ''.
ENDFORM. "BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GT_EXCLUDE
*&---------------------------------------------------------------------*
FORM FRM_EXCLUDE_TB_FUNCTIONS CHANGING P_GT_EXCLUDE TYPE UI_FUNCTIONS.
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT .
APPEND LS_EXCLUDE TO GT_EXCLUDE.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM PREPARE_LAYOUT_9001
*&---------------------------------------------------------------------*
* 获取显示状态
*----------------------------------------------------------------------*
* -->P_GDS_LAYOUT TEXT
*----------------------------------------------------------------------*
FORM FRM_PREPARE_LAYOUT CHANGING P_GDS_LAYOUT TYPE LVC_S_LAYO.
P_GDS_LAYOUT-CWIDTH_OPT = 'X'. "最优化宽度
* P_GDS_LAYOUT-SEL_MODE = 'D'. "选择方式
P_GDS_LAYOUT-ZEBRA = 'X'. "间隔颜色
P_GDS_LAYOUT-SEL_MODE = 'A'. "
* P_GDS_LAYOUT-NO_ROWMARK = 'X'. "间隔颜色
* P_GDS_LAYOUT-BOX_FNAME = 'CHECK'.
* P_GDS_LAYOUT-STYLEFNAME = 'CELLTAB'. "自动可编辑
ENDFORM. " PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* CLASS实例化
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*--HANDLE DATA CHANGED FINISHED
METHOD HANDLE_DATA_CHANGED_FINISHED.
* PERFORM FRM_DATA_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS .
ENDMETHOD. "HANDLE_DATA_CHANGED_FINISHED
METHOD HANDLE_DATA_CHANGED. "单元格事件触发相关
* PERFORM FRM_HANDLE_DATA_CHANGED USING ER_DATA_CHANGED.
ENDMETHOD. "HANDLE_DATA_CHANGED
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
MOVE 'PRINT' TO LS_TOOLBAR-FUNCTION.
MOVE 1 TO LS_TOOLBAR-BUTN_TYPE.
MOVE ICON_SYSTEM_PRINT TO LS_TOOLBAR-ICON.
MOVE '打印' TO LS_TOOLBAR-QUICKINFO.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
* DATA: LS_TOOLBAR TYPE STB_BUTTON.
MOVE 'REFRESH' TO LS_TOOLBAR-FUNCTION.
MOVE 1 TO LS_TOOLBAR-BUTN_TYPE.
MOVE ICON_REFRESH TO LS_TOOLBAR-ICON.
MOVE '刷新' TO LS_TOOLBAR-QUICKINFO.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
ENDMETHOD.
METHOD HANDLE_USER_COMMAND.
PERFORM FRM_HANDLE_USER_COMMAND USING E_UCOMM.
ENDMETHOD.
METHOD HANDLE_DOUBLE_CLICK.
PERFORM HANDLE_DOUBLE_CLICK USING E_ROW E_COLUMN ES_ROW_NO.
ENDMETHOD.
*--搜索帮助
METHOD HANDLE_ONF4.
* PERFORM FRM_HANDLE_ONF4 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
ENDMETHOD .
ENDCLASS. "LCL_EVENT_HANDLER IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form FRM_EVENTLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_EVENTLOAD .
* DATA LV_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER . "事件响应
* CREATE OBJECT LV_EVENT_HANDLER .
* IF GV_ALV IS NOT INITIAL.
* CALL METHOD GV_ALV->REGISTER_EDIT_EVENT
* EXPORTING
* I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
** SET HANDLER LV_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR GV_ALV.
* SET HANDLER LV_EVENT_HANDLER->HANDLE_DATA_CHANGED_FINISHED FOR GV_ALV.
* SET HANDLER LV_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GV_ALV.
** SET HANDLER LV_EVENT_HANDLER->HANDLE_BEFORE_USER_COMMAND FOR GV_ALV.
** SET HANDLER LV_EVENT_HANDLER->HANDLE_ONF4 FOR GV_ALV.
*
* DATA LV_EVENT_HANDLER1 TYPE REF TO LCL_EVENT_HANDLER . "事件响应
* CREATE OBJECT LV_EVENT_HANDLER1 .
*
* ENDIF.
DATA LV_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER . "事件响应
CREATE OBJECT LV_EVENT_HANDLER .
* SET HANDLER GR_EVENT_HANDLER->HANDLE_TOOLBAR FOR GV_ALV .
IF GV_ALV IS NOT INITIAL.
CALL METHOD GV_ALV->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
SET HANDLER LV_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR GV_ALV.
SET HANDLER LV_EVENT_HANDLER->HANDLE_DATA_CHANGED_FINISHED FOR GV_ALV.
SET HANDLER LV_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GV_ALV.
* SET HANDLER LV_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GV_ALV.
* SET HANDLER lv_event_handler->handle_before_user_command FOR gv_alv.
* SET HANDLER lv_event_handler->handle_onf4 FOR gv_alv.
SET HANDLER LV_EVENT_HANDLER->HANDLE_TOOLBAR FOR GV_ALV. "注册工具栏
* SET HANDLER EVENT_RECEIVER->HANDLE_MENU_BUTTON FOR GV_ALV. "注册工具栏菜单
SET HANDLER LV_EVENT_HANDLER->HANDLE_USER_COMMAND FOR GV_ALV. "注册用户自定义命令
SET HANDLER LV_EVENT_HANDLER->HANDLE_ONF4 FOR GV_ALV.
DATA LV_EVENT_HANDLER1 TYPE REF TO LCL_EVENT_HANDLER . "事件响应
CREATE OBJECT LV_EVENT_HANDLER1 .
* DATA: LT_F4 TYPE LVC_T_F4 WITH HEADER LINE.
*
* CLEAR LT_F4.
* LT_F4-FIELDNAME = 'PLNUM'.
* LT_F4-REGISTER = 'X'.
* LT_F4-CHNGEAFTER = 'X'.
** LT_F4-GETBEFORE = 'X'.
** LT_F4-INTERNAL = 'X'.
* APPEND LT_F4.
*
* CALL METHOD GV_ALV->REGISTER_F4_FOR_FIELDS
* EXPORTING
* IT_F4 = LT_F4[].
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_UCOMM
*&---------------------------------------------------------------------*
FORM FRM_HANDLE_USER_COMMAND USING P_E_UCOMM.
CASE P_E_UCOMM.
WHEN 'PRINT'.
PERFORM FRM_PRINT.
WHEN 'REFRESH'.
PERFORM FRM_GET_DATA.
WHEN OTHERS.
ENDCASE.
PERFORM FRM_REFURBISH_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_PRINT .
DATA: SSF_NAME TYPE TDSFNAME VALUE 'ZPMSMF_005',
L_FM_NAME TYPE RS38L_FNAM,
LS_CONTROL_PARAM TYPE SSFCTRLOP,
LS_COMPOSER_PARAM TYPE SSFCOMPOP,
LS_OUTPUT_OPTIONS TYPE SSFCRESOP,
I_JOB_OUTPUT_INFO TYPE SSFCRESCL,
LS_EXCUTE TYPE I.
DATA:L_LINES TYPE I,
L_MOD TYPE I,
L_DEV TYPE I.
DATA:L_INDEX TYPE I.
DATA:LS_PRINT TYPE C.
DATA:LT_HEAD TYPE TABLE OF ZSPM001,
LS_HEAD TYPE ZSPM001.
DATA:LT_ITEM1 TYPE TABLE OF ZSPM_SMF_005ITEM1,
LS_ITEM1 TYPE ZSPM_SMF_005ITEM1.
DATA:LT_ITEM2 TYPE TABLE OF ZSPM_SMF_005ITEM2,
LS_ITEM2 TYPE ZSPM_SMF_005ITEM2.
DATA:LT_ITEM3 TYPE TABLE OF ZSPM_SMF_005ITEM3,
LS_ITEM3 TYPE ZSPM_SMF_005ITEM3.
* DATA:LT_ITEM LIKE TABLE OF GS_DATA,
* LS_ITEM LIKE GS_DATA.
DATA:LV_P TYPE P DECIMALS 2.
DATA:LV_S TYPE P DECIMALS 2.
DATA:LV_C TYPE CHAR16.
* DATA:LDT_ITEM TYPE TABLE OF TY_DATA WITH HEADER LINE.
LS_CONTROL_PARAM-LANGU = '1'.
LS_CONTROL_PARAM-NO_OPEN = 'X'.
LS_CONTROL_PARAM-NO_CLOSE = 'X'.
CLEAR:LT_HEAD,LS_HEAD,LT_ITEM1,LS_ITEM1,LT_ITEM2,LS_ITEM2,LT_ITEM3,LS_ITEM3.
CALL METHOD GV_ALV->CHECK_CHANGED_DATA.
CALL METHOD GV_ALV->GET_SELECTED_ROWS "获取行号
IMPORTING
ET_INDEX_ROWS = GT_NU3_ROWS
ET_ROW_NO = GT_NU3_NO.
IF GT_NU3_NO IS INITIAL.
MESSAGE E001(00) WITH '请选择一条数据。'.
ENDIF.
LOOP AT GT_NU3_NO INTO GS_NU3_NO.
READ TABLE GT_DATA INTO GS_DATA INDEX GS_NU3_NO-ROW_ID.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING GS_DATA TO LS_HEAD.
LS_HEAD-GEWRK = GS_DATA-VAPLZ.
IF GS_DATA-BUKRS = '2010'.
LS_HEAD-BUKRS = '泰州中来光电科技有限公司'.
ELSEIF GS_DATA-BUKRS = '3010'.
LS_HEAD-BUKRS = '泰州中来光电科技有限公司姜堰分公司'.
ENDIF.
APPEND LS_HEAD TO LT_HEAD.
CLEAR:LS_HEAD.
ENDIF.
ENDLOOP.
SORT LT_HEAD BY AUFNR.
DELETE ADJACENT DUPLICATES FROM LT_HEAD COMPARING AUFNR.
IF LT_HEAD IS NOT INITIAL.
SELECT AUSVN,
AUZTV,
AUSBS,
AUZTB,
MSAUS,
AUSZT,
MAUEH,
QMNUM
INTO TABLE @DATA(LT_QMIH)
FROM QMIH
FOR ALL ENTRIES IN @LT_HEAD
WHERE QMNUM = @LT_HEAD-QMNUM.
ENDIF.
"维修备件
SELECT RESB~RSNUM,
RESB~RSPOS,
RESB~MATNR,
RESB~BDMNG,
RESB~ENMNG,
RESB~MEINS,
RESB~AUFNR,
MAKT~MAKTX
FROM RESB
INNER JOIN @LT_HEAD AS LT_HEAD ON LT_HEAD~RSNUM = RESB~RSNUM AND LT_HEAD~AUFNR = RESB~AUFNR
LEFT JOIN MAKT ON MAKT~MATNR = RESB~MATNR
INTO TABLE @DATA(LT_RESB).
"维修工序
SELECT AFVC~VORNR,
AFVC~STEUS,
AFVC~LTXA1,
LT_HEAD~AUFNR
FROM AFVC
INNER JOIN AFKO ON AFKO~AUFPL = AFVC~AUFPL
INNER JOIN @LT_HEAD AS LT_HEAD ON LT_HEAD~AUFNR = AFKO~AUFNR
INTO TABLE @DATA(LT_AFVC).
SORT LT_AFVC BY VORNR ASCENDING.
"委外服务
SELECT LT_HEAD~AUFNR,
EKPO~EBELN,
EKPO~EBELP,
EKPO~TXZ01,
EKPO~MENGE,
EKPO~MEINS
FROM EKPO
INNER JOIN EKKN ON EKPO~EBELN = EKKN~EBELN AND EKPO~EBELP = EKKN~EBELP
INNER JOIN @LT_HEAD AS LT_HEAD ON LT_HEAD~AUFNR = EKKN~AUFNR
INTO TABLE @DATA(LT_EKPO).
SORT LT_QMIH BY QMNUM.
CHECK LT_HEAD IS NOT INITIAL.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
USER_SETTINGS = 'X'
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
IMPORTING
JOB_OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE '用户取消打印' TYPE 'S'.
ELSE.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = SSF_NAME
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = L_FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE 'CALL SSF_FUNCTION_MODULE_NAME ERROR' TYPE 'E'.
ELSE.
LOOP AT LT_HEAD INTO LS_HEAD.
READ TABLE LT_QMIH INTO DATA(LS_QMIH) WITH KEY QMNUM = LS_HEAD-QMNUM BINARY SEARCH.
IF SY-SUBRC = 0.
LS_HEAD-AUSVN = LS_QMIH-AUSVN.
LS_HEAD-AUZTV = LS_QMIH-AUZTV.
LS_HEAD-AUSBS = LS_QMIH-AUSBS.
LS_HEAD-AUZTB = LS_QMIH-AUZTB.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
I_NUMBER_OF_DIGITS = 2
I_FLTP_VALUE = LS_QMIH-AUSZT
IMPORTING
E_CHAR_FIELD = LV_C.
CONDENSE LV_C NO-GAPS.
LV_S = LV_C.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = LV_S
NO_TYPE_CHECK = 'X'
* ROUND_SIGN = ' '
UNIT_IN = 'S'
UNIT_OUT = 'H'
IMPORTING
* ADD_CONST =
* DECIMALS =
* DENOMINATOR =
* NUMERATOR =
OUTPUT = LV_P
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10.
IF SY-SUBRC = 0.
* Implement suitable error handling here
LS_HEAD-AUSZT = LV_P.
CONDENSE LS_HEAD-AUSZT.
ENDIF.
CLEAR:LV_P,
LV_S,
LV_C.
LS_HEAD-MAUEH = LS_QMIH-MAUEH.
ENDIF.
SELECT SINGLE TXT INTO LS_HEAD-KTEXT2 FROM T003P WHERE AUART = LS_HEAD-AUART AND SPRAS = 1.
LOOP AT LT_AFVC INTO DATA(LS_AFVC) WHERE AUFNR = LS_HEAD-AUFNR.
MOVE-CORRESPONDING LS_AFVC TO LS_ITEM1.
APPEND LS_ITEM1 TO LT_ITEM1.
CLEAR LS_ITEM1.
ENDLOOP.
DATA(LV_MOD) = LINES( LT_ITEM1 ).
IF LT_ITEM1 IS INITIAL.
APPEND INITIAL LINE TO LT_ITEM1.
ENDIF.
LOOP AT LT_RESB INTO DATA(LS_RESB) WHERE AUFNR = LS_HEAD-AUFNR AND RSNUM = LS_HEAD-RSNUM.
MOVE-CORRESPONDING LS_RESB TO LS_ITEM2.
APPEND LS_ITEM2 TO LT_ITEM2.
CLEAR LS_ITEM2.
ENDLOOP.
IF LT_ITEM2 IS INITIAL.
APPEND INITIAL LINE TO LT_ITEM2.
ENDIF.
LOOP AT LT_EKPO INTO DATA(LS_EKPO) WHERE AUFNR = LS_HEAD-AUFNR.
MOVE-CORRESPONDING LS_EKPO TO LS_ITEM3.
APPEND LS_ITEM3 TO LT_ITEM3.
CLEAR LS_ITEM3.
ENDLOOP.
IF LT_ITEM3 IS INITIAL.
APPEND INITIAL LINE TO LT_ITEM3.
ENDIF.
CALL FUNCTION L_FM_NAME
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
* USER_SETTINGS = 'Xls_head'
LS_HEAD = LS_HEAD
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
LT_ITEM1 = LT_ITEM1
LT_ITEM2 = LT_ITEM2
LT_ITEM3 = LT_ITEM3
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR:LT_ITEM1,LS_ITEM1,LT_ITEM2,LS_ITEM2,LT_ITEM3,LS_ITEM3.
ENDLOOP.
ENDIF.
ENDIF.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = I_JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC = 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form handle_double_click
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_ROW
*& --> E_COLUMN
*&---------------------------------------------------------------------*
FORM HANDLE_DOUBLE_CLICK USING P_E_ROWTYPE TYPE LVC_S_ROW
PS_COLUMN TYPE LVC_S_COL
PS_ROW_NO TYPE LVC_S_ROID.
DATA LS_STYLEROW TYPE LVC_S_STYL.
IF PS_COLUMN-FIELDNAME = 'AUFNR' OR PS_COLUMN-FIELDNAME = 'EQUNR'.
READ TABLE GT_DATA INTO GS_DATA INDEX PS_ROW_NO-ROW_ID.
IF SY-SUBRC = 0 .
IF GS_DATA-AUFNR IS NOT INITIAL AND PS_COLUMN-FIELDNAME = 'AUFNR'.
SET PARAMETER ID 'ANR' FIELD GS_DATA-AUFNR.
* SET PARAMETER ID 'GJR' FIELD GDT_DATA-PSTDATE+0(4).
CALL TRANSACTION 'IW33' AND SKIP FIRST SCREEN . "#EC CI_CALLTA
ELSEIF GS_DATA-EQUNR IS NOT INITIAL AND PS_COLUMN-FIELDNAME = 'EQUNR'.
SET PARAMETER ID 'EQN' FIELD GS_DATA-EQUNR.
* SET PARAMETER ID 'GJR' FIELD GDT_DATA-PSTDATE+0(4).
CALL TRANSACTION 'IE03' AND SKIP FIRST SCREEN . "#EC CI_CALLTA
ENDIF.
ENDIF.
ENDIF.
ENDFORM.