Jay*_*Jay 3 abap loops internal-tables
在我的选择屏幕上,您可以使用单选按钮选择要选择信息的编号类型。(材料编号、施工合同或客户订单)。
选择种类后,用户必须在相应的选择选项中填写数字。有了这些信息,我选择了我需要将它们移动到 itab 的信息t_marc
。此表具有与 相同的字段marc
。
当用户在选择屏幕上选择材料编号时,一切正常,用户记下的每个编号的值都显示在 ALV 列表中。
When selecting by one of the other numbers, the values in output are also right, but only the information to the last denoted number will be edited.
如何将所有数字移动到我的 itabs?
PARAMETERS: p_mat RADIOBUTTON GROUP radi.
PARAMETERS: p_auf RADIOBUTTON GROUP radi.
PARAMETERS: p_vbl RADIOBUTTON GROUP radi.
SELECT-OPTIONS: s_matnr FOR marc-matnr.
SELECT-OPTIONS: s_aufnr FOR aufk-aufnr.
SELECT-OPTIONS: s_vbeln FOR vbap-vbeln.
Run Code Online (Sandbox Code Playgroud)
选择开始
IF p_mat = 'X'.
SELECT * FROM marc
INTO TABLE t_marc
WHERE matnr IN s_matnr
AND werks = p_werks.
ELSEIF p_auf = 'X'.
SELECT * FROM afpo
INTO TABLE t_afpo
WHERE aufnr IN s_aufnr.
LOOP AT t_afpo.
SELECT * FROM marc
INTO TABLE t_marc
WHERE matnr = t_afpo-matnr
AND werks = p_werks.
ENDLOOP.
ELSEIF p_vbl = 'X'.
SELECT * FROM vbap
INTO TABLE t_vbap
WHERE vbeln = s_vbeln-low
AND posnr IN s_posnr.
LOOP AT t_vbap.
SELECT * FROM marc
INTO TABLE t_marc
WHERE matnr = t_vbap-matnr
AND werks = p_werks.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)
您每次都在此循环(以及类似的循环)中覆盖记录。
LOOP AT t_afpo.
SELECT * FROM marc
INTO TABLE t_marc
WHERE matnr = t_afpo-matnr
AND werks = p_werks.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)
“INTO TABLE”每次都会覆盖。您可以切换到“附加表”。或者,我会使用 a for all entries select 代替(无循环)。
SELECT * FROM marc
INTO TABLE t_marc
FOR ALL ENTRIES IN t_afpo
WHERE matnr = t_afpo-matnr
AND werks = p_werks.
Run Code Online (Sandbox Code Playgroud)
始终确保驱动程序表(在本例中为 t_afpo)中有记录,否则您将遇到性能问题。
归档时间: |
|
查看次数: |
1429 次 |
最近记录: |