1

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

 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.   

这是错误:

发生了一个异常,下面将详细解释。分配给 class 的异常CX_SY_ASSIGN_CAST_ILLEGAL_CAST没有在 procedure 中捕获F_OPENDATA,也没有通过 RAISING 子句传播。由于过程的调用者无法预料会发生异常,因此终止当前程序。异常的原因是:

错误发生在格式为 ASSIGN f TO CASTING 的语句中。
将 f 分配给铸造类型 t。

将 f 分配给像 f1 一样的铸造。

带有附加
ASSIGNING CASTING 的表语句。

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

4

2 回答 2

1

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

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.
于 2013-07-08T09:34:09.043 回答
1

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

  • 确保您的输出表仅包含类似字符的字段或
  • 遍历每行的每个字段(您可以使用 RTTI 来执行此操作)并根据需要转换内容
于 2013-07-05T08:28:17.263 回答