SAP ABAP ALV报表练习 如图 将上两张图中的数据用ALV表示 要求如图 大神快来吧!!!写详细点有加分!
唉,算你小子走运,我刚写了本Simple程序就是类似这样的,100分给哥拿来吧少年!这么专业的回答你哪里找去!有加分的话,可以百度联系我,趁我闲的蛋疼这几天,免费教教你。
*&----------------------------------------------------------------------
*& プログラムID : ZZREPO54
*& 作成者 : 尹先森
*& 作成日 : 2013/04/18
*& 処理概要 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
*& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
*&---------------------------------------------------------------------*
*& 変更履歴
*& No 変更日 管理番号 変更者 変更内容
*& 0001 YYYY/MM/DD XXX-XX-XXX DYGXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
*&----------------------------------------------------------------------
REPORT ZZREPO54_ALV.
TYPE-POOLS: SLIS.
*----------------------------------------------------------------------*
* TYPES定义
*----------------------------------------------------------------------*
TYPES:
*----- テスト结果
BEGIN OF TYP_TH_TEST,
ZZCLASS LIKE ZZTEST_T-ZZCLASS, " クラス
ZZSTDNO LIKE ZZTEST_T-ZZSTDNO, " 学生番号
ZZTENKOK LIKE ZZTEST_T-ZZTENKOK, " 国语点数
ZZTENSAN LIKE ZZTEST_T-ZZTENSAN, " 算数点数
ZZTENRIK LIKE ZZTEST_T-ZZTENRIK, " 理科点数
ZZTENSHA LIKE ZZTEST_T-ZZTENSHA, " 社会点数
ZZNAME LIKE ZZNUMBER_T-ZZNAME, " 名前
END OF TYP_TH_TEST,
TYP_TD_TEST TYPE STANDARD TABLE OF TYP_TH_TEST,
*----- 学生氏名
BEGIN OF TYP_TH_NAME,
ZZNUMBER LIKE ZZNUMBER_T-ZZNUMBER, " 学生番号
ZZNAME LIKE ZZNUMBER_T-ZZNAME, " 氏名
END OF TYP_TH_NAME,
TYP_TD_NAME TYPE STANDARD TABLE OF TYP_TH_NAME.
*----------------------------------------------------------------------*
* DATA定义
*----------------------------------------------------------------------*
DATA:
*----- テスト结果内部テーブル
TD_TEST TYPE TYP_TD_TEST,
TH_TEST LIKE LINE OF TD_TEST,
*----- 学生氏名内部テーブル
TD_NAME TYPE TYP_TD_NAME,
*----- ログー
TD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
*----------------------------------------------------------------------*
* PARAMETERS/SELECT-OPTIONS定义
*----------------------------------------------------------------------*
SELECT-OPTIONS:
S_CLASS FOR TH_TEST-ZZCLASS " 选択条件:クラス
OBLIGATORY " 必须
MATCHCODE OBJECT ZZMC. " 検索ヘルプ
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----- 初期化処理
PERFORM INTBL_SHORI.
*----- データ选択処理
PERFORM SELECT_DATA.
*----- ログー编集
PERFORM FILEDCAT_EDT.
*----- ALV出力処理
PERFORM ALV_OUTPUT.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form INTBL_SHORI
*&---------------------------------------------------------------------*
* 初期化処理
*----------------------------------------------------------------------*
FORM INTBL_SHORI .
*----- グルバールデータのクリア
CLEAR:
TH_TEST, " テスト结果ヘッダ
TD_TEST, " テスト结果内部テーブル
TD_NAME. " 学生氏名内部テーブル
ENDFORM. " INTBL_SHORI
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* データ选択処理
*----------------------------------------------------------------------*
FORM SELECT_DATA .
DATA:
*----- 学生氏名内部ヘッダ
LTH_NAME TYPE TYP_TH_NAME.
FIELD-SYMBOLS:
*----- テスト结果
<LFS_TEST> TYPE TYP_TH_TEST.
*----- テスト结果テーブルより、クラスと等しいものを选択する
SELECT ZZCLASS " クラス
ZZSTDNO " 学生番号
ZZTENKOK " 国语点数
ZZTENSAN " 算数点数
ZZTENRIK " 理科点数
ZZTENSHA " 社会点数
FROM ZZTEST_T " テスト结果テーブル
INTO TABLE TD_TEST " テスト结果内部テーブル
WHERE ZZCLASS IN S_CLASS. " 选択条件:クラス
*----- データが存在の场合
IF SY-SUBRC = 0.
*----- スト结果内部テーブルのソート
SORT:
TD_TEST
BY ZZCLASS ASCENDING " クラス
ZZSTDNO ASCENDING. " 学生番号
*----- それ以外の场合
ELSE.
MESSAGE S000(YJZ) DISPLAY LIKE 'E'. " データが存在しません
LEAVE LIST-PROCESSING. " 选択画面を戻る
ENDIF.
*----- 学生番号テーブルより、氏名を取得する
SELECT ZZNUMBER " 学生番号
ZZNAME " 氏名
FROM ZZNUMBER_T " 学生番号テーブル
INTO TABLE TD_NAME. " 学生氏名内部テーブル
*----- 学生番号で升顺にソートする。
SORT:
TD_NAME
BY ZZNUMBER ASCENDING. " 学生番号
*----- 取得したテスト结果の学生番号を元に生徒名を取得する。
LOOP AT TD_TEST
ASSIGNING <LFS_TEST>.
*----- 学生番号を元に生徒名を取得する。
READ TABLE TD_NAME
INTO LTH_NAME " 学生氏名内部テーブル
WITH KEY
ZZNUMBER = <LFS_TEST>-ZZSTDNO " 选択条件:学生番号
BINARY SEARCH.
*----- リターンコードは'0'の场合
IF SY-SUBRC = 0. " 読み込みOK
<LFS_TEST>-ZZNAME = LTH_NAME-ZZNAME. " 氏名
*----- それ以外の场合
ELSE.
<LFS_TEST>-ZZNAME = TEXT-001. " '*** 未登録 ***'をセット
ENDIF.
*----- テーブルのクリア
CLEAR:
LTH_NAME.
ENDLOOP.
ENDFORM. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Form FILEDCAT_EDT
*&---------------------------------------------------------------------*
* ログー编集
*----------------------------------------------------------------------*
FORM FILEDCAT_EDT .
DATA:
LTH_FDC LIKE LINE OF TD_FIELDCAT. " ログー
*----- クラスログーの编集
LTH_FDC-FIELDNAME = 'ZZCLASS'. " クラス
LTH_FDC-OUTPUTLEN = 6. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
*----- 氏名ログーの编集
LTH_FDC-FIELDNAME = 'ZZNAME'. " 氏名
LTH_FDC-OUTPUTLEN = 12. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
*----- 国语点数ログーの编集
LTH_FDC-FIELDNAME = 'ZZTENKOK'. " 国语点数
LTH_FDC-OUTPUTLEN = 7. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
*----- 算数点数ログーの编集
LTH_FDC-FIELDNAME = 'ZZTENSAN'. " 算数点数
LTH_FDC-OUTPUTLEN = 7. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
*----- 理科点数ログーの编集
LTH_FDC-FIELDNAME = 'ZZTENRIK'. " 理科点数
LTH_FDC-OUTPUTLEN = 7. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
*----- 社会点数ログーの编集
LTH_FDC-FIELDNAME = 'ZZTENSHA'. " 社会点数
LTH_FDC-OUTPUTLEN = 7. " 出力长
APPEND LTH_FDC TO TD_FIELDCAT. " ログー
ENDFORM. " FILEDCAT_EDT
*&---------------------------------------------------------------------*
*& Form ALV_OUTPUT
*&---------------------------------------------------------------------*
* ALV出力処理
*----------------------------------------------------------------------*
FORM ALV_OUTPUT .
*----- ALV出力用泛用モジュール
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID " プラグラムーID
IT_FIELDCAT = TD_FIELDCAT " ログー
I_GRID_TITLE = TEXT-002 " ヘッダ
I_STRUCTURE_NAME = 'ZZALV_Y' " 构造ID
TABLES
T_OUTTAB = TD_TEST " テスト结果テーブル
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*----- リターンコード
IF SY-SUBRC <> 0.
*----- 処理なし
ENDIF.
ENDFORM. " ALV_OUTPUT
先用parameters 选值
取值用 select from . .. inner join 两个表,放在你定义的内表
然后 reuse_alv_grid_display.
用 ssrcfields 定义一个按键就完了。
先说说你会啥,然后可以教你。。。