<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Making processing on an internal table generic in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447711#M1649215</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jessie,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Which ABAP Release are you working on? Dynamic WHERE conditions for LOOP AT itab, MODIFY itab, and DELETE itab statements are possible from Release 702.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Even if you're on 702, the statement &lt;EM&gt;DELETE &amp;lt;table_travail&amp;gt; WHERE (column) NOT IN &amp;lt;fs_tab&amp;gt;&lt;/EM&gt; won't work! You need to change your coding to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;DATA lv_dyn_cond TYPE string.

CONCATENATE column `NOT IN` `&amp;lt;FS_TAB&amp;gt;` INTO lv_dyn_cond SEPARATED BY space.
DELETE &amp;lt;table_travail&amp;gt; WHERE (lv_dyn_cond).&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Suhas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 17 Jan 2012 06:32:22 GMT</pubDate>
    <dc:creator>SuhaSaha</dc:creator>
    <dc:date>2012-01-17T06:32:22Z</dc:date>
    <item>
      <title>Making processing on an internal table generic</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447709#M1649213</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm trying to make more generic a processing on an internal table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the idea :&lt;/P&gt;&lt;P&gt;"DELETE FROM TABLE T_VBAP every lines that do not exist IN table T_VBAK USING column VBELN for comparison"&lt;/P&gt;&lt;P&gt;You can see below the (not generic) version of this function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'd like to make it more generic.&lt;/P&gt;&lt;P&gt;It would be called this way :&lt;/P&gt;&lt;P&gt;	PERFORM reduire USING t_vbak t_vbap 'VBELN' 'vbak-vbeln'.&lt;/P&gt;&lt;P&gt;with the following code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is my question : &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How can I make the last statement generic too ?&lt;/P&gt;&lt;P&gt;  DELETE &amp;lt;table_travail&amp;gt; WHERE (column) NOT IN &amp;lt;fs_tab&amp;gt; won't work...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot !&lt;/P&gt;&lt;P&gt;Jessie&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Non-generic version :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;FORM reduire.
  DATA : liste_vbeln type range of vbak-vbeln,
               line_vbeln TYPE LINE OF liste_vbeln,
               lt_vbak TYPE TABLE OF ts_vbak,
               lt_vbap TYPE ts_vbak.

  lt_vbak = t_vbak.
  SORT lt_vbak BY vbeln.
  DELETE ADJACENT DUPLICATES FROM lt_vbak COMPARGIN vbeln.

  line_vbeln-sign = 'I'.
  line_vbeln-option = 'EQ'.

  LOOP AT lt_vbak INTO ls_vbak.
    line_vbeln-low = ls_vbak-vbeln.
    APPEND line_vbeln TO liste_vbeln.
  ENDLOOP.

  IF liste_vbeln IS INITIAL.
	CLEAR t_vbap.
  ELSE.
    DELETE t_vbap WHERE vbeln NOT IN liste_vbeln.
  ENDIF.
ENDFORM.&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Generic version :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;FORM reduire USING  p_reference STANDARD TABLE
                    p_travail TYPE STANDARD TABLE
 					column TYPE lvc_name
					column_type TYPE string.

	FIELD-SYMBOLS &amp;lt;table_reference&amp;gt; TYPE STANDARD TABLE.
	FIELD-SYMBOLS &amp;lt;table_reference_copy&amp;gt; TYPE STANDARD TABLE.
	ASSIGN p_reference to &amp;lt;table_reference&amp;gt;.
	FIELD-SYMBOLS &amp;lt;table_travail&amp;gt; TYPE STANDARD TABLE.
	ASSIGN p_travail to &amp;lt;table_travail&amp;gt;.

	FIELD-SYMBOLS &amp;lt;table_reference_fields&amp;gt; TYPE ANY.
	DATA gs_fldname TYPE REF TO DATA.
	CREATE DATA gs_fldname LIKE LINE OF &amp;lt;table_reference&amp;gt;.
	ASSIGN gs_fldname-&amp;gt;* TO &amp;lt;table_reference_fields&amp;gt;.

	DATA position TYPE i.
	DATA dyn_table TYPE REF TO DATA.
	DATA wa_fieldcat TYPE lvc_s_fcat.
	DATA it_fieldcat TYPE lvc_t_fcat.
	DATA table_reference_copy_pre TYPE REF TO DATA.

	DATA l_descr_ref TYPE REF TO cl_abap_structdescr.
	FIELD-SYMBOLS &amp;lt;ls_tab&amp;gt; TYPE ANY.
	FIELD-SYMBOLS &amp;lt;field&amp;gt; TYPE ANY.
	FIELD-SYMBOLS &amp;lt;lfs_comp_wa&amp;gt; TYPE abap_compdescr.

	l_descr_ref ?= cl_abap_typedescr=&amp;gt;describe_by_data( &amp;lt;table_reference_fields&amp;gt; ).

	LOOP AT l_descr_ref-&amp;gt;components[] ASSIGNING &amp;lt;lfs_comp_wa&amp;gt;.
		IF &amp;lt;lfs_comp_wa&amp;gt;-name = column.
			position = sy-tabix.
		ENDIF.
		CLEAR wa_fieldcat.
		wa_fieldcat-fieldname = &amp;lt;lfs_comp_wa&amp;gt;-name.
		wa_fieldcat-datatype  = &amp;lt;lfs_comp_wa&amp;gt;-type_kind.
		wa_fieldcat-inttype   = &amp;lt;lfs_comp_wa&amp;gt;-type_kind.
		wa_fieldcat-intlen    = &amp;lt;lfs_comp_wa&amp;gt;-length / 2.
		wa_fieldcat-decimals  = &amp;lt;lfs_comp_wa&amp;gt;-decimals.
		APPEND wa_fieldcat TO it_fieldcat.
	ENDLOOP.

	CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table
		EXPORTING
			it_fieldcatalog = it_fieldcat
		IMPORTING
			ep_table = table_reference_copy_pre.

	ASSIGN table_reference_copy_pre-&amp;gt;* TO &amp;lt;table_reference_copy&amp;gt;.
	&amp;lt;table_reference_copy&amp;gt; = p_reference.

	SORT &amp;lt;table_reference_copy&amp;gt; BY (column).
	DELETE ADJACENT DUPLICATES FROM &amp;lt;table_reference&amp;gt; COMPARING (column).

	DATA :
		gr_structdescr TYPE REF TO cl_abap_structdescr,
		gr_tabledescr TYPE REF TO cl_abap_tabledescr,
		gr_datadescr TYPE REF TO cl_abap_datadescr,
		gr_typedescr TYPE REF TO cl_abap_typedescr,
		gt_components TYPE abap_component_tab,
		gw_component TYPE LINE OF abap_component_tab,
		gr_wa TYPE REF TO DATA,
		gr_tab TYPE REF TO DATA.

	FIELD-SYMBOLS :
		&amp;lt;fs_wa&amp;gt; TYPE ANY,
		&amp;lt;fs_tab&amp;gt; TYPE TABLE.

	MOVE 'SIGN' to gw_component-name.
	gw_component-type ?= cl_abap_elemdescr=&amp;gt;get_c( p_length = 1 ).
	INSERT gw_component INTO TABLE gt_components.

	MOVE 'OPTION' to gw_component-name.
	gw_component-type ?= cl_abap_elemdescr=&amp;gt;get_c( p_length = 2 ).
	INSERT gw_component INTO TABLE gt_components.

	MOVE 'LOW' to gw_component-name.
	gw_component-type ?= cl_abap_elemdescr=&amp;gt;describe_by_name( column_type ).
	INSERT gw_component INTO TABLE gt_components.

	MOVE 'HIGH' to gw_component-name.
	gw_component-type ?= cl_abap_elemdescr=&amp;gt;describe_by_name( column_type ).
	INSERT gw_component INTO TABLE gt_components.

	gr_structdescr ?= cl_abap_structdescr=&amp;gt;create( gt_components ).

	CREATE DATA gr_wa TYPE HANDLE gr_structdescr.
	ASSIGN gr_wa-&amp;gt;* to &amp;lt;fs_wa&amp;gt;.

	gr_datadescr ?= gr_structdescr.
	gr_tabledescr ?= cl_abap_tabledescr=&amp;gt;create( gr_datadescr ).

	CREATE DATA gr_tab TYPE HANDLE gr_datadescr.
	ASSIGN gr_tab-&amp;gt;* TO &amp;lt;fs_tab&amp;gt;.

	LOOP AT &amp;lt;table_reference&amp;gt; ASSIGNING &amp;lt;ls_tab&amp;gt;.
		ASSIGN COMPONENT position OF STRUCTURE &amp;lt;ls_tab&amp;gt; to &amp;lt;field&amp;gt;.
		CONCATENATE 'IEQ' &amp;lt;field&amp;gt; INTO &amp;lt;fs_wa&amp;gt;.
		APPEND &amp;lt;fs_wa&amp;gt; TO &amp;lt;fs_tab&amp;gt;.
	ENDLOOP.

	DELETE t_vbap WHERE vbeln NOT IN &amp;lt;fs_tab&amp;gt;.
ENDFORM.&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Jan 2012 21:08:38 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447709#M1649213</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2012-01-16T21:08:38Z</dc:date>
    </item>
    <item>
      <title>Re: Making processing on an internal table generic</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447710#M1649214</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;For both the generic and not generic version, if you want to delete what is not in the range you can use sign = 'E', thenDELETE &amp;lt;table&amp;gt; WHERE &amp;lt;filed&amp;gt; IN &amp;lt;range&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jan 2012 04:21:22 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447710#M1649214</guid>
      <dc:creator>custodio_deoliveira</dc:creator>
      <dc:date>2012-01-17T04:21:22Z</dc:date>
    </item>
    <item>
      <title>Re: Making processing on an internal table generic</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447711#M1649215</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jessie,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Which ABAP Release are you working on? Dynamic WHERE conditions for LOOP AT itab, MODIFY itab, and DELETE itab statements are possible from Release 702.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Even if you're on 702, the statement &lt;EM&gt;DELETE &amp;lt;table_travail&amp;gt; WHERE (column) NOT IN &amp;lt;fs_tab&amp;gt;&lt;/EM&gt; won't work! You need to change your coding to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;DATA lv_dyn_cond TYPE string.

CONCATENATE column `NOT IN` `&amp;lt;FS_TAB&amp;gt;` INTO lv_dyn_cond SEPARATED BY space.
DELETE &amp;lt;table_travail&amp;gt; WHERE (lv_dyn_cond).&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Suhas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jan 2012 06:32:22 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447711#M1649215</guid>
      <dc:creator>SuhaSaha</dc:creator>
      <dc:date>2012-01-17T06:32:22Z</dc:date>
    </item>
    <item>
      <title>Re: Making processing on an internal table generic</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447712#M1649216</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I know its a little late, but for every one trying to do something like this, you can use the "FOR ALL ENTRIES IN" statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Delete from &lt;/STRONG&gt;i_tab 1&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;for all entries in &lt;/STRONG&gt;itab2&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;where &lt;/STRONG&gt;columnA &lt;STRONG&gt;=&lt;/STRONG&gt; itab2-columnA&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;columnB &lt;STRONG&gt;=&lt;/STRONG&gt; itab2-columnC&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;columnC &lt;STRONG&gt;=&lt;/STRONG&gt; 'A Static Value'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards, Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Jun 2013 13:52:29 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/making-processing-on-an-internal-table-generic/m-p/8447712#M1649216</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2013-06-13T13:52:29Z</dc:date>
    </item>
  </channel>
</rss>

