*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-06-26
*& Program Type : Report
*& Description : 工单效率明细报表
*&---------------------------------------------------------------------*
REPORT ZPPR003 DEFINING DATABASE IOC.
*&---------------------------------------------------------------------*
*& 包含 YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:AFPO,MARA,EKET,AFKO.
TYPE-POOLS:SLIS,T001W.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
TYPES: BEGIN OF GTS_DATA,
BUDAT TYPE AFRU-BUDAT, "日期
GRUND TYPE AFRU-GRUND, "线别/机台
KDAUF TYPE AFPO-KDAUF, "订单编号
KDPOS TYPE AFPO-KDPOS, "订单项目
PWERK TYPE AFPO-PWERK, "工厂
AUFNR TYPE AFPO-AUFNR, "工单号
PRDHA TYPE MARA-PRDHA, "系列
MATNR TYPE AFPO-MATNR, "产品型号
PSMNG TYPE AFPO-PSMNG, "工单数量
MEINS TYPE AFPO-MEINS, "单位
AUFPL TYPE AFKO-AUFPL, "工艺路线
VORNR TYPE AFVC-VORNR, "最后一道工序
GMNGA TYPE AFRU-GMNGA, "报工数
ISM03 TYPE AFRU-ISM03, "实际人工工时
VGW03 TYPE AFVV-VGW03, "标准人工工时
ISM02 TYPE AFRU-ISM02, "实际机器工时
VGW02 TYPE AFVV-VGW02, "标准机器工时
ZRGXL TYPE AFRU-ISM03, "人工效率
ZJQXL TYPE AFRU-ISM03, "机器效率
RGSCY TYPE AFRU-ISM03, "人工工时差异
FLAG TYPE C, "标记
CLR TYPE CHAR4, "可以控制行颜色
END OF GTS_DATA.
DATA: BEGIN OF STATUS_TMP OCCURS 0,
STAT LIKE JEST-STAT,
EXCL LIKE RC27X-FLG_SEL,
END OF STATUS_TMP.
DATA: STATUS_HDR_TAB LIKE STATUS_TMP OCCURS 0 WITH HEADER LINE,
STATUS_OPR_TAB LIKE STATUS_TMP OCCURS 0 WITH HEADER LINE,
STATUS_CMP_TAB LIKE STATUS_TMP OCCURS 0 WITH HEADER LINE.
TYPES:
BEGIN OF TYP_S_AUFNR,
AUFNR TYPE AUFNR,
END OF TYP_S_AUFNR,
TYP_TS_AUFNR TYPE SORTED TABLE OF TYP_S_AUFNR
WITH NON-UNIQUE KEY AUFNR,
BEGIN OF TYP_S_OBJNR,
AUFNR TYPE AUFNR,
AUFPL TYPE CO_AUFPL,
APLFL TYPE PLNFOLGE,
PLNFL TYPE PLNFOLGE,
OBJNR TYPE J_OBJNR,
END OF TYP_S_OBJNR,
TYP_TS_AUFNR_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
WITH NON-UNIQUE KEY AUFNR OBJNR,
TYP_TS_AUFPL_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
WITH NON-UNIQUE KEY AUFPL OBJNR,
TYP_TS_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR,
BEGIN OF TYP_S_VBELN,
VBELN TYPE VBELN,
END OF TYP_S_VBELN,
TYP_TS_VBELN TYPE SORTED TABLE OF TYP_S_VBELN
WITH NON-UNIQUE KEY VBELN.
DATA: YX VALUE 'X'.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_HEAD TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_ITEM TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_AFRU TYPE TABLE OF AFRU WITH HEADER LINE.
DATA: GT_MSEG TYPE TABLE OF MSEG WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: P_PWERK TYPE AFPO-PWERK MODIF ID C1 OBLIGATORY. "工厂
SELECT-OPTIONS: S_AUFNR FOR AFPO-AUFNR MODIF ID C1 . "工单号
SELECT-OPTIONS: S_MATNR FOR AFPO-MATNR MODIF ID C1 . "产品号码
SELECT-OPTIONS: S_PRDHA FOR MARA-PRDHA MODIF ID C1 . "系列
SELECT-OPTIONS: S_DISPO FOR AFKO-DISPO MODIF ID C1 . "MRP控制员
SELECT-OPTIONS: S_GLTRP FOR AFKO-GLTRP MODIF ID C1 . "工单开始日期
SELECT-OPTIONS: S_GSTRP FOR AFKO-GSTRP MODIF ID C1 . "结束日期
SELECT-OPTIONS: S_FEVOR FOR AFKO-FEVOR MODIF ID C1 . "生产管理员
SELECT-OPTIONS: S_LTRMI FOR AFPO-LTRMI MODIF ID C1 . "工单实际完成日期
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN:
COMMENT 1(20) TEXT-SYS FOR FIELD P_SYST1 MODIF ID C1,
POSITION 33.
PARAMETERS:
P_SYST1 LIKE TJ02T-TXT04 MODIF ID C1,
P_SYSH1 LIKE JEST-STAT NO-DISPLAY.
SELECTION-SCREEN
POSITION 46.
PARAMETERS:
P_EXCL1 LIKE RCOSA-EXCL1 MODIF ID C1.
SELECTION-SCREEN:
COMMENT 40(5) TEXT-EXC FOR FIELD P_EXCL1 MODIF ID C1,
COMMENT 52(3) TEXT-AND FOR FIELD P_SYST2 MODIF ID C1,
POSITION 58.
PARAMETERS:
P_SYST2 LIKE TJ02T-TXT04 MODIF ID C1,
P_SYSH2 LIKE JEST-STAT NO-DISPLAY.
SELECTION-SCREEN
POSITION 71.
PARAMETERS:
P_EXCL2 LIKE RCOSA-EXCL1 MODIF ID C1.
SELECTION-SCREEN:
COMMENT 65(5) TEXT-EXC FOR FIELD P_EXCL2 MODIF ID C1.
SELECTION-SCREEN END OF LINE.
PARAMETERS:
P_SELID LIKE TJ48T-SELID NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
PARAMETERS: P_1 RADIOBUTTON GROUP GP1,
P_2 RADIOBUTTON GROUP GP1.
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
DATA:LTS_OBJNR TYPE TYP_TS_AUFNR_OBJNR.
* APPEND STATUS TO IMPORTED TABLE FOR HEADER SELECTION
PERFORM FILL_STATUS_TABLE
TABLES STATUS_HDR_TAB
USING P_SYST1
P_SYSH1
P_EXCL1
P_SYST2
P_SYSH2
P_EXCL2
.
CLEAR LTS_OBJNR[] .
SELECT AUFNR OBJNR FROM AUFK
INTO CORRESPONDING FIELDS OF TABLE LTS_OBJNR[]
WHERE WERKS = P_PWERK
AND AUFNR IN S_AUFNR
.
IF STATUS_HDR_TAB[] IS NOT INITIAL.
PERFORM REDUCE_AUFNR_OBJNR_BY_STATUS
TABLES STATUS_HDR_TAB
USING P_SELID
CHANGING LTS_OBJNR[].
ENDIF.
IF LTS_OBJNR[] IS NOT INITIAL.
CLEAR GT_DATA_ITEM[].
SELECT
AFPO~KDAUF
AFPO~KDPOS
AFPO~PWERK
AFPO~AUFNR
AFPO~MATNR
AFPO~PSMNG
AFPO~MEINS
AFKO~AUFPL
AUFK~AUART
MARA~PRDHA
AFRU~BUDAT
AFRU~GRUND
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_ITEM[]
FROM AFPO
INNER JOIN AFKO ON AFPO~AUFNR = AFKO~AUFNR
INNER JOIN MARA ON AFPO~MATNR = MARA~MATNR
INNER JOIN AUFK ON AFPO~AUFNR = AUFK~AUFNR
INNER JOIN AFRU ON AFRU~AUFNR = AFPO~AUFNR
FOR ALL ENTRIES IN LTS_OBJNR[]
WHERE AFPO~AUFNR = LTS_OBJNR-AUFNR
AND AFPO~PWERK = P_PWERK
AND AFPO~MATNR IN S_MATNR
AND AFPO~LTRMI IN S_LTRMI
AND AFKO~DISPO IN S_DISPO
AND AFKO~GLTRP IN S_GLTRP
AND AFKO~GSTRP IN S_GSTRP
AND AFKO~FEVOR IN S_FEVOR
AND MARA~PRDHA IN S_PRDHA
.
LOOP AT GT_DATA_ITEM.
*报工数
SELECT MAX( AFVC~VORNR ) INTO GT_DATA_ITEM-VORNR FROM AFVC
WHERE AFVC~AUFPL = GT_DATA_ITEM-AUFPL
.
SELECT SINGLE
AFRU~VORNR,
AFRU~AUFNR,
SUM( AFRU~GMNGA ) AS GMNGA
INTO @DATA(GS_AFRU)
FROM AFRU
WHERE AFRU~VORNR = @GT_DATA_ITEM-VORNR
AND AFRU~AUFNR = @GT_DATA_ITEM-AUFNR
GROUP BY
AFRU~AUFNR,
AFRU~VORNR
.
GT_DATA_ITEM-GMNGA = GS_AFRU-GMNGA .
CLEAR GS_AFRU .
*实际人工工时 & 实际机器工时
SELECT SINGLE
AFRU~AUFNR,
SUM( AFRU~ISM03 ) AS ISM03,
SUM( AFRU~ISM02 ) AS ISM02
INTO @DATA(GS_AFRU1)
FROM AFRU
WHERE AFRU~AUFNR = @GT_DATA_ITEM-AUFNR
GROUP BY
AFRU~AUFNR
.
GT_DATA_ITEM-ISM03 = GS_AFRU1-ISM03 .
GT_DATA_ITEM-ISM02 = GS_AFRU1-ISM02 .
CLEAR GS_AFRU1 .
*标准人工工时 & 标准机器工时
SELECT SINGLE
AFVV~AUFPL,
SUM( AFVV~VGW03 ) AS VGW03,
SUM( AFVV~VGW02 ) AS VGW02
INTO @DATA(GS_AFVV)
FROM AFVV
WHERE AFVV~AUFPL = @GT_DATA_ITEM-AUFPL
GROUP BY
AFVV~AUFPL
.
GT_DATA_ITEM-VGW03 = GS_AFVV-VGW03 .
GT_DATA_ITEM-VGW02 = GS_AFVV-VGW02 .
CLEAR GS_AFVV .
*人工效率
IF GT_DATA_ITEM-ISM03 <> 0.
GT_DATA_ITEM-ZRGXL = GT_DATA_ITEM-VGW03 / GT_DATA_ITEM-ISM03 .
ENDIF.
*机器效率
IF GT_DATA_ITEM-ISM02 <> 0.
GT_DATA_ITEM-ZJQXL = GT_DATA_ITEM-VGW02 / GT_DATA_ITEM-ISM02 .
ENDIF.
*核算效率-线体绩效
*人工工时差异
GT_DATA_ITEM-RGSCY = GT_DATA_ITEM-ISM03 - GT_DATA_ITEM-VGW03 .
MODIFY GT_DATA_ITEM .
CLEAR GT_DATA_ITEM .
ENDLOOP.
IF P_1 IS NOT INITIAL.
CLEAR GT_DATA[] .
APPEND LINES OF GT_DATA_ITEM[] TO GT_DATA[] .
ELSE .
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
FORM FILL_STATUS_TABLE TABLES STATUS_TAB STRUCTURE STATUS_HDR_TAB
USING SYST1 LIKE TJ02T-TXT04
SYSH1 LIKE JEST-STAT
EXCL1 LIKE RCOSA-EXCL1
SYST2 LIKE TJ02T-TXT04
SYSH2 LIKE JEST-STAT
EXCL2 LIKE RCOSA-EXCL1.
DATA STATUS_TMP LIKE STATUS_HDR_TAB.
* Append status from selection screen to imported status table
IF NOT SYSH1 IS INITIAL.
STATUS_TMP-STAT = SYSH1.
STATUS_TMP-EXCL = EXCL1.
COLLECT STATUS_TMP INTO STATUS_TAB.
ELSEIF NOT SYST1 IS INITIAL.
CALL FUNCTION 'STATUS_TEXT_CONVERSION'
EXPORTING
LANGUAGE = SY-LANGU
TXT04 = SYST1
IMPORTING
STATUS_NUMBER = STATUS_TMP-STAT
EXCEPTIONS
INSUFFICIENT_INPUT = 1
NOT_FOUND = 2
OBJECT_NOT_FOUND = 3
WRONG_MODE = 4
OTHERS = 5.
IF SY-SUBRC EQ 0.
STATUS_TMP-EXCL = EXCL1.
COLLECT STATUS_TMP INTO STATUS_TAB.
ENDIF.
ENDIF.
IF NOT SYSH2 IS INITIAL.
STATUS_TMP-STAT = SYSH2.
STATUS_TMP-EXCL = EXCL2.
COLLECT STATUS_TMP INTO STATUS_TAB.
ELSEIF NOT SYST2 IS INITIAL.
CALL FUNCTION 'STATUS_TEXT_CONVERSION'
EXPORTING
LANGUAGE = SY-LANGU
TXT04 = SYST2
IMPORTING
STATUS_NUMBER = STATUS_TMP-STAT
EXCEPTIONS
INSUFFICIENT_INPUT = 1
NOT_FOUND = 2
OBJECT_NOT_FOUND = 3
WRONG_MODE = 4
OTHERS = 5.
IF SY-SUBRC EQ 0.
STATUS_TMP-EXCL = EXCL2.
COLLECT STATUS_TMP INTO STATUS_TAB.
ENDIF.
ENDIF.
ENDFORM. " FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
*& Form REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_AUFNR_OBJNR_BY_STATUS
TABLES STATUS_TAB STRUCTURE STATUS_HDR_TAB
USING SELID LIKE P_SELID
CHANGING CTS_OBJNR TYPE TYP_TS_OBJNR.
* Statusobjekte
DATA:
OBJNR_TAB LIKE JSTO_PRE OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS:
<LS_OBJNR> TYPE TYP_S_OBJNR.
CHECK NOT SELID IS INITIAL
OR NOT STATUS_TAB[] IS INITIAL.
* preread
LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
OBJNR_TAB-OBJNR = <LS_OBJNR>-OBJNR.
APPEND OBJNR_TAB.
ENDLOOP.
CALL FUNCTION 'STATUS_PRE_READ'
TABLES
JSTO_PRE_TAB = OBJNR_TAB.
DATA OBJECTS_DELETED.
PERFORM REDUCE_OBJNR_BY_STATUS
TABLES OBJNR_TAB
STATUS_TAB
USING SELID
CHANGING OBJECTS_DELETED.
IF OBJECTS_DELETED = YX.
* Alle Aufträge entfernen, deren OBJNR nicht mehr in der Tabelle
* OBJNR_TAB enthalten ist.
IF OBJNR_TAB[] IS INITIAL.
REFRESH CTS_OBJNR[].
ELSE.
SORT OBJNR_TAB BY OBJNR.
LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
READ TABLE OBJNR_TAB
WITH KEY OBJNR = <LS_OBJNR>-OBJNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
DELETE CTS_OBJNR[].
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
*& Form REDUCE_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_OBJNR_BY_STATUS
TABLES OBJNR_TAB STRUCTURE OBJNR_TAB
STATUS_TAB STRUCTURE STATUS_HDR_TAB
USING SELID LIKE P_SELID
CHANGING OBJECTS_DELETED.
DATA OBJNR_CNT LIKE SY-DBCNT.
CLEAR OBJECTS_DELETED.
CHECK NOT OBJNR_TAB[] IS INITIAL.
DESCRIBE TABLE OBJNR_TAB LINES OBJNR_CNT.
* Statusprüfung gegen Status in Statustabelle
LOOP AT STATUS_TAB.
IF OBJNR_TAB[] IS INITIAL.
EXIT.
ELSE.
* Alle Objektnummern, bei denen der geforderte Status (nicht) sitzt,
* werden aus der Tabelle OBJNR_TAB gelöscht.
CALL FUNCTION 'STATUS_CHECK_MULTI'
EXPORTING
STATUS = STATUS_TAB-STAT
FLG_EXCLUDE = STATUS_TAB-EXCL
TABLES
OBJECTS = OBJNR_TAB.
ENDIF.
ENDLOOP.
* Statusprüfung gegen das Selektionsschema
IF NOT SELID IS INITIAL.
LOOP AT OBJNR_TAB.
DATA FLG_STATUS_OK TYPE C. "Statusprüfung OK
CALL FUNCTION 'STATUS_CHECK_BY_SELSCHEM'
EXPORTING
OBJNR = OBJNR_TAB-OBJNR
SELID = SELID
IMPORTING
FULLFILL = FLG_STATUS_OK
EXCEPTIONS
NO_STAT_SCHEME = 01
NO_STAT_TAB = 02.
IF SY-SUBRC IS INITIAL
AND FLG_STATUS_OK IS INITIAL.
DELETE OBJNR_TAB.
ENDIF.
ENDLOOP.
ENDIF.
DESCRIBE TABLE OBJNR_TAB LINES SY-DBCNT.
IF SY-DBCNT <> OBJNR_CNT.
OBJECTS_DELETED = YX.
ENDIF.
ENDFORM. " REDUCE_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
*& Form val_req_status
*&---------------------------------------------------------------------*
* F4-Help to select system status by text, providing also code
*----------------------------------------------------------------------*
* -->I_DYNPF Name of dynpro field
* -->C_TXT04 Status short text
* -->C_STAT Status code
*----------------------------------------------------------------------*
FORM VAL_REQ_STATUS USING I_DYNPF
CHANGING C_TXT04 LIKE TJ02T-TXT04
C_STAT LIKE JEST-STAT.
TYPES: BEGIN OF TY_VALUE,
ISTAT TYPE J_ISTAT,
TXT04 TYPE J_TXT04,
TXT30 TYPE J_TXT30,
END OF TY_VALUE.
DATA: L_VALUE TYPE DYNFIELDVALUE,
L_REPID TYPE SY-REPID,
LS_DYNP TYPE DYNPREAD,
LS_TJ02 TYPE TJ02,
LS_VALUE TYPE TJ02T,
LS_RETURN TYPE DDSHRETVAL,
LT_DYNP TYPE STANDARD TABLE OF DYNPREAD,
LT_TJ02 TYPE STANDARD TABLE OF TJ02,
LT_VALUE TYPE STANDARD TABLE OF TJ02T,
LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL.
* personal value key
DATA: L_PVALKEY TYPE DDSHPVKEY.
* Get current value from screen
LS_DYNP-FIELDNAME = I_DYNPF.
APPEND LS_DYNP TO LT_DYNP.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNP
EXCEPTIONS
OTHERS = 0.
READ TABLE LT_DYNP INTO LS_DYNP INDEX 1.
* Get all possible values
SELECT * FROM TJ02 INTO TABLE LT_TJ02
WHERE NODIS = SPACE.
IF LT_TJ02 IS NOT INITIAL.
SELECT * FROM TJ02T INTO TABLE LT_VALUE
FOR ALL ENTRIES IN LT_TJ02
WHERE ISTAT = LT_TJ02-ISTAT
AND SPRAS = SY-LANGU.
ENDIF.
IF LINES( LT_TJ02 ) <> LINES( LT_VALUE ).
* Not all status available in current language, try in german
* as in FORM value_state(saplcoss)
LOOP AT LT_TJ02 INTO LS_TJ02.
READ TABLE LT_VALUE INTO LS_VALUE WITH KEY ISTAT = LS_TJ02-ISTAT.
CHECK SY-SUBRC <> 0.
SELECT SINGLE * FROM TJ02T INTO LS_VALUE
WHERE ISTAT = LS_TJ02-ISTAT
AND SPRAS = 'D'.
IF SY-SUBRC = 0.
APPEND LS_VALUE TO LT_VALUE.
ENDIF.
ENDLOOP.
ENDIF.
SORT LT_VALUE BY ISTAT.
* Call own F4-help, not showing internal status number
L_VALUE = LS_DYNP-FIELDVALUE.
L_REPID = 'PPIO_ENTRY'.
* fill key for personal value list
L_PVALKEY = SY-UNAME.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = 'TJ02T'
RETFIELD = 'TXT04'
PVALKEY = L_PVALKEY
VALUE = L_VALUE
VALUE_ORG = 'S'
CALLBACK_PROGRAM = L_REPID
CALLBACK_FORM = 'VAL_REQ_STATUS_CALLBACK'
TABLES
VALUE_TAB = LT_VALUE
RETURN_TAB = LT_RETURN.
* Get selectect value and internal status number
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY FIELDNAME = 'ISTAT'.
IF SY-SUBRC = 0.
READ TABLE LT_VALUE WITH KEY ISTAT = LS_RETURN-FIELDVAL
INTO LS_VALUE.
CHECK SY-SUBRC = 0.
C_TXT04 = LS_VALUE-TXT04.
C_STAT = LS_VALUE-ISTAT.
ELSE.
CLEAR: C_TXT04, C_STAT.
ENDIF.
ENDFORM. "val_req_status
*&---------------------------------------------------------------------*
*& Form SYSTEM_STATE_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_SYCP2 text
*----------------------------------------------------------------------*
FORM SYSTEM_STATE_CHECK
USING I_DIALOG TYPE FLAG
CHANGING C_STATE LIKE TJ02T-TXT04
C_STATE_NR LIKE JEST-STAT.
DATA: L_STATE LIKE C_STATE,
LS_TJ02T TYPE TJ02T,
LT_TJ02T TYPE STANDARD TABLE OF TJ02T.
IF C_STATE IS INITIAL.
CLEAR C_STATE_NR.
ENDIF.
CHECK NOT C_STATE IS INITIAL.
* Get all possible values
SELECT * FROM TJ02T INTO TABLE LT_TJ02T "#EC CI_GENBUFF
WHERE TXT04 = C_STATE
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
* If not found, try in german
* (see function module STATUS_TEXT_CONVERSION)
SELECT * FROM TJ02T INTO TABLE LT_TJ02T "#EC CI_GENBUFF
WHERE TXT04 = C_STATE
AND SPRAS = 'D'.
IF SY-SUBRC <> 0.
* If not found, try with uppercase letters
L_STATE = C_STATE.
TRANSLATE L_STATE TO UPPER CASE. "#EC TRANSLANG
SELECT * FROM TJ02T INTO TABLE LT_TJ02T "#EC CI_GENBUFF
WHERE TXT04 = L_STATE
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
* If not found, try in german
* (see function module STATUS_TEXT_CONVERSION)
SELECT * FROM TJ02T INTO TABLE LT_TJ02T "#EC CI_GENBUFF
WHERE TXT04 = L_STATE
AND SPRAS = 'D'.
IF SY-SUBRC <> 0.
* If not found, give up with error message
CLEAR C_STATE_NR.
MESSAGE E249(BS) WITH C_STATE SY-LANGU 'D'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* Check if value is unambiguous
IF LINES( LT_TJ02T ) = 1.
* Take over found values
READ TABLE LT_TJ02T INTO LS_TJ02T INDEX 1.
C_STATE = LS_TJ02T-TXT04.
C_STATE_NR = LS_TJ02T-ISTAT.
ELSE.
* Check if internal status number was already provided by F4-help
IF C_STATE_NR IS NOT INITIAL.
READ TABLE LT_TJ02T INTO LS_TJ02T WITH KEY ISTAT = C_STATE_NR.
IF SY-SUBRC = 0.
* Internal status number already there, exit
EXIT.
ENDIF.
ENDIF.
* Value is ambiguous, F4-help must be used
CLEAR C_STATE_NR.
IF NOT I_DIALOG IS INITIAL.
MESSAGE E054(COIS) WITH C_STATE.
ENDIF.
ENDIF.
ENDFORM. " SYSTEM_STATE_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
CLEAR S_LAYOUT.
S_LAYOUT-ZEBRA = 'X'.
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
S_LAYOUT-INFO_FIELDNAME = 'CLR'. "行颜色代码的字段
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = GT_DATA[].
ENDFORM.
FORM FRM_FILL_FIELD .
DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DEFINE FILL_FIELD.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_l = &2.
* IF wa_fieldcat-fieldname = 'MSLJH' or wa_fieldcat-fieldname = 'WCBJH'.
* wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
* ENDIF.
*
* IF wa_fieldcat-fieldname = 'MSLMB' or wa_fieldcat-fieldname = 'WCBMB'.
* wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
* ENDIF.
IF wa_fieldcat-fieldname = 'PLNBEZ' OR wa_fieldcat-fieldname = 'MATNR' .
wa_fieldcat-ref_tabname = 'MARA'.
wa_fieldcat-ref_fieldname = 'MATNR'.
ENDIF.
IF wa_fieldcat-fieldname = 'ARKTX' OR wa_fieldcat-fieldname = 'WAKTX' .
wa_fieldcat-ref_tabname = 'VBAP'.
wa_fieldcat-ref_fieldname = 'ARKTX'.
ENDIF.
IF wa_fieldcat-fieldname = 'AUFNR' .
wa_fieldcat-ref_tabname = 'AUFK'.
wa_fieldcat-ref_fieldname = 'AUFNR'.
ENDIF.
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
IF P_1 IS NOT INITIAL.
FILL_FIELD :
'BUDAT' '日期',
'GRUND' '线别/机台',
'KDAUF' '订单编号',
'KDPOS' '订单项目',
'PWERK' '工厂',
'AUFNR' '工单号',
'PRDHA' '系列',
'MATNR' '产品型号',
'PSMNG' '工单数量',
'MEINS' '单位',
'GMNGA' '报工数',
'ISM03' '实际人工工时',
'VGW03' '标准人工工时',
'ISM02' '实际机器工时',
'VGW02' '标准机器工时',
'ZRGXL' '人工效率',
'ZJQXL' '机器效率',
'RGSCY' '人工工时差异'.
ELSE .
FILL_FIELD :
'ZITEM' '项 目',
'PRDHA' '系列',
'PSMNG' '工单数量',
'ZCBFL' '正常报废率-产值计',
'YCBFL' '异常报废率-产值计',
'SZJBF' '实际子件报废率-数量计',
'SZJBS' '实际子件报废数量',
'ZCBFS' '正常报废数',
'YCBFS' '异常报废数',
'BFJEJ' '报废金额小计',
'ZCBFJ' '正常报废金额',
'YCBFJ' '异常报废金额',
'ZGDCZ' '产值',
'BOMYL' '订单BOM用量',
'BDMNG' '计划数量',
'MENGE' '超领数量',
'MENGT' '退料数量',
'ZSFSL' '实发数量',
'ZFFCY' '发放差异',
'ZCYBL' '差异比例'.
ENDIF.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_MATNR FOR MARA-MATNR.
DATA:L_BUKRS TYPE T001K-BUKRS.
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF.
CALL METHOD REF->CHECK_CHANGED_DATA.
CASE I_UCOMM.
WHEN '&IC1'."表示双击
WHEN 'POST_T'.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
INITIALIZATION .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST1.
PERFORM VAL_REQ_STATUS USING 'P_SYST1' CHANGING P_SYST1 P_SYSH1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST2.
PERFORM VAL_REQ_STATUS USING 'P_SYST2' CHANGING P_SYST2 P_SYSH2.
AT SELECTION-SCREEN ON P_SYST1.
PERFORM SYSTEM_STATE_CHECK USING YX
CHANGING P_SYST1
P_SYSH1.
AT SELECTION-SCREEN ON P_SYST2.
PERFORM SYSTEM_STATE_CHECK USING YX
CHANGING P_SYST2
P_SYSH2.
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA .
PERFORM FRM_DISPLAY.
ABAP开发笔记——2019.07.17(ABAP Open SQL)
最新推荐文章于 2024-03-29 17:55:50 发布