如何将SAP内部表保存为Sap目录为.CSV文件?

时间:2013-07-05 07:21:42

标签: file-io sap abap

我正在尝试将SAP内部表另存为SAP目录.CSV文件。我已经知道我应该将内容转换为字符类型,但是我得到了一个非法的转换错误。 这是我的代码:

 FORM f_opendata TABLES p_tab TYPE STANDARD TABLE USING
                   p_work TYPE any.


FIELD-SYMBOLS: <lfs_wa>.


 CONCATENATE c_headerfile c_initials sy-datum c_ext INTO v_dtasetfile.

OPEN DATASET v_dtasetfile FOR OUTPUT IN TEXT MODE ENCODING UTF-8.

IF sy-subrc EQ 0.

LOOP AT p_tab INTO p_work.
  ASSIGN p_work TO <lfs_wa> CASTING TYPE c.
  TRANSFER <lfs_wa> TO v_dtasetfile.
ENDLOOP.
CLOSE DATASET v_dtasetfile.
MESSAGE i899(f2) WITH 'SUCCESS' v_dtasetfile.

ENDIF.
ENDFORM.   

这是错误:

发生了异常,下面将详细说明。  分配给“CX_SY_ASSIGN_CAST_ILLEGAL_CAST”类的异常是   没陷入  程序“F_OPENDATA”“(FORM)”,也不是由RAISING条款传播的。  由于程序的调用者无法预料到  异常会发生,当前程序终止。  异常的原因是:

错误发生在表单的声明中    分配到铸造。    分配到铸造类型t。  要么    分配f铸造像f1。  要么    在表语句中添加    分配铸造。

可能出现以下错误原因:  1.字段f的类型或由t,f1确定的目标类型  包含数据引用,对象引用,字符串或内部表  作为组件。  这些组件必须完全匹配其位置(偏移)  和他们的类型有关。  2.指定的类型t或f1的类型不适合类型   字段符号。  3.相关表的行类型不适合目标类型  根据1)中描述的规则规定。

2 个答案:

答案 0 :(得分:1)

转换强制转换不同。如果您的表包含的字段不是CLIKE,系统将拒绝投射整行。此时您有两种选择:

  • 确保您的输出表仅包含类似字符的字段或
  • 遍历每一行的每个字段(您可以使用RTTI执行此操作)并根据需要转换内容

答案 1 :(得分:0)

在将数据传输到数据集之前,我使用了一个函数转换为文本格式:

CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
EXPORTING
  I_FIELD_SEPERATOR          = c_colon
TABLES
  I_TAB_SAP_DATA             = ig_final
CHANGING
 I_TAB_CONVERTED_DATA       = ig_text
EXCEPTIONS
 CONVERSION_FAILED          = 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.



OPEN DATASET v_g_dtasetfile FOR OUTPUT IN TEXT MODE ENCODING UTF-8.

IF sy-subrc EQ 0.

LOOP AT ig_text ASSIGNING <fs_l_wa>.
  TRANSFER <fs_l_wa> TO v_g_dtasetfile.
ENDLOOP.
CLOSE DATASET v_g_dtasetfile.

MESSAGE i899(f2) WITH text-020 v_g_dtasetfile text-021.

ENDIF.