SAP ABAP: 内表数据行转列的应用

需求:把行数据按照一定格式拼接,形成列。

举例:

有一个内表it_send,内表中有字段A,B,C,D,E,F,G,H。 另外一个内表ct_bom  ,有字段A1,B1,C1,D1,E1,F1,G1,H1类推至A24,B24,C24,D24,E24,F24,G24,H24. 请把内表IT_MATNR中数据转换到ct_bom  中,it_send中每24行数据转换到内表ct_bom 中的一行,循环转换,直到数据转换结束。

代码:

FORM frm_mapping_data  USING   it_send TYPE  tt_send
                      CHANGING cs_head TYPE cn_d0311_order
                               ct_bom  TYPE tt_bom.  
CLEAR ls_row.
  ls_row-index  = 1.
  ls_row-fieldname    = text-t01.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 2.
  ls_row-fieldname    = text-t02.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 3.
  ls_row-fieldname    = text-t03.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 4.
  ls_row-fieldname    = text-t04.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 5.
  ls_row-fieldname    = text-t05.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 6.
  ls_row-fieldname    = text-t06.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 7.
  ls_row-fieldname    = text-t07.
  APPEND ls_row TO gt_row.
  CLEAR ls_row.
  ls_row-index  = 8.
  ls_row-fieldname    = text-t08.
  APPEND ls_row TO gt_row.



  CONSTANTS lc_symbol TYPE char1 VALUE '_'.

  DATA lv_fiename TYPE fieldname.
  DATA lv_char2 TYPE char2.
  DATA lv_index TYPE sy-index.
  DATA lv_sindex TYPE sy-index.

   FIELD-SYMBOLS <ls_newline> TYPE d0311_bom.
  DATA ls_bom TYPE d0311_bom.

 "Mapping BOM data
  LOOP AT it_send ASSIGNING FIELD-SYMBOL(<ls_data>).

    "Get the current line number
    lv_index = lv_index + 1.

    lv_char2 = lv_index.

    "Int transfer char2.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = lv_char2
      IMPORTING
        output = lv_char2.

    IF lv_index = 1.
      "Create new line
      CLEAR ls_bom.
      INSERT ls_bom INTO TABLE ct_bom ASSIGNING <ls_newline>.
    ENDIF.

*    WHILE .
    DO 8 TIMES.
      "Convert the 8 fields in the BOM table to their corresponding columns in sequence
      lv_sindex = lv_sindex + 1.
      READ TABLE gt_row INTO DATA(ls_row) INDEX lv_sindex.
      IF sy-subrc EQ 0.
        ASSIGN COMPONENT ls_row-fieldname OF STRUCTURE <ls_data> TO FIELD-SYMBOL(<lv_fieldvalue>).
        IF sy-subrc EQ 0.
          CLEAR lv_fiename.
          lv_fiename = ls_row-fieldname && lc_symbol && lv_char2.
          ASSIGN COMPONENT lv_fiename OF STRUCTURE <ls_newline> TO FIELD-SYMBOL(<lv_newfield>).
          IF sy-subrc EQ 0.
            <lv_newfield> = <lv_fieldvalue>.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDDO.
    CLEAR lv_sindex.

    "Every 24 lines clear the index
    IF lv_index = 24.
      CLEAR lv_index.
    ENDIF.

  ENDLOOP.
ENDFORM.

测试效果:

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ABAP是一种编程语言,用于SAP系统应用程序开发。在ABAP,动态内表是一种特殊类型的内表,它允许在运行时动态地添加、删除和修改表格的行和列。动态内表是通过使用ABAP内部表类型"ANY TABLE"来实现的。 要处理动态内表数据,您可以按照以下步骤进行操作: 1. 定义动态内表:使用内部表类型"ANY TABLE"来定义动态内表。例如: DATA: dynamic_table TYPE STANDARD TABLE OF ANY. 2. 创建动态行结构:定义一个结构体,用于描述动态内表的行。这个结构体可以包含任意数量和类型的字段。例如: DATA: dynamic_row TYPE REF TO data, dynamic_row_structure TYPE STANDARD TABLE OF string. 3. 添加行到动态内表:使用CREATE DATA语句来创建动态行,并将其添加到动态内表。例如: CREATE DATA dynamic_row TYPE HANDLE dynamic_row_structure. ASSIGN dynamic_row->* TO <dynamic_row>. APPEND <dynamic_row> TO dynamic_table. 4. 访问动态内表数据:使用ASSIGN语句将动态行的字段赋值给变量,并对其进行操作。例如: FIELD-SYMBOLS: <field> TYPE any. ASSIGN COMPONENT 'FIELD_NAME' OF STRUCTURE <dynamic_row> TO <field>. IF sy-subrc = 0. <field> = 'VALUE'. ENDIF. 5. 删除动态内表行:使用DELETE语句从动态内表删除行。例如: DELETE dynamic_table INDEX i. 6. 修改动态内表行:使用MODIFY语句修改动态内表的行。例如: MODIFY dynamic_table INDEX i FROM <dynamic_row>. 以上是处理ABAP动态内表数据的基本步骤。根据您具体的需求,您可以进一步扩展和优化这些步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_Damon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值