*&---------------------------------------------------------------------*
*& Form FRM_GENERATION_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.
DATA LR_STRUC TYPE REF TO DATA.
DATA LR_TABLE TYPE REF TO DATA.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA TYPE REF TO CL_ABAP_DATADESCR.
DATA LT_COMP TYPE ABAP_COMPONENT_TAB.
DATA:
LR_ITAB_TYPE TYPE REF TO CL_ABAP_TABLEDESCR,
LR_STRUCT_TYPE TYPE REF TO CL_ABAP_STRUCTDESCR,
LT_COMP_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE WITH HEADER LINE.
DATA LV_FIELD TYPE CHAR10.
DATA LV_VALUE.
DATA DYN_WA TYPE REF TO DATA.
DATA DYN_TABLE TYPE REF TO DATA.
DATA LS_CELL TYPE LVC_S_SCOL.
DATA LT_CELL TYPE LVC_T_SCOL.
DATA L_STRING TYPE STRING.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
<DYN_WA> TYPE ANY,
<DYN_FIELD> TYPE ANY,
<DYN_CELL> TYPE ANY.
CONSTANTS LC_STATUS TYPE CHAR10 VALUE 'STATUS'.
CONSTANTS LC_CELLCOLOR TYPE CHAR10 VALUE 'CELLCOLOR'.
CONSTANTS LC_1 TYPE C VALUE '1'.
CONSTANTS LC_2 TYPE C VALUE '2'.
CONSTANTS LC_3 TYPE C VALUE '3'.
CONSTANTS LC_0 TYPE C VALUE '0'.
CONSTANTS LC_STRUC TYPE DDOBJNAME VALUE 'ZPMS_INSPLOG'.
DATA LV_DATE TYPE D.
DATA LV_POSITION(4) TYPE N.
DATA LV_OFFSET(6) TYPE N.
*1.获取表中的字段结构
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
TABNAME = LC_STRUC
TABLES
DFIES_TAB = LT_TABLE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT LT_TABLE INTO LS_TABLE.
IF LS_TABLE-FIELDNAME = LC_STATUS.
LV_DATE = GV_DATE_S.
WHILE LV_DATE <= GV_DATE_E.
LS_TABLE-LFIELDNAME = LC_STATUS && LV_DATE+6(2).
PERFORM FRM_ADD_COMP USING LS_TABLE CHANGING LT_COMP.
PERFORM FRM_ADD_FCAT USING LS_TABLE.
LV_DATE = LV_DATE + 1.
ENDWHILE.
ELSE.
PERFORM FRM_ADD_FCAT USING LS_TABLE.
PERFORM FRM_ADD_COMP USING LS_TABLE CHANGING LT_COMP.
ENDIF.
ENDLOOP.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = GT_FIELDCAT
IMPORTING
EP_TABLE = LR_TABLE
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
IF LR_TABLE IS BOUND.
* Add 'CELLCOLOR' to Table
ASSIGN LR_TABLE->* TO <DYN_TABLE>.
LR_ITAB_TYPE ?= CL_ABAP_TABLEDESCR=>DESCRIBE_BY_DATA( <DYN_TABLE> ).
LR_STRUCT_TYPE ?= LR_ITAB_TYPE->GET_TABLE_LINE_TYPE( ).
LT_COMP_TAB[] = LR_STRUCT_TYPE->GET_COMPONENTS( ).
LT_COMP_TAB-NAME = LC_CELLCOLOR.
LR_STRUCT_TYPE ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'LVC_S_SCOL' ).
LT_COMP_TAB-TYPE = CL_ABAP_TABLEDESCR=>CREATE( LR_STRUCT_TYPE ).
INSERT LT_COMP_TAB INTO LT_COMP_TAB INDEX 1.
LR_STRUCT_TYPE = CL_ABAP_STRUCTDESCR=>CREATE( LT_COMP_TAB[] ).
LR_ITAB_TYPE = CL_ABAP_TABLEDESCR=>CREATE( LR_STRUCT_TYPE ).
CREATE DATA LR_TABLE TYPE HANDLE LR_ITAB_TYPE.
ASSIGN LR_TABLE->* TO <DYN_TABLE>.
CREATE DATA LR_STRUC LIKE LINE OF <DYN_TABLE>.
ASSIGN LR_STRUC->* TO <DYN_WA>.
ENDIF.
"organize the output table
LOOP AT GT_DATA INTO GS_DATA.
MOVE-CORRESPONDING GS_DATA TO <DYN_WA>.
LV_DATE = GV_DATE_S.
"check schedule lines
CLEAR LT_CELL.
LOOP AT GT_MHIS INTO GS_MHIS WHERE WARPL = GS_DATA-WARPL.
LV_FIELD = TEXT-T00 && GS_MHIS-NPLDA+6(2).
ASSIGN COMPONENT LV_FIELD OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
IF GS_MHIS-TSARB = 'X'.
<DYN_FIELD> = '3'.
"check ztable result
LOOP AT LT_ORDER INTO DATA(LS_ORDER) WHERE WARPL = GS_DATA-WARPL.
READ TABLE GT_ZXJG INTO DATA(LS_ZXJG) WITH KEY QMNUM = LS_ORDER-QMNUM
PLNNR = GS_DATA-PLNNR
PLNAL = GS_DATA-PLNAL
VORNR = GS_DATA-VORNR.
IF SY-SUBRC = 0 AND LS_ZXJG-ZSTATUS = '1'.
<DYN_FIELD> = '1'.
ELSEIF SY-SUBRC = 0 AND LS_ZXJG-ZSTATUS = '2'.
<DYN_FIELD> = '2'.
ELSE.
ENDIF.
ENDLOOP.
ELSE.
<DYN_FIELD> = '0'.
ENDIF.
PERFORM FRM_SET_CELL_COLOR USING LV_FIELD <DYN_FIELD> CHANGING LT_CELL.
"Cell color
* CLEAR: LV_VALUE.
* LV_VALUE = <DYN_FIELD>.
ENDLOOP.
ASSIGN COMPONENT LC_CELLCOLOR OF STRUCTURE <DYN_WA> TO <DYN_CELL>.
<DYN_CELL> = LT_CELL.
APPEND <DYN_WA> TO <DYN_TABLE>.
CLEAR <DYN_WA>.
ENDLOOP.
*Layout
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-CTAB_FNAME = LC_CELLCOLOR.
"Alv Dispaly
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = <DYN_TABLE>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form frm_add_comp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_TABLE
*& <-- LT_COMP
*&---------------------------------------------------------------------*
FORM FRM_ADD_COMP USING PS_TABLE TYPE DFIES
CHANGING PT_COMP TYPE ABAP_COMPONENT_TAB.
DATA LS_TABLE TYPE DFIES.
DATA LS_COMP LIKE LINE OF PT_COMP.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA L_STRING TYPE STRING.
LS_TABLE = PS_TABLE.
CONCATENATE LS_TABLE-TABNAME '-' LS_TABLE-FIELDNAME INTO L_STRING.
LS_COMP-NAME = LS_TABLE-LFIELDNAME.
*读取字段类型
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = L_STRING
RECEIVING
P_DESCR_REF = LR_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LS_COMP-TYPE ?= LR_TYPE.
APPEND LS_COMP TO PT_COMP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_add_fcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_TABLE
*&---------------------------------------------------------------------*
FORM FRM_ADD_FCAT USING PS_TABLE TYPE DFIES.
DATA: LS_FIELDCAT LIKE LINE OF GT_FIELDCAT.
LS_FIELDCAT-FIELDNAME = PS_TABLE-FIELDNAME.
LS_FIELDCAT-REF_TABLE = PS_TABLE-TABNAME.
LS_FIELDCAT-REF_FIELD = PS_TABLE-FIELDNAME.
CASE PS_TABLE-FIELDNAME.
WHEN TEXT-T01.
LS_FIELDCAT-COLTEXT = TEXT-T11.
WHEN TEXT-T02.
LS_FIELDCAT-COLTEXT = TEXT-T12.
WHEN TEXT-T03.
LS_FIELDCAT-COLTEXT = TEXT-T13.
WHEN TEXT-T04.
LS_FIELDCAT-COLTEXT = TEXT-T14.
WHEN TEXT-T05.
LS_FIELDCAT-COLTEXT = TEXT-T15.
WHEN TEXT-T06.
LS_FIELDCAT-COLTEXT = TEXT-T16.
WHEN TEXT-T07.
LS_FIELDCAT-COLTEXT = TEXT-T17.
WHEN TEXT-T08.
LS_FIELDCAT-COLTEXT = TEXT-T18.
WHEN TEXT-T09.
LS_FIELDCAT-COLTEXT = TEXT-T19.
WHEN TEXT-T00.
LS_FIELDCAT-FIELDNAME = TEXT-T00 && PS_TABLE-LFIELDNAME+6(2).
LS_FIELDCAT-COLTEXT = 'D' && PS_TABLE-LFIELDNAME+6(2).
LS_FIELDCAT-REPTEXT = LS_FIELDCAT-COLTEXT.
LS_FIELDCAT-INTTYPE = 'C'.
LS_FIELDCAT-INTLEN = 4.
WHEN OTHERS.
ENDCASE.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_CELL_COLOR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_FIELD
*& --> LV_VALUE
*& <-- LT_CELL
*&---------------------------------------------------------------------*
FORM FRM_SET_CELL_COLOR USING PV_FIELD
PV_VALUE
CHANGING PT_CELL TYPE LVC_T_SCOL.
DATA LS_CELL TYPE LVC_S_SCOL.
CASE PV_VALUE.
WHEN '0'.
LS_CELL-FNAME = PV_FIELD.
LS_CELL-COLOR-COL = '1' .
LS_CELL-COLOR-INT = '1' .
LS_CELL-COLOR-INV = '1' .
WHEN '1'.
LS_CELL-FNAME = PV_FIELD.
LS_CELL-COLOR-COL = '5' .
LS_CELL-COLOR-INT = '1' .
LS_CELL-COLOR-INV = '1' .
WHEN '2' OR '3'.
LS_CELL-FNAME = PV_FIELD.
LS_CELL-COLOR-COL = '6' .
LS_CELL-COLOR-INT = '1' .
LS_CELL-COLOR-INV = '1' .
WHEN OTHERS.
ENDCASE.
IF LS_CELL IS NOT INITIAL.
APPEND LS_CELL TO PT_CELL.
ENDIF.
ENDFORM.