User interface 使用GUI_下载将标题行下载到TXT

User interface 使用GUI_下载将标题行下载到TXT,user-interface,download,abap,s4hana,User Interface,Download,Abap,S4hana,使用“GUI_DOWNLOAD”功能时出现了一个小问题。试图在我创建的.txt文件顶部附加一个标题行。我的解决办法是: CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_file filetype = 'ASC' write_field_separator = 'X' TABLES data_tab = it_

使用“GUI_DOWNLOAD”功能时出现了一个小问题。试图在我创建的.txt文件顶部附加一个标题行。我的解决办法是:

 CALL FUNCTION 'GUI_DOWNLOAD'
   EXPORTING
     filename              = lv_file
     filetype              = 'ASC'
     write_field_separator = 'X'
   TABLES
     data_tab              = it_outh. "internal table just with the header line

 CALL FUNCTION 'GUI_DOWNLOAD'
   EXPORTING
     filename              = lv_file
     filetype              = 'ASC'
     append                = 'X'
     write_field_separator = 'X'
   TABLES
     data_tab              = it_output. "internal table with selected data
代码是有效的。但格式是垃圾,因为长度不同(标题行和数据)

是解决这个问题的唯一方法,在里面使用简短的描述吗?或者你们谁有更好的主意给我

祝你今天愉快

问候,,
Dennis

这里有一个快速的解决方法,如何将带有标题的itab的对齐输出转换为文本:

FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE.

DATA: lref_struct TYPE REF TO cl_abap_structdescr,
      o_table     TYPE REF TO data.

lref_struct ?= cl_abap_structdescr=>describe_by_name( 'CRCO' ).
DATA(components) = lref_struct->get_components( ).
DATA(fields) = VALUE ddfields( FOR line IN lref_struct->get_ddic_field_list( ) ( line ) ).

" making all types as char by replacing with existing PRZ char field
MODIFY components FROM VALUE abap_componentdescr( type = components[ name = 'PRZ' ]-type ) TRANSPORTING type WHERE name <> ''.

lref_struct = cl_abap_structdescr=>create( components ).
DATA(o_ref_table) = cl_abap_tabledescr=>create( p_line_type = lref_struct p_table_kind = cl_abap_tabledescr=>tablekind_std ).

CHECK o_ref_table IS BOUND.

CREATE DATA o_table TYPE HANDLE o_ref_table.
ASSIGN o_table->* TO <fs_table>.
APPEND INITIAL LINE TO <fs_table>. " reserving line for headers

SELECT
  CAST( mandt      AS CHAR( 12 ) ) AS mandt,
  CAST( objty      AS CHAR( 2 ) ) AS objty,
  CAST( objid      AS CHAR( 8 ) ) AS objid,
  CAST( laset      AS CHAR( 6 ) ) AS laset,
  CAST( endda      AS CHAR( 8 ) ) AS endda,
  CAST( lanum      AS CHAR( 4 ) ) AS lanum,
  CAST( begda      AS CHAR( 8 ) ) AS begda,
  CAST( aedat_kost AS CHAR( 8 ) ) AS aedat_kost,
  CAST( aenam_kost AS CHAR( 12 ) ) AS aenam_kost,
  CAST( kokrs      AS CHAR( 10 ) ) AS kokrs,
  CAST( kostl      AS CHAR( 6 ) ) AS kostl,
  CAST( lstar      AS CHAR( 12 ) ) AS lstar,
  CAST( lstar_ref  AS CHAR( 12 ) ) AS lstar_ref,
  CAST( forml      AS CHAR( 12 ) ) AS forml,
  CAST( prz        AS CHAR( 12 ) ) AS prz,
  CAST( actxy      AS CHAR( 12 ) ) AS actxy,
  CAST( actxk      AS CHAR( 12 ) ) AS actxk,
  CAST( leinh      AS CHAR( 12 ) ) AS leinh,
  CAST( bde        AS CHAR( 12 ) ) AS bde,
  CAST( sakl       AS CHAR( 1 ) ) AS sakl
  UP TO 10 ROWS
  FROM crco
  APPENDING CORRESPONDING FIELDS OF TABLE @<fs_table>.

" writing headers
ASSIGN <fs_table>[ 1 ] TO FIELD-SYMBOL(<empty>).
LOOP AT fields ASSIGNING FIELD-SYMBOL(<field>).
  ASSIGN COMPONENT <field>-fieldname OF STRUCTURE <empty> TO FIELD-SYMBOL(<heading>).
  CHECK sy-subrc = 0.
  <heading> = <field>-scrtext_m.
ENDLOOP.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    filename     = 'C:\tab.txt'
    filetype       = 'ASC'
    write_field_separator = 'X'
  TABLES
    data_tab     = <fs_table>.
字段符号:类型标准表。
数据:lref_结构类型参考至cl_abap_结构描述,
o_表类型参考数据。
lref_struct?=cl_abap_structdescr=>按名称(“CRCO”)描述。
数据(组件)=lref_struct->get_components()。
数据(字段)=值ddfields(用于lref_struct->get_ddic_field_list()(行))中的行)。
“通过替换为现有的PRZ char字段,将所有类型设置为char
从值abap_componentdescr(type=components[name='PRZ']-type)中修改组件,其中传输类型的名称为“”。
lref_struct=cl_abap_structdescr=>create(组件)。
数据(o_ref_table)=cl_abap_tabledescr=>create(p_line_type=lref_struct p_table_kind=cl_abap_tabledescr=>tablekind_std)。
检查o_ref_表是否绑定。
创建数据o_表类型句柄o_ref_表。
将o_表->*分配给。
将初始行追加到“为标题保留行”
挑选
将(mandt作为CHAR(12))转换为mandt,
将(对象转换为字符(2))转换为对象,
将(对象转换为字符(8))转换为对象,
将(laset作为CHAR(6))转换为laset,
将(endda转换为CHAR(8))转换为endda,
铸造(lanum为CHAR(4))为lanum,
将(begda铸为字符(8))铸为begda,
铸造(Aidat_kost为字符(8))为Aidat_kost,
铸造(aenam_kost为CHAR(12))为aenam_kost,
将(kokrs作为字符(10))转换为kokrs,
铸造(kostl为字符(6))为kostl,
将(lstar作为CHAR(12))转换为lstar,
将(lstar_ref作为字符(12))转换为lstar_ref,
铸造(forml为CHAR(12))为forml,
将(prz作为字符(12))转换为prz,
将(actxy作为CHAR(12))转换为actxy,
将(actxk作为CHAR(12))转换为actxk,
铸造(leinh为CHAR(12))为leinh,
铸造(bde为炭(12))为bde,
将(sakl作为CHAR(1))转换为sakl
最多10行
来自crco
追加表@的相应字段。
“编写标题
将[1]分配给字段-SYMBOL()。
在指定字段-SYMBOL()的字段处循环。
将结构的组件-字段名指定给字段-符号()。
检查sy subrc=0。
=-scrtext\u m。
结束循环。
调用函数“GUI\u下载”
出口
文件名='C:\tab.txt'
文件类型='ASC'
写入字段分隔符='X'
桌子
数据_选项卡=。
虽然没有那么简单,但它确实起到了作用

上面代码段中使用的技巧是:动态创建目标内部表,使所有字段都变成char而不是real DB table,然后在表的顶部添加虚拟行,并将所有标题放在那里


这种方法需要额外的准备工作(如显式转换所有DB字段),但我认为没有其他方法可以生成格式化的TXT输出。

AFAIK,
GUI\u下载
没有提供您想要的文本格式化功能