*&---------------------------------------------------------------------*
*& 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