文档库 最新最全的文档下载
当前位置:文档库 › 综合-alv+报表+双击显示详细

综合-alv+报表+双击显示详细

*&---------------------------------------------------------------------*
*& Report ZABAP3_SCARR_2 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZABAP3_SCARR_2 .
TABLES:SCARR,SPFLI.
TYPE-POOLS: SLIS. "alv 输出必须要

DATA TAB_SP LIKE TABLE OF SPFLI WITH HEADER LINE. "定义数据接口表
DATA TAB_SC2 LIKE TABLE OF SCARR WITH HEADER LINE.
DATA TAB_SP1 LIKE TABLE OF SPFLI WITH HEADER LINE.
DATA: SY_UNAME LIKE SY-UNAME,
SY_NAME LIKE ADRP-NAME_LAST.

DATA: F_FORMNAME TYPE tdsfname VALUE 'ZABAP3_SCARR'."Smart form formname
DATA: F_FUNCNAME TYPE rs38l_fnam. "Smart form function name
DATA: CONTROL_PARAMETERS TYPE SSFCTRLOP.
DATA TAB_IX LIKE SY-TABIX. "循环读入数据控制参数

DATA: BEGIN OF TAB_SC1 OCCURS 0,
CHX TYPE C ,
CARRID LIKE SCARR-CARRID,
CARRNAME LIKE SCARR-CARRNAME,
CURRCODE LIKE SCARR-CURRCODE,
URL LIKE SCARR-URL,
END OF TAB_SC1.

SY_UNAME = SY-UNAME.
SELECT SINGLE NAME_LAST INTO SY_NAME "取出打印人姓名
FROM USR21 INNER JOIN ADRP
ON USR21~PERSNUMBER = ADRP~PERSNUMBER
WHERE USR21~BNAME = SY-UNAME.

*-------------------选择对话框------------------------------
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : CARRID1 FOR TAB_SP-CARRID OBLIGATORY NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK BLK1.
*--------------------根据选择框读入数据---------------------
SELECT CARRID CARRNAME CURRCODE URL INTO CORRESPONDING FIELDS OF TABLE
TAB_SC1 FROM SCARR WHERE CARRID IN CARRID1.
PERFORM ALV_DATA.

*----------------ALV_DATA-----------------------------------
FORM ALV_DATA.
DATA: F_REPID LIKE SY-REPID. "当前程序名
DATA: F_TITLE TYPE LVC_TITLE. "alv title

F_REPID = SY-REPID.
F_TITLE = '打印航空信息单'.

DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV. "整体alv的属性
GS_LAYOUT-BOX_FIELDNAME = 'CHX'. "选择框
* GS_LAYOUT-colwidth_optimize = 'X'. " 最合适宽度
GS_LAYOUT-F2CODE = 'LOOK'. "双击出现详细
"如果内部中有选择字段(例如chx)的话


DATA: IT_FIELDS TYPE SLIS_T_FIELDCAT_ALV.
DATA: WA_FIELDS TYPE LINE OF SLIS_T_FIELDCAT_ALV.

REFRESH IT_FIELDS.
CLEAR WA_FIELDS. "alv中具体字段的属性


WA_FIELDS-fieldname = 'CARRID'. "内表中的字段名
WA_FIELDS-seltext_l = '航空承运人id'. "alv上显示的
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'CARRNAME'.
WA_FIELDS-seltext_l = '航班名称'.
append WA_FIELDS to IT

_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'CURRCODE'.
WA_FIELDS-seltext_l = '航班货币'.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'URL'.
WA_FIELDS-seltext_l = 'URL'.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = F_REPID
I_CALLBACK_PF_STATUS_SET = 'SET_PF'
I_CALLBACK_USER_COMMAND = 'USER_COM'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = F_TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = IT_FIELDS
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = 'X'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = TAB_SC1
* 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. " ALV_DATA
*---------------------------------------------------------------------*
* FORM SET_PF *
*---------------------------------------------------------------------*
FORM set_pf USING EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'LIST_ALV'.
ENDFORM. "set_pf
*---------------------------------------------------------------------*
* FORM USER_COM *
*---------------------------------------------------------------------*
FORM user_com USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.


DATA: F_LINES TYPE I. "TAB_SC1总行数
data: myindex type SLIS_SELFIELD-TABINDEX.
data: MYFIELD type SLIS_SELFIELD-FIELDNAME .

CASE R_ucomm.
**********打印
* WHEN 'PRNR'.
* Describe Table TAB_SC1 lines f_lines.
* IF f_lines > 0.
* Perform ToPrint.
* ENDIF.

****预览
WHEN 'PRIR'.
Describe Table TAB_SC1 lines f_lines.
IF f_lines > 0.
Perform ToPrint.
ENDIF.
WHEN 'LOOK'.
* LOOP AT TAB_SC1.
* REFRESH: TAB_SC2.
* REFRESH: TAB_SP.
*
* IF TAB_SC1-CHX = 'X'.
* SELECT CONNID CITYFROM CITYTO DEPTIME ARRTIME DISTANCE INTO
* CORRESPONDING FIELDS OF TABLE TAB_SP FROM SPFLI
* WHERE CARRID = TAB_SC1-CARRID.
*
* ENDIF.
* ENDLOOP.
MYINDEX = RS_SELFIELD-TABINDEX. "读取双击的当前行
MYFIELD = RS_SELFIELD-FIELDNAME . "并用ALV显示
READ TABLE TAB_SC1 INDEX myindex .
REFRESH TAB_SP1.
SELECT * FROM SPFLI INTO TABLE TAB_SP1 WHERE CARRID =
TAB_SC1-CARRID.
PERFORM ALV_SP.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDFORM. "user_com

*&---------------------------------------------------------------------*
*& Form ToPrint
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ToPrint .


CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = F_FORMNAME
IMPORTING
FM_NAME = F_FUNCNAME.


CONTROL_PARAMETERS-no_dialog = 'X'.
IF SY-UCOMM = 'PRIR'.
CONTROL_PARAMETERS-preview = 'X'.
ELSE.
CONTROL_PARAMETERS-preview = ''.
ENDIF.
CONTROL_PARAMETERS-no_open = 'X'.
CONTROL_PARAMETERS-no_close = 'X'.

CALL FUNCTION 'SSF_OPEN'
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.


LOOP AT TAB_SC1.
REFRESH: TAB_SC2.
REFRESH: TAB_SP.

IF TAB_SC1-CHX = 'X'.
SELECT CONNID CITYFROM CITYTO DEPTIME ARRTIME DISTANCE INTO
CORRESPONDING FIELDS OF TABLE TAB_SP FROM SPFLI
WHERE CARRID = TAB_SC1-CARRID.

TAB_SC2-CARRID = TAB_SC1-CARRID.
TAB_SC2-CARRNAME = TAB_SC1-CARRNAME.
TAB_SC2-CURRCODE = TAB_SC1-CURRCODE.
TAB_SC2-URL = TAB_SC1-URL.
APPEND TAB_SC2.

CALL FUNCTION F_FUNCNAME
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
SY_UNAME = SY_UNAME
SY_NAME = SY_NAME
TABLES
TAB_CARR = TAB_

SP
TAB_SC = TAB_SC2.
ENDIF.
ENDLOOP.

CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO =
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4
.

ENDFORM. " ToPrint
*-------------------------------------------------
* ALV_SP
*-------------------------------------------------
FORM ALV_SP.
DATA: F_REPID LIKE SY-REPID. "当前程序名
DATA: F_TITLE TYPE LVC_TITLE. "alv title

F_REPID = SY-REPID.
F_TITLE = '航空信息详细'.

DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV. "整体alv的属性
* GS_LAYOUT-BOX_FIELDNAME = 'CHX'. "选择框
* GS_LAYOUT-colwidth_optimize = 'X'. " 最合适宽度
* GS_LAYOUT-F2CODE = 'LOOK'. "双击出现详细
"如果内部中有选择字段(例如chx)的话


DATA: IT_FIELDS TYPE SLIS_T_FIELDCAT_ALV.
DATA: WA_FIELDS TYPE LINE OF SLIS_T_FIELDCAT_ALV.

REFRESH IT_FIELDS.
CLEAR WA_FIELDS. "alv中具体字段的属性


WA_FIELDS-fieldname = 'CONNID'. "内表中的字段名
WA_FIELDS-seltext_l = '航空连接id'. "alv上显示的
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'CITYFROM'.
WA_FIELDS-seltext_l = '起飞城市'.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'CITYTO'.
WA_FIELDS-seltext_l = '目标城市'.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'DEPTIME'.
WA_FIELDS-seltext_l = '启程时间 '.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'ARRTIME'.
WA_FIELDS-seltext_l = '到达时间'.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.

WA_FIELDS-fieldname = 'DISTANCE'.
WA_FIELDS-seltext_l = '距离 '.
append WA_FIELDS to IT_FIELDS.
clear WA_FIELDS.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = F_REPID
* I_CALLBACK_PF_STATUS_SET = 'SET_PF'
* I_CALLBACK_USER_COMMAND = 'USER_COM'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = F_TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = IT_FIELDS
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE

= 'X'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = TAB_SP1
* 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. "ALV_SP

相关文档
相关文档 最新文档