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.

测试效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP_Damon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值