Code: Alles auswählen.
REPORT.
CLASS ltc_unit_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS unit_test1 FOR TESTING.
METHODS unit_test2 FOR TESTING.
METHODS unit_test3 FOR TESTING.
METHODS unit_test4 FOR TESTING.
CLASS-METHODS class_setup.
ENDCLASS.
CLASS ltc_unit_test IMPLEMENTATION.
METHOD class_setup.
FINAL(t000_double) = cl_osql_test_environment=>create( VALUE #( ( 'VEKP' ) ) ).
t000_double->insert_test_data( VALUE vekp_t( ( venum = '0000000001' exidv = '00000000000000004711' )
( venum = '0000000002' exidv = '00000000000000004711' )
( venum = '0000000003' exidv = '00000000000000004712' )
( venum = '0000000004' exidv = '00000000000000004712' ) ) ).
ENDMETHOD.
METHOD unit_test1.
" Arrange
DATA l_exidv TYPE exidv.
l_exidv = '4711'.
" Act
SELECT SINGLE FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv = @( |{ l_exidv ALPHA = IN }| )
GROUP BY exidv
INTO @FINAL(l_vekp).
" Assert
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_vekp-venum ).
ENDMETHOD.
METHOD unit_test2.
" Arrange
DATA l_exidv TYPE exidv.
l_exidv = '4712'.
" Act
SELECT * FROM vekp
WHERE exidv = @( |{ l_exidv ALPHA = IN }| )
ORDER BY venum DESCENDING
INTO @FINAL(l_result)
UP TO 1 ROWS. ENDSELECT.
" Assert
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result-venum ).
ENDMETHOD.
METHOD unit_test3.
" Arrange
FINAL(l_hus) = VALUE rsdsselopt_t( sign = 'I'
option = 'EQ'
( low = '00000000000000004711' )
( low = '00000000000000004712' ) ).
" Act
SELECT FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv IN @l_hus
GROUP BY exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.
METHOD unit_test4.
" Arrange
TYPES:
BEGIN OF ty_hus,
exidv TYPE exidv,
END OF ty_hus,
tty_hus TYPE SORTED TABLE OF ty_hus WITH NON-UNIQUE KEY exidv.
DATA l_hus TYPE tty_hus.
l_hus = VALUE #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' ) ).
SELECT DISTINCT exidv FROM vekp
FOR ALL ENTRIES IN @l_hus
WHERE exidv = @l_hus-exidv
INTO TABLE @FINAL(l_vekp).
DATA l_rng_exidv TYPE RANGE OF exidv.
LOOP AT l_vekp ASSIGNING FIELD-SYMBOL(<row>).
l_rng_exidv = VALUE #( BASE l_rng_exidv
( sign = 'I'
option = 'EQ'
low = <row>-exidv ) ).
ENDLOOP.
" Act
SELECT FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv IN @l_rng_exidv
GROUP BY exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.
ENDCLASS.
Code: Alles auswählen.
define view entity zhandling_unit as select from vekp{
exidv,
max( venum )
} group by exidv
Code: Alles auswählen.
SELECT * FROM zhandling_unit
FOR ALL ENTRIES IN @l_hus
WHERE exidv = @l_hus-exidv
INTO TABLE @FINAL(l_result).
Code: Alles auswählen.
data l_rng_Exidv type range of exidv.
select
'I' as sign,
'EQ' as option,
exidv as low
from
@l_vekp as v
into table
@l_rng_exidv.
Code: Alles auswählen.
types:
begin of ty_hus,
exidv type exidv,
end of ty_hus,
tty_hus type sorted table of ty_hus with non-unique key exidv.
data l_hus type tty_hus.
types:
begin of t_vekp,
venum type venum,
exidv type exidv,
end of t_vekp,
tty_vekp type sorted table of t_vekp with UNIQUE key venum.
data vekp type tty_vekp.
data l_exidv type exidv.
vekp = value #( ( venum = '0000000001' exidv = '00000000000000004711' )
( venum = '0000000002' exidv = '00000000000000004711' )
( venum = '0000000003' exidv = '00000000000000004712' )
( venum = '0000000004' exidv = '00000000000000004713' ) ).
l_hus = value #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' )
( exidv = '00000000000000004713' ) ).
select distinct
exidv
from
vekp as vekp
for all entries in
@l_hus
where
exidv = @l_hus-exidv
into table
@final(l_vekp).
data l_rng_Exidv type range of exidv.
select
'I' as sign,
'EQ' as option,
exidv as low
from
@l_vekp as v
into table
@l_rng_exidv.
select
exidv,
max( venum ) as venum
from
vekp
where
exidv in @l_rng_exidv
group by
exidv
into table
@final(l_result).
write / lines( l_result ).
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
rob_abc
Code: Alles auswählen.
METHOD unit_test5.
" Arrang
TYPES:
BEGIN OF ty_hus,
exidv TYPE exidv,
END OF ty_hus,
tty_hus TYPE SORTED TABLE OF ty_hus WITH NON-UNIQUE KEY exidv.
DATA l_hus TYPE tty_hus.
l_hus = VALUE #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' ) ).
" Act
SELECT
FROM vekp
INNER JOIN
@l_hus AS l_hus ON l_hus~exidv = vekp~exidv
FIELDS vekp~exidv,
MAX( venum ) AS venum
GROUP BY vekp~exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.