Here's one for you…
How come this code results in an empty table gt_test2
…
gt_test2 = VALUE #(
FOR gs_test1 IN gt_test1 WHERE ( v3 = gs_test3-v3 AND v4 = gs_test3-v4 )
FOR gs_test2 IN gt_test2 WHERE ( v1 = gs_test1-v1 AND v2 = gs_test1-v2 )
( gs_test2 )
).
WRITE / lines( gt_test2 ).
and this one produces a correct result?
DATA: gt_test2_2 LIKE gt_test2.
gt_test2_2 = VALUE #(
FOR gs_test1 IN gt_test1 WHERE ( v3 = gs_test3-v3 AND v4 = gs_test3-v4 )
FOR gs_test2 IN gt_test2 WHERE ( v1 = gs_test1-v1 AND v2 = gs_test1-v2 )
( gs_test2 )
).
WRITE / lines( gt_test2_2 ).
Is this a bug in ABAP!? I always thought first the right side of an expression is evaluated and then assigned to the left one. In this ABAP construct however it does seem that the left side is somehow used internally while calculating the right one, which leads to an incorrect result.
Minimal working example.
REPORT ZZZ.
TYPES: BEGIN OF ty_test1,
v1 TYPE char40,
v2 TYPE char6,
v3 TYPE char6,
v4 TYPE char32,
END OF ty_test1,
BEGIN OF ty_test2,
v1 TYPE char40,
v2 TYPE char6,
v5 TYPE numc3,
END OF ty_test2,
BEGIN OF ty_test3,
v3 TYPE char6,
v4 TYPE char32,
END OF ty_test3.
TYPES: tty_test1 TYPE STANDARD TABLE OF ty_test1 WITH EMPTY KEY,
tty_test2 TYPE STANDARD TABLE OF ty_test2 WITH EMPTY KEY.
INITIALIZATION.
DATA(gt_test1) = VALUE tty_test1(
( v1 = '1' v2 = '007001' v3 = '0012345678' v4 = '001061' )
( v1 = '2' v2 = '007001' v3 = '0999999953' v4 = '001061' )
).
DATA(gt_test2) = VALUE tty_test2(
( v1 = '1' v2 = '007001' v5 = '10' )
( v1 = '2' v2 = '007001' v5 = '15' )
).
DATA(gs_test3) = VALUE ty_test3( v3 = '0999999953' v4 = '001061' ).
START-OF-SELECTION.
* DATA: gt_test2_2 LIKE gt_test2.
* gt_test2_2 =
gt_test2 =
VALUE #(
FOR gs_test1 IN gt_test1 WHERE ( v3 = gs_test3-v3 AND v4 = gs_test3-v4 )
FOR gs_test2 IN gt_test2 WHERE ( v1 = gs_test1-v1 AND v2 = gs_test1-v2 )
( gs_test2 )
).
WRITE / lines( gt_test2 ).
* WRITE / lines( gt_test2_2 ).