我正在尝试将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)中描述的规则规定。
答案 0 :(得分:1)
转换与强制转换不同。如果您的表包含的字段不是CLIKE
,系统将拒绝投射整行。此时您有两种选择:
答案 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.