SAP ABAP 读取事务码变式内容

发布时间:2026/5/26 14:50:12

SAP ABAP 读取事务码变式内容 需求描述根据事务码读取指定变式中指定屏幕字段名的全部内容。自己简单记录了一个可使用程序复制粘贴可用。*---------------------------------------------------------------------* * Report ZSD_RPT_262 *---------------------------------------------------------------------* * *---------------------------------------------------------------------* REPORT zsd_rpt_262. TYPES:BEGIN OF ty_output, sign TYPE tvarv_sign, option TYPE tvarv_opti, low TYPE rvari_val, high TYPE rvari_val, END OF ty_output. DATA:gt_output TYPE STANDARD TABLE OF ty_output. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_tcode TYPE tstc-tcode OBLIGATORY, p_vari TYPE rsvar-variant OBLIGATORY, p_text TYPE sychar30 OBLIGATORY. SELECTION-SCREEN END OF BLOCK b1. INITIALIZATION. CLEAR:gt_output. START-OF-SELECTION. PERFORM frm_main. *---------------------------------------------------------------------* * Form frm_main *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_main . DATA:lv_pgmna TYPE tstc-pgmna, lv_msg TYPE string, lt_params TYPE STANDARD TABLE OF vanz, lt_params_n TYPE STANDARD TABLE OF vanz, lt_selop TYPE STANDARD TABLE OF vanz, lt_selop_n TYPE STANDARD TABLE OF vanz, lt_valutab TYPE STANDARD TABLE OF rsparams, lt_valutab1 TYPE STANDARD TABLE OF rsparamsl, lt_objects TYPE STANDARD TABLE OF vanz, lt_desc TYPE STANDARD TABLE OF rsdynbrepi, lt_value TYPE STANDARD TABLE OF rsseldyn, lt_obj TYPE STANDARD TABLE OF rsvaridyn, lv_key TYPE string VALUE D_SREPOVARI-EXTDREPORT, 固定关键字 lv_pos TYPE i, lv_end TYPE i, lv_tcode TYPE tcode. 拉取事务码对应程序ID SELECT SINGLE pgmna FROM tstc WHERE tcode p_tcode INTO lv_pgmna. IF sy-subrc 0. MESSAGE 事务码无效请检查 TYPE S DISPLAY LIKE E. RETURN. ELSE. 若pgmna为空则去查 TSTCP参数事务 IF lv_pgmna IS INITIAL. SELECT SINGLE param FROM tstcp WHERE tcode p_tcode INTO DATA(lv_param). IF sy-subrc 0. 解析参数里的目标事务码 lv_pos strlen( lv_key ). FIND lv_key IN lv_param MATCH OFFSET lv_pos. IF sy-subrc 0. 3. 从 号后开始截取直到 ; 结束 lv_pos 23. lv_param lv_paramlv_pos. FIND ; IN lv_param MATCH OFFSET lv_end. IF sy-subrc 0. lv_tcode lv_param(lv_end). SELECT SINGLE pgmna FROM tstc WHERE tcode lv_tcode INTO lv_pgmna. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. IF lv_pgmna IS INITIAL. MESSAGE 未找到事务码对应的程序名 TYPE S DISPLAY LIKE E. RETURN. ENDIF. 读取事务码下变式的内容 CALL FUNCTION RS_VARIANT_CONTENTS EXPORTING report lv_pgmna variant p_vari * MOVE_OR_WRITE W * NO_IMPORT * EXECUTE_DIRECT * IMPORTING * SP TABLES l_params lt_params l_params_nonv lt_params_n l_selop lt_selop 选择项目 l_selop_nonv lt_selop_n valutab lt_valutab 变式全部内容 valutabl lt_valutab1 objects lt_objects free_selections_desc lt_desc free_selections_value lt_value free_selections_obj lt_obj EXCEPTIONS variant_non_existent 1 variant_obsolete 2 OTHERS 3. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO lv_msg WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. MESSAGE lv_msg TYPE S DISPLAY LIKE E. RETURN. ENDIF. 根据选择项目描述读取对应SELNAME READ TABLE lt_selop ASSIGNING FIELD-SYMBOL(lfs_selop) WITH KEY text p_text. IF sy-subrc 0. 仅保留需要读取的内容 DELETE lt_valutab WHERE selname lfs_selop-name. IF lt_valutab IS NOT INITIAL. MOVE-CORRESPONDING lt_valutab TO gt_output. PERFORM frm_output. ELSE. MESSAGE 变式的选择项目下无内容输入 TYPE S DISPLAY LIKE E. ENDIF. ELSE. MESSAGE 事务码下选择项目不存在请检查 TYPE S DISPLAY LIKE E. ENDIF. ENDFORM. *---------------------------------------------------------------------* * Form frm_output *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_output . DATA:lt_fieldcat TYPE lvc_t_fcat. DATA:lo_table TYPE REF TO data. DATA:lv_xstr TYPE xstring. DATA:lt_rawdata TYPE solix_tab. DATA:lo_result_data_table TYPE REF TO cl_salv_ex_result_data_table. DATA:lo_bs_ex_office2007 TYPE REF TO cl_salv_bs_ex_office2007. DATA:lv_version TYPE string. DATA:lv_flavour TYPE string. *获取数据 GET REFERENCE OF gt_output INTO lo_table. *构造列字段 PERFORM frm_create_fieldcat CHANGING lt_fieldcat. *获取cl_salv_ex_result_data_table类对象 lo_result_data_table cl_salv_ex_utilfactory_result_data_table( r_data lo_table t_fieldcatalog lt_fieldcat ). 获取xml版本信息 lv_version cl_salv_bs_a_xml_baseget_version( ). IF lv_version if_salv_bs_xmlversion_25. lv_version if_salv_bs_xmlversion_25. ELSEIF lv_version if_salv_bs_xmlversion_26. lv_version if_salv_bs_xmlversion_26. ENDIF. lv_flavour if_salv_bs_c_ttc_tt_xml_flavour_export. *转换xstring cl_salv_bs_tt_utilif_salv_bs_tt_util~transform( EXPORTING xml_version lv_version r_result_data lo_result_data_table xml_type if_salv_bs_xmlc_type_xlsx XML Type as SALV Constant xml_flavour lv_flavour gui_type if_salv_bs_xmlc_gui_type_gui Constant IMPORTING xml lv_xstr ). PERFORM frm_dialog_xml USING lv_xstr. ENDFORM. *---------------------------------------------------------------------* * Form frm_create_fieldcat *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_create_fieldcat CHANGING it_fieldcat TYPE lvc_t_fcat. DATA:ls_fieldcat TYPE lvc_s_fcat. DEFINE def_field. CLEAR ls_fieldcat. ls_fieldcat-col_pos 1. column position ls_fieldcat-fieldname 2. ls_fieldcat-reptext 3. APPEND ls_fieldcat TO it_fieldcat. END-OF-DEFINITION. def_field 1 SIGN 标识. def_field 2 OPTION 选项. def_field 3 LOW 最小值. def_field 4 HIGH 最大值. ENDFORM. *---------------------------------------------------------------------* * Form frm_dialog_xml *---------------------------------------------------------------------* * 下载弹窗 *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_dialog_xml USING iv_xml TYPE xstring. DATA:lv_extension TYPE string VALUE XLSX. DATA:lv_directory TYPE string VALUE D:/. DATA:lv_filename TYPE string. DATA:lv_mask TYPE string VALUE Excel (*.XLSX)|*.XLSX. lv_filename p_tcode _ p_vari _ p_text. CALL FUNCTION XML_EXPORT_DIALOG EXPORTING i_xml iv_xml i_default_extension lv_extension i_initial_directory lv_directory i_default_file_name lv_filename i_mask lv_mask * I_APPLICATION EXCEPTIONS application_not_executable 1 OTHERS 2. IF sy-subrc 0. * Implement suitable error handling here ENDIF. ENDFORM.最后看一下执行效果选择界面程序执行结束导出数据文件

相关新闻