ABAP开发笔记——2019.07.17(ABAP Open SQL)

*&---------------------------------------------------------------------*
*& 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输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

TYPESBEGIN 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.

DATABEGIN OF STATUS_TMP OCCURS 0,
        STAT LIKE JEST-STAT,
        EXCL LIKE RC27X-FLG_SEL,
      END   OF STATUS_TMP.
DATASTATUS_HDR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_OPR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_CMP_TAB LIKE STATUS_TMP OCCURS 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.

DATAYX           VALUE 'X'.
DATAGT_DATA      TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_HEAD TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_ITEM TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_AFRU      TYPE TABLE OF AFRU     WITH HEADER LINE.
DATAGT_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-OPTIONSS_AUFNR  FOR   AFPO-AUFNR     MODIF ID C1 .                        "工单号
SELECT-OPTIONSS_MATNR  FOR   AFPO-MATNR     MODIF ID C1 .                        "产品号码
SELECT-OPTIONSS_PRDHA  FOR   MARA-PRDHA     MODIF ID C1 .                        "系列
SELECT-OPTIONSS_DISPO  FOR   AFKO-DISPO     MODIF ID C1 .                        "MRP控制员
SELECT-OPTIONSS_GLTRP  FOR   AFKO-GLTRP     MODIF ID C1 .                        "工单开始日期
SELECT-OPTIONSS_GSTRP  FOR   AFKO-GSTRP     MODIF ID C1 .                        "结束日期
SELECT-OPTIONSS_FEVOR  FOR   AFKO-FEVOR     MODIF ID C1 .                        "生产管理员
SELECT-OPTIONSS_LTRMI  FOR   AFPO-LTRMI     MODIF ID C1 .                        "工单实际完成日期
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN:
  COMMENT 1(20TEXT-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(5TEXT-EXC FOR FIELD P_EXCL1    MODIF ID C1,
  COMMENT 52(3TEXT-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(5TEXT-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.
PARAMETERSP_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 MAXAFVC~VORNR INTO GT_DATA_ITEM-VORNR FROM AFVC
        
WHERE AFVC~AUFPL GT_DATA_ITEM-AUFPL
        
.
      SELECT SINGLE
        AFRU~VORNR,
        AFRU~AUFNR,
        SUMAFRU~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,
        SUMAFRU~ISM03 AS ISM03,
        SUMAFRU~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,
        SUMAFVV~VGW03 AS VGW03,
        SUMAFVV~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 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.

  TYPESBEGIN OF TY_VALUE,
           ISTAT TYPE J_ISTAT,
           TXT04 TYPE J_TXT04,
           TXT30 TYPE J_TXT30,
         END OF TY_VALUE.

  DATAL_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
  DATAL_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 LINESLT_TJ02 <> LINESLT_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.
    CLEARC_TXT04C_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.

  DATAL_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(BSWITH C_STATE SY-LANGU 'D'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

* Check if value is unambiguous
  IF LINESLT_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(COISWITH 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.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值