REPORT YSCQ_TEST2.
TABLES:SKA1,SKB1,SKC1A.
field-symbols: <fs_field> type any.
data: l_seq(2) type n,
L_FIELD(20).
data: BEGIN OF lt_total OCCURS 0 ,
mon(2) type n,
ums like skc1c-um01s,
umh like skc1c-um01s,
umo like skc1c-um01s,
umk like skc1c-um01s,
end of lt_total.
data: ls_total LIKE line of lt_total.
TYPE-POOLS: SLIS.
TYPE-POOLS: RSDS, RSFS.
DATA: FIELDCAT TYPE TABLE OF slis_fieldcat_alv.
DATA: I_layout TYPE SLIS_LAYOUT_ALV.
DATA: L_TITLE TYPE LVC_TITLE.
DATA: PGM LIKE SY-REPID.
*-------------------------------------------------------------
DATA: LT_SPFLI LIKE TABLE OF SPFLI,
LS_SPFLI LIKE LINE OF LT_SPFLI.
DATA: LT_SKC1C LIKE TABLE OF SKC1C,
LS_SKC1C LIKE LINE OF LT_SKC1C.
*-------------------------------------------------------------
DATA: CALLBACK TYPE TABLE OF LDBCB,
CALLBACK_WA LIKE LINE OF CALLBACK.
DATA: SELTAB TYPE TABLE OF RSPARAMS,
SELTAB_WA LIKE LINE OF SELTAB.
DATA: TEXPR TYPE RSDS_TEXPR,
FSEL TYPE RSFS_FIELDS.
*-------------------------------------------------------------
SELECT-OPTIONS: SD_SAKNR FOR SKA1-SAKNR MATCHCODE OBJECT SAKO.
SELECT-OPTIONS: SD_BUKRS FOR SKB1-BUKRS.
SELECT-OPTIONS: SD_GJAHR FOR SKC1A-GJAHR .
*-------------------------------------------------------------
START-OF-SELECTION.
PERFORM FRM_BUILD_SELECTIONS. “SELTAB
PERFORM FRM_BUILD_CALLBACK. ”CALLBACK
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
LDBNAME = 'SDF'
TABLES
CALLBACK = CALLBACK
SELECTIONS = SELTAB
EXCEPTIONS
LDB_NOT_REENTRANT = 1
LDB_INCORRECT = 2
LDB_ALREADY_RUNNING = 3
LDB_ERROR = 4
LDB_SELECTIONS_ERROR = 5
LDB_SELECTIONS_NOT_ACCEPTED = 6
VARIANT_NOT_EXISTENT = 7
VARIANT_OBSOLETE = 8
VARIANT_ERROR = 9
FREE_SELECTIONS_ERROR = 10
CALLBACK_NO_EVENT = 11
CALLBACK_NODE_DUPLICATE = 12
OTHERS = 13.
IF SY-SUBRC <> 0.
WRITE: 'Exception with SY-SUBRC', SY-SUBRC.
ENDIF.
END-OF-SELECTION.
LOOP AT LT_SKC1C INTO LS_SKC1C.
CLEAR:L_SEQ.
clear:LS_TOTAL.
DO 16 TIMES.
ADD 1 TO L_SEQ.
MOVE L_SEQ TO LS_TOTAL-MON.
CONCATENATE 'LS_SKC1C-UM' L_SEQ 'S' INTO L_FIELD.
ASSIGN (L_FIELD) TO <FS_FIELD>.
MOVE <FS_FIELD> TO LS_TOTAL-UMS.
CONCATENATE 'LS_SKC1C-UM' L_SEQ 'H' INTO L_FIELD.
ASSIGN (L_FIELD) TO <FS_FIELD>.
MOVE <FS_FIELD> TO LS_TOTAL-UMH.
CONCATENATE 'LS_SKC1C-UM' L_SEQ 'O' INTO L_FIELD.
ASSIGN (L_FIELD) TO <FS_FIELD>.
MOVE <FS_FIELD> TO LS_TOTAL-UMO.
LS_TOTAL-UMK = LS_SKC1C-UMSAV + LS_TOTAL-UMO .
MOVE LS_TOTAL-UMK TO LS_SKC1C-UMSAV.
COLLECT LS_TOTAL INTO LT_TOTAL .
ENDDO.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
* i_structure_name = 'SKC1C'
I_INTERNAL_TABNAME = 'LT_TOTAL'
I_PROGRAM_NAME = SY-REPID
I_INCLNAME = SY-REPID
i_buffer_active = 'Y'
CHANGING
ct_fieldcat = FIELDCAT
EXCEPTIONS
OTHERS = 0.
PGM = SY-REPID.
I_LAYOUT-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PGM
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = FIELDCAT
is_layout = I_layout
I_SAVE = 'A'
TABLES
T_OUTTAB = LT_TOTAL " LT_SKC1C
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*&---------------------------------------------------------------------*
*& Form CALLBACK_LDB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM CALLBACK_LDB USING NAME TYPE LDBN-LDBNODE
WA
EVT TYPE C
CHECK TYPE C.
CASE NAME.
WHEN 'SPFLI'.
MOVE-CORRESPONDING WA TO LS_SPFLI.
APPEND LS_SPFLI TO LT_SPFLI.
WHEN 'SKC1C'.
MOVE-CORRESPONDING WA TO LS_SKC1C.
APPEND LS_SKC1C TO LT_SKC1C.
ENDCASE.
ENDFORM. "CALLBACK_LDB
*&---------------------------------------------------------------------*
*& Form FRM_FILL_CALLBACK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_BUILD_CALLBACK .
CALLBACK_WA-LDBNODE = 'SKC1C'.
CALLBACK_WA-GET = 'X'.
CALLBACK_WA-GET_LATE = ' '.
CALLBACK_WA-CB_PROG = SY-REPID.
CALLBACK_WA-CB_FORM = 'CALLBACK_LDB'.
APPEND CALLBACK_WA TO CALLBACK.
ENDFORM. " FRM_FILL_CALLBACK
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_SELECTIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_BUILD_SELECTIONS .
LOOP AT SD_SAKNR.
MOVE-CORRESPONDING SD_SAKNR TO SELTAB_WA.
MOVE 'SD_SAKNR' TO SELTAB_WA-SELNAME.
APPEND SELTAB_WA TO SELTAB.
ENDLOOP.
LOOP AT SD_BUKRS.
MOVE-CORRESPONDING SD_BUKRS TO SELTAB_WA.
MOVE 'SD_BUKRS' TO SELTAB_WA-SELNAME.
APPEND SELTAB_WA TO SELTAB.
ENDLOOP.
LOOP AT SD_GJAHR.
MOVE-CORRESPONDING SD_GJAHR TO SELTAB_WA.
MOVE 'SD_GJAHR' TO SELTAB_WA-SELNAME.
APPEND SELTAB_WA TO SELTAB.
ENDLOOP.
CONCATENATE 'SD_CURTP ICP' '10' INTO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
CONCATENATE 'SD_CURTP IEQ' '10' INTO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
CONCATENATE 'SD_ITUSR IEQ' '' INTO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
CONCATENATE 'SD_GSB_S ICP' '*' INTO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
CONCATENATE 'SD_RTCUR ICP' '*' INTO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
ENDFORM. " FRM_BUILD_SELECTIONS
开发上面程序,需要知道SDF的结构和选择屏幕,怎么看结构和选择屏幕,as show below.
逻辑数据库提供了另外一种获得数据的方式,它可以代替Open SQL语句从数据库中读取数据。
是一种事先定义好了的数据库读取ABAP程序。
1:SE36 (创建,显示,修改)
2: 源代码可以看SDF的逻辑,选择可以看屏幕选择字段(ABAP使用)
选择,
想更深入学习,看这个链接
Logical Databases逻辑数据库_ChampaignWolf的博客-优快云博客_逻辑数据库