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