BitComet 旗下网站

转到日志
相关贴吧:
ABAP code

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

楼主 发表于:2008-08-30 17:03:19 [回复]

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


 

您现在还没有登录,请在登录后发贴