我遇到了以下问题。
我想做什么
我想要创建一个信息集,为给定的采购订单重新组合来自VBAK表的数据,其中包含来自VBPA表的几行数据,这些行应该被分派到不同的字段。

示例:对于下面的PO 111005229,我想在第一个字段中检索KUNNR字段,其中PARVW = 'ER'字段检索第二个字段,在第二个字段中检索PARVW = 'BP'字段。
期望产出:

我试过的
在SQ02中连接两个表
我试图在运行VBAK和VBAP时声明两个表-- SQ02 TCode,并选择所需的字段:

这不管用:
CHECK VBPA-PARVW = 'ER'.代码部分中使用Record processing时,希望这将使给定PO的行数减少到1,则根本不返回任何值。在SQ02中只声明VBAK表
我还尝试只在SQ02中声明SQ02表,创建我想要的附加字段PERNR_ER,然后使用与这些特定字段相关的openSQL代码加入VBAK和VBPA。
我创建了附加字段PARVW_ER和PERNR_ER,嵌入了以下代码:
SELECT PARVW
INTO PARVW_ER
FROM VBPA
WHERE VBELN = VBPA~VBELN.
AND PARVW = 'ER'.
ENDSELECT.
SELECT PERNR
INTO PERNR_ER
FROM VBPA
WHERE VBELN = VBPA~VBELN.
AND PARVW = 'ER'.
ENDSELECT.作为输出

我也试过
TYPES: begin of TY_TABLE,
PARVW LIKE VBPA-PARVW,
PERNR LIKE VBPA-PERNR,
END OF TY_TABLE.
DATA: WA_TABLE TYPE TY_TABLE,
IT_TABLE TYPE TABLE OF TY_TABLE.
SELECT PARVW PERNR
APPENDING CORRESPONDING FIELDS OF TABLE IT_TABLE
FROM VBPA
WHERE VBELN = VBPA~VBELN.
LOOP AT IT_TABLE INTO WA_TABLE.
IF WA_TABLE-PARVW = 'ER'.
PARVW_ER = WA_TABLE-PARVW.
PERNR_ER = WA_TABLE-PERNR.
ENDIF.
ENDLOOP.但它还是回来了。
我应该如何取得预期的结果?
发布于 2019-07-02 11:13:58
在同一表上使用INNER JOIN,然后通过PARVW筛选出不必要的行。
REPORT YYY.
TABLES: vbpa.
START-OF-SELECTION.
vbpa = VALUE #( vbeln = '111005229' parvw = 'SP' kunnr = '100007760' adrnr = '9000002718' ).
INSERT vbpa.
vbpa = VALUE #( vbeln = '111005229' parvw = 'BP' kunnr = '100007760' adrnr = '38110' ).
INSERT vbpa.
vbpa = VALUE #( vbeln = '111005229' parvw = 'PY' kunnr = '100007760' adrnr = '38110' ).
INSERT vbpa.
vbpa = VALUE #( vbeln = '111005229' parvw = 'SH' kunnr = '100007760' adrnr = '38110' ).
INSERT vbpa.
vbpa = VALUE #( vbeln = '111005229' parvw = 'ER' pernr = '8071' ).
INSERT vbpa.
SELECT t1~vbeln, t2~pernr AS field1, t1~adrnr AS field2
FROM vbpa AS t1
INNER JOIN vbpa AS t2
ON t1~vbeln = t2~vbeln
INTO TABLE @DATA(l_tab_vbpa)
WHERE t1~parvw = 'BP'
AND t2~parvw = 'ER'.
LOOP AT l_tab_vbpa ASSIGNING FIELD-SYMBOL(<str_vbpa>).
WRITE: / <str_vbpa>-vbeln, <str_vbpa>-field1, <str_vbpa>-field2.
ENDLOOP.
ROLLBACK WORK.结果
测试 111005229 00008071 38110
发布于 2019-07-04 00:46:21
您可以通过这个简单的双FOR循环来实现这一点:
TYPES: BEGIN OF ty_res,
vbeln TYPE vbeln,
field1 TYPE vbpa-pernr,
field2 TYPE vbpa-adrnr,
END OF ty_res,
tt_res TYPE STANDARD TABLE OF ty_res WITH EMPTY KEY.
DATA(lt_vbpa) = VALUE tab_vbpa( ).
APPEND VALUE #( vbeln = '111005229' parvw = 'SP' kunnr = '100007760' adrnr = '9000002718' ) TO lt_vbpa.
APPEND VALUE #( vbeln = '111005229' parvw = 'BP' kunnr = '100007760' adrnr = '38110' ) TO lt_vbpa.
APPEND VALUE #( vbeln = '111005229' parvw = 'PY' kunnr = '100007760' adrnr = '38110' ) TO lt_vbpa.
APPEND VALUE #( vbeln = '111005229' parvw = 'SH' kunnr = '100007760' adrnr = '38110' ) TO lt_vbpa.
APPEND VALUE #( vbeln = '111005229' parvw = 'ER' pernr = '8071' ) TO lt_vbpa.
DATA(result) = VALUE tt_res( FOR ls_vbpa_bp IN lt_vbpa WHERE ( parvw = 'BP' )
FOR ls_vbpa_er IN lt_vbpa WHERE ( parvw = 'ER' )
( vbeln = ls_vbpa_bp-vbeln
field1 = ls_vbpa_er-pernr
field2 = ls_vbpa_bp-adrnr ) ).result选项卡包含所需的输出。
但是,这只在特殊情况下起作用,在这种特殊情况下,只有一条带BP函数的行和带有ER伙伴函数的one,它们都附带了适当的PERNR/ADRNR值。在其他情况下,您需要分组。
发布于 2019-07-04 09:32:07
这条来自@SandraRossi评论的贴士帮助了我:
我认为您没有意识到外部和内部格式之间的转换。对于PARVW,如果您与英语连接,则当您看到ER时,它意味着内部值ZM (cf表TPAUM)。
我不知道即使使用事务代码SE16N,字段也可以显示转换后的数据,即它以我的语言显示ER。
因此,解决方案是简单地在ZM上过滤:
SELECT PERNR
INTO PERNR_ER
FROM VBPA
WHERE VBPA~VBELN = VBAK-VBELN AND PARVW = 'ZM'.
ENDSELECT.https://stackoverflow.com/questions/56850225
复制相似问题