免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1178 | 回复: 0
打印 上一主题 下一主题

alv 颜色设定和动态内表生成 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-01 13:31 |只看该作者 |倒序浏览

REPORT ZPCRCO007.
TABLES: MKAL,                    "Production Versions of Material
        MAKT,
        PLAF,                    "Planned order
        AUFK,                    "Order master data
        AFPO,                    "Order item
        AFKO,                    "Order header data PP orders
        AUFM,                 "Goods movements for order
        CRHD,                  "WORK CENTER HEADER
        AFVC,                  "Operation within an order
        AFRU,                  "Order completion confirmations
        CRTX ,               "DETAILS
        KAKO.
*----------------------------------------------------------------------*
*                  INCLUDE
*----------------------------------------------------------------------*
INCLUDE ZTAFCO001.
TYPE-POOLS: SLIS.
FIELD-SYMBOLS: ,
*                TYPE P,
                TYPE STANDARD TABLE,
               ,
                .
TYPES: BEGIN OF T_DEFULT,
         NUM(1)      TYPE C,
         PLANT(1)    TYPE C,
         DATE(1)    TYPE C,
         PRODU(1)    TYPE C,
         MATNR(1)    TYPE C,
         MRP(1)    TYPE C,
       END OF T_DEFULT.
TYPES:
  BEGIN OF T_DYSQL,
    TXT(72) TYPE C,
  END OF T_DYSQL.
TYPES: BEGIN OF T_AFKO,
        MDV01 LIKE MKAL-MDV01,
        AUFNR LIKE AUFK-AUFNR,    "Production order
        WERKS LIKE AUFK-WERKS,
        OBJNR LIKE AUFK-OBJNR,
        GAMNG LIKE AFKO-GAMNG,
        GSTRS LIKE AFKO-GSTRS,
        GLTRS LIKE AFKO-GLTRS,
        PLNBEZ LIKE AFKO-PLNBEZ,
        AUFPL LIKE AFKO-AUFPL,
        DISPO LIKE AFKO-DISPO,
        VERID LIKE AFPO-VERID,
        WEMNG LIKE AFPO-WEMNG,
        MAKTX LIKE MAKT-MAKTX,
      END OF T_AFKO.
TYPES: BEGIN OF T_PLAF,
        PLNUM LIKE PLAF-PLNUM,
        PWWRK LIKE PLAF-PWWRK,
        GSMNG LIKE PLAF-GSMNG,
        PSTTR LIKE PLAF-PSTTR,
        PEDTR LIKE PLAF-PEDTR,
        DISPO LIKE PLAF-DISPO,
        VERID LIKE PLAF-VERID,
*        ORFIN LIKE PLAF-PEDTR,
        MATNR LIKE PLAF-MATNR,
        MDV01 LIKE MKAL-MDV01,
      END OF T_PLAF.
*
TYPES: BEGIN OF T_SUM,
          NUM(16) type c,
          MENGE  LIKE MSEG-MENGE,
      END OF T_SUM.
TYPES: BEGIN OF T_LINE,
          DATUM TYPE SY-DATUM,
          CNT  TYPE I,
          VERID TYPE VERID,
          LDATA(16) TYPE C,
*          LINE TYPE I,
      END OF T_LINE.
TYPES: BEGIN OF T_LDATA,
          LDATA(16) TYPE C,
          FLG TYPE C,
      END OF T_LDATA.
TYPES: BEGIN OF T_MKAL,
          MATNR LIKE MSEG-MATNR,
          WERKS LIKE MSEG-WERKS,
          MENGE LIKE MSEG-MENGE,
          VERID LIKE MKAL-VERID,
          MDV01 LIKE MKAL-MDV01,
      END OF T_MKAL.
TYPES: BEGIN OF T_DATA,
          MDV01 LIKE MKAL-MDV01,
      END OF T_DATA.
DATA :W_DEFULT        TYPE T_DEFULT,
      I_DEFULT        TYPE STANDARD TABLE OF T_DEFULT,
      W_AFKO          TYPE T_AFKO,
      W_AFKOBAK       TYPE T_AFKO,
      W_AFKOBAK1       TYPE T_AFKO,
      I_AFKO          TYPE STANDARD TABLE OF T_AFKO,
      I_AFKOBAK       TYPE STANDARD TABLE OF T_AFKO,
      I_AFKOBAK1       TYPE STANDARD TABLE OF T_AFKO,
      W_PLAF          TYPE T_PLAF,
      I_PLAF          TYPE STANDARD TABLE OF T_PLAF,
      W_SUM          TYPE T_SUM,
      I_SUM          TYPE STANDARD TABLE OF T_SUM,
      W_LINE          TYPE T_LINE,
      I_LINE          TYPE STANDARD TABLE OF T_LINE,
      I_LINE1          TYPE STANDARD TABLE OF T_LINE,
*      W_LDATA          TYPE T_LDATA,
*      I_LDATA          TYPE STANDARD TABLE OF T_LDATA,
      W_MKAL          TYPE T_MKAL,
      I_MKAL          TYPE STANDARD TABLE OF T_MKAL,
      W_DATA          TYPE T_DATA,
      I_DATA          TYPE STANDARD TABLE OF T_DATA.
DATA: FCAT TYPE SLIS_T_FIELDCAT_ALV,
      IT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GT_EVENTS TYPE SLIS_T_EVENT,
      V_REPID LIKE SY-REPID,
      V_NUM TYPE C,
      V_DATE(2) TYPE N.

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:    P_PLANT  LIKE AUFM-WERKS  OBLIGATORY .   "plant
SELECT-OPTIONS : S_DATE   FOR SY-DATUM NO-EXTENSION ,   "date
                 S_P_LIN  FOR MKAL-MDV01  ,    "production line
                 S_M_MAS   FOR AUFM-MATNR  ,    "material master
                 S_MRP_C   FOR AFKO-DISPO  .    "mrp controller
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-P04.
SELECTION-SCREEN POSITION 33.
PARAMETERS       P_CHKBOX AS CHECKBOX.
SELECTION-SCREEN COMMENT 36(11) TEXT-P05.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-P01.
SELECTION-SCREEN POSITION 33.
PARAMETERS P_START RADIOBUTTON GROUP GRP1 DEFAULT 'X' .  "Multi Level
SELECTION-SCREEN COMMENT 36(11) TEXT-P02.
SELECTION-SCREEN POSITION 50.
PARAMETERS   P_END RADIOBUTTON GROUP GRP1.            "Single Level
SELECTION-SCREEN COMMENT 53(12) TEXT-P03.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK1.
*&---------------------------------------------------------------------*
*                  INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
  PERFORM FRM_CLEAR_TABLE.
  PERFORM FRM_DEFULT_SET.
  PERFORM FRM_BUILD_EVENTS.
*&---------------------------------------------------------------------*
*                  AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------
AT SELECTION-SCREEN.
  CHECK SY-UCOMM = 'ONLI' OR
        SY-UCOMM = SPACE.
* Screen check
  PERFORM FRM_VALUE_CHECK.
*&---------------------------------------------------------------------*
*                  AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'S_DATE-LOW'.
      SCREEN-INPUT = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
*&---------------------------------------------------------------------*
*                  START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* SAPGUI_PROGRESS_INDICATOR
  PERFORM FRM_GUI_INDICATOR.
* Manufacturing data read
  PERFORM FRM_READ_AFKO.
* Plan arrangements data read
  PERFORM FRM_READ_PLAF.
* data edit
  PERFORM FRM_DATA_EDIT.
  IF I_AFKO[] IS INITIAL.
    MESSAGE S008(ZP001).
    STOP.
  ENDIF.
* table create
  PERFORM FRM_BUILD_FIELD_CATALOG.
* CREATE_DYNAMIC_TABLE
  PERFORM FRM_CREATE_TABLE.
* data create
  PERFORM FRM_TABLE_CREATE.
* alv display
  PERFORM FRM_GRID_DISPLAY.
*&---------------------------------------------------------------------*
*&      Form  build_events
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_BUILD_EVENTS.
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            I_LIST_TYPE = 0
       IMPORTING
            ET_EVENTS   = GT_EVENTS.
  READ TABLE GT_EVENTS WITH KEY NAME =  SLIS_EV_USER_COMMAND
                           INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE SLIS_EV_USER_COMMAND TO LS_EVENT-FORM.
    APPEND LS_EVENT TO GT_EVENTS.
  ENDIF.
ENDFORM.                    " build_events
*&---------------------------------------------------------------------*
*&      Form  FRM_DEFULT_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_DEFULT_SET.
  S_DATE-LOW = SY-DATUM.
  S_DATE-HIGH = SY-DATUM + 7.
  APPEND S_DATE.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '1'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  APPEND W_DEFULT TO I_DEFULT.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '2'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  W_DEFULT-PRODU = '3'.
  APPEND W_DEFULT TO I_DEFULT.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '3'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  W_DEFULT-MATNR = '4'.
  APPEND W_DEFULT TO I_DEFULT.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '4'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  W_DEFULT-MRP = '5'.
  APPEND W_DEFULT TO I_DEFULT.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '5'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  W_DEFULT-PRODU = '3'.
  W_DEFULT-MATNR = '4'.
  APPEND W_DEFULT TO I_DEFULT.
  CLEAR W_DEFULT.
  W_DEFULT-NUM = '6'.
  W_DEFULT-PLANT = '1'.
  W_DEFULT-DATE = '2'.
  W_DEFULT-PRODU = '3'.
  W_DEFULT-MRP = '5'.
  APPEND W_DEFULT TO I_DEFULT.
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'S_DATE-LOW'.
      SCREEN-INPUT = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " FRM_DEFULT_SET
*&---------------------------------------------------------------------*
*&      Form  frm_gui_indicator
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_GUI_INDICATOR.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
            PERCENTAGE = 100
            TEXT       = 'Processing Pls. wait..........'.
  CLEAR V_DATE.
  V_DATE = S_DATE-HIGH - S_DATE-LOW + 1.
ENDFORM.                    " frm_gui_indicator
*&---------------------------------------------------------------------*
*&      Form  frm_Read_prod
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_READ_AFKO.
  DATA: L_I_DYSQL TYPE TABLE OF T_DYSQL,
        L_W_DYSQL TYPE T_DYSQL.
  DATA: L_INDEX  TYPE SY-TABIX.
  DATA  L_DATUM TYPE SY-DATUM.
  DATA L_SDATE TYPE SY-DATUM.
  DATA L_STATUS TYPE C.
  CLEAR L_I_DYSQL[].
  CLEAR L_W_DYSQL.
  CLEAR L_INDEX.
  CLEAR L_DATUM.
* Details condition
  L_W_DYSQL-TXT = 'AFPO~POSNR = '''.
  CONCATENATE L_W_DYSQL-TXT '0001' ''''
       INTO L_W_DYSQL-TXT .
  APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
  CLEAR L_W_DYSQL.
  IF P_START = 'X'.
    L_W_DYSQL-TXT = 'AND AFKO~GSTRS >= '.
  ELSE.
    L_W_DYSQL-TXT = 'AND AFKO~GLTRS >= '.
  ENDIF.
* The data 30 days ago is acquired
  L_DATUM = S_DATE-LOW - 30.
  CONCATENATE L_W_DYSQL-TXT L_DATUM
         INTO L_W_DYSQL-TXT SEPARATED BY SPACE.
  APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
  CLEAR L_W_DYSQL.
  IF P_START = 'X'.
    L_W_DYSQL-TXT = 'AND AFKO~GSTRS  '0' AND L_STATUS  '1'.
       DELETE I_AFKO .
       CLEAR: W_AFKO,
              L_INDEX.
       CONTINUE.
     ENDIF.
     MODIFY I_AFKO FROM W_AFKO INDEX L_INDEX.
     CLEAR: W_AFKO,
            L_INDEX.
    ENDLOOP.
  ENDIF.
********************TEST
*TYPES: BEGIN OF T_OUTPUT,
*          TEST(500) TYPE C,
*      END OF T_OUTPUT.
*DATA L_A(18) TYPE C.
*DATA :W_OUTPUT        TYPE T_OUTPUT,
*      I_OUTPUT        TYPE STANDARD TABLE OF T_OUTPUT.
* DATA C_TAB TYPE X VALUE '09'.
*  LOOP AT I_AFKO INTO W_AFKO.
*    CLEAR L_A.
*    WRITE W_AFKO-GAMNG TO L_A.
*    CONCATENATE
*        W_AFKO-MDV01
*        W_AFKO-AUFNR
*        W_AFKO-WERKS
*        W_AFKO-OBJNR
*        L_A
*        W_AFKO-GSTRS
*        W_AFKO-GLTRS
*        W_AFKO-PLNBEZ
*        W_AFKO-AUFPL
*        W_AFKO-DISPO
*        W_AFKO-VERID
**        W_AFKO-WEMNG
*        W_AFKO-MAKTX
*    INTO W_OUTPUT SEPARATED BY C_TAB.
*    APPEND W_OUTPUT TO I_OUTPUT.
*  ENDLOOP.
*
*  CALL FUNCTION 'WS_DOWNLOAD'
*   EXPORTING
**     BIN_FILESIZE                  = ' '
**     CODEPAGE                      = ' '
*     FILENAME                      = 'C:\xiaoxintestdata.xls'
*     FILETYPE                      = 'ASC'
**     MODE                          = ' '
**     WK1_N_FORMAT                  = ' '
**     WK1_N_SIZE                    = ' '
**     WK1_T_FORMAT                  = ' '
**     WK1_T_SIZE                    = ' '
**     COL_SELECT                    = ' '
**     COL_SELECTMASK                = ' '
**     NO_AUTH_CHECK                 = ' '
**   IMPORTING
**     FILELENGTH                    =
*    TABLES
*      DATA_TAB                      = I_OUTPUT
**     FIELDNAMES                    =
*   EXCEPTIONS
*     FILE_OPEN_ERROR               = 1
*     FILE_WRITE_ERROR              = 2
*     INVALID_FILESIZE              = 3
*     INVALID_TYPE                  = 4
*     NO_BATCH                      = 5
*     UNKNOWN_ERROR                 = 6
*     INVALID_TABLE_WIDTH           = 7
*     GUI_REFUSE_FILETRANSFER       = 8
*     CUSTOMER_ERROR                = 9
*     OTHERS                        = 10
*            .
*  IF SY-SUBRC  0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  ENDIF.
*
********************TEST
ENDFORM.                    " frm_Read_prod
*&---------------------------------------------------------------------*
*&      Form  FRM_READ_PLAF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_READ_PLAF.
  DATA: L_I_DYSQL TYPE TABLE OF T_DYSQL,
        L_W_DYSQL TYPE T_DYSQL.
  DATA  L_DATUM TYPE SY-DATUM.
* Date condition
  CLEAR L_I_DYSQL[].
  CLEAR L_W_DYSQL.
  IF P_START = 'X'.
    L_W_DYSQL-TXT = ' PSTTR >= '.
  ELSE.
    L_W_DYSQL-TXT = ' PEDTR >= '.
  ENDIF.
* The data 30 days ago is acquired
  L_DATUM = S_DATE-LOW - 30.
  CONCATENATE L_W_DYSQL-TXT L_DATUM
         INTO L_W_DYSQL-TXT SEPARATED BY SPACE.
  APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
  CLEAR L_W_DYSQL.
  IF P_START = 'X'.
    L_W_DYSQL-TXT = 'AND PSTTR  '1'.
    LOOP AT I_AFKO INTO W_AFKO.
      L_INDEX = SY-TABIX.
* Input Plant and Date and Production Line
      IF V_NUM = '2'.
        IF W_AFKO-MDV01 IN S_P_LIN.
        ELSE.
          DELETE I_AFKO INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Material no
      IF V_NUM = '3'.
        IF W_AFKO-PLNBEZ IN S_M_MAS.
        ELSE.
          DELETE I_AFKO INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and MRP Controller
      IF V_NUM = '4'.
        IF W_AFKO-DISPO IN S_MRP_C.
        ELSE.
          DELETE I_AFKO INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Date and Production Line and Material no
      IF V_NUM = '5'.
        IF W_AFKO-MDV01 IN S_P_LIN AND W_AFKO-PLNBEZ IN S_M_MAS.
        ELSE.
          DELETE I_AFKO INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Date and Production Line and MRP Controller
      IF V_NUM = '6'.
        IF W_AFKO-MDV01 IN S_P_LIN AND W_AFKO-DISPO IN S_MRP_C.
        ELSE.
          DELETE I_AFKO INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
      CLEAR W_AFKO.
    ENDLOOP.
    LOOP AT I_PLAF INTO W_PLAF.
      L_INDEX = SY-TABIX.
* Input Plant and Date and Production Line
      IF V_NUM = '2'.
        IF W_PLAF-MDV01 IN S_P_LIN.
        ELSE.
          DELETE I_PLAF INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Material no
      IF V_NUM = '3'.
        IF W_PLAF-MATNR IN S_M_MAS.
        ELSE.
          DELETE I_PLAF INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and MRP Controller
      IF V_NUM = '4'.
        IF W_PLAF-DISPO IN S_MRP_C.
        ELSE.
          DELETE I_PLAF INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Date and Production Line and Material no
      IF V_NUM = '5'.
        IF W_PLAF-MDV01 IN S_P_LIN AND W_PLAF-MATNR IN S_M_MAS.
        ELSE.
          DELETE I_PLAF INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
* Input Plant and Date and Production Line and MRP Controller
      IF V_NUM = '6'.
        IF W_PLAF-MDV01 IN S_P_LIN AND W_PLAF-DISPO IN S_MRP_C.
        ELSE.
          DELETE I_PLAF INDEX L_INDEX.
          CONTINUE.
        ENDIF.
      ENDIF.
      CLEAR W_PLAF.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " FRM_DATA_EDIT
*&---------------------------------------------------------------------*
*&      Form  FRM_GRID_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_GRID_DISPLAY.
  DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
  LAYOUT-NO_INPUT = 'X'.
  LAYOUT-F2CODE = '&ETA'.
  LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  LAYOUT-DETAIL_POPUP = 'X'.
  V_REPID = SY-REPID.
  LAYOUT-info_fieldname = 'COLOR'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM = V_REPID
            IS_LAYOUT          = LAYOUT
            I_GRID_TITLE       = TEXT-T01
            IT_FIELDCAT        = FCAT[]
            IT_EVENTS          = GT_EVENTS[]
       TABLES
            T_OUTTAB           = .
ENDFORM.                    " FRM_GRID_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM FRM_BUILD_FIELD_CATALOG.
  DATA: IS_FIELDCAT LIKE LINE OF IT_FIELDCAT,
        WCAT LIKE LINE OF FCAT.
  DATA L_DATE TYPE SY-DATUM.
  DATA L_DATE1 TYPE SY-DATUM.
  DATA L_C(16) TYPE C.
  DATA L_N(4) TYPE N.
  DATA L_NI(4) TYPE N.
  DATA L_I TYPE I.
  DATA L_SDATE TYPE SY-DATUM.
  DATA L_DATECHAR(10) TYPE C.
  DATA L_II TYPE I.
  CLEAR: L_DATE,L_DATECHAR.
* Production Line
  IS_FIELDCAT-INTTYPE = 'C'.
  IS_FIELDCAT-INTLEN = '58'.
  IS_FIELDCAT-FIELDNAME = 'PRODU'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  WCAT-COL_POS = 1.
  WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME.
  WCAT-SELTEXT_L = 'Production Line'.
  WCAT-FIX_COLUMN = 'X'.
  APPEND WCAT TO FCAT.
  CLEAR WCAT.
* order no
  IS_FIELDCAT-INTTYPE = 'C'.
  IS_FIELDCAT-INTLEN = '50'.
  IS_FIELDCAT-FIELDNAME = 'ORDER'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  WCAT-COL_POS = 2.
  WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
  WCAT-SELTEXT_L = 'Order No'. "IS_FIELDCAT-FIELDNAME.
  WCAT-FIX_COLUMN = 'X'.
  APPEND WCAT TO FCAT.
* PRODVER
  CLEAR WCAT.
  IS_FIELDCAT-INTTYPE = 'C'.
  IS_FIELDCAT-INTLEN = '4'.
  IS_FIELDCAT-FIELDNAME = 'PRODVER'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  WCAT-COL_POS = 3.
  WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
  WCAT-SELTEXT_L = 'Prod Ver'. "IS_FIELDCAT-FIELDNAME.
  WCAT-FIX_COLUMN = 'X'.
  APPEND WCAT TO FCAT.
* OVERDUE
  CLEAR WCAT.
  IS_FIELDCAT-INTTYPE = 'p'.
  IS_FIELDCAT-INTLEN = '13'.
  IS_FIELDCAT-FIELDNAME = 'OVERDUE'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  WCAT-COL_POS = 4.
  WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
  WCAT-SELTEXT_S = 'Over Due'. "IS_FIELDCAT-FIELDNAME.
  WCAT-FIX_COLUMN = 'X'.
  APPEND WCAT TO FCAT.
  CLEAR WCAT.
* detail
  L_DATE = S_DATE-LOW.
  L_DATE1 = S_DATE-LOW.
  DO V_DATE TIMES.
    LOOP AT I_AFKO INTO W_AFKO .
      IF P_START = 'X'.
        L_SDATE = W_AFKO-GSTRS.
      ELSE.
        L_SDATE = W_AFKO-GLTRS.
      ENDIF.
      IF L_DATE = L_SDATE.
        CLEAR W_LINE.
        W_LINE-DATUM = L_SDATE.
        IF P_CHKBOX = 'X'.
          W_LINE-VERID = W_AFKO-VERID+3(1).
        ENDIF.
        APPEND W_LINE TO I_LINE.
      ENDIF.
    ENDLOOP.
    LOOP AT I_PLAF INTO W_PLAF.
      IF P_START = 'X'.
        L_SDATE = W_PLAF-PSTTR.
      ELSE.
        L_SDATE = W_PLAF-PEDTR.
      ENDIF.
      IF L_DATE1 = L_SDATE.
        CLEAR W_LINE.
        W_LINE-DATUM = L_SDATE.
        IF P_CHKBOX = 'X'.
          W_LINE-VERID = W_PLAF-VERID+3(1).
        ENDIF.
        APPEND W_LINE TO I_LINE.
      ENDIF.
    ENDLOOP.
    L_DATE = L_DATE + 1.
    L_DATE1 = L_DATE1 + 1.
  ENDDO.
  LOOP AT I_LINE INTO W_LINE.
    COLLECT W_LINE INTO I_LINE1.
  ENDLOOP.
  CLEAR I_LINE[].
  I_LINE[] = I_LINE1[].
  CLEAR I_LINE1[].
  SORT I_LINE BY DATUM.
  L_I = 0.
  LOOP AT I_LINE INTO W_LINE.
    L_I = L_I + 1.
    CLEAR WCAT.
    CLEAR IS_FIELDCAT.
    IS_FIELDCAT-INTTYPE = 'C'.
    IS_FIELDCAT-INTLEN = '17'.
    CONCATENATE W_LINE-DATUM W_LINE-VERID INTO L_C.
    IS_FIELDCAT-FIELDNAME = L_C.
    APPEND IS_FIELDCAT TO IT_FIELDCAT.
    W_LINE-LDATA = L_C.
    CLEAR L_DATECHAR.
    WRITE W_LINE-DATUM TO L_DATECHAR.
    IF P_CHKBOX = 'X'.
      WRITE W_LINE-DATUM TO L_DATECHAR.
      CONCATENATE L_DATECHAR '(' W_LINE-VERID ')' INTO L_C.
    ELSE.
      WRITE W_LINE-DATUM TO  L_C .
    ENDIF.
    WCAT-COL_POS = SY-TABIX + 4.
    WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
    WCAT-SELTEXT_L = L_C. "IS_FIELDCAT-FIELDNAME.
    WCAT-FIX_COLUMN = 'X'.
    IF W_LINE-DATUM = SY-DATUM.
      WCAT-EMPHASIZE ='C1'.
    ENDIF.
    APPEND WCAT TO FCAT.
    MODIFY I_LINE FROM W_LINE
    TRANSPORTING LDATA
    WHERE DATUM = W_LINE-DATUM AND VERID = W_LINE-VERID.
  ENDLOOP.
* ACCMQTY
  CLEAR WCAT.
  IS_FIELDCAT-INTTYPE = 'C'.
  IS_FIELDCAT-INTLEN = '17'.
  IS_FIELDCAT-FIELDNAME = 'ACCMQTY'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  WCAT-COL_POS = L_I + 8.
  WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
  WCAT-SELTEXT_S = 'Accm Qty'. "IS_FIELDCAT-FIELDNAME.
  WCAT-FIX_COLUMN = 'X'.
  APPEND WCAT TO FCAT.
  CLEAR WCAT.
* color
  CLEAR IS_FIELDCAT.
  IS_FIELDCAT-INTTYPE = 'C'.
  IS_FIELDCAT-INTLEN = '4'.
  IS_FIELDCAT-FIELDNAME = 'COLOR'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
ENDFORM.                    " FRM_BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  FRM_CLEAR_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_TABLE.
  CLEAR: W_DEFULT,
         I_DEFULT[],
         W_AFKO,
         I_AFKO[],
         W_PLAF,
         I_PLAF[],
         W_MKAL,
         I_MKAL[].
ENDFORM.                    " FRM_CLEAR_TABLE
*&---------------------------------------------------------------------*
*&      Form  FRM_TABLE_CREATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_TABLE_CREATE.
  DATA L_N(4) TYPE N.
  DATA L_C(16) TYPE C.
  DATA L_II TYPE I.
  DATA L_DATUM TYPE SY-DATUM.
  DATA L_SDATE TYPE SY-DATUM.
  DATA L_EDATE TYPE SY-DATUM.
  DATA L_SUM TYPE AFPO-WEMNG.
  DATA L_LINESUM TYPE AFPO-WEMNG.
  DATA L_MAKTX TYPE MAKT-MAKTX.
  DATA L_SUMLINE TYPE AFPO-WEMNG.
  DATA L_SUMSUM TYPE AFPO-WEMNG.
  DATA L_MDV01 TYPE MDV01.
  DATA L_MATNR TYPE MATNR.
  DATA L_VERID TYPE VERID.
  DATA L_MDV01_1 TYPE MDV01.
  DATA L_MATNR_1 TYPE MATNR.
  DATA L_VERID_1 TYPE VERID.
  CLEAR I_DATA[].
  CLEAR W_DATA.
  CLEAR L_MDV01.
  CLEAR L_VERID.
  CLEAR .
  CLEAR W_AFKOBAK.
  CLEAR L_DATUM.
  CLEAR I_AFKOBAK[].
  CLEAR I_AFKOBAK1[].
  LOOP AT I_AFKO INTO W_AFKO.
    W_AFKOBAK-MDV01 = W_AFKO-MDV01.
    W_AFKOBAK-VERID = W_AFKO-VERID.
    W_AFKOBAK-PLNBEZ = W_AFKO-PLNBEZ.
    APPEND W_AFKOBAK TO I_AFKOBAK.
  ENDLOOP.
  CLEAR W_AFKOBAK.
  LOOP AT I_AFKOBAK INTO W_AFKOBAK.
    COLLECT W_AFKOBAK INTO I_AFKOBAK1.
  ENDLOOP.
  CLEAR W_AFKOBAK.
  SORT I_AFKO BY MDV01 VERID PLNBEZ.
  DELETE I_AFKOBAK1 WHERE MDV01 = SPACE
                       OR VERID = SPACE.
  LOOP AT I_AFKOBAK1 INTO W_AFKOBAK .
    READ TABLE I_AFKO INTO W_AFKO
      WITH KEY PLNBEZ = W_AFKOBAK-PLNBEZ.
    W_AFKOBAK-MAKTX = W_AFKO-MAKTX.
    MODIFY I_AFKOBAK1 FROM W_AFKOBAK  TRANSPORTING MAKTX
      WHERE PLNBEZ = W_AFKOBAK-PLNBEZ.
  ENDLOOP.
  SORT I_AFKOBAK1 BY MDV01 VERID PLNBEZ .
  LOOP AT I_AFKOBAK1 INTO W_AFKOBAK .
*LINE
  W_AFKOBAK1 = W_AFKOBAK.
  AT NEW MDV01.
    ASSIGN COMPONENT 'PRODU' OF STRUCTURE  TO .
     = W_AFKOBAK-MDV01.
    ASSIGN COMPONENT 'COLOR' OF STRUCTURE  TO .
     = 'C600'.
    APPEND  TO .
    CLEAR .
  ENDAT.
    CLEAR L_MAKTX.
    CLEAR L_LINESUM.
    CLEAR W_LINE.
    ASSIGN COMPONENT 'COLOR' OF STRUCTURE  TO .
     = 'C400'.
    CONCATENATE W_AFKOBAK-PLNBEZ W_AFKOBAK-MAKTX
    INTO L_MAKTX SEPARATED BY SPACE.
    ASSIGN COMPONENT 'PRODU' OF STRUCTURE  TO .
     = L_MAKTX.
*DETAIL
    LOOP AT I_AFKO INTO W_AFKO WHERE MDV01 = W_AFKOBAK-MDV01
                                AND  VERID = W_AFKOBAK-VERID
                                 AND PLNBEZ = W_AFKOBAK-PLNBEZ.
        ASSIGN COMPONENT 'ORDER' OF STRUCTURE  TO .
         = W_AFKO-AUFNR.
        ASSIGN COMPONENT 'PRODVER' OF STRUCTURE  TO .
         = W_AFKO-VERID.
        L_DATUM = S_DATE-LOW.
        IF P_START = 'X'.
          L_SDATE = W_AFKO-GSTRS.
        ELSE.
          L_SDATE = W_AFKO-GLTRS.
        ENDIF.
        IF L_SDATE  TO .
            WRITE W_AFKO-GAMNG TO .
            L_LINESUM = L_LINESUM + W_AFKO-GAMNG.
            L_SUM = L_SUM + W_AFKO-GAMNG.
        ENDIF.
        CLEAR L_II.
        CLEAR L_N.
        DO V_DATE TIMES.
          L_N = L_N + 1.
          L_II = L_II + 1.
          IF L_SDATE = L_DATUM.
            IF P_CHKBOX = 'X'.
              CLEAR W_LINE.
              READ TABLE I_LINE INTO W_LINE
              WITH KEY DATUM = L_DATUM
              VERID = W_AFKO-VERID+3(1).
              L_C = W_LINE-LDATA.
            ELSE.
              L_C = L_DATUM.
            ENDIF.
            IF L_C  SPACE.
              ASSIGN COMPONENT L_C OF STRUCTURE  TO .
              WRITE W_AFKO-GAMNG TO .
              L_LINESUM = L_LINESUM + W_AFKO-GAMNG.
              CLEAR W_SUM.
              W_SUM-NUM = L_C.
              W_SUM-MENGE = W_AFKO-GAMNG.
              APPEND W_SUM TO I_SUM.
            ENDIF.
          ENDIF.
          L_DATUM = L_DATUM + 1.
        ENDDO.
        ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE  TO .
        WRITE L_LINESUM TO .
        APPEND  TO .
        CLEAR .
    ENDLOOP.
*  PLANNED ORDER
    ASSIGN COMPONENT 'ORDER' OF STRUCTURE  TO .
     = TEXT-T02.
    ASSIGN COMPONENT 'PRODVER' OF STRUCTURE  TO .
     = W_AFKOBAK-VERID.
    CLEAR L_II.
    L_DATUM = S_DATE-LOW.
    LOOP AT I_PLAF INTO W_PLAF WHERE MDV01 = W_AFKOBAK-MDV01
                                 AND VERID = W_AFKOBAK-VERID
                                 AND MATNR = W_AFKOBAK-PLNBEZ.
      IF P_START = 'X'.
        L_SDATE = W_PLAF-PSTTR.
      ELSE.
        L_SDATE = W_PLAF-PEDTR.
      ENDIF.
      IF L_SDATE  0.
      ASSIGN COMPONENT 'OVERDUE' OF STRUCTURE  TO .
      WRITE L_SUMSUM TO .
    ENDIF.
    L_LINESUM = L_LINESUM + L_SUMSUM.
    CLEAR L_SUMSUM.
    CLEAR L_N.
    DO V_DATE TIMES.
      L_II = L_II + 1.
      L_N = L_N + 1.
      LOOP AT I_PLAF INTO W_PLAF WHERE MDV01 = W_AFKOBAK-MDV01
                                   AND VERID = W_AFKOBAK-VERID
                                   AND MATNR = W_AFKOBAK-PLNBEZ.
        IF P_START = 'X'.
          L_SDATE = W_PLAF-PSTTR.
        ELSE.
          L_SDATE = W_PLAF-PEDTR.
        ENDIF.
        IF L_SDATE = L_DATUM.
          L_SUMSUM = L_SUMSUM + W_PLAF-GSMNG.
        ENDIF.
      ENDLOOP.
      IF P_CHKBOX = 'X'.
        CLEAR W_LINE.
        READ TABLE I_LINE INTO W_LINE
        WITH KEY DATUM = L_DATUM
        VERID = W_AFKO-VERID+3(1).
        L_C = W_LINE-LDATA.
      ELSE.
        L_C = L_DATUM.
      ENDIF.
      IF L_C  SPACE.
        IF L_SUMSUM > 0.
          ASSIGN COMPONENT L_C OF STRUCTURE  TO .
          WRITE L_SUMSUM TO .
        ENDIF.
        L_LINESUM = L_LINESUM + L_SUMSUM.
      ENDIF.
      L_DATUM = L_DATUM + 1.
      CLEAR W_SUM.
      W_SUM-NUM = L_C.
      W_SUM-MENGE = L_SUMSUM.
      APPEND W_SUM TO I_SUM.
      CLEAR L_SUMSUM.
    ENDDO.
    ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE  TO .
    WRITE L_LINESUM TO .
    APPEND  TO .
    CLEAR .
*LINE TOTAL
    AT END OF MDV01.
      DELETE I_LINE WHERE DATUM = SPACE
                      AND VERID = SPACE.
      ASSIGN COMPONENT 'PRODU' OF STRUCTURE  TO .
       = TEXT-T03.
      IF L_SUM > 0.
        ASSIGN COMPONENT 'OVERDUE' OF STRUCTURE  TO .
        WRITE L_SUM TO .
      ENDIF.
      ASSIGN COMPONENT 'COLOR' OF STRUCTURE  TO .
       = 'C700'.
      CLEAR L_DATUM.
      SORT I_SUM BY NUM.
      LOOP AT I_LINE INTO W_LINE.
        CLEAR L_SUMLINE.
        LOOP AT I_SUM INTO W_SUM WHERE NUM = W_LINE-LDATA.
          L_SUMLINE = L_SUMLINE + W_SUM-MENGE.
        ENDLOOP.
        L_SUMSUM = L_SUMSUM + L_SUMLINE.
        IF W_LINE-LDATA  SPACE.
          IF  L_SUMLINE > 0.
            ASSIGN COMPONENT W_LINE-LDATA OF STRUCTURE  TO .
            WRITE L_SUMLINE TO .
          ENDIF.
        ENDIF.
      ENDLOOP.
      L_SUMSUM = L_SUMSUM + L_SUM.
      ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE  TO .
      WRITE L_SUMSUM TO .
      CLEAR L_SUMSUM .
      APPEND  TO .
      CLEAR .
      CLEAR I_SUM[].
      CLEAR L_SUM.
    ENDAT.
    L_MDV01 = W_AFKOBAK-MDV01.
    L_VERID = W_AFKOBAK-VERID.
  ENDLOOP.
*NO-LINE
  CLEAR L_SUMSUM.
  CLEAR:L_MDV01_1,L_VERID_1,L_MATNR_1.
  LOOP AT I_AFKO INTO W_AFKO
    WHERE MDV01 = SPACE OR VERID = SPACE.
    IF SY-TABIX = 1.
      ASSIGN COMPONENT 'PRODU' OF STRUCTURE  TO .
       = TEXT-T04.
      APPEND  TO .
      CLEAR .
    ENDIF.
    ASSIGN COMPONENT 'PRODU' OF STRUCTURE  TO .
     = W_AFKO-PLNBEZ.
    ASSIGN COMPONENT 'ORDER' OF STRUCTURE  TO .
     = W_AFKO-AUFNR.
    ASSIGN COMPONENT 'PRODVER' OF STRUCTURE  TO .
     = W_AFKO-VERID.
    IF P_START = 'X'.
      L_SDATE = W_AFKO-GSTRS.
    ELSE.
      L_SDATE = W_AFKO-GLTRS.
    ENDIF.
    L_DATUM = S_DATE-LOW.
    IF L_SDATE  TO .
      WRITE W_AFKO-GAMNG TO .
      L_SUMSUM = L_SUMSUM + W_AFKO-GAMNG.
    ENDIF.
    CLEAR L_N.
    DO V_DATE TIMES.
      L_N = L_N + 1.
      IF L_SDATE = L_DATUM.
        IF P_CHKBOX = 'X'.
          CLEAR W_LINE.
          READ TABLE I_LINE INTO W_LINE
          WITH KEY DATUM = L_DATUM
          VERID = W_AFKO-VERID+3(1).
          L_C = W_LINE-LDATA.
        ELSE.
          L_C = L_DATUM.
        ENDIF.
        IF L_C  SPACE.
          ASSIGN COMPONENT L_C OF STRUCTURE  TO .
          WRITE W_AFKO-GAMNG TO .
          L_SUMSUM = L_SUMSUM + W_AFKO-GAMNG.
        ENDIF.
      ENDIF.
      L_DATUM = L_DATUM + 1.
    ENDDO.
    ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE  TO .
    WRITE L_SUMSUM TO .
    APPEND  TO .
    CLEAR .
    L_MDV01_1 = W_AFKO-MDV01.
    L_VERID_1 = W_AFKO-VERID.
    L_MATNR_1 = W_AFKO-PLNBEZ.
  ENDLOOP.
ENDFORM.                    " FRM_TABLE_CREATE
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TABLE.
  DATA: NEW_TABLE TYPE REF TO DATA,
        NEW_LINE  TYPE REF TO DATA.
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = IT_FIELDCAT
    IMPORTING
      EP_TABLE        = NEW_TABLE.
  ASSIGN NEW_TABLE->* TO .
  CREATE DATA NEW_LINE LIKE LINE OF .
  ASSIGN NEW_LINE->* TO .
ENDFORM.                    " FRM_CREATE_TABLE
*&---------------------------------------------------------------------*
*&      Form  FRM_VALUE_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*   31
  L_DATUM = S_DATE-LOW + 31.
  IF S_DATE-HIGH > L_DATUM.
    SET CURSOR FIELD 'S_DATE-HIGH'.
    MESSAGE E021(ZP001).
  ENDIF.
* check production line is space
  IF NOT S_P_LIN[] IS INITIAL.
    L_1 = '3'.
  ENDIF.
* check material master is space
  IF NOT S_M_MAS[] IS INITIAL.
    L_2 = '4'.
  ENDIF.
* check mrp controller is space
  IF NOT S_MRP_C[] IS INITIAL.
    L_3 = '5'.
  ENDIF.
* Condition check
  READ TABLE I_DEFULT INTO W_DEFULT
    WITH KEY PLANT = '1'
             DATE = '2'
             PRODU = L_1
             MATNR = L_2
             MRP = L_3.
  IF SY-SUBRC  0.
    MESSAGE E022(ZP001).
  ELSE.
    V_NUM = W_DEFULT-NUM.
  ENDIF.
ENDFORM.                    " FRM_VALUE_CHECK


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/32493/showart_251626.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP