click 的个人资料Click's Blog照片日志列表更多 工具 帮助
8月30日

利用SUBTOTAL_TEXT事件对alv合计行项目进行修改,以显示自定义合计文本

* 技术要点:隐藏用来做合计的列,这样才能触发subtotal_text事件
*&---------------------------------------------------------------------*
*& Report  ZCTEST08
*&
*&---------------------------------------------------------------------*
*&利用SUBTOTAL_TEXT事件对alv合计行项目进行修改,以显示自定义合计文本
*&
*&---------------------------------------------------------------------*
REPORT  zctest08.
*----------------------------------------------------------------------*
*    类型池定义
*----------------------------------------------------------------------*
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
*    表结构定义
*----------------------------------------------------------------------*
TABLES: faglflext.
*----------------------------------------------------------------------*
*    类型定义
*----------------------------------------------------------------------*
TYPES:
  BEGIN OF ty_faglflext,
    racct  TYPE faglflext-racct,
    rpmax  TYPE faglflext-rpmax,
    rbusa  TYPE faglflext-rbusa,
    zz0001 TYPE faglflext-zz0001,
    drcrk  TYPE faglflext-drcrk,
    hslvt  TYPE faglflext-hslvt,
    hsl01  TYPE faglflext-hsl01,
    hsl02  TYPE faglflext-hsl02,
    hsl03  TYPE faglflext-hsl03,
    hsl04  TYPE faglflext-hsl04,
    hsl05  TYPE faglflext-hsl05,
    hsl06  TYPE faglflext-hsl06,
    hsl07  TYPE faglflext-hsl07,
    hsl08  TYPE faglflext-hsl08,
    hsl09  TYPE faglflext-hsl09,
    hsl10  TYPE faglflext-hsl10,
    hsl11  TYPE faglflext-hsl11,
    hsl12  TYPE faglflext-hsl12,
    hsl13  TYPE faglflext-hsl13,
    hsl14  TYPE faglflext-hsl14,
    hsl15  TYPE faglflext-hsl15,
    hsl16  TYPE faglflext-hsl16,
  END OF ty_faglflext,
  BEGIN OF ty_data,
    racct_h TYPE faglflext-racct,
    rbusa_h TYPE faglflext-rbusa,
    racct   TYPE faglflext-racct,
    rbusa   TYPE faglflext-rbusa,
    zz0001  TYPE faglflext-zz0001,
    hslvt   TYPE faglflext-hslvt,
    hsl_s   TYPE faglflext-hslvt,
    hsl_h   TYPE faglflext-hslvt,
  END OF ty_data.
*&---------------------------------------------------------------------*
*&    内表定义
*&---------------------------------------------------------------------*
DATA: it_fag       TYPE TABLE OF ty_faglflext,
      it_data      TYPE TABLE OF ty_data,
      it_fieldcat  TYPE slis_t_fieldcat_alv,
      it_events    TYPE slis_t_event,
      it_sort      TYPE slis_t_sortinfo_alv,
      it_excluding TYPE slis_t_extab.
*&---------------------------------------------------------------------*
*&  工作区定义
*&---------------------------------------------------------------------*
DATA: iw_fag       TYPE ty_faglflext,          "总计工作区
      iw_data      TYPE ty_data,
      iw_fieldcat  TYPE slis_fieldcat_alv,
      iw_event     TYPE slis_alv_event,
      iw_sort      TYPE slis_sortinfo_alv,
      iw_layout    TYPE slis_layout_alv,       "ALV输出布局
      iw_print     TYPE slis_print_alv,
      iw_excluding TYPE slis_extab.
*&---------------------------------------------------------------------*
*&  屏幕定义
*&---------------------------------------------------------------------*
PARAMETERS:
  p_year  TYPE faglflext-ryear OBLIGATORY,               "会计年度
  p_rldnr TYPE faglflext-rldnr DEFAULT '0L' OBLIGATORY.  "分类帐
SELECT-OPTIONS:
  s_racct FOR faglflext-racct.
*----------------------------------------------------------------------*
*    INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* 隐藏用来做合计的两列,这样才能触发subtotal_text事件
  PERFORM f_fill_fieldcat
    USING: 'X'   'RACCT_H' '总帐科目'            space,
           'X'   'RBUSA_H' '业务范围'            space,
           space 'RACCT'   '总帐科目'            space,
           space 'RBUSA'   '业务范围'            space,
           space 'ZZ0001'  '附加-各公司任意信息' space,
           space 'HSLVT'   '年初结转'            'X'  ,
           space 'HSL_S'   '本期借方'            'X'  ,
           space 'HSL_H'   '本期贷方'            'X'  .
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    IMPORTING
      et_events       = it_events
    EXCEPTIONS
      list_type_wrong = 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.
* SUBTOTAL_TEXT事件
  READ TABLE it_events INTO iw_event
    WITH KEY name = slis_ev_subtotal_text.
  iw_event-form = 'F_SUBTOTAL_TEXT'.
  MODIFY it_events FROM iw_event INDEX sy-tabix.
* 以隐藏的两列做合计
  CLEAR iw_sort.
  iw_sort-spos = 1.
  iw_sort-fieldname = 'RACCT_H'.
  iw_sort-subtot = 'X'.
  APPEND iw_sort TO it_sort.
  CLEAR iw_sort.
  iw_sort-spos = 1.
  iw_sort-fieldname = 'RBUSA_H'.
  iw_sort-subtot = 'X'.
  APPEND iw_sort TO it_sort.
  iw_layout-colwidth_optimize    = 'X'."列宽自适应
  iw_layout-no_totalline         = 'X'."不显示总合计行

* 屏蔽'更改布局'按钮
  iw_excluding-fcode = '&OL0'.
  APPEND iw_excluding TO it_excluding.
 
*&---------------------------------------------------------------------*
*&    START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE it_fag
    FROM faglflext
   WHERE ryear = p_year
     AND rldnr = p_rldnr
     AND racct IN s_racct.
  LOOP AT it_fag INTO iw_fag.
    CLEAR iw_data.
    iw_data-racct  = iw_data-racct_h = iw_fag-racct.
    iw_data-rbusa  = iw_data-rbusa_h = iw_fag-rbusa.
    iw_data-zz0001 = iw_fag-zz0001.
    iw_data-hslvt  = iw_fag-hslvt.
*   期间金额合计(1~16)
    PERFORM f_calc_hsl.
    COLLECT iw_data INTO it_data.
    CLEAR iw_fag.
  ENDLOOP.
  DATA: l_repid TYPE sy-repid.
  l_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK              = ' '
*     I_BYPASSING_BUFFER             =
*     I_BUFFER_ACTIVE                = ' '
      i_callback_program             = l_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
*     I_CALLBACK_USER_COMMAND        = ' '
*     I_STRUCTURE_NAME               =
      is_layout                      = iw_layout
      it_fieldcat                    = it_fieldcat
      it_excluding                   = it_excluding
*     IT_SPECIAL_GROUPS              =
      it_sort                        = it_sort
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
*     I_DEFAULT                      = 'X'
*     I_SAVE                         = ' '
*     IS_VARIANT                     =
      it_events                      = 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
*     IR_SALV_LIST_ADAPTER           =
*     IT_EXCEPT_QINFO                =
*     I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER        =
*     ES_EXIT_CAUSED_BY_USER         =
    TABLES
      t_outtab                       = it_data
    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.
*&---------------------------------------------------------------------*
*&      Form  F_FILL_FIELDCAT
*&---------------------------------------------------------------------*
FORM f_fill_fieldcat  USING u_out
                            u_fnmae
                            u_text
                            u_sum.
  CLEAR iw_fieldcat.
  IF u_out = 'X'.
    iw_fieldcat-no_out    = 'X'.
  ENDIF.
  iw_fieldcat-fieldname = u_fnmae.
  iw_fieldcat-seltext_l = u_text.
  IF u_sum = 'X'.
    iw_fieldcat-do_sum = 'X'.
  ENDIF.
  APPEND iw_fieldcat TO it_fieldcat.
ENDFORM.                    " F_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  F_CALC_HSL
*&---------------------------------------------------------------------*
FORM f_calc_hsl .
  FIELD-SYMBOLS <fs> TYPE faglflext-hslvt.
  DATA: l_name(5) TYPE c,
        l_cnt(2) TYPE n,
        l_sum    TYPE faglflext-hslvt.
  DO.
    l_cnt = l_cnt + 1.
    CONCATENATE 'HSL' l_cnt INTO l_name.
    ASSIGN COMPONENT l_name OF STRUCTURE iw_fag TO <fs>.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    l_sum = l_sum + <fs>.
  ENDDO.
  IF iw_fag-drcrk = 'S'.
    iw_data-hsl_s = l_sum.
  ELSEIF iw_fag-drcrk = 'H'.
    iw_data-hsl_h = l_sum.
  ENDIF.
ENDFORM.                    " F_calc_HSL
*&---------------------------------------------------------------------*
*&      Form  F_SUBTOTAL_TEXT
*&---------------------------------------------------------------------*
FORM f_subtotal_text USING i_line        TYPE ty_data
                           i_subtot_text TYPE slis_subtot_text.
* 自定义的合计行文本
  IF i_subtot_text-criteria = 'RACCT_H'.
    i_subtot_text-display_text_for_subtotal = '(总帐科目编号合计)'.
  ELSEIF i_subtot_text-criteria = 'RBUSA_H'.
    i_subtot_text-display_text_for_subtotal = '(业务范围编号小计)'.
  ENDIF.

ENDFORM.                    " FRM_SUBTOTAL_TEXT 
8月23日

将文本文件转为pdf格式

REPORT zctest02 LINE-SIZE 132.
TYPES:
  BEGIN OF typ_file,
    text(132) TYPE c,
  END OF typ_file.
DATA:
  iw_file TYPE typ_file,
  it_file TYPE TABLE OF typ_file,
  it_pdf  TYPE TABLE OF tline,
  g_size  TYPE i,
  g_spid  TYPE rspoid,
  g_para  TYPE pri_params,
  g_flag  TYPE c.
PARAMETERS: p_from(128) TYPE c OBLIGATORY LOWER CASE
                               DEFAULT 'D:\test\char.txt',
            p_to(128)   TYPE c OBLIGATORY LOWER CASE
                               DEFAULT 'D:\test\test.pdf'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_from.
  PERFORM f_get_filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_to.
  PERFORM f_set_filename.
START-OF-SELECTION.
  PERFORM f_read_file.
  CALL FUNCTION 'GET_PRINT_PARAMETERS'
*   EXPORTING
*     ARCHIVE_ID                     = C_CHAR_UNKNOWN
*     ARCHIVE_INFO                   = C_CHAR_UNKNOWN
*     ARCHIVE_MODE                   = C_CHAR_UNKNOWN
*     ARCHIVE_TEXT                   = C_CHAR_UNKNOWN
*     AR_OBJECT                      = C_CHAR_UNKNOWN
*     ARCHIVE_REPORT                 = C_CHAR_UNKNOWN
*     AUTHORITY                      = C_CHAR_UNKNOWN
*     COPIES                         = C_NUM3_UNKNOWN
*     COVER_PAGE                     = C_CHAR_UNKNOWN
*     DATA_SET                       = C_CHAR_UNKNOWN
*     DEPARTMENT                     = C_CHAR_UNKNOWN
*     DESTINATION                    = C_CHAR_UNKNOWN
*     EXPIRATION                     = C_NUM1_UNKNOWN
*     IMMEDIATELY                    = C_CHAR_UNKNOWN
*     IN_ARCHIVE_PARAMETERS          = ' '
*     IN_PARAMETERS                  = ' '
*     LAYOUT                         = C_CHAR_UNKNOWN
*     LINE_COUNT                     = C_INT_UNKNOWN
*     LINE_SIZE                      = C_INT_UNKNOWN
*     LIST_NAME                      = C_CHAR_UNKNOWN
*     LIST_TEXT                      = C_CHAR_UNKNOWN
*     MODE                           = ' '
*     NEW_LIST_ID                    = C_CHAR_UNKNOWN
*     PROTECT_LIST                   = C_CHAR_UNKNOWN
*     NO_DIALOG                      = C_FALSE
*     RECEIVER                       = C_CHAR_UNKNOWN
*     RELEASE                        = C_CHAR_UNKNOWN
*     REPORT                         = C_CHAR_UNKNOWN
*     SAP_COVER_PAGE                 = C_CHAR_UNKNOWN
*     HOST_COVER_PAGE                = C_CHAR_UNKNOWN
*     PRIORITY                       = C_NUM1_UNKNOWN
*     SAP_OBJECT                     = C_CHAR_UNKNOWN
*     TYPE                           = C_CHAR_UNKNOWN
*     USER                           = SY-UNAME
*     USE_OLD_LAYOUT                 = ' '
*     UC_DISPLAY_MODE                = C_CHAR_UNKNOWN
*     DRAFT                          = C_CHAR_UNKNOWN
*     ABAP_LIST                      = ' '
*     USE_ARCHIVENAME_DEF            = ' '
*     DEFAULT_SPOOL_SIZE             = C_CHAR_UNKNOWN
*     WITH_STRUCTURE                 = C_CHAR_UNKNOWN
*     SUPPRESS_SHADING               = C_CHAR_UNKNOWN
*     PO_FAX_STORE                   = ' '
*     NO_FRAMES                      = C_CHAR_UNKNOWN
    IMPORTING
*     OUT_ARCHIVE_PARAMETERS         =
      out_parameters                 = g_para
      valid                          = g_flag
*     VALID_FOR_SPOOL_CREATION       =
   EXCEPTIONS
     archive_info_not_found         = 1
     invalid_print_params           = 2
     invalid_archive_params         = 3
     OTHERS                         = 4
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CHECK g_flag = 'X'.
  NEW-PAGE
    NO-TITLE
    NO-HEADING
    PRINT ON PARAMETERS g_para
    NO DIALOG.
  LOOP AT it_file INTO iw_file.
    WRITE: /1 iw_file-text.
    CLEAR iw_file.
  ENDLOOP.
  NEW-PAGE PRINT OFF.
* SPOOL转PDF
  g_spid = sy-spono.
  CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
    EXPORTING
      src_spoolid                    = g_spid
      no_dialog                      = ' '
*     DST_DEVICE                     =
*     PDF_DESTINATION                =
    IMPORTING
      pdf_bytecount                  = g_size
*     PDF_SPOOLID                    =
*     LIST_PAGECOUNT                 =
*     BTC_JOBNAME                    =
*     BTC_JOBCOUNT                   =
    TABLES
      pdf                            = it_pdf
   EXCEPTIONS
     err_no_abap_spooljob           = 1
     err_no_spooljob                = 2
     err_no_permission              = 3
     err_conv_not_possible          = 4
     err_bad_destdevice             = 5
     user_cancelled                 = 6
     err_spoolerror                 = 7
     err_temseerror                 = 8
     err_btcjob_open_failed         = 9
     err_btcjob_submit_failed       = 10
     err_btcjob_close_failed        = 11
     OTHERS                         = 12
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  PERFORM f_save_file.
*&---------------------------------------------------------------------*
*&      Form  F_GET_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_filename .
  DATA: l_rc    TYPE i,
        it_file TYPE filetable,
        l_obj TYPE REF TO cl_gui_frontend_services.
  CREATE OBJECT l_obj.
  CALL METHOD l_obj->file_open_dialog
    EXPORTING
      file_filter       = '.txt'
      initial_directory = 'D:\test'
    CHANGING
      file_table        = it_file
      rc                = l_rc.
  CHECK l_rc = 1.
  READ TABLE it_file INTO p_from INDEX 1.
ENDFORM.                    " F_GET_FILENAME
*&---------------------------------------------------------------------*
*&      Form  F_READ_FILE
*&---------------------------------------------------------------------*
FORM f_read_file .
  DATA: l_fname TYPE string.
  l_fname = p_from.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                      = l_fname
      filetype                      = 'ASC'
*     HAS_FIELD_SEPARATOR           = ' '
*     HEADER_LENGTH                 = 0
*     READ_BY_LINE                  = 'X'
*     DAT_MODE                      = ' '
*     CODEPAGE                      = ' '
*     IGNORE_CERR                   = ABAP_TRUE
*     REPLACEMENT                   = '#'
*     CHECK_BOM                     = ' '
*     VIRUS_SCAN_PROFILE            =
*     NO_AUTH_CHECK                 = ' '
*   IMPORTING
*     FILELENGTH                    =
*     HEADER                        =
    TABLES
      data_tab                      = it_file
   EXCEPTIONS
     file_open_error               = 1
     file_read_error               = 2
     no_batch                      = 3
     gui_refuse_filetransfer       = 4
     invalid_type                  = 5
     no_authority                  = 6
     unknown_error                 = 7
     bad_data_format               = 8
     header_not_allowed            = 9
     separator_not_allowed         = 10
     header_too_long               = 11
     unknown_dp_error              = 12
     access_denied                 = 13
     dp_out_of_memory              = 14
     disk_full                     = 15
     dp_timeout                    = 16
     OTHERS                        = 17
            .
  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.                    " F_READ_FILE
*&---------------------------------------------------------------------*
*&      Form  F_SET_FILENAME
*&---------------------------------------------------------------------*
FORM f_set_filename .
  DATA: l_rc TYPE i,
        it_file TYPE filetable,
        l_name TYPE string,
        l_path TYPE string,
        l_fpath TYPE string,
        l_obj TYPE REF TO cl_gui_frontend_services.
  CREATE OBJECT l_obj.
  CALL METHOD l_obj->file_save_dialog
    EXPORTING
      file_filter       = '.pdf'
      initial_directory = 'D:\test'
    CHANGING
      filename          = l_name
      path              = l_path
      fullpath          = l_fpath
      user_action       = l_rc.
  CHECK l_rc <> 9.
  p_to = l_fpath.
ENDFORM.                    " F_SET_FILENAME
*&---------------------------------------------------------------------*
*&      Form  F_SAVE_FILE
*&---------------------------------------------------------------------*
FORM f_save_file .
  DATA:l_file TYPE string.
  l_file = p_to.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize                    = g_size
      filename                        = l_file
      filetype                        = 'BIN'
*     APPEND                          = ' '
*     WRITE_FIELD_SEPARATOR           = ' '
*     HEADER                          = '00'
*     TRUNC_TRAILING_BLANKS           = ' '
*     WRITE_LF                        = 'X'
*     COL_SELECT                      = ' '
*     COL_SELECT_MASK                 = ' '
*     DAT_MODE                        = ' '
*     CONFIRM_OVERWRITE               = ' '
*     NO_AUTH_CHECK                   = ' '
*     CODEPAGE                        = ' '
*     IGNORE_CERR                     = ABAP_TRUE
*     REPLACEMENT                     = '#'
*     WRITE_BOM                       = ' '
*     TRUNC_TRAILING_BLANKS_EOL       = 'X'
*     WK1_N_FORMAT                    = ' '
*     WK1_N_SIZE                      = ' '
*     WK1_T_FORMAT                    = ' '
*     WK1_T_SIZE                      = ' '
*     WRITE_EOL                       = ABAP_TRUE
    IMPORTING
      filelength                      = g_size
    TABLES
      data_tab                        = it_pdf
*     FIELDNAMES                      =
   EXCEPTIONS
     file_write_error                = 1
     no_batch                        = 2
     gui_refuse_filetransfer         = 3
     invalid_type                    = 4
     no_authority                    = 5
     unknown_error                   = 6
     header_not_allowed              = 7
     separator_not_allowed           = 8
     filesize_not_allowed            = 9
     header_too_long                 = 10
     dp_error_create                 = 11
     dp_error_send                   = 12
     dp_error_write                  = 13
     unknown_dp_error                = 14
     access_denied                   = 15
     dp_out_of_memory                = 16
     disk_full                       = 17
     dp_timeout                      = 18
     file_not_found                  = 19
     dataprovider_exception          = 20
     control_flush_error             = 21
     OTHERS                          = 22
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  WRITE 'SAVED SUCCESSFULLY!'.
ENDFORM.                    " F_SAVE_FILE