实现如下功能
用do varying 实现
源代码:
*&---------------------------------------------------------------------*
*& Report ZCYCLE017
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZCYCLE017.
TYPES: BEGIN OF ty_data,
matnr TYPE matnr,
charg TYPE charg_d,
amatr TYPE matnr, " A
achrg TYPE charg_d,
bmatr TYPE matnr, " B
bchrg TYPE charg_d,
cmatr TYPE matnr, " C
cchrg TYPE charg_d,
END OF ty_data.
TYPES: BEGIN OF ty_tran,
matnr TYPE matnr,
charg TYPE charg_d,
matn2 TYPE matnr,
chrg2 TYPE charg_d,
END OF ty_tran.
DATA: lt_data TYPE TABLE OF ty_data,
ls_data TYPE ty_data.
DATA: lt_tran TYPE TABLE OF ty_tran,
ls_tran TYPE ty_tran.
DATA: lv_matnr TYPE matnr,
lv_charg TYPE charg_d.
* 初始化数据
ls_data-matnr = '物料'.
ls_data-charg = '批次'.
ls_data-amatr = '物料-A'.
ls_data-achrg = '批次-A'.
ls_data-bmatr = '物料-B'.
ls_data-bchrg = '批次-B'.
ls_data-cmatr = '物料-C'.
ls_data-cchrg = '批次-C'.
APPEND ls_data TO lt_data.
ls_data-matnr = '物料1'.
ls_data-charg = '批次1'.
ls_data-amatr = '物料1-A'.
ls_data-achrg = '批次1-A'.
ls_data-bmatr = '物料1-B'.
ls_data-bchrg = '批次1-B'.
ls_data-cmatr = '物料1-C'.
ls_data-cchrg = '批次1-C'.
APPEND ls_data TO lt_data.
* 转换
LOOP AT lt_data INTO ls_data.
DO 3 TIMES VARYING lv_matnr FROM ls_data-amatr
NEXT ls_data-bmatr
VARYING lv_charg FROM ls_data-achrg
NEXT ls_data-bchrg.
ls_tran-matnr = ls_data-matnr.
ls_tran-charg = ls_data-charg.
ls_tran-matn2 = lv_matnr.
ls_tran-chrg2 = lv_charg.
APPEND ls_tran TO lt_tran.
ENDDO.
ENDLOOP.
* 输出
DATA: i_table TYPE REF TO cl_salv_table.
DATA: lr_columns TYPE REF TO cl_salv_columns_table.
DATA: lr_functions TYPE REF TO cl_salv_functions.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = i_table
CHANGING
t_table = lt_tran ).
CATCH cx_salv_msg.
ENDTRY.
" 功能按钮
lr_functions = i_table->get_functions( ).
lr_functions->set_all( abap_true ).
" 列自适应
lr_columns = i_table->get_columns( ).
lr_columns->set_optimize( 'X').
"设置列名称
lr_columns->get_column( 'CHRG2' )->set_long_text( '批次22' )."
" alv输出
i_table->display( ).
输出