5月14日面授结束老师布置了一个作业,出一个供应商主数据报表,题目回顾在lfa1中抓取name1
land1
stras 三个字段,在lfb1中抓取bukrs
lifnr字段,lfa1和lfb1通过字段lifnr关联!
老师推荐的解法是:
建立三个内部表:it_lfa1(包含字段lifnr
name1
land1
stras)
it_lfb1(包含字段bukrs
lifnr)
it_table(包含字段lifnr
name1
land1
stras
bukrs )。
1.通过select语句将lifnr
name1
land1
stras四个字段读取到it_lfa1中;
2.用select 加for all entries in关键字,将bukrs
lifnr读取到it_lfb1中
3.在通过loop循环将it_lfb1读到工作区域wa_lfb1,再用read table 加关键字with key,把it_lfa1的字段也读到wa_lfa1中。
4.用move-corresponding把两个小工作区的内容复制到wa_table中,
5.最后append到it_table。
在上面思路的提醒下我打算用下面的方法(用了corresponding fields of效率不高)出报表,但是每次输出的内容都不是我想要的!我只建一个内部表,包含要输出的这五个字段it_table(包含字段lifnr
bukrs
name1
land1
stras )
思路如下:
1,用select 加corresponding fields of 关键字将lifnr
bukrs 两个字段从lfb1中先读到it_table中。
2,在用loop循环把it_table中的记录读取到工作区域中,在用字段wa_table-lifnr作为条件,从lfa1中读取另外三个字段(同样使用corresponding fields of)
REPORT zs029_litaoreport3 MESSAGE-ID fz LINE-COUNT 58.
TABLES:vbrk,
lfb1,
lfa1.
TYPES:BEGIN OF ty_lfb1,
bukrs TYPE lfb1-bukrs,
lifnr TYPE lfb1-lifnr,
name1 TYPE lfa1-name1,
land1 TYPE lfa1-land1,
stras TYPE lfa1-stras,
END OF ty_lfb1.
DATA wa_lfb1 TYPE ty_lfb1.
DATA it_lfb1 TYPE STANDARD TABLE OF ty_lfb1.
SELECT-OPTIONS s_bukrs FOR vbrk-bukrs.
SELECT-OPTIONS s_lifnr FOR lfb1-lifnr.
PARAMETERS p_land1 LIKE lfa1-land1 OBLIGATORY.
START-OF-SELECTION.
SELECT bukrs
lifnr
FROM lfb1
INTO CORRESPONDING FIELDS OF TABLE it_lfb1
WHERE bukrs IN s_bukrs
AND lifnr IN s_lifnr
AND lifnr NOT LIKE 'e%'
AND lifnr NOT LIKE 'p%'.
LOOP AT it_lfb1 INTO wa_lfb1.
SELECT name1
land1
stras
FROM lfa1
INTO CORRESPONDING FIELDS OF wa_lfb1
WHERE land1 = p_land1
AND lifnr = wa_lfb1-lifnr.
ENDSELECT.
COLLECT wa_lfb1 INTO it_lfb1.
ENDLOOP.
SORT it_lfb1 BY bukrs ASCENDING
lifnr ASCENDING.
END-OF-SELECTION.
LOOP AT it_lfb1 INTO wa_lfb1.
WRITE:/ wa_lfb1-bukrs,wa_lfb1-lifnr,wa_lfb1-name1,wa_lfb1-land1,
wa_lfb1-stras.
ENDLOOP.
问题如下:只能输出两个字段,其余的是被覆盖了吗?
这样去想这个问题是不是思路有问题?
是不是COLLECT wa_table into it_table.这段代码不对?
谢谢各位帮助!!