|
回复 #11 wpsl5168 的帖子
我写了个简单的,里面稍微有点不整齐,请见谅,时间有限~!
REPORT Y_BRUCE_001.
TYPE-POOLS: SLIS.
*&---------------------------------------------------------------------*
* DATA DEFINITION
*----------------------------------------------------------------------*
DATA: GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GP_TABLE TYPE REF TO DATA,
GS_TABLE TYPE REF TO DATA.
FIELD-SYMBOLS: <GT_TABLE> TYPE TABLE,
<GS_TABLE> TYPE ANY.
* 宏定义
DEFINE BLD_CATE.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-CFIELDNAME = &2.
LS_FIELDCAT-COLTEXT = &3.
LS_FIELDCAT-DATATYPE = &4.
LS_FIELDCAT-INTTYPE = &5.
LS_FIELDCAT-INTLEN = &6.
LS_FIELDCAT-DD_OUTLEN = &7.
LS_FIELDCAT-KEY = &8.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.
TABLES: BKPF.
SELECT-OPTIONS: S_BUDAT FOR BKPF-BUDAT OBLIGATORY NO-EXTENSION.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM BUILD_ITAB.
*&---------------------------------------------------------------------*
*& Form BUILD_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_ITAB.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT,
L_FIELDDESC TYPE LVC_TXT,
L_FIELDNAME TYPE FIELDNAME,
L_DAY_FIRST TYPE D,
L_DAY_LAST TYPE D,
L_DAY TYPE D.
FIELD-SYMBOLS: <FS_VALUE> TYPE ANY.
REFRESH: GT_FIELDCAT.
BLD_CATE 'MATNR' 'MATNR' '物料' 'CHAR'
'C' '000018' '000018' 'X'.
MOVE: S_BUDAT-LOW TO L_DAY_FIRST,
S_BUDAT-HIGH TO L_DAY.
L_DAY_FIRST+6(2) = '01'.
L_DAY+6(2) = '01'.
DO.
CONCATENATE L_DAY_FIRST+0(4) '年'
L_DAY_FIRST+4(2) '月'
INTO L_FIELDDESC.
CONCATENATE L_DAY_FIRST+0(4) '_'
L_DAY_FIRST+4(2)
INTO L_FIELDNAME.
BLD_CATE L_FIELDNAME SPACE L_FIELDDESC 'CURR'
'P' '000016' '000021' SPACE.
IF L_DAY_FIRST EQ L_DAY.
EXIT.
ENDIF.
"下一个月
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN = L_DAY_FIRST
IMPORTING
LAST_DAY_OF_MONTH = L_DAY_LAST
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2.
L_DAY_FIRST = L_DAY_LAST + 1.
ENDDO.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING IT_FIELDCATALOG = GT_FIELDCAT
IMPORTING EP_TABLE = GP_TABLE.
ASSIGN GP_TABLE->* TO <GT_TABLE>.
CREATE DATA GS_TABLE LIKE LINE OF <GT_TABLE>.
ASSIGN GS_TABLE->* TO <GS_TABLE>.
"赋值
L_FIELDNAME = 'MATNR'.
ASSIGN COMPONENT L_FIELDNAME OF STRUCTURE
<GS_TABLE> TO <FS_VALUE>.
<FS_VALUE> = '000000111111111112'.
"根据数据把年月的数据字段拼出来在写内容....
"...
APPEND <GS_TABLE> TO <GT_TABLE>.
"输出
DATA: I_REPID LIKE SY-REPID.
DATA: GT_FIELDCAT_OUT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
MOVE SY-REPID TO I_REPID.
LOOP AT GT_FIELDCAT INTO LS_FIELDCAT.
MOVE-CORRESPONDING LS_FIELDCAT TO GT_FIELDCAT_OUT.
APPEND GT_FIELDCAT_OUT.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_REPID
I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND2'
IT_FIELDCAT = GT_FIELDCAT_OUT[]
I_SAVE = 'A'
TABLES
T_OUTTAB = <GT_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.
ENDFORM. " BUILD_ITAB
*---------------------------------------------------------------------*
* FORM F_ALV_USER_COMMAND2 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> R_UCOMM *
* --> RS_SELFIELD *
*---------------------------------------------------------------------*
FORM F_ALV_USER_COMMAND2 USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CLEAR <GS_TABLE>.
CASE R_UCOMM.
WHEN '&IC1'."双击
READ TABLE <GT_TABLE> ASSIGNING <GS_TABLE>
INDEX RS_SELFIELD-TABINDEX.
ENDCASE.
ENDFORM. |
|