将内部表作为CSV文件保存到目录中



我正试图将SAP内部表以.CSV文件的形式保存到SAP目录中。我已经学会了应该将内容转换为字符类型,但我遇到了一个非法的强制转换错误。这是我的代码:

 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中捕获,也未通过RAISING子句传播。由于过程的调用方无法预料如果发生异常,则当前程序终止。异常的原因是:

错误发生在表单的语句中将f分配给铸件
将f分配给铸件类型t。

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

添加了
的at表语句分配铸造

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

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

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

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

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.

相关内容

  • 没有找到相关文章

最新更新