宏申's profileClick's BlogPhotosBlogListsMore ![]() | Help |
|
|
January 24 DELETE APPLICATION LOG ACCORDING TO NUMBER REPORT zctest02.
TABLES balhdr. DATA: it_handle TYPE bal_t_logh. SELECT-OPTIONS s_num FOR balhdr-lognumber OBLIGATORY. SELECT log_handle INTO TABLE it_handle FROM balhdr WHERE lognumber IN s_num. IF sy-subrc <> 0. MESSAGE 'HAVE NO SUCH NUMBER!' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. CALL FUNCTION 'BAL_DB_DELETE' EXPORTING i_t_log_handle = it_handle EXCEPTIONS no_logs_specified = 1 OTHERS = 2. IF sy-subrc = 0. MESSAGE 'DELETED SUCCESSFULLY!' TYPE 'S'. ELSE. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E' WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. Application Log: createT-CODE: SLG0 创建对象 SLG1 察看日志 REPORT zctest01. November 06 娱乐项目,更改logo1、输入Tcode:smw0;菜单:工具/web开发/web资源库 about unicode in abap*check if the system is unicode
IF cl_abap_char_utilities=>charsize = 1.
WRITE: 'This system is non-Unicode'(000). ELSE. WRITE: 'This system is Unicode'(001). ENDIF. *returns the hexadecimal unicode value for a character
CL_ABAP_CONV_OUT_CE=>UCCP
*returns a character for a unicode code point
CL_ABAP_CONV_IN_CE=>UCCP
October 24 日期型F4帮助:f4_date
*需求:只有显示年月,但要有日期的search help
PARAMETERS:p1(6) TYPE c. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1. DATA:l_date TYPE sy-datum. CALL FUNCTION 'F4_DATE' EXPORTING date_for_first_month = sy-datum IMPORTING select_date = l_date EXCEPTIONS calendar_buffer_not_loadable = 1 date_after_range = 2 date_before_range = 3 date_invalid = 4 factory_calendar_not_found = 5 holiday_calendar_not_found = 6 parameter_conflict = 7 OTHERS = 8. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. p1 = l_date+0(6). October 18 YM的算号器,很好很强大REPORT z_testym15 .
PARAMETERS:
sys_id(3) DEFAULT '000' , sys_numb(2) DEFAULT '00' , msg_ser(15) DEFAULT 'SUPERJXY' , ins_no(10) DEFAULT '0000000000'. START-OF-SELECTION.
DATA key(10). PERFORM get_sp_value USING sys_id sys_numb msg_ser ins_no CHANGING key. END-OF-SELECTION.
WRITE key. *&---------------------------------------------------------------------*
*& Form get_sp_value *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_PF_SID text * -->P_PF_SYSNO text * -->P_PF_SERVER text * <--P_PF_VALUE text *----------------------------------------------------------------------* FORM get_sp_value USING p_pf_sid p_pf_sysno p_pf_server p_pf_instno CHANGING p_pf_value. CONSTANTS: lc_part_len TYPE i VALUE 5, lc_pw_len TYPE i VALUE 10, lc_allowed_chars(38) TYPE c VALUE '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_'. DATA: lf_string(20) TYPE c, lf_key TYPE i, lf_part(lc_part_len) TYPE c, lf_finalf(lc_pw_len) TYPE c, lf_finalx TYPE xstring, lf_xbuffer TYPE xstring, lf_opf(10) TYPE c, lf_langu LIKE sy-langu, lf_subrc LIKE sy-subrc, lf_len TYPE i, lo_conv_to_x TYPE REF TO cl_abap_conv_out_ce. CLEAR: lf_string, lf_finalx, lf_opf.
CONCATENATE p_pf_sid p_pf_sysno p_pf_server INTO lf_string.
* Large letters only
TRANSLATE lf_string TO UPPER CASE. lf_langu = sy-langu.
SET LOCALE LANGUAGE 'E'. lo_conv_to_x = cl_abap_conv_out_ce=>create( encoding = '1100' ). lf_len = STRLEN( lf_string ). IF lf_string(lf_len) CN lc_allowed_chars.
ELSE. * Fold the input string to a lc_part_len long string
WHILE lf_len > 0. lf_part = lf_string(lc_part_len). SHIFT lf_string BY lc_part_len PLACES. lf_len = STRLEN( lf_string ). CALL METHOD lo_conv_to_x->reset. CALL METHOD lo_conv_to_x->write( data = lf_part n = -1 ). lf_xbuffer = lo_conv_to_x->get_buffer( ). lf_finalx = lf_finalx BIT-XOR lf_xbuffer. ENDWHILE. lf_key = 12.
PERFORM scramble USING lf_finalx
lf_key lc_part_len CHANGING lf_finalf lf_subrc. IF NOT lf_finalf IS INITIAL.
p_pf_value = lf_finalf. ELSE. CLEAR p_pf_value. ENDIF. ENDIF. ENDFORM. "get_sp_value
*&---------------------------------------------------------------------*
*& Form scramble *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LF_FINALX text * -->P_LF_KEY text * -->P_LC_PART_LEN text * <--P_LF_finalf text * <--P_LF_SUBRC text *----------------------------------------------------------------------* FORM scramble USING iv_xstring TYPE xstring iv_key TYPE i iv_src_len TYPE i CHANGING lf_finalf lf_subrc LIKE sy-subrc. CONSTANTS: lc_max_len TYPE i VALUE 20,
lc_mask(4) TYPE x VALUE '0000003F', lc_random(64) TYPE x VALUE 'F0ED53B83244F1F876C67959FD4F13A2' & 'C15195EC5483C234774943A27DE26596' & '5E5398789A17A33CD383A8B829FBDCA5' & '55D702778413ACDDF9B83116610E6DFA'. DATA: lv_key_index(4) TYPE x,
lv_rand_index(4) TYPE x, lv_xkey(4) TYPE x, lv_xkey_shl_1(4) TYPE x, lv_xkey_shr_5(4) TYPE x, lv_scramble_byte TYPE x, lv_dest(lc_max_len) TYPE x, lv_index TYPE i, lv_len TYPE i. CLEAR lf_subrc.
IF iv_src_len EQ 0. EXIT. ENDIF.
lv_len = XSTRLEN( iv_xstring ). IF iv_src_len GT lc_max_len OR iv_src_len GT lv_len. lf_subrc = 2. EXIT. ENDIF. lv_xkey = iv_key.
lv_xkey_shl_1 = iv_key * 2. lv_xkey_shr_5 = iv_key DIV 32. lv_rand_index = lv_xkey BIT-XOR lv_xkey_shr_5 BIT-XOR lv_xkey_shl_1. lv_rand_index = lv_rand_index BIT-AND lc_mask. lv_index = 0.
DO iv_src_len TIMES. CATCH SYSTEM-EXCEPTIONS compute_int_times_overflow = 1. lv_key_index = ( iv_key * lv_index * lv_index ) - lv_index. ENDCATCH. IF sy-subrc <> 0. lf_subrc = 1. EXIT. ENDIF. lv_scramble_byte = lc_random+lv_rand_index(1) BIT-XOR lv_key_index+3(1). lv_dest+lv_index(1) = iv_xstring+lv_index(1) BIT-XOR lv_scramble_byte. lv_index = lv_index + 1. lv_rand_index = lv_rand_index + 1. lv_rand_index = lv_rand_index BIT-AND lc_mask. ENDDO. IF lf_subrc <> 0. EXIT. ENDIF. WRITE lv_dest(iv_src_len) TO lf_finalf.
ENDFORM. " scramble October 16 在top_of_page事件中实现超过60位可打印的alv header(grid) 因为在 I_CALLBACK_HTML_TOP_OF_PAGE 中用cl_dd_document创建的alv头不能打印,而用REUSE_ALV_COMMENTARY_WRITE在top_of_page中输出的头虽然可以打印,但SLIS_T_LISTHEADER-INFO只有60位,有一定的局限性。所以在需要输出更长文本时,可以在top_of_page中使用以下代码实现
FORM f_top_of_page . DATA: lr_content TYPE REF TO cl_salv_form_element, lr_rows TYPE REF TO cl_salv_form_layout_grid, lr_row TYPE REF TO cl_salv_form_layout_flow, lr_grid_status TYPE REF TO cl_salv_form_layout_grid. DATA: l_row TYPE i VALUE '1'. DATA: l_string TYPE string. CREATE OBJECT lr_rows. lr_content = lr_rows. * 需要输出的文本 l_string = '1234567890abcdefgh1234567890abcdefgh'. * 相当于H (Header) lr_row = lr_rows->add_row( ). lr_row->create_header_information( text = l_string ). lr_row = lr_rows->add_row( ). lr_row = lr_rows->add_row( ). lr_grid_status = lr_row->create_grid( ). * 相当于S(Selection) lr_grid_status->create_label( row = l_row column = 1 text = l_string ). " Key lr_grid_status->create_text( row = l_row column = 2 text = l_string ). " Info lr_grid_status->create_text( row = l_row column = 3 text = l_string ). " Info ADD 1 TO l_row. lr_grid_status->create_label( row = l_row column = 1 text = l_string ). lr_row = lr_rows->add_row( ). lr_row = lr_rows->add_row( ). * 相当于A (Action) lr_row->create_action_information( text = l_string ). cl_salv_form_content=>set( lr_content ). ENDFORM. " F_TOP_OF_PAGE October 10 在user command事件中改变alv grid某列的显示模式(checkbox变普通)建一个status命名stu_100,建一个按钮ucomm为CHANGE
*&---------------------------------------------------------------------*
*& Report ZCTEST15 *& *&---------------------------------------------------------------------* *& 在user command事件中改变alv grid某列的显示模式(checkbox变普通) *& by click 2007.10.10 *&---------------------------------------------------------------------* REPORT zctest15 NO STANDARD PAGE HEADING.
TYPE-POOLS slis. DEFINE mac_field. clear iw_fieldcat. iw_fieldcat-col_pos = &1. iw_fieldcat-fieldname = &2. iw_fieldcat-seltext_l = &3. iw_fieldcat-intlen = &4. iw_fieldcat-checkbox = &5. iw_fieldcat-edit = &6. append iw_fieldcat to it_fieldcat. END-OF-DEFINITION. TYPES:
BEGIN OF ty_data, chk TYPE c, para1 TYPE char10, para2 TYPE char10, END OF ty_data. DATA: it_data TYPE TABLE OF ty_data, iw_data TYPE ty_data, it_exclude TYPE ui_functions, iw_exclude TYPE ui_func, iw_layout TYPE slis_layout_alv, it_fieldcat TYPE slis_t_fieldcat_alv, iw_fieldcat TYPE slis_fieldcat_alv. DATA:
w_repid TYPE sy-repid VALUE sy-repid. INITIALIZATION.
mac_field : '1' 'CHK' '选择' '1' 'X' 'X', '2' 'PARA1' '变量1' '10' space space, '3' 'PARA2' '变量2' '10' space space. iw_layout-colwidth_optimize = 'X'. START-OF-SELECTION.
DO 10 TIMES. CLEAR iw_data. iw_data-para1 = sy-index. iw_data-para2 = sy-index * sy-index. APPEND iw_data TO it_data. ENDDO. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING is_layout = iw_layout it_fieldcat = it_fieldcat i_callback_program = w_repid i_callback_pf_status_set = 'F_STATUS' i_callback_user_command = 'F_UCOMM' 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_STATUS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_status USING lit_extab TYPE slis_t_extab. SET PF-STATUS 'STU_100'. ENDFORM. " F_STATUS *&---------------------------------------------------------------------* *& Form F_UCOMM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_ucomm USING l_ucomm LIKE sy-ucomm liw_selfield TYPE slis_selfield . CASE l_ucomm. WHEN 'CHANGE'. PERFORM f_change. ENDCASE. ENDFORM. " F_UCOMM *&---------------------------------------------------------------------*
*& Form f_change *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_change . DATA: ref_grid TYPE REF TO cl_gui_alv_grid. DATA: liw_layout TYPE lvc_s_layo, lit_fieldcat TYPE lvc_t_fcat, liw_fieldcat TYPE lvc_s_fcat. * 取得当前alv的grid和fieldcat CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid et_fieldcat_lvc = lit_fieldcat. * 更新数据到内表 CALL METHOD ref_grid->check_changed_data. * 更改fieldcat READ TABLE lit_fieldcat INTO liw_fieldcat INDEX 1. liw_fieldcat-checkbox = space. liw_fieldcat-edit = space. MODIFY lit_fieldcat FROM liw_fieldcat INDEX 1. * 重新显示alv
CALL METHOD ref_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lit_fieldcat. * 以前走的老路,也可以实现,但是复杂了点 ** 隐藏toolbar * liw_layout-no_toolbar = 'X'. ** 重新显示alv * CALL METHOD ref_grid->set_table_for_first_display * EXPORTING * is_layout = liw_layout * CHANGING * it_outtab = it_data * it_fieldcatalog = lit_fieldcat. ENDFORM. " f_change September 29 用OO方法开发ALV(已实现DropdownList,纵向alv head,double_click、top_of_page事件,不断完善中)*其他操作:
*1.建立屏幕100,在100上画一个custom control命名为cont1
*2.定义一个status命名为stu_0100
REPORT zctest13.
CLASS cl_events DEFINITION DEFERRED. TABLES: kna1. DATA: save_ok TYPE sy-ucomm, ok_code TYPE sy-ucomm, w_fname TYPE scrfname VALUE 'CONT1', w_grid TYPE REF TO cl_gui_alv_grid, w_cont TYPE REF TO cl_gui_custom_container, it_fieldcat TYPE lvc_t_fcat, iw_layout TYPE lvc_s_layo, w_receiver TYPE REF TO cl_events, it_exclude TYPE ui_functions. DATA: w_doc TYPE REF TO cl_dd_document, w_splitter TYPE REF TO cl_gui_splitter_container, w_viewer TYPE REF TO cl_gui_html_viewer, w_head TYPE REF TO cl_gui_container, w_body TYPE REF TO cl_gui_container. DATA: it_kna1 TYPE TABLE OF kna1,
iw_kna1 TYPE kna1. *----------------------------------------------------------------------*
* CLASS cl_events DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS cl_events DEFINITION. PUBLIC SECTION. METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column. METHODS handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id. ENDCLASS. "cl_events DEFINITION *----------------------------------------------------------------------*
* CLASS cl_events IMPLEMENTATION *----------------------------------------------------------------------* CLASS cl_events IMPLEMENTATION. METHOD handle_double_click. PERFORM f_double_click USING e_row. ENDMETHOD. "handle_double_click METHOD handle_top_of_page. PERFORM f_top_of_page USING e_dyndoc_id. ENDMETHOD. "handle_top_of_page ENDCLASS. "cl_events DEFINITION SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_kna1 FROM kna1 WHERE kunnr IN s_kunnr. CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'STU_0100'. IF w_cont IS INITIAL. PERFORM f_create_alv. ENDIF. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN 'SAVE'. CALL METHOD w_grid->check_changed_data. ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------*
*& Module CANCEL INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE cancel INPUT. LEAVE TO SCREEN 0. ENDMODULE. " CANCEL INPUT *&---------------------------------------------------------------------*
*& Form f_create_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_create_alv . DATA: lw_line TYPE i, liw_fieldcat TYPE lvc_s_fcat. CREATE OBJECT w_cont EXPORTING container_name = w_fname. CREATE OBJECT w_doc. * EXPORTING * style = 'ALV_GRID'. CREATE OBJECT w_splitter EXPORTING parent = w_cont rows = 1 columns = 2. * 分配容器 CALL METHOD w_splitter->get_container EXPORTING row = 1 column = 1 RECEIVING container = w_head. CALL METHOD w_splitter->get_container
EXPORTING row = 1 column = 2 RECEIVING container = w_body. * 设定左边容器初始宽度 CALL METHOD w_splitter->set_column_width EXPORTING id = 1 width = 45. CREATE OBJECT w_grid
EXPORTING i_parent = w_body. * CALL METHOD w_grid->register_edit_event
* EXPORTING * i_event_id = cl_gui_alv_grid=>mc_evt_enter. CREATE OBJECT w_receiver.
SET HANDLER w_receiver->handle_double_click FOR w_grid. SET HANDLER w_receiver->handle_top_of_page FOR w_grid. CALL METHOD cl_gui_control=>set_focus
EXPORTING control = w_grid. CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING i_structure_name = 'KNA1' CHANGING ct_fieldcat = it_fieldcat. DESCRIBE TABLE it_fieldcat LINES lw_line. DELETE it_fieldcat FROM 9 TO lw_line. READ TABLE it_fieldcat INTO liw_fieldcat INDEX 5.
liw_fieldcat-edit = 'X'. liw_fieldcat-drdn_hndl = '1'. liw_fieldcat-checktable = '!'. MODIFY it_fieldcat FROM liw_fieldcat INDEX 5. READ TABLE it_fieldcat INTO liw_fieldcat INDEX 6.
liw_fieldcat-edit = 'X'. liw_fieldcat-drdn_hndl = '1'. liw_fieldcat-checktable = '!'. MODIFY it_fieldcat FROM liw_fieldcat INDEX 6. PERFORM f_fill_exclude.
PERFORM f_dropdown.
CALL METHOD w_grid->set_table_for_first_display
EXPORTING it_toolbar_excluding = it_exclude CHANGING it_outtab = it_kna1 it_fieldcatalog = it_fieldcat. CALL METHOD w_grid->set_ready_for_input EXPORTING i_ready_for_input = 1. * CALL METHOD w_doc->initialize_document.
CALL METHOD w_grid->list_processing_events EXPORTING i_event_name = 'TOP_OF_PAGE' i_dyndoc_id = w_doc. ENDFORM. " f_create_alv
*&---------------------------------------------------------------------* *& Form F_FILL_EXCLUDE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_fill_exclude . DATA liw_exclude TYPE ui_func. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_cut. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row. APPEND liw_exclude TO it_exclude. liw_exclude = cl_gui_alv_grid=>mc_fc_loc_undo. APPEND liw_exclude TO it_exclude. ENDFORM. " F_FILL_EXCLUDE *&---------------------------------------------------------------------*
*& Form F_DROPDOWN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_dropdown . DATA: lit_dropdown TYPE lvc_t_drop, liw_dropdown TYPE lvc_s_drop. liw_dropdown-handle = '1'.
liw_dropdown-value = '1'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '2'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '3'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '4'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '5'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '6'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '7'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '8'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '9'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '10'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '11'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '12'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '13'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '14'. APPEND liw_dropdown TO lit_dropdown. liw_dropdown-handle = '1'. liw_dropdown-value = '15'. APPEND liw_dropdown TO lit_dropdown. CALL METHOD w_grid->set_drop_down_table
EXPORTING it_drop_down = lit_dropdown. ENDFORM. " F_DROPDOWN *&---------------------------------------------------------------------*
*& Form F_DOUBLE_CLICK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_double_click USING f_row TYPE lvc_s_row. DATA: w_kunnr TYPE kunnr. CLEAR iw_kna1. READ TABLE it_kna1 INTO iw_kna1 INDEX f_row-index. CHECK iw_kna1-kunnr IS NOT INITIAL. w_kunnr = iw_kna1-kunnr. SET PARAMETER ID 'KUN' FIELD w_kunnr. CALL TRANSACTION 'VD02' AND SKIP FIRST SCREEN. CLEAR it_kna1. SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_kna1 FROM kna1 WHERE kunnr IN s_kunnr. CALL METHOD w_grid->refresh_table_display.
ENDFORM. " F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& Form F_TOP_OF_PAGE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_top_of_page USING f_doc TYPE REF TO cl_dd_document. DATA: lw_back TYPE sdydo_key VALUE space. CALL METHOD f_doc->add_text
EXPORTING text = '01 资产减值准备' sap_style = 'HEADING'. "大字黑体 CALL METHOD f_doc->new_line.
CALL METHOD f_doc->add_text EXPORTING text = '02 固定资产折旧、油气资产折耗、生产性生物资产折旧' sap_emphasis = 'EMPHASIS'. "斜体 IF w_viewer IS INITIAL.
CREATE OBJECT w_viewer EXPORTING parent = w_head. ENDIF. CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING document = w_doc bottom = space. CALL METHOD w_doc->merge_document. CALL METHOD w_doc->set_document_background
EXPORTING picture_id = lw_back. w_doc->html_control = w_viewer.
CALL METHOD w_doc->display_document EXPORTING reuse_control = 'X' parent = w_head. ENDFORM. " F_TOP_OF_PAGE September 28 自定义f4_help并更新屏幕commentREPORT zctest11 LINE-SIZE 255 MESSAGE-ID zzzzz01.
TYPES: BEGIN OF ty_kna1, kunnr TYPE kunnr, name1 TYPE name1_gp, END OF ty_kna1. DATA: iw_kna1 TYPE ty_kna1, it_kna1 TYPE TABLE OF ty_kna1, iw_dfies TYPE dfies, it_dfies TYPE TABLE OF dfies, iw_dynp TYPE dynpread, it_dynp TYPE TABLE OF dynpread, iw_return TYPE ddshretval, it_return TYPE TABLE OF ddshretval. DATA: w_position TYPE i,
w_offset TYPE i. PARAMETERS: p_kunnr(10) TYPE c.
SELECTION-SCREEN COMMENT 50(40) w_name FOR FIELD p_kunnr. INITIALIZATION.
PERFORM f_set_dfies USING : 'KUNNR', 'NAME1'. AT SELECTION-SCREEN.
SELECT SINGLE name1 INTO w_name FROM kna1 WHERE kunnr = p_kunnr. CHECK sy-subrc <> 0. CLEAR w_name. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_kunnr.
CLEAR: it_kna1,it_return. SELECT kunnr name1 INTO CORRESPONDING FIELDS OF TABLE it_kna1 FROM kna1. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING retfield = 'KUNNR' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_KUNNR' value_org = 'S' TABLES value_tab = it_kna1 field_tab = it_dfies return_tab = it_return EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CHECK it_return IS NOT INITIAL.
CLEAR: iw_dynp,iw_kna1,it_dynp.
READ TABLE it_return INTO iw_return INDEX 1. READ TABLE it_kna1 INTO iw_kna1 WITH KEY kunnr = iw_return-fieldval. "#EC * CHECK sy-subrc = 0. iw_dynp-fieldname = 'P_KUNNR'.
iw_dynp-fieldvalue = iw_return-fieldval. APPEND iw_dynp TO it_dynp. CLEAR iw_dynp.
iw_dynp-fieldname = 'W_NAME'. iw_dynp-fieldvalue = iw_kna1-name1. APPEND iw_dynp TO it_dynp. CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = it_dynp EXCEPTIONS invalid_abapworkarea = 1 invalid_dynprofield = 2 invalid_dynproname = 3 invalid_dynpronummer = 4 invalid_request = 5 no_fielddescription = 6 undefind_error = 7 OTHERS = 8. CHECK sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. *&---------------------------------------------------------------------* *& Form f_set_dfies *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_set_dfies USING value(u_fname) TYPE c. DATA: l_fname TYPE dfies-lfieldname. l_fname = u_fname. w_position = w_position + 1. CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = 'KNA1' lfieldname = l_fname IMPORTING dfies_wa = iw_dfies EXCEPTIONS not_found = 1 internal_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CLEAR iw_dfies-tabname. iw_dfies-position = w_position. iw_dfies-reptext = iw_dfies-fieldtext. iw_dfies-offset = w_offset. w_offset = w_offset + iw_dfies-intlen. APPEND iw_dfies TO it_dfies. ENDFORM. " f_set_dfies web dynpro初体验http://help.sap.com/saphelp_erp2005/helpdata/en/79/002c2a0d43e645a39a89dd662b5f68/frameset.htm
今天小试了一把,结果不知道什么原因没法看到结果,不知道是单位的路由原因还是操作系统的原因,看来只有回家试试了,不知道28是不是bisis 7.0的,hope。
第一次操作的直观感受就是,和.net jbuilder等图形开发工具比起来还是麻烦了很多,不过想想毕竟人家不是专业搞这个的嘛。
单位不能搞,只能回家搞了,看来以后3c时间是越来越少了。。。 September 21 在ABAP中使用simple transform创建XML文件*&---------------------------------------------------------------------*
*& Report ZCTEST06 *& 在strans中创建simple transform
*& 暂时没有找到创建xml component的方法
*&---------------------------------------------------------------------* REPORT zctest06.
DATA:
BEGIN OF iw_line, line1(10) TYPE c, line2(10) TYPE c, END OF iw_line, BEGIN OF iw_head, h1(10) TYPE c, h1_attr(10) TYPE c, h2(10) TYPE c, line LIKE TABLE OF iw_line,
END OF iw_head, it_head LIKE TABLE OF iw_head, BEGIN OF it_xml OCCURS 0, line(100) TYPE c, END OF it_xml. DATA: w_xml TYPE string,
w_len TYPE i, w_fname TYPE string. PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE..
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM f_get_filename. START-OF-SELECTION.
CLEAR: iw_line,iw_head. iw_head-h1 = 'head-1-1'. iw_head-h2 = 'head-1-2'. iw_head-h1_attr = '100'. iw_line-line1 = 'line-1-1-1'. iw_line-line2 = 'line-1-2-1'. APPEND iw_line TO iw_head-line. CLEAR iw_line.
iw_line-line1 = 'line-1-1-2'. iw_line-line2 = 'line-1-2-2'. APPEND iw_line TO iw_head-line. APPEND iw_head TO it_head.
CLEAR: iw_line,iw_head.
iw_head-h1 = 'head-2-1'. iw_head-h2 = 'head-2-2'. iw_head-h1_attr = '200'. iw_line-line1 = 'line-2-1-1'. iw_line-line2 = 'line-2-2-1'. APPEND iw_line TO iw_head-line. CLEAR iw_line.
iw_line-line1 = 'line-2-1-2'. iw_line-line2 = 'line-2-2-2'. APPEND iw_line TO iw_head-line. CLEAR iw_line.
iw_line-line1 = 'line-2-1-3'. iw_line-line2 = 'line-2-2-3'. APPEND iw_line TO iw_head-line. APPEND iw_head TO it_head.
CALL TRANSFORMATION zctest01
SOURCE root = it_head RESULT XML w_xml. CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING text = w_xml IMPORTING length = w_len TABLES ftext_tab = it_xml. w_fname = p_file. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = w_fname filetype = 'BIN' IMPORTING filelength = w_len TABLES data_tab = it_xml 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. WRITE 'OK'. ELSE. WRITE 'FALSE'. ENDIF. *&---------------------------------------------------------------------* *& Form F_GET_FILENAME *&---------------------------------------------------------------------* FORM f_get_filename . DATA: l_rc TYPE i, it_file TYPE filetable. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING initial_directory = 'D:\test' file_filter = 'XML FIELS (*.xml)|*.xml|ALL FILES (*.*)|*.*' CHANGING file_table = it_file rc = l_rc. CHECK l_rc = 1. READ TABLE it_file INTO p_file INDEX 1. ENDFORM. " F_GET_FILENAME 用cl_abap_typedescr、cl_abap_structdescr取得自定义工作区中的字段信息*&---------------------------------------------------------------------*
*& Report ZCTEST06 *&---------------------------------------------------------------------* *& 主要使用cl_abap_typedescr=>describe_by_data方法 *& 和子类cl_abap_structdescr中的components属性 *& components包含以下信息 *& length 长度 *& decimals 小数 *& type_kind 类型 *& name 字段名 *&---------------------------------------------------------------------* REPORT zctest06.
TYPE-POOLS abap.
TYPES:
BEGIN OF ty1, p1(10) TYPE c, p2(5) TYPE n, p3(3) TYPE p DECIMALS 2, END OF ty1. DATA: iw1 TYPE ty1,
iw_comp TYPE abap_compdescr, ref_descr TYPE REF TO cl_abap_structdescr. ref_descr ?= cl_abap_typedescr=>describe_by_data( iw1 ).
LOOP AT ref_descr->components INTO iw_comp. WRITE : /1 iw_comp-length, 15 iw_comp-decimals, 30 iw_comp-type_kind, 45 iw_comp-name. CLEAR iw_comp. ENDLOOP. September 18 使用VIEW_MAINTENANCE_CALL维护视图REPORT zctest10. DATA: it_vimsellist TYPE TABLE OF vimsellist, PARAMETERS p_bukrs TYPE t001b-bukrs. SELECT-OPTIONS: s_mkoar FOR t001b-mkoar. START-OF-SELECTION. SELECT mkoar *编辑过滤数据条件 LOOP AT it_mkoar INTO iw_mkoar. CALL FUNCTION 'VIEW_MAINTENANCE_CALL' 使用SELECT_OPTIONS_RESTRICT对SELECT-OPTIONS进行限制REPORT zctest16.
TYPE-POOLS: sscr.
TABLES: t001,mara.
SELECT-OPTIONS: s_bukrs FOR t001-bukrs,
s_matnr FOR mara-matnr. INITIALIZATION.
* 控制用结构ls_restrict的做成 DATA: liw_restrict TYPE sscr_restrict. DATA: liw_optlist TYPE sscr_opt_list, liw_ass TYPE sscr_ass. * 自定义名称V1 liw_optlist-name = 'V1'. * 允许'=' liw_optlist-options-eq = 'X'. * 允许范围 liw_optlist-options-bt = 'X'. APPEND liw_optlist TO liw_restrict-opt_list_tab. CLEAR liw_optlist.
* 自定义名称V2 liw_optlist-name = 'V2'. * 允许'=' liw_optlist-options-eq = 'X'. APPEND liw_optlist TO liw_restrict-opt_list_tab. liw_ass-kind = 'S'.
liw_ass-name = 'S_BUKRS'. liw_ass-sg_main = 'I'. liw_ass-op_main = 'V1'. APPEND liw_ass TO liw_restrict-ass_tab. CLEAR liw_ass.
liw_ass-kind = 'S'. liw_ass-name = 'S_MATNR'. liw_ass-sg_main = 'I'. liw_ass-op_main = 'V2'. APPEND liw_ass TO liw_restrict-ass_tab. CALL FUNCTION 'SELECT_OPTIONS_RESTRICT' EXPORTING restriction = liw_restrict EXCEPTIONS too_late = 1 repeated = 2 selopt_without_options = 3 selopt_without_signs = 4 invalid_sign = 5 empty_option_list = 6 invalid_kind = 7 repeated_kind_a = 8 OTHERS = 9. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. September 14 在ABAP中使用XSLT创建XML文件*&---------------------------------------------------------------------*
*& Report ZCTEST14 *& *&---------------------------------------------------------------------* *& TEST FOR XSLT *& *&---------------------------------------------------------------------* REPORT zctest14.
DATA:
BEGIN OF iw_head, user_no TYPE char10, user_name TYPE char50, END OF iw_head, BEGIN OF iw_payee,
account_payee TYPE char10, account_name TYPE char20, address TYPE char20, bank_name TYPE char20, bank_code TYPE char20, END OF iw_payee, BEGIN OF iw_payment,
payment_type TYPE char20, id TYPE char10, date TYPE char10, explain TYPE char20, amount TYPE char10, amount_bill TYPE char10, account TYPE char10, bank_account TYPE char10, payee LIKE TABLE OF iw_payee, remit_no TYPE char10, budget_no TYPE char10, erp_no TYPE char10, END OF iw_payment, BEGIN OF iw_payment_set,
operator TYPE char100, payment LIKE TABLE OF iw_payment, END OF iw_payment_set, BEGIN OF iw_data,
wst_exg_version TYPE char5, head LIKE TABLE OF iw_head, payment_set LIKE TABLE OF iw_payment_set, END OF iw_data, BEGIN OF it_xml OCCURS 0,
line(100) TYPE c, END OF it_xml. DATA: w_xml TYPE string,
w_len TYPE i, w_fname TYPE string. PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE.. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM f_get_filename. START-OF-SELECTION.
* 装填数据 CLEAR iw_data. iw_data-wst_exg_version = '300'. CLEAR iw_head.
iw_head-user_no = '2'. iw_head-user_name = '客户名称(可空)'. APPEND iw_head TO iw_data-head. CLEAR iw_payment_set.
CONCATENATE '<casher>录入人(可空)</casher>'
' <checker>复核人(可空)</checker>' INTO iw_payment_set-operator SEPARATED BY cl_abap_char_utilities=>cr_lf. CLEAR iw_payment.
iw_payment-payment_type = 'auto|inner|outer'. iw_payment-id = '124'. iw_payment-date = '2006-03-10'. iw_payment-explain = '导入的内部转帐指令'. iw_payment-amount = '5000'. iw_payment-amount_bill = ''. iw_payment-account = '21201'. iw_payment-bank_account = '102200501'. CLEAR iw_payee.
iw_payee-account_payee = '21202'. iw_payee-account_name = '九恒星科技'. iw_payee-address = ''. iw_payee-bank_name = ''. iw_payee-bank_code = ''. APPEND iw_payee TO iw_payment-payee. iw_payment-remit_no = '01'.
iw_payment-budget_no = ''. iw_payment-erp_no = ''. APPEND iw_payment TO iw_payment_set-payment. CLEAR iw_payment.
iw_payment-payment_type = 'auto|inner|outer'. iw_payment-id = '125'. iw_payment-date = '2006-03-10'. iw_payment-explain = '导入对外支付指令'. iw_payment-amount = '2000'. iw_payment-amount_bill = ''. iw_payment-account = '21201'. iw_payment-bank_account = '102200501'. CLEAR iw_payee.
iw_payee-account_payee = '10221205005'. iw_payee-account_name = '集团外单位'. iw_payee-address = '北京'. iw_payee-bank_name = '中国工商银行'. iw_payee-bank_code = '01'. APPEND iw_payee TO iw_payment-payee. iw_payment-remit_no = '01'.
iw_payment-budget_no = ''. iw_payment-erp_no = 'ERP002'. APPEND iw_payment TO iw_payment_set-payment. APPEND iw_payment_set TO iw_data-payment_set.
* call transformation
CALL TRANSFORMATION zctest02
SOURCE data = iw_data RESULT XML w_xml. * 表中的数据<>在传到STRANS中时会自动转换为'<' '>',所以在这里转回来 REPLACE ALL OCCURRENCES OF '<' IN w_xml WITH '<'. REPLACE ALL OCCURRENCES OF '>' IN w_xml WITH '>'. CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING text = w_xml IMPORTING length = w_len TABLES ftext_tab = it_xml. w_fname = p_file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING filename = w_fname filetype = 'BIN' IMPORTING filelength = w_len TABLES data_tab = it_xml 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. WRITE 'OK'. ELSE. WRITE 'FALSE'. ENDIF. *&---------------------------------------------------------------------* *& 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 initial_directory = 'D:\test' CHANGING file_table = it_file rc = l_rc. CHECK l_rc = 1. READ TABLE it_file INTO p_file INDEX 1. ENDFORM. " F_GET_FILENAME September 09 使用if_ixml 、if_ixml_document 、if_ixml_element创建本地xml文件*终于知道怎么创建comment了,原来有个if_ixml_comment
*xml的结构: if_ixml > if_ixml_document > if_ixml_element
* > if_ixml_comment
*if_ixml_document、if_ixml_element、if_ixml_comment都包含属性 if_ixml_node
REPORT zctest13.
DATA: it_file TYPE filetable, it_dlines TYPE dcxmllines. DATA: BEGIN OF iw_xml, line LIKE LINE OF it_dlines, END OF iw_xml, it_xml LIKE TABLE OF iw_xml. DATA:
w_wst TYPE REF TO if_ixml_element, w_head TYPE REF TO if_ixml_element, w_paymentset TYPE REF TO if_ixml_element, w_payment TYPE REF TO if_ixml_element, w_operator TYPE REF TO if_ixml_element, w_payee TYPE REF TO if_ixml_element, w_comment TYPE REF TO if_ixml_comment, w_attribute TYPE REF TO if_ixml_attribute, w_document TYPE REF TO if_ixml_document, w_ixml TYPE REF TO if_ixml, w_rval TYPE i, w_size TYPE i, w_fname TYPE string, w_rc TYPE sy-subrc. PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING file_filter = '*.XML,*.xml' initial_directory = 'D:\test' CHANGING file_table = it_file rc = w_rc EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. CHECK sy-subrc = 0. READ TABLE it_file INTO p_file INDEX 1. START-OF-SELECTION.
w_fname = p_file. CLASS cl_ixml DEFINITION LOAD. w_ixml = cl_ixml=>create( ). CHECK NOT w_ixml IS INITIAL. w_document = w_ixml->create_document( ). w_wst = w_document->create_element( name = 'wst-exg'). CALL METHOD w_wst->set_attribute EXPORTING name = 'version' value = '300' RECEIVING rval = w_rc. PERFORM f_add_element USING 'head' CHANGING w_wst w_head. PERFORM f_element_add USING 'user-no' '2' CHANGING w_head. PERFORM f_element_add USING 'user-name' '客户名称' CHANGING w_head. PERFORM f_add_element USING 'payment-set'
CHANGING w_wst w_paymentset. PERFORM f_add_element USING 'operator' CHANGING w_paymentset w_operator. w_comment = w_document->create_comment( 'this is a comment'). CALL METHOD w_operator->append_child EXPORTING new_child = w_comment RECEIVING rval = w_rval. PERFORM f_add_element USING 'payment'
CHANGING w_paymentset w_payment. CALL METHOD w_payment->set_attribute EXPORTING name = 'type' value = 'auto|inner|outer' RECEIVING rval = w_rc. PERFORM f_element_add USING 'id' '124' CHANGING w_payment. PERFORM f_element_add USING 'date' '2006-03-10' CHANGING w_payment. PERFORM f_element_add USING 'explain' '导入的内部转帐命令' CHANGING w_payment. PERFORM f_element_add USING 'amount' '5000' CHANGING w_payment. PERFORM f_element_add USING 'amount-bill' space CHANGING w_payment. PERFORM f_element_add USING 'account' '21201' CHANGING w_payment. PERFORM f_element_add USING 'bank-account' '102200501' CHANGING w_payment. PERFORM f_add_element USING 'payee' CHANGING w_payment w_payee. PERFORM f_element_add USING 'account-payee' '21202' CHANGING w_payee. PERFORM f_element_add USING 'account-name' '九恒星科技' CHANGING w_payee. PERFORM f_element_add USING 'address' space CHANGING w_payee. PERFORM f_element_add USING 'band-name' space CHANGING w_payee. PERFORM f_element_add USING 'bank-code' space CHANGING w_payee. PERFORM f_element_add USING 'remit-no'
'01' CHANGING w_payment. PERFORM f_element_add USING 'budget-no' space CHANGING w_payment. PERFORM f_element_add USING 'ERP-no' space CHANGING w_payment. w_rc = w_document->append_child( new_child = w_wst ). IF w_rc IS NOT INITIAL. WRITE 'ERROR 2'. RETURN. ENDIF. CALL FUNCTION 'SDIXML_DOM_TO_XML' EXPORTING document = w_document * PRETTY_PRINT = ' ' IMPORTING * XML_AS_STRING = size = w_size TABLES xml_as_table = it_dlines EXCEPTIONS no_document = 1 OTHERS = 2. IF sy-subrc <> 0. WRITE 'ERROR 3'. RETURN. ENDIF. LOOP AT it_dlines INTO iw_xml-line. APPEND iw_xml TO it_xml. CLEAR iw_xml. ENDLOOP. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = w_size filename = w_fname 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 = ' ' * IMPORTING * FILELENGTH = TABLES data_tab = it_xml * 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. WRITE 'ERROR 4'. ENDIF. *&---------------------------------------------------------------------* *& Form f_element_add *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_element_add USING f_name TYPE string f_val TYPE string CHANGING f_elem TYPE REF TO if_ixml_element. DATA: lw_docu TYPE REF TO if_ixml_document, lw_elem TYPE REF TO if_ixml_element, lw_rval TYPE i. lw_docu = w_document. lw_elem = lw_docu->create_element( f_name ). CALL METHOD lw_elem->set_value EXPORTING value = f_val RECEIVING rval = w_rval. CALL METHOD f_elem->append_child EXPORTING new_child = lw_elem RECEIVING rval = lw_rval. ENDFORM. " f_element_add *&---------------------------------------------------------------------* *& Form f_add_element *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f_add_element USING f_name CHANGING f_father TYPE REF TO if_ixml_element f_son TYPE REF TO if_ixml_element. DATA: lw_docu TYPE REF TO if_ixml_document, lw_rval TYPE i. IF f_son IS INITIAL. lw_docu = w_document. f_son = lw_docu->create_element( f_name ). ENDIF. CALL METHOD f_father->append_child EXPORTING new_child = f_son RECEIVING rval = lw_rval. ENDFORM. " f_add_element August 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 August 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 July 11 不使用se51根据radiobutton显示不同的选择条件
|
|
|