Skip to content

Instantly share code, notes, and snippets.

@ClementRoyer
Created May 4, 2022 13:55
Show Gist options
  • Select an option

  • Save ClementRoyer/05918e55a00a31911979339ed37b2dd4 to your computer and use it in GitHub Desktop.

Select an option

Save ClementRoyer/05918e55a00a31911979339ed37b2dd4 to your computer and use it in GitHub Desktop.
Check if value inside a column of an internal table exist in a sap table (ex: check vendors from an excel file)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"" check it column value exist in sap
TYPES: BEGIN OF s_struct,
vendor TYPE lifnr,
END OF s_struct.
DATA: sap_data TYPE HASHED TABLE OF s_struct WITH UNIQUE KEY vendor.
DATA: data_to_verify TYPE TABLE OF s_struct.
SELECT lifnr AS vendor
FROM lfa1
INTO CORRESPONDING FIELDS OF TABLE data_to_verify.
"" S1 - 75ms
"" Complexity : O(logn + n)
SELECT
lifnr AS vendor
FROM lfa1
INTO CORRESPONDING FIELDS OF TABLE @sap_data. "" O(logn)
"where
LOOP AT data_to_verify ASSIGNING FIELD-SYMBOL(<fs_vendor>). "" O(n)
IF VALUE #( sap_data[ vendor = <fs_vendor>-vendor ] OPTIONAL ) IS NOT INITIAL. "" O(1)
"" Exist
ELSE.
"" Don't exist
ENDIF.
ENDLOOP.
"" S2 - 134ms
DATA: r_lifnr TYPE HASHED TABLE OF lifnr_ran WITH UNIQUE KEY low.
"" Add value on low
r_lifnr = CORRESPONDING #( data_to_verify MAPPING low = vendor ).
"" Add sign & option
MODIFY r_lifnr FROM VALUE #( sign = 'I' option = 'EQ' ) TRANSPORTING sign option WHERE low <> ''.
SELECT COUNT(*)
FROM lfa1
WHERE lifnr IN @r_lifnr
INTO @DATA(nb_vendor).
IF nb_vendor <> lines( r_lifnr ).
"" some vendor dont exist
ELSE.
"" all vendors exist
ENDIF.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment