首页 > 解决方案 > 如何用另一个内部表更新一个内部表?

问题描述

我有这张表,您会注意到该列VKBUR是空的:

主表

VKGRP使用列作为键使用另一个表中的条目填充此列的最佳方法是什么?

总之,我想VKBUR使用来自L_T_ZCUSTSL04源的数据来填充列。他们的密钥VKGRP来自两个表:

查找表

使用此查找表,我想将值传递VKBUR到上表中。

非常感谢您的帮助,祝您周末愉快。

标签: abap

解决方案


另一种可能的方法是使用表格推导表格表达式来填充表格

TYPES: BEGIN OF ty_mara,
             matnr TYPE matnr,
             matkl TYPE matkl,
             maktx TYPE maktx,
           END OF ty_mara,
           BEGIN OF ty_text,
             matnr TYPE matnr,
             maktx TYPE maktx,
         END OF ty_text.

 DATA: gt_text TYPE STANDARD TABLE OF ty_text.
 DATA: gt_mara TYPE STANDARD TABLE OF ty_mara.
TYPES: tty_empty TYPE STANDARD TABLE OF ty_mara WITH EMPTY KEY.

SELECT matnr, matkl UP TO 10 ROWS
  FROM mara
  INTO TABLE @gt_mara.

SELECT matnr, maktx
  INTO TABLE @gt_text
  FROM makt
   FOR ALL ENTRIES IN @gt_mara
 WHERE matnr = @gt_mara-matnr.

  DATA(gt_result) = VALUE tty_empty( FOR wa IN gt_mara ( matnr = wa-matnr matkl = wa-matkl maktx = VALUE maktx( gt_text[ matnr = wa-matnr ]-maktx OPTIONAL ) ) ).

然而,与 Dan 的方式相比,它有几个缺点,因为它需要静态表声明,并且它创建新的 itab 而不是修改现有的。所以我建议坚持丹的方式。

当然,使用旧的良好循环和表表达式可以避免构建新表:

LOOP AT gt_mara ASSIGNING FIELD-SYMBOL(<fs_mara>).
  maktx = VALUE maktx( gt_text[ matnr = <fs_mara>-matnr ]-maktx OPTIONAL ).
ENDLOOP.

推荐阅读