<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>uwe.schieferstein</title>
    <link>http://scn.sap.com/people/uwe.schieferstein/blog</link>
    <description />
    <pubDate>Thu, 22 Dec 2011 20:47:56 GMT</pubDate>
    <generator>Jive SBS 5.0.1.1  (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2011-12-22T20:47:56Z</dc:date>
    <item>
      <title>XI/PI: Generating EDI Interchange Control Numbers Using ABAP Class Mapping</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/19/xipi-generating-edi-interchange-control-numbers-using-abap-class-mapping</link>
      <description>&lt;!-- [DocumentBodyStart:bb3f1b3c-cec1-4161-a011-e443e599ac5e] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;Most of the retail customers which are EDI trading partners of Lindt companies demand that EDI INVOIC messages are labelled with a unique and sequential &lt;strong&gt;Interchange Control Number&lt;/strong&gt; (&lt;strong&gt;ICN&lt;/strong&gt;) without gap. As already mentioned in a previous &lt;a class="jive-link-blog-small" data-containerId="11242" data-containerType="37" data-objectId="50069" data-objectType="38" href="http://scn.sap.com/people/uwe.schieferstein/blog/2009/09/23/what-sap-may-have-forgotten-to-integrate"&gt;What SAP may have forgotten to&amp;#160; integrate&lt;/a&gt; we do not use a full-blown EDI Adapter like Seeburger but just an "Add-On" (for more details contact &lt;a class="jive-link-external-small" href="http://www.resource.ch/"&gt;http://www.resource.ch&lt;/a&gt; about their &lt;em&gt;rEDI Adapter&lt;/em&gt;). This rEDI Adapter is highly versatile and does an excellent job for all kinds of EDI messages we employ but it had one major drawback: the generated ICNs were not part of the XML-EDI message and, therefore, could not be searched for in the XI monitoring.This became a dilemma as soon as INVOIC messages were rejected by customers (see Blog &lt;a class="jive-link-blog-small" data-containerId="11242" data-containerType="37" data-objectId="50069" data-objectType="38" href="http://scn.sap.com/people/uwe.schieferstein/blog/2009/09/23/what-sap-may-have-forgotten-to-integrate"&gt;What SAP may have forgotten to&amp;#160; integrate&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;As a consequence I decided to use SAP standard means for generating document numbers (ICN = document number of an EDI message):&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Use Number Range Objects (SNRO) to generate numbers.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Use ABAP Class mapping to incorporate the numbers as ICN into the EDI messages. &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h3&gt;Defining Number Ranges for ICN Generation &lt;br/&gt;&lt;/h3&gt;&lt;p&gt;As a prerequisite a &lt;strong&gt;number range object&lt;/strong&gt; (SNRO) containing multiple &lt;strong&gt;number ranges&lt;/strong&gt; is created. Each number range may be used for either all outbound messages or a certain message type (e.g. INVOIC) sent to an EDI partner.&lt;/p&gt;&lt;p&gt;The NR object ZEDICH_N06 defines 6-digit number ranges for multiple customers. The first customer (range = 00) has received already 1001 INVOIC messages, the second customer 146, the third one 1750 and so on. &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55360-68658/012_ABAPclassMapping_01_NumberRanges.png"&gt;&lt;img alt="image" border="0" height="317" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55360-68658/479-317/012_ABAPclassMapping_01_NumberRanges.png" width="479"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Within the ABAP mapping class the correct NR object and number range are set in the &lt;strong&gt;CONSTRUCTOR &lt;/strong&gt;method. &lt;/p&gt;&lt;span&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;textarea cols="80" rows="13"&gt;METHOD CONSTRUCTOR.&amp;#160;&amp;#160;&amp;#160; super-&amp;gt;constructor( ).&amp;#160;&amp;#160;&amp;#160; me-&amp;gt;md_clsname = 'ZCL_EDI_CH_SVCS_OUT_WDF'.&amp;#160; * Set object and number range for customer&amp;#160;&amp;#160; me-&amp;gt;md_nrobj = zcl_edi_ch_counter=&amp;gt;mc_nrobj_n06.&amp;#160;&amp;#160; me-&amp;gt;md_nrnr&amp;#160; = zcl_edi_ch_counter=&amp;gt;mc_nrnr_n06_01_wdf.&amp;#160;&amp;#160;&amp;#160; get_interval( ).&amp;#160; ENDMETHOD.&lt;/textarea&gt;&lt;span&gt;&amp;#160; &lt;/span&gt;&lt;p&gt;&amp;#160; &lt;/p&gt;&lt;h3&gt;Implementation of Interface IF_MAPPING&lt;/h3&gt;&lt;p&gt;In order to create an ABAP mapping class we need to implement method &lt;strong&gt;IF_MAPPING~EXECUTE&lt;/strong&gt; as described e.g. in &lt;a class="jive-link-blog-small" data-containerId="274135" data-containerType="2020" data-objectId="1856" data-objectType="37" href="http://scn.sap.com/people/michal.krawczyk2/blog"&gt;Michal Krawczyk&lt;/a&gt;'s&amp;#160;blog (&lt;span&gt;The specified item was not found.&lt;/span&gt; and the SAP Online Help (&lt;a class="jive-link-external-small" href="http://help.sap.com/saphelp_nw04/helpdata/en/ba/e18b1a0fc14f1faf884ae50cece51b/content.htm"&gt;ABAP Mappings)&lt;/a&gt;.For maintenance reasons I split the sample coding of the Online Help into distinct methods (e.g. INIT_INPUT_STREAM, PARSE_DOCUMENT, INIT_OUTPUT_STREAM). &lt;/p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55360-68659/012_ABAPclassMapping_02_ClassOverview_Small.jpg"&gt;&lt;img alt="image" border="0" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55360-68659/404-400/012_ABAPclassMapping_02_ClassOverview_Small.jpg" width="404"/&gt;&lt;/a&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Methods &lt;strong&gt;PREPROCESSING &lt;/strong&gt;and &lt;strong&gt;POSTPROCESSING &lt;/strong&gt;enable the developer to do a pre-processing e.g. of the &lt;em&gt;XML-IDoc stream&lt;/em&gt; and a post-processing of the &lt;em&gt;XML-EDI stream&lt;/em&gt;. Here I will focus on the POSTPROCESSING method because our target is to add the new Interchange Control Number (ICN) into the XML-EDI stream.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h3&gt;Post-Processing of the XML-EDI Stream (Adding the ICN)&lt;br/&gt;&lt;/h3&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;Method POSTPROCESSING is protected and needs to be re-defined to match the requirements of the customer. Method MAP_ICN is responsible for adding the ICN into the XML-EDI stream.&lt;/p&gt;&lt;p&gt;NOTE: Adding LOG-POINTs throughout the mapping class is quite useful when it comes to troubleshooting. &lt;/p&gt;&lt;textarea cols="80" rows="10"&gt;METHOD POSTPROCESSING.&amp;#160;&amp;#160;&amp;#160; LOG-POINT ID zedi&amp;#160;&amp;#160;&amp;#160;&amp;#160; SUBKEY mc_subkey_method_trace.&amp;#160; * Map Interchange Control Number (ICN) into XML stream * (for EDIFACT messages)&amp;#160;&amp;#160; me-&amp;gt;map_icn( ).&amp;#160; ENDMETHOD.&lt;/textarea&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The coding of method &lt;strong&gt;MAP_ICN&lt;/strong&gt; is split among the following 2 textareas corresponding to the 2 major functions being executed:&lt;/p&gt;&lt;p&gt;1. Get a new number (fm NUMBER_GET_NEXT) and generate the ICN according to the customer's requirements.&lt;/p&gt;&lt;p&gt;2. Insert the ICN into the XML-EDI stream.&amp;#160; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;First we get a new number from the number range followed by a &lt;strong&gt;MODULO &lt;/strong&gt;calculation (depending on the size of the number range object -&amp;gt; here: 6-digits). Then we use this number to generate the ICN.&lt;/p&gt;&lt;p&gt;The ICN may be identical to the NR number. However, some customers demand mnemonics for both supplier and customer as prefix. And others may have even more complicated "formulas" to generate the ICN.&lt;/p&gt;&lt;p&gt;NOTE: In case of TRADACOMS messages we would map the File Generation Number (FLGN) into the XML-EDI stream. &lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;textarea cols="80" rows="34"&gt;METHOD MAP_ICN. * define local data&amp;#160;&amp;#160; DATA: lo_node&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO if_ixml_node,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_value&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_error_code TYPE mpg_errcode,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_msg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string.&amp;#160; " bapi_msg.&amp;#160;&amp;#160;&amp;#160; DATA: ld_tag_name&amp;#160;&amp;#160; TYPE string.&amp;#160;&amp;#160; DATA: incode TYPE REF TO if_ixml_node_collection.&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOG-POINT ID zedi&amp;#160;&amp;#160;&amp;#160;&amp;#160; SUBKEY mc_subkey_method_trace.&amp;#160;&amp;#160; * Get next interchange control number (ICN)&amp;#160;&amp;#160; me-&amp;gt;md_next_number = me-&amp;gt;get_next_number(&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id_nrobj&amp;#160; = me-&amp;gt;md_nrobj&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id_nrnr&amp;#160;&amp;#160; = me-&amp;gt;md_nrnr ).&amp;#160;&amp;#160;&amp;#160; CALL METHOD zcl_edi_xx_counter=&amp;gt;calculate_modulo_n06&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id_input&amp;#160; = me-&amp;gt;md_next_number&amp;#160;&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rd_output = me-&amp;gt;md_next_number.&amp;#160; * Build ICN according to naming conventions agreed with EDI customer&amp;#160;&amp;#160; me-&amp;gt;md_icn = me-&amp;gt;generate_icn( me-&amp;gt;md_next_number ).&amp;#160;&amp;#160; ld_value = me-&amp;gt;md_icn.&amp;#160; " type conversion to string ...&amp;#160; "(Continued.)&lt;/textarea&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;As you can see from the data elements (D_0020) we are mapping the ICN into an &lt;strong&gt;EDIFACT/EANCOM&lt;/strong&gt; message. Instance attribute &lt;strong&gt;ME-&amp;gt;MO_DOCUMENT&lt;/strong&gt; (&lt;strong&gt;IF_IXML_DOCUMENT&lt;/strong&gt;) is our handle to the XML-EDI stream. This instance attribute was created within method IF_MAPPING~EXECUTE. &lt;/p&gt;&lt;p&gt;Using method &lt;strong&gt;GET_ELEMENTS_BY_TAG_NAME&lt;/strong&gt; (of IF_IXML_DOCUMENT) we specifically fetch the D_0020 data elements in the UNB and UNZ segment and overwrite their values with the generated ICN.&lt;/p&gt;&lt;p&gt;The ICN has now become an integral part of the XI message. &lt;/p&gt;&lt;span&gt; &lt;/span&gt;&lt;textarea cols="80" rows="58"&gt;METHOD MAP_ICN.&amp;#160; " 2nd part * define local data&amp;#160;&amp;#160; DATA: lo_node&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO if_ixml_node,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_value&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_error_code TYPE mpg_errcode,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_msg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string.&amp;#160; " bapi_msg.&amp;#160;&amp;#160;&amp;#160; DATA: ld_tag_name&amp;#160;&amp;#160; TYPE string.&amp;#160;&amp;#160; DATA: incode TYPE REF TO if_ixml_node_collection. ...&amp;#160;&amp;#160;&amp;#160; DO 2 TIMES.&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE syst-index.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '1'. ld_tag_name = mc_d_0020.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '2'. ld_tag_name = mc_d_0020_2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR: incode,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lo_node.&amp;#160;&amp;#160;&amp;#160;&amp;#160; incode&amp;#160; = me-&amp;gt;mo_document-&amp;gt;get_elements_by_tag_name( ld_tag_name ).&amp;#160;&amp;#160;&amp;#160;&amp;#160; lo_node = incode-&amp;gt;get_item( index = 0 ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD lo_node-&amp;gt;set_value&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value = ld_value&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rval&amp;#160; = ld_rc.&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF ( ld_rc NE 0 ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONCATENATE 'Error [' ld_tag_name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ']: Method SET_VALUE (IF_IXML_NODE)'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO ld_msg.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONDENSE ld_msg.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; me-&amp;gt;mif_trace-&amp;gt;trace2( message = ld_msg ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISE EXCEPTION TYPE cx_mapping_fault&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING *&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; textid = *&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; previous =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; error_code = ld_error_code&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; error_text = ld_msg.&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160; ENDDO.&amp;#160;&amp;#160; * define local data&amp;#160;&amp;#160; DATA: ls_record&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE mpp_dynamic.&amp;#160;&amp;#160;&amp;#160; CLEAR: ls_record.&amp;#160;&amp;#160; ls_record-namespace = mc_dynamic_namespace.&amp;#160;&amp;#160; ls_record-name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = mc_icn.&amp;#160;&amp;#160; ls_record-value&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ld_value.&amp;#160;&amp;#160;&amp;#160; mif_dynamic-&amp;gt;add_record( ls_record ).&amp;#160; ENDMETHOD.&lt;/textarea&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;And by &lt;a class="jive-link-blog-small" data-containerId="11242" data-containerType="37" data-objectId="50069" data-objectType="38" href="http://scn.sap.com/people/uwe.schieferstein/blog/2009/09/23/what-sap-may-have-forgotten-to-integrate"&gt;What SAP may have forgotten to&amp;#160; integrate&lt;/a&gt; a little bit the ICN (and the XI-GUID) can be displayed within SAP R/3. &lt;/p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55360-68660/005_eXtendedIDocMonitor_ContextMenu.png"&gt;&lt;img alt="image" border="0" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55360-68660/509-400/005_eXtendedIDocMonitor_ContextMenu.png" width="509"/&gt;&lt;/a&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;Summary&lt;/h2&gt;&lt;p&gt;In this blog I wanted to demonstrate you how you can utilize SAP standard number ranges on SAP-PI in combination with ABAP class mapping in order to sequentially number your outbound EDI messages.&lt;/p&gt;&lt;p&gt;However, even more important I wanted to show you the simplicity and elegance of ABAP class mapping on SAP-PI which will be lost on a Java-only stack.&amp;#160; &lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:bb3f1b3c-cec1-4161-a011-e443e599ac5e] --&gt;</description>
      <pubDate>Tue, 19 Oct 2010 12:38:13 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/19/xipi-generating-edi-interchange-control-numbers-using-abap-class-mapping</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2010-10-19T12:38:13Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/xipi-generating-edi-interchange-control-numbers-using-abap-class-mapping</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=55360</wfw:commentRss>
    </item>
    <item>
      <title>Visualizing Any Kind of XML Data Using Class CL_XML_DOCUMENT</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/17/visualizing-any-kind-of-xml-data-using-class-clxmldocument</link>
      <description>&lt;!-- [DocumentBodyStart:759d28fe-569e-4543-a4dc-4d2a323f21c4] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;h2&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;When dealing with the manipulation of XML data (e.g. XSLT transformation, ABAP class mapping) we often face the problem to visualize the changed XML data in an easy way. As a consequence we usually need more iterations to adjust our program logic in order to get the required results.&lt;/p&gt;&lt;p&gt;Another challenge is when we receive XML data as &lt;strong&gt;xstring&lt;/strong&gt; input. If errors occur how can we exclude (or confirm) that the XML was erroneous? Example: The input of the &lt;strong&gt;eBPP Customer&lt;/strong&gt; component are &lt;em&gt;base64&lt;/em&gt;-encoded &lt;em&gt;DocumentSets&lt;/em&gt;. During the processing of these records XML INVOIC-IDocs are generated.&lt;/p&gt;&lt;p&gt;Finally, another trigger to write this blog was a comment to &lt;a class="jive-link-blog-small" data-containerId="274135" data-containerType="2020" data-objectId="1856" data-objectType="37" href="http://scn.sap.com/people/michal.krawczyk2/blog"&gt;Michal Krawczyk&lt;/a&gt;'s&amp;#160;blog (&lt;span&gt;The specified item was not found.&lt;/span&gt; requesting for a better output of the XML data.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Further Readings:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="http://wiki.sdn.sap.com/wiki/display/ABAP/Upload+XML+file+to+internal+table"&gt;Upload XML file to internal table&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;Class CL_XML_DOCUMENT - The jack-of-all-trades&lt;br/&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;The following piece of coding shows that as soon as you have created an instance of CL_XML_DOCUMENT you are just 2 simple steps away from displaying XML data received as &lt;strong&gt;xstring&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;(1) Parse the XML Stream (XString) to DOM&lt;/p&gt;&lt;p&gt;(2)&amp;#160; Display document&lt;/p&gt;&lt;textarea cols="80" rows="21"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; IMPORT_FROM_XSTRING*&amp;amp;---------------------------------------------------------------------*FORM import_from_xstring&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING ud_xstream&amp;#160;&amp;#160; TYPE xstring&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING ct_xml_data&amp;#160; TYPE tttext255.* define local data&amp;#160; DATA: lo_xml_doc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_xml_document,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i.&amp;#160; MESSAGE i208(00) WITH '(3) Import from XML xstring'.&amp;#160; REFRESH: ct_xml_data.* Create instance&amp;#160; CREATE OBJECT lo_xml_doc.* (1) Import from XML xstring and display&amp;#160; ld_rc = lo_xml_doc-&amp;gt;parse_xstring( stream = ud_xstream ).&amp;#160; lo_xml_doc-&amp;gt;display( )....&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The XML document is displayed in a HTML viewer. In order to search through the XML simply use &lt;strong&gt;CTRL+F&lt;/strong&gt;.&lt;/p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55329-68622/011_Display_XML_DocumentSmall.png"&gt;&lt;img alt="image" border="0" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55329-68622/336-400/011_Display_XML_DocumentSmall.png" width="336"/&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Irrespective of whether the XML input is provided as file, internal itab, string, or xstring class CL_XML_DOCUMENT provides the appropriate methods for loading (file) or parsing the XML input (not shown; see &lt;strong&gt;Appendix&lt;/strong&gt;: report &lt;em&gt;ZUS_SDN_XML_DISPLAY&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;&lt;strong&gt;Use Cases for XML Visualization&lt;/strong&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Currently I have 2 Use Cases in which I apply the versatility of class CL_XML_DOCUMENT:&lt;/p&gt;&lt;p&gt;(1) All &lt;strong&gt;ABAP class mapping&lt;/strong&gt; on SAP-PI have a static TEST method in which I can display the XML before and after the mapping.&lt;/p&gt;&lt;p&gt;(2) &lt;strong&gt;eBPP Customer (Troubleshooting)&lt;/strong&gt;: As soon as I execute processing of &lt;em&gt;DocumentSets&lt;/em&gt; in Debugging mode I can display the intermediate XML-IDocs in the HTML viewer for visual inspection.&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Whenever you need to quickly visualize XML data take advantage of the versatile methods of class &lt;strong&gt;CL_XML_DOCUMENT&lt;/strong&gt;.&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;&lt;strong&gt;Appendix&lt;/strong&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;span&gt;Coding of sample report &lt;/span&gt;&lt;strong&gt;ZUS_SDN_XML_DISPLAY&lt;/strong&gt;&lt;span&gt;. &lt;/span&gt;&lt;textarea cols="80" rows="26"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report&amp;#160; ZUS_SDN_XML_DISPLAY*&amp;amp;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report to display any kind of XML data (File, itab, string, xstring)*&amp;amp;*&amp;amp;---------------------------------------------------------------------*REPORT&amp;#160; zus_sdn_xml_display.DATA: gd_stream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE string,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gd_xstream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE xstring,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_xml_data&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE tttext255. " line type = TEXT255PARAMETERS:&amp;#160; p_file&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE localfile&amp;#160;&amp;#160; DEFAULT 'C:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;empEDI_xxx_ORDERS.xml'.START-OF-SELECTION.* (1) Import XML file and display&amp;#160; PERFORM import_from_file&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING p_file&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING gd_stream.* (2) Display XML string&amp;#160; PERFORM import_from_string&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING gd_stream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING gd_xstream.* (3) Display XML xstring&amp;#160; PERFORM import_from_xstring&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING gd_xstream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING gt_xml_data.* (4) Display from XML itab&amp;#160; PERFORM import_from_itab USING gt_xml_data.END-OF-SELECTION.*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; IMPORT_FROM_FILE*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM import_from_file&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING ud_file&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE localfile&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING cd_stream&amp;#160;&amp;#160; TYPE string.* define local data&amp;#160; DATA: ld_filename&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type localfile,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lo_xml_doc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_xml_document,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i.&amp;#160; MESSAGE i208(00) WITH '(1) Import from XML File'.&amp;#160; CLEAR: cd_stream.* Create instance&amp;#160; CREATE OBJECT lo_xml_doc.* (1) Import from file and display&amp;#160; CALL METHOD lo_xml_doc-&amp;gt;import_from_file&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; filename = ud_file&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; retcode&amp;#160; = ld_rc.&amp;#160; lo_xml_doc-&amp;gt;display( ).* Export XML to file&amp;#160; ld_filename = ud_file.&amp;#160; replace '.' with '_out.' into ld_filename.&amp;#160; ld_rc = lo_xml_doc-&amp;gt;export_to_file( filename = ld_filename ).* Export XML string as output&amp;#160; CALL METHOD lo_xml_doc-&amp;gt;render_2_string*&amp;#160;&amp;#160;&amp;#160; EXPORTING*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pretty_print = 'X'&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; retcode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = cd_stream*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " IMPORT_FROM_FILE*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; IMPORT_FROM_STRING*&amp;amp;---------------------------------------------------------------------*FORM import_from_string&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING ud_stream&amp;#160;&amp;#160; TYPE string&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING cd_xstream&amp;#160; TYPE xstring.* define local data&amp;#160; DATA: lo_xml_doc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_xml_document,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i.&amp;#160; MESSAGE i208(00) WITH '(2) Import from XML String'.&amp;#160; CLEAR: cd_xstream.* Create instance&amp;#160; CREATE OBJECT lo_xml_doc.* (1) Import from XML string and display&amp;#160; ld_rc = lo_xml_doc-&amp;gt;parse_string( stream = ud_stream ).&amp;#160; lo_xml_doc-&amp;gt;display( ).* Export XML string as output&amp;#160; CALL METHOD lo_xml_doc-&amp;gt;render_2_xstring*&amp;#160;&amp;#160;&amp;#160; EXPORTING*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pretty_print = 'X'&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; retcode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stream&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = cd_xstream*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " IMPORT_FROM_STRING*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; IMPORT_FROM_XSTRING*&amp;amp;---------------------------------------------------------------------*FORM import_from_xstring&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING ud_xstream&amp;#160;&amp;#160; TYPE xstring&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING ct_xml_data&amp;#160; TYPE tttext255.* define local data&amp;#160; DATA: lo_xml_doc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_xml_document,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i.&amp;#160; MESSAGE i208(00) WITH '(3) Import from XML xstring'.&amp;#160; REFRESH: ct_xml_data.* Create instance&amp;#160; CREATE OBJECT lo_xml_doc.* (1) Import from XML xstring and display&amp;#160; ld_rc = lo_xml_doc-&amp;gt;parse_xstring( stream = ud_xstream ).&amp;#160; lo_xml_doc-&amp;gt;display( ).* Export XML string table as output&amp;#160; CALL METHOD lo_xml_doc-&amp;gt;render_2_table*&amp;#160;&amp;#160;&amp;#160; EXPORTING*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pretty_print = 'X'&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; retcode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ct_xml_data*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " IMPORT_FROM_XSTRING*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; IMPORT_FROM_ITAB*&amp;amp;---------------------------------------------------------------------*FORM import_from_itab&amp;#160; USING ut_xml_data&amp;#160; TYPE tttext255.* define local data&amp;#160; DATA: lo_xml_doc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_xml_document,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ld_rc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE i.&amp;#160; MESSAGE i208(00) WITH '(4) Import from XML itab'.* Create instance&amp;#160; CREATE OBJECT lo_xml_doc.&amp;#160; ld_rc = lo_xml_doc-&amp;gt;parse_table( table = ut_xml_data ).&amp;#160; lo_xml_doc-&amp;gt;display( ).ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " IMPORT_FROM_ITAB&lt;/textarea&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:759d28fe-569e-4543-a4dc-4d2a323f21c4] --&gt;</description>
      <pubDate>Sun, 17 Oct 2010 10:18:16 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/17/visualizing-any-kind-of-xml-data-using-class-clxmldocument</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2010-10-17T10:18:16Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>3</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/visualizing-any-kind-of-xml-data-using-class-clxmldocument</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=55329</wfw:commentRss>
    </item>
    <item>
      <title>Against All Odds - Programming of Communicating (S)ALV Grid Controls</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/12/against-all-odds--programming-of-communicating-salv-grid-controls</link>
      <description>&lt;!-- [DocumentBodyStart:3a9ac734-f028-412e-8402-20694fe47189] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Quite often developers struggle with the communication between ALV grid instances. As soon as a record is selected in the "main" ALV list the details for this records should be displayed in the "detail" ALV list (e.g. Customer -&amp;gt; SalesAreas). Whereas the first double-click event works as expected quite frequently the second event fails, e.g. threads:&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1798672" data-objectType="1" href="http://scn.sap.com/thread/1798672"&gt;CALL METHOD ob_grid1-&amp;gt;set_table_for_first_display does not change display&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1798198" data-objectType="1" href="http://scn.sap.com/thread/1798198"&gt;Problem with Custom container -&amp;gt;cl_gui_custom_container/cl_gui_alv_grid&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="899495" data-objectType="1" href="http://scn.sap.com/thread/899495"&gt;Text edioter in Pop up window&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2015" data-containerType="14" data-objectId="745808" data-objectType="1" href="http://scn.sap.com/thread/745808"&gt;Can I use Docking container in Subscreen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;In the past I answered such questions several times but even I have problems to recover my own sample reports from SDN. Therefore, I document this solution a last time in this blog and I show that there is almost no difference whether the two communicating (S)ALV grids are displayed on the same screen, on 2 different main screens or even in a popup. &amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(1) Example: Both ALV Lists Displayed in Same Main Screen&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Below you see the (single) main screen showing the ALV list containing customer records.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68487/010_2ALV_Grids_0InitialState.png"&gt;&lt;img align="middle" alt="Communicating ALV Grids: Initial State" height="342" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68487/421-342/010_2ALV_Grids_0InitialState.png" width="421"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;span&gt;As soon as the user double-clicks on a record the details (Salesareas of the customer) are displayed in the second ALV list. For displaying the two ALV grids together on the same screen a splitter container is used.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68488/010_2ALV_Grids_1FirstDoubleClick.png"&gt;&lt;img align="middle" alt="image" border="0" height="382" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68488/418-382/010_2ALV_Grids_1FirstDoubleClick.png" width="418"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Double-clicking on a different customer row automatically refreshes the the second ALV grid.&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68489/010_2ALV_Grids_2SecondDoubleClick.png"&gt;&lt;img align="middle" alt="image" border="0" height="313" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68489/403-313/010_2ALV_Grids_2SecondDoubleClick.png" width="403"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(2) Each ALV List Displayed on Different Main Screen&lt;/strong&gt; (not shown)&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;span&gt;In this case each grid instance is displayed using a separate docking container.&lt;/span&gt;&lt;br/&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(3) Detailed ALV List Displayed on Popup Screen&lt;/strong&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As soon as the user double-clicks on a record the details (Salesareas of the customer) are displayed in a popup.&lt;/p&gt;&lt;p&gt;&lt;br/&gt; &lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68490/010_2ALV_Grids_5Screen_Popup.png"&gt;&lt;img align="middle" alt="image" border="0" height="344" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68490/474-344/010_2ALV_Grids_5Screen_Popup.png" width="474"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Screens - Keep It Simple and Stupid&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Provided that the ALV lists are the only elements displayed on the screens we can keep them quite simple: basic flow logic and &lt;strong&gt;NO&lt;/strong&gt; elements (not even a custom control because it is not required)!&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68491/010_2ALV_Grids_3Screen_FlowLogic.png"&gt;&lt;img align="middle" alt="image" border="0" height="175" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68491/405-175/010_2ALV_Grids_3Screen_FlowLogic.png" width="405"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-55243-68492/010_2ALV_Grids_4Screen_ElementList.png"&gt;&lt;img align="middle" alt="image" border="0" height="213" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-55243-68492/319-213/010_2ALV_Grids_4Screen_ElementList.png" width="319"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;NOTE: The sample report ZUS_SDN_TWO_ALV_GRIDS contains 3 screens (0100, 0200, 0205). The flow logic of all 3 (empty) screens is described in the documenation header of the report (see &lt;strong&gt;Appendix&lt;/strong&gt;: report &lt;em&gt;ZUS_SDN_TWO_ALV_GRIDS&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Initialize &amp;amp; Display Controls Before Calling any Screen&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Even though virtually all sample reports (BCALV_...) of SAP show the creation and display of controls (container, grid, tree) within the flow logic of the displaying this is not mandatory. On the contrary, I prefer to do the entire control initialization BEFORE calling any screen. Below you see the START-OF-SELECTION section of my sample report. Within routine INIT_CONTROLS all container and grid instances are created. In addition, I even call method SET_TABLE_FOR_FIRST_DISPLAY within this routine.&lt;/p&gt;&lt;p&gt;As next step I link the main ALV list (parent container = GO_DOCKING) to the target screen '0100'. Eventually, the main screen is called.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;textarea cols="80" rows="26"&gt;START-OF-SELECTION.* initialization&amp;#160; REFRESH: gt_knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knvv.&amp;#160; SELECT * FROM knb1 INTO TABLE gt_knb1&amp;#160;&amp;#160;&amp;#160; WHERE bukrs = '0104'.* Create the control and grid instances in advance* before displaying them on any screen&amp;#160; PERFORM init_controls.* Link the docking container to the target dynpro* NOTE: Now we decide where to display the ALV list&amp;#160; gd_repid&amp;#160; = syst-repid.&amp;#160; CALL METHOD go_docking-&amp;gt;link&amp;#160; EXPORTING repid = gd_repid&amp;#160;&amp;#160;&amp;#160; dynnr = '0100'* CONTAINER =EXCEPTIONS OTHERS = 4.* NOTE: dynpro does not contain any elements&amp;#160; CALL SCREEN '0100'.* Flow logic of dynpro (does not contain any dynpro elements):END-OF-SELECTION.&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;What is the advantage of this approach? Well, if you want to display the ALV list on another screen of your application then just do it - by calling again the &lt;strong&gt;LINK&lt;/strong&gt; method of the container.&lt;/p&gt;&lt;textarea cols="80" rows="52"&gt;MODULE user_command_0100 INPUT....* User has pushed button "Display Details"&amp;#160;&amp;#160;&amp;#160; WHEN 'DETAIL'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM entry_show_details.*&amp;#160;&amp;#160;&amp;#160;&amp;#160; Display both ALV grids on same main screen&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF ( p_main&amp;#160; = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&amp;#160;&amp;#160;&amp;#160;&amp;#160; Display details ALV grid on second main screen&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF ( p_2ndscr = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0200'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LEAVE TO SCREEN 200.*&amp;#160;&amp;#160;&amp;#160;&amp;#160; Display details ALV grid within popup&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0205'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL SCREEN '0205' STARTING AT 5 5&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDING AT&amp;#160;&amp;#160; 100 20.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160; ENDCASE.&amp;#160; CLEAR: gd_okcode.ENDMODULE. " USER_COMMAND_0100 INPUT&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Displaying ALV Grid in Main Screen vs. Popup - So What?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The only difference is the dynpro level:&lt;/p&gt;&lt;textarea cols="80" rows="18"&gt;FORM init_controls_popup .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160; " main screen&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; CREATE OBJECT go_docking2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen1&amp;#160; " Popup !!!&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6....&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Leave the Event Handler and Trigger PAI&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The advantage of this approach is that you always end up with a clearly defined status. After handling the user-command at PAI the flow moves on to PBO at which flushing of the controls occurs by default.&lt;/p&gt;&lt;textarea cols="80" rows="15"&gt; METHOD handle_double_click.* define local data&amp;#160;&amp;#160;&amp;#160; DATA: ls_knb1 TYPE knb1.&amp;#160;&amp;#160;&amp;#160; CHECK ( sender = go_grid1 ).&amp;#160;&amp;#160;&amp;#160; READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.&amp;#160;&amp;#160;&amp;#160; CHECK ( ls_knb1-kunnr IS NOT INITIAL ).&amp;#160;&amp;#160;&amp;#160; lcl_eventhandler=&amp;gt;ms_row = e_row. " save selected row for REFRESH* Triggers PAI of the dynpro with the specified ok-code&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_gui_cfw=&amp;gt;set_new_ok_code( 'DETAIL' ).&amp;#160; ENDMETHOD. "handle_double_click&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Classic vs. New ALV Object Model - Nothing Special&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Regarding the different modes of displaying ALV lists there is no difference whether you are using class CL_GUI_ALV_GRID or CL_SALV_TABLE because the LINK method belongs to the container controls and not to the grid controls (see &lt;strong&gt;Appendix&lt;/strong&gt;: report &lt;em&gt;ZUS_SDN_TWO_SALV_GRIDS&lt;/em&gt;). &amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Communicating ALV grids is a standard ABAP development task which is not complicated by different modes of displaying the ALV lists.&amp;#160;&lt;/p&gt;&lt;p&gt;The approach described here can be adapted for any kind of communicating controls (e.g. tree &amp;amp; grid).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;Appendix&lt;/strong&gt;&lt;/h2&gt;&lt;span&gt;(A) Report &lt;/span&gt;&lt;strong&gt;ZUS_SDN_TWO_ALV_GRIDS&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;textarea cols="80" rows="20"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report ZUS_SDN_TWO_ALV_GRIDS *&amp;amp;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Documentation: This reports demonstrates how to communicate between*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2 ALV grids. The first ALV list display customers,*&amp;amp; the second ALV grid display sales areas for a selected customer.*&amp;amp;*&amp;amp; NOTE: This logic works for any number of communicating grid instances,*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; whether they are displayed on the same screen, on 2 separate*&amp;amp; main screen or in a main screen &amp;amp; popup.*&amp;amp;---------------------------------------------------------------------**&amp;amp; Screen '0100' contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:* PROCESS BEFORE OUTPUT.* MODULE STATUS_0100.* PROCESS AFTER INPUT.* MODULE USER_COMMAND_0100.*&amp;amp;*&amp;amp; Screen '0200' contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:*&amp;#160; PROCESS BEFORE OUTPUT.*&amp;#160;&amp;#160; MODULE STATUS_0100.***&amp;#160; PROCESS AFTER INPUT.*&amp;#160;&amp;#160; MODULE USER_COMMAND_0100.*&amp;amp; Screen '0205' (popup) contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:*&amp;#160; PROCESS BEFORE OUTPUT.*&amp;#160;&amp;#160; MODULE STATUS_0205.***&amp;#160; PROCESS AFTER INPUT.*&amp;#160;&amp;#160; MODULE USER_COMMAND_0100.*&amp;amp;---------------------------------------------------------------------*REPORT zus_sdn_two_alv_grids.TYPE-POOLS: abap.DATA: gd_okcode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE ui_func,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE syrepid,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_docking_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_docking2&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_docking_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_splitter&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_splitter_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_cell_top&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_cell_bottom TYPE REF TO cl_gui_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_grid1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_alv_grid,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_grid2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_alv_grid,*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gs_variant&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE disvariant,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gs_layout&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE lvc_s_layo.DATA: gs_knb1 TYPE knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knb1 TYPE STANDARD TABLE OF knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knvv TYPE STANDARD TABLE OF knvv.PARAMETERS:&amp;#160; p_main&amp;#160;&amp;#160;&amp;#160; RADIOBUTTON GROUP radi&amp;#160; DEFAULT 'X',&amp;#160; p_2ndscr&amp;#160; RADIOBUTTON GROUP radi,&amp;#160; p_popup&amp;#160;&amp;#160; RADIOBUTTON GROUP radi.*---------------------------------------------------------------------** CLASS lcl_eventhandler DEFINITION*---------------------------------------------------------------------*CLASS lcl_eventhandler DEFINITION.&amp;#160; PUBLIC SECTION.&amp;#160;&amp;#160;&amp;#160; CLASS-METHODS:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; handle_double_click&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FOR EVENT double_click OF cl_gui_alv_grid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e_row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e_column&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; es_row_no&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sender. " grid instance that has triggered the event&amp;#160;&amp;#160;&amp;#160; CLASS-DATA:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ms_row&amp;#160;&amp;#160;&amp;#160; TYPE lvc_s_row&amp;#160; READ-ONLY. " stores selected rowENDCLASS. "lcl_eventhandler DEFINITION*---------------------------------------------------------------------**&amp;#160;&amp;#160; CLASS lcl_eventhandler IMPLEMENTATION*---------------------------------------------------------------------*CLASS lcl_eventhandler IMPLEMENTATION.&amp;#160; METHOD handle_double_click.* define local data&amp;#160;&amp;#160;&amp;#160; DATA: ls_knb1 TYPE knb1.&amp;#160;&amp;#160;&amp;#160; CHECK ( sender = go_grid1 ).&amp;#160;&amp;#160;&amp;#160; READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.&amp;#160;&amp;#160;&amp;#160; CHECK ( ls_knb1-kunnr IS NOT INITIAL ).&amp;#160;&amp;#160;&amp;#160; lcl_eventhandler=&amp;gt;ms_row = e_row. " save selected row for REFRESH* Triggers PAI of the dynpro with the specified ok-code&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_gui_cfw=&amp;gt;set_new_ok_code( 'DETAIL' ).&amp;#160; ENDMETHOD. "handle_double_clickENDCLASS.&amp;#160; "lcl_eventhandler IMPLEMENTATIONSTART-OF-SELECTION.* initialization&amp;#160; REFRESH: gt_knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knvv.&amp;#160; SELECT * FROM knb1 INTO TABLE gt_knb1&amp;#160;&amp;#160;&amp;#160; WHERE bukrs = '0104'.* Create the control and grid instances in advance* before displaying them on any screen&amp;#160; PERFORM init_controls.* Link the docking container to the target dynpro* NOTE: Now we decide where to display the ALV list&amp;#160; gd_repid&amp;#160; = syst-repid.&amp;#160; CALL METHOD go_docking-&amp;gt;link&amp;#160; EXPORTING repid = gd_repid&amp;#160;&amp;#160;&amp;#160; dynnr = '0100'* CONTAINER =EXCEPTIONS OTHERS = 4.* NOTE: dynpro does not contain any elements&amp;#160; CALL SCREEN '0100'.* Flow logic of dynpro (does not contain any dynpro elements):END-OF-SELECTION.*&amp;amp;---------------------------------------------------------------------**&amp;amp; Module STATUS_0100 OUTPUT*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_0100 OUTPUT.&amp;#160; SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"* SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0100 OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Module&amp;#160; STATUS_0205&amp;#160; OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*MODULE status_0205 OUTPUT.&amp;#160; SET PF-STATUS '0205_POPUP'.*&amp;#160; SET TITLEBAR 'xxx'.ENDMODULE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " STATUS_0205&amp;#160; OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp; Module USER_COMMAND_0100 INPUT*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE user_command_0100 INPUT.&amp;#160; TRANSLATE gd_okcode TO UPPER CASE.&amp;#160; CASE gd_okcode.&amp;#160;&amp;#160;&amp;#160; WHEN 'BACK' OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'END'&amp;#160; OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'CANC'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE syst-dynnr.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '0100'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 0. LEAVE SCREEN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '0200'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 100. LEAVE SCREEN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.*&amp;#160;&amp;#160; Leave popup screen&amp;#160;&amp;#160;&amp;#160; WHEN 'ENTER'&amp;#160; OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'CANCEL'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 0. LEAVE SCREEN.* User has pushed button "Display Details"&amp;#160;&amp;#160;&amp;#160; WHEN 'DETAIL'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM entry_show_details.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF ( p_main&amp;#160; = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF ( p_2ndscr = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0200'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LEAVE TO SCREEN 200.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0205'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL SCREEN '0205' STARTING AT 5 5&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDING AT&amp;#160;&amp;#160; 100 20.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160; ENDCASE.&amp;#160; CLEAR: gd_okcode.ENDMODULE. " USER_COMMAND_0100 INPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp; Form ENTRY_SHOW_DETAILS*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------** --&amp;gt; p1 text* &amp;lt;-- p2 text*----------------------------------------------------------------------*FORM entry_show_details .* define local data&amp;#160; DATA: ld_row TYPE i,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_knb1 TYPE knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_stable TYPE lvc_s_stbl.&amp;#160; REFRESH: gt_knvv.&amp;#160; READ TABLE gt_knb1 INTO ls_knb1 INDEX lcl_eventhandler=&amp;gt;ms_row-index.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; SELECT * FROM knvv INTO TABLE gt_knvv&amp;#160;&amp;#160;&amp;#160; WHERE kunnr = ls_knb1-kunnr.* Refresh display of detail ALV list (reuired)&amp;#160; ls_stable-row = abap_true.&amp;#160; ls_stable-col = abap_true.&amp;#160; CALL METHOD go_grid2-&amp;gt;refresh_table_display&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; is_stable = ls_stable&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160; = 2.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.ENDFORM. " ENTRY_SHOW_DETAILS*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls .* Display both ALV grids on same main screen (splitter)&amp;#160; IF ( p_main = abap_true ).&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_main.* Display detailed ALV list on second main screen&amp;#160; ELSEIF ( p_2ndscr = abap_true ).&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_2ndscr.* Display detailed ALV list within popup&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_popup.&amp;#160; ENDIF.* Display data (before any screen is called !!!)&amp;#160; gs_layout-grid_title = 'Customers'.&amp;#160; CALL METHOD go_grid1-&amp;gt;set_table_for_first_display&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_structure_name = 'KNB1'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; is_layout&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gs_layout&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; it_outtab&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knb1&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160; IF sy-subrc NE 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; gs_layout-grid_title = 'Customers Details (Sales Areas)'.&amp;#160; CALL METHOD go_grid2-&amp;gt;set_table_for_first_display&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_structure_name = 'KNVV'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; is_layout&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gs_layout&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; it_outtab&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knvv " empty !!!&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160; IF sy-subrc NE 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Set event handler&amp;#160; SET HANDLER: lcl_eventhandler=&amp;gt;handle_double_click FOR go_grid1.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_MAIN*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_main .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).* Create splitter container&amp;#160; CREATE OBJECT go_splitter&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; columns&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Get cell container&amp;#160; CALL METHOD go_splitter-&amp;gt;get_container&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; column&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container = go_cell_top.&amp;#160; CALL METHOD go_splitter-&amp;gt;get_container&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; column&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container = go_cell_bottom.* Create ALV grids&amp;#160; CREATE OBJECT go_grid1&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_cell_top&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Create 2nd grid instance for details of double-clicked* entry in first ALV grid&amp;#160; CREATE OBJECT go_grid2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_cell_bottom&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_MAIN*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_2NDSCR*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_2ndscr .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_docking2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).&amp;#160; go_docking2-&amp;gt;set_extension( 99999 ).* Create ALV grids&amp;#160; CREATE OBJECT go_grid1&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_docking&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_grid2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_docking2&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_2NDSCR*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_POPUP*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_popup .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_docking2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen1&amp;#160; " Popup !!!&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).&amp;#160; go_docking2-&amp;gt;set_extension( 99999 ).* Create ALV grids&amp;#160; CREATE OBJECT go_grid1&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_docking&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_grid2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i_parent = go_docking2&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160; = 5.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_POPUP&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;(B) Report &lt;strong&gt;ZUS_SDN_TWO_SALV_GRIDS&lt;/strong&gt;&lt;/p&gt;&lt;textarea cols="80" rows="20"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report ZUS_SDN_TWO_SALV_GRIDS *&amp;amp;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Documentation: This reports demonstrates how to communicate between*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2 ALV grids. The first ALV list display customers,*&amp;amp; the second ALV grid display sales areas for a selected customer.*&amp;amp;*&amp;amp; NOTE: This logic works for any number of communicating grid instances,*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; whether they are displayed on the same screen, on 2 separate*&amp;amp; main screen or in a main screen &amp;amp; popup.*&amp;amp;---------------------------------------------------------------------**&amp;amp; Screen '0100' contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:* PROCESS BEFORE OUTPUT.* MODULE STATUS_0100.* PROCESS AFTER INPUT.* MODULE USER_COMMAND_0100.*&amp;amp;*&amp;amp; Screen '0200' contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:*&amp;#160; PROCESS BEFORE OUTPUT.*&amp;#160;&amp;#160; MODULE STATUS_0100.***&amp;#160; PROCESS AFTER INPUT.*&amp;#160;&amp;#160; MODULE USER_COMMAND_0100.*&amp;amp; Screen '0205' (popup) contains no elements.*&amp;amp; ok_code -&amp;gt; assigned to GD_OKCODE*&amp;amp;*&amp;amp; Flow logic:*&amp;#160; PROCESS BEFORE OUTPUT.*&amp;#160;&amp;#160; MODULE STATUS_0205.***&amp;#160; PROCESS AFTER INPUT.*&amp;#160;&amp;#160; MODULE USER_COMMAND_0100.*&amp;amp;---------------------------------------------------------------------*REPORT zus_sdn_two_salv_grids.TYPE-POOLS: abap.*... &amp;sect;5 Definition is laterclass lcl_handle_events definition deferred.DATA: gd_okcode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE ui_func,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE syrepid,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_docking_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_docking2&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_docking_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_splitter&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_splitter_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_cell_top&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_gui_container,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_cell_bottom TYPE REF TO cl_gui_container,*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_salv_table,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE REF TO cl_salv_table,*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gs_variant&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE disvariant,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gs_layout&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE lvc_s_layo.DATA: gs_knb1 TYPE knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knb1 TYPE STANDARD TABLE OF knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knvv TYPE STANDARD TABLE OF knvv.PARAMETERS:&amp;#160; p_main&amp;#160;&amp;#160;&amp;#160; RADIOBUTTON GROUP radi&amp;#160; DEFAULT 'X',&amp;#160; p_2ndscr&amp;#160; RADIOBUTTON GROUP radi,&amp;#160; p_popup&amp;#160;&amp;#160; RADIOBUTTON GROUP radi.*... &amp;sect;5 object for handling the events of cl_salv_tabledata: go_events type ref to lcl_handle_events.*---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLASS lcl_handle_events DEFINITION** NOTE: Copied from SALV_DEMO_TABLE_EVENTS*---------------------------------------------------------------------** &amp;sect;5.1 define a local class for handling events of cl_salv_table*---------------------------------------------------------------------*class lcl_handle_events definition.&amp;#160; public section.&amp;#160;&amp;#160;&amp;#160; data:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; md_row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type i&amp;#160; read-only.&amp;#160;&amp;#160;&amp;#160; methods:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on_user_command for event added_function of cl_salv_events&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; importing e_salv_function,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on_before_salv_function for event before_salv_function of cl_salv_events&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; importing e_salv_function,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on_after_salv_function for event after_salv_function of cl_salv_events&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; importing e_salv_function,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on_double_click for event double_click of cl_salv_events_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; importing row column&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sender,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on_link_click for event link_click of cl_salv_events_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; importing row column.endclass.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "lcl_handle_events DEFINITION*---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLASS lcl_handle_events IMPLEMENTATION*---------------------------------------------------------------------** &amp;sect;5.2 implement the events for handling the events of cl_salv_table*---------------------------------------------------------------------*class lcl_handle_events implementation.&amp;#160; method on_user_command.**&amp;#160;&amp;#160;&amp;#160; perform show_function_info using e_salv_function text-i08.&amp;#160; endmethod.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "on_user_command&amp;#160; method on_before_salv_function.**&amp;#160;&amp;#160;&amp;#160; perform show_function_info using e_salv_function text-i09.&amp;#160; endmethod.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "on_before_salv_function&amp;#160; method on_after_salv_function.**&amp;#160;&amp;#160;&amp;#160; perform show_function_info using e_salv_function text-i10.&amp;#160; endmethod.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "on_after_salv_function&amp;#160; method on_double_click.**&amp;#160;&amp;#160;&amp;#160; CHECK ( sender = go_table1 ).&amp;#160;&amp;#160;&amp;#160; me-&amp;gt;md_row = row. " save selected row for REFRESH* Triggers PAI of the dynpro with the specified ok-code&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_gui_cfw=&amp;gt;set_new_ok_code( 'DETAIL' ).&amp;#160; endmethod.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "on_double_click&amp;#160; method on_link_click.**&amp;#160;&amp;#160;&amp;#160; perform show_cell_info using row column text-i06.&amp;#160; endmethod.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "on_single_clickendclass.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "lcl_handle_events IMPLEMENTATIONSTART-OF-SELECTION.* initialization&amp;#160; REFRESH: gt_knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gt_knvv.&amp;#160; gd_repid = syst-repid.&amp;#160; SELECT * FROM knb1 INTO TABLE gt_knb1&amp;#160;&amp;#160;&amp;#160; WHERE bukrs = '0104'.* Create the control and grid instances in advance* before displaying them on any screen&amp;#160; PERFORM init_controls.* Link the docking container to the target dynpro* NOTE: Now we decide where to display the ALV list&amp;#160; gd_repid&amp;#160; = syst-repid.&amp;#160; CALL METHOD go_docking-&amp;gt;link&amp;#160; EXPORTING repid = gd_repid&amp;#160;&amp;#160;&amp;#160; dynnr = '0100'* CONTAINER =EXCEPTIONS OTHERS = 4.* NOTE: dynpro does not contain any elements&amp;#160; CALL SCREEN '0100'.* Flow logic of dynpro (does not contain any dynpro elements):END-OF-SELECTION.*&amp;amp;---------------------------------------------------------------------**&amp;amp; Module STATUS_0100 OUTPUT*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_0100 OUTPUT.&amp;#160; SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"* SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0100 OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Module&amp;#160; STATUS_0205&amp;#160; OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*MODULE status_0205 OUTPUT.&amp;#160; SET PF-STATUS '0205_POPUP'.*&amp;#160; SET TITLEBAR 'xxx'.ENDMODULE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " STATUS_0205&amp;#160; OUTPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp; Module USER_COMMAND_0100 INPUT*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE user_command_0100 INPUT.&amp;#160; TRANSLATE gd_okcode TO UPPER CASE.&amp;#160; CASE gd_okcode.&amp;#160;&amp;#160;&amp;#160; WHEN 'BACK' OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'END'&amp;#160; OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'CANC'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE syst-dynnr.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '0100'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 0. LEAVE SCREEN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN '0200'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 100. LEAVE SCREEN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.*&amp;#160;&amp;#160; Leave popup screen&amp;#160;&amp;#160;&amp;#160; WHEN 'ENTER'&amp;#160; OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'CANCEL'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SET SCREEN 0. LEAVE SCREEN.* User has pushed button "Display Details"&amp;#160;&amp;#160;&amp;#160; WHEN 'DETAIL'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM entry_show_details.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF ( p_main&amp;#160; = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF ( p_2ndscr = abap_true ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0200'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LEAVE TO SCREEN 200.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD go_docking2-&amp;gt;link&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gd_repid&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dynnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0205'*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lifetime_dynpro_dynpro_link = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL SCREEN '0205' STARTING AT 5 5&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDING AT&amp;#160;&amp;#160; 100 20.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160; ENDCASE.&amp;#160; CLEAR: gd_okcode.ENDMODULE. " USER_COMMAND_0100 INPUT*&amp;amp;---------------------------------------------------------------------**&amp;amp; Form ENTRY_SHOW_DETAILS*&amp;amp;---------------------------------------------------------------------** text*----------------------------------------------------------------------** --&amp;gt; p1 text* &amp;lt;-- p2 text*----------------------------------------------------------------------*FORM entry_show_details .* define local data&amp;#160; DATA: ld_row TYPE i,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_knb1 TYPE knb1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ls_stable TYPE lvc_s_stbl.&amp;#160; REFRESH: gt_knvv.&amp;#160; READ TABLE gt_knb1 INTO ls_knb1 INDEX go_events-&amp;gt;md_row.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; SELECT * FROM knvv INTO TABLE gt_knvv&amp;#160;&amp;#160;&amp;#160; WHERE kunnr = ls_knb1-kunnr.* Refresh display of detail ALV list (reuired)&amp;#160; ls_stable-row = abap_true.&amp;#160; ls_stable-col = abap_true.&amp;#160; CALL METHOD go_table2-&amp;gt;refresh&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s_stable&amp;#160;&amp;#160;&amp;#160;&amp;#160; = ls_stable.ENDFORM. " ENTRY_SHOW_DETAILS*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls .* Display both ALV grids on same main screen (splitter)&amp;#160; IF ( p_main = abap_true ).&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_main.* Display detailed ALV list on second main screen&amp;#160; ELSEIF ( p_2ndscr = abap_true ).&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_2ndscr.* Display detailed ALV list within popup&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160; PERFORM init_controls_popup.&amp;#160; ENDIF.*... &amp;sect;3 Functions*... &amp;sect;3.1 activate ALV generic Functions*... &amp;sect;3.2 include own functions by setting own status**&amp;#160; go_table1-&amp;gt;set_screen_status(**&amp;#160;&amp;#160;&amp;#160; pfstatus&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160; 'SALV_STANDARD'**&amp;#160;&amp;#160;&amp;#160; report&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160; gd_repid**&amp;#160;&amp;#160;&amp;#160; set_functions = go_table1-&amp;gt;c_functions_all ).*... &amp;sect;6 register to the events of cl_salv_table&amp;#160; data: lr_events type ref to cl_salv_events_table.&amp;#160; lr_events = go_table1-&amp;gt;get_event( ).&amp;#160; create object go_events.*... &amp;sect;6.1 register to the event USER_COMMAND&amp;#160; set handler go_events-&amp;gt;on_user_command for lr_events.*... &amp;sect;6.2 register to the event BEFORE_SALV_FUNCTION&amp;#160; set handler go_events-&amp;gt;on_before_salv_function for lr_events.*... &amp;sect;6.3 register to the event AFTER_SALV_FUNCTION&amp;#160; set handler go_events-&amp;gt;on_after_salv_function for lr_events.*... &amp;sect;6.4 register to the event DOUBLE_CLICK&amp;#160; set handler go_events-&amp;gt;on_double_click for lr_events.*... &amp;sect;6.5 register to the event LINK_CLICK&amp;#160; set handler go_events-&amp;gt;on_link_click for lr_events.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_MAIN*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_main .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).* Create splitter container&amp;#160; CREATE OBJECT go_splitter&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; columns&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_error&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cntl_system_error = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Get cell container&amp;#160; CALL METHOD go_splitter-&amp;gt;get_container&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; column&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container = go_cell_top.&amp;#160; CALL METHOD go_splitter-&amp;gt;get_container&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; row&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; column&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160; RECEIVING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; container = go_cell_bottom.* Create ALV grids&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_cell_top&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knb1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table1-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_cell_bottom&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knvv.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table2-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_MAIN*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_2NDSCR*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_2ndscr .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_docking2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).&amp;#160; go_docking2-&amp;gt;set_extension( 99999 ).* Create ALV grids&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knb1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table1-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_docking2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knvv.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table2-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_2NDSCR*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; INIT_CONTROLS_POPUP*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------**&amp;#160; --&amp;gt;&amp;#160; p1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*&amp;#160; &amp;lt;--&amp;#160; p2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; text*----------------------------------------------------------------------*FORM init_controls_popup .* Create docking container&amp;#160; CREATE OBJECT go_docking&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.&amp;#160; CREATE OBJECT go_docking2&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parent = cl_gui_container=&amp;gt;screen1&amp;#160; " Popup !!!&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ratio&amp;#160; = 90&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS = 6.&amp;#160; IF sy-subrc NE 0.*&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&amp;#160; ENDIF.* Fill entire screen&amp;#160; go_docking-&amp;gt;set_extension( 99999 ).&amp;#160; go_docking2-&amp;gt;set_extension( 99999 ).* Create ALV grids&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_docking&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knb1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table1-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.&amp;#160; TRY.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL METHOD cl_salv_table=&amp;gt;factory&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_container&amp;#160; = go_docking2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r_salv_table = go_table2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHANGING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t_table&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = gt_knvv.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; go_table2-&amp;gt;display( ).&amp;#160;&amp;#160;&amp;#160; CATCH cx_salv_msg .&amp;#160; ENDTRY.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " INIT_CONTROLS_POPUP&lt;/textarea&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:3a9ac734-f028-412e-8402-20694fe47189] --&gt;</description>
      <pubDate>Tue, 12 Oct 2010 12:13:02 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2010/10/12/against-all-odds--programming-of-communicating-salv-grid-controls</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2010-10-12T12:13:02Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>19</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/against-all-odds--programming-of-communicating-salv-grid-controls</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=55243</wfw:commentRss>
    </item>
    <item>
      <title>What SAP may have forgotten to  integrate</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/09/23/what-sap-may-have-forgotten-to-integrate</link>
      <description>&lt;!-- [DocumentBodyStart:2fd694a9-40e5-408c-8436-159fea7fcbe4] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;span&gt;*Introduction*&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;&lt;span&gt;One major implicit agreement in the EDI business is that +"No News is Good News."+. A customer ordering via EDI assumes that its purchase orders will be fulfilled completely as long as the customer is not informed otherwise by the supplier. A supplier assumes that its EDI invoices have been accepted and will be paid unless they are rejected by the customer. Given the fact that we do not use a full-blown EDI Adapter like Seeburger at Lindt (CH) but just an "Add-On" (for more details contact &lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.resource.ch"&gt;http://www.resource.ch&lt;/a&gt;&lt;span&gt; (&lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.resource.ch"&gt;http://www.resource.ch&lt;/a&gt;&lt;span&gt;) about their *rEDI Adapter*) which does the conversion XML to Flat and vice versa we do not (yet) have and End-to-End Monitoring of our EDI processes. How do we cope with this situation in case of EDI incidents?&amp;#160; *The Challenge* If EDI invoices are rejected by the customer we are informed by their EDI support team. Many customers tells us not only that a transmission failed but also which invoice (i.e. the invoice no.) was affected. However, some customer just let us know that +"Transmission (LNDSMUMU004392) failed"+ (see below). &lt;/span&gt;&lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59852/001_EMail_Rejected.png"&gt;&lt;img alt="E-Mail Notification " height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59852/554-400/001_EMail_Rejected.png" width="554"/&gt;&lt;/a&gt;&lt;span&gt; The cryptic number LNDSMUMU004392 is the +sequential +*transmission number* (or &lt;/span&gt;&lt;strong&gt;ICN&lt;/strong&gt;&lt;span&gt; = *interchange control number*) as defined in the customer's EDIFACT EDI guidelines (LNDS = Supplier prefix; MUMU = Customer prefix; 004392 = sequential number). In case of TRADACOMS messages (UK-specific standard) the FIL segment is used for the numbering (field FLGN = File Generation Number). The EDI error described in the e-mail is that we sent a wrong invoicee party (NAD+IV) due to a wrong assignment of partner roles in the customer master data. Now how do we find out the affected invoice by just knowing its transmission number, sent date and value? Using standard means (e.g. *WE02*) may become tedious if many invoices were sent to this customer at the same day (which actually is the case for this particular customer). Another option would be to check table *VBRK *for the specific net value. Or searching through the XML messages on SAP-XI (*SXMB_MONI*) in the possible period of time. However, none of these ways is really efficient and all of them are too time-consuming. And what about multiple incidents happen within a short period of time?&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;*eXtended IDoc Monitoring at Lindt* As an answer to tackle this acute support problem I developed an "eXtended IDoc Monitor" for Lindt UK (our EDI "pacemaker" among the Lindt group). The three main features of this extended monitor are: 1. Display the *business object* (e.g. invoice, delivery, etc.) on the IDoc list 2. Display the SAP-XI message ID (*GUID*) on the IDoc list 3. Display the *ICN *(or transmission number) of outbound IDocs on the IDoc list&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;In the standard IDoc monitor (WE02) you need 3-4 mouse-clicks in order to navigate from the IDoc on the list to the business document. Since the link between IDoc and business document can be retrieved by +standard +means I just removed this unnecessary navigation and brought the business document to the surface (i.e. on the IDoc list).&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;On SAP-XI we can see the link between IDocs and XI-message ID (*GUID*) using transaction *IDX5*. Provided a suitable RFC connection is available we can jump from SAP-XI into the business system and display the IDoc. Thus, we have again +standard+ means to retrieve this link (IDoc - GUID). &amp;#160; | | In summary: All I have done is *to grab the Lego bricks that SAP has built already and merged what obviously belongs together.*&amp;#160; The result is shown below: &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59853/002_eXtendedIDocMonitor_SelScreen.png"&gt;&lt;img alt="eXtended IDoc Monitor: Selection-Screen" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59853/409-400/002_eXtendedIDocMonitor_SelScreen.png" width="409"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; As soon as the selection is started the message displayed in the status bar shows the additional selection of business object data. &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59854/002_eXtendedIDocMonitor_StatusBar.png"&gt;&lt;img alt="eXtended IDoc Monitor: StatusBar" height="51" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59854/640-51/002_eXtendedIDocMonitor_StatusBar.png" width="640"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; The business document related columns are coloured in dark green. &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59855/003_eXtendedIDocMonitor_ListOverview.png"&gt;&lt;img alt="eXtended IDoc Monitor: List Overview" height="399" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59855/525-399/003_eXtendedIDocMonitor_ListOverview.png" width="525"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; As soon as we restrict the Idoc list to a particular message type (e.g. *INVOIC*) additional data specific for this business document type can be displayed (e.g. net value and payer in case of invoices). &amp;#160;By simply sorting the IDoc list by column ICN (= Interchange Control number) we have found out that the rejected transmission LNDSMUMU004392 belonged to invoice 90081069. &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59856/004_eXtendedIDocMonitor_ListDetails.gif"&gt;&lt;img alt="eXtended IDoc Monitor: List Details" height="368" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59856/500-368/004_eXtendedIDocMonitor_ListDetails.gif" width="500"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; By right-clicking on the affected IDoc we can quickly call the appropriate function (e.g. "Maintain Store (code) mapping") in order to solve this incident. Needless to say that a double-click on either the business document number or the GUID forwards the user to the corresponding display +business transaction+ (e.g VF03 for invoices) or the list "XML Messages in Adapter (IDX5) on SAP-XI, respectively. &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59857/005_eXtendedIDocMonitor_ContextMenu.png"&gt;&lt;img alt="eXtended IDoc Monitor: Context Menu" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59857/509-400/005_eXtendedIDocMonitor_ContextMenu.png" width="509"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; &amp;#160; *Business Activity Monitoring* You may have noticed that the selection-screen of the eXtended IDoc Monitor (ZWE02) has an additional tabstrip *"Bus.Object"* as compared to the standard.Wouldn't it be nice to follow the business activities of a document based on the sent and received IDocs? &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59858/006_eXtendedIDocMonitor_BusObjSelScreen.png"&gt;&lt;img alt="eXtended IDoc Monitor: Bus.Object Selection-Screen" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59858/609-400/006_eXtendedIDocMonitor_BusObjSelScreen.png" width="609"/&gt;&lt;/a&gt;&lt;span&gt; &amp;#160; The selection for a specific outbound delivery gives the following result: * The warehouse sent the picking confirmation (WHSCON) back. * &amp;#160;The inbound WHSCON triggererd an outbound SHPORD as ASN (= Advance Shipping Notice) to the customer (by means of a VOFM condition). * &amp;#160;Finally the warehouse sent a proof of delivery (STPPOD) which allows billing of the delivery. Or in other words: We can see the all business activities of the outbound delivery in the eXtended IDoc Monitoring. &lt;/span&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50069-59859/007_extendedidocmonitor_busobjactivity_small.gif"&gt;&lt;img alt="eXtended IDoc Monitor: Business Activity Monitoring" height="261" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50069-59859/499-261/007_extendedidocmonitor_busobjactivity_small.gif" width="499"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:2fd694a9-40e5-408c-8436-159fea7fcbe4] --&gt;</description>
      <pubDate>Wed, 23 Sep 2009 10:53:08 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/09/23/what-sap-may-have-forgotten-to-integrate</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-09-23T10:53:08Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>6</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/what-sap-may-have-forgotten-to-integrate</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=50069</wfw:commentRss>
    </item>
    <item>
      <title>Nomen est Omen - ABAP Naming Conventions</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/08/31/nomen-est-omen--abap-naming-conventions</link>
      <description>&lt;!-- [DocumentBodyStart:d3c8d7ba-f603-45b3-ba22-fd9339b872d8] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;My comment about the importance of ABAP naming conventions to Thorsten Franz' blog &lt;a class="jive-link-external-small" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901"&gt;Great Programmers will their Code to the new Guy&lt;/a&gt; triggered an interesting discussion about naming conventions for ABAP. The opinions range from &lt;em&gt;"...is important"&lt;/em&gt; to &lt;em&gt;"...We do not advise you on naming conventions, do whatever you want".&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The latter statement sounds like a capitulation. This resignation might be due to the following questions:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Are there useful naming conventions for ABAP? Apparently not even SAP has them.&lt;/li&gt;&lt;li&gt;Do naming conventions really improve ABAP coding and how?&lt;/li&gt;&lt;li&gt;How can we check the compliance of ABAP program objects with the naming conventions?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;&lt;strong&gt;ABAP Naming Conventions: &lt;em&gt;"Yes, we exist"&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;I started my SAP career more than 10 years ago at &lt;a class="jive-link-external-small" href="http://www.cirrus-group.com/"&gt;Cirrus Consulting&lt;/a&gt;. The very first thing I got there was a comprehensive documentation about ABAP naming and programming conventions which they had created for one of their biggest customers. And at the Z&amp;#252;rcher Kantonalbank they had such a document, too.&lt;/p&gt;&lt;p&gt;Admittedly there were deviations from these conventions in particular because many external developers worked at these customers and the &lt;em&gt;Code Inspector&lt;/em&gt; (SCI) was not yet available at that time. Nevertheless these conventions facilitated the readability of the coding and the handing over (for maintenance) to other developers. And if you look carefully around you will realize that even SAP (or at least a subset of its developers) uses naming conventions. &lt;/p&gt;&lt;p&gt;Now let us imagine a "...do whatever you want" customer where a developer creates a report (containing a constant for the speed of light) which in the subsequent years has been maintained by three other developers. Three of them use their own naming conventions and the forth one uses none at all so we may end up with the following representations of a single constant:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;GC_LIGHTSPEED or LC_LIGHTSPEED&lt;/li&gt;&lt;li&gt;CO_LIGHTSPEED&lt;/li&gt;&lt;li&gt;C_LIGHTSPEED&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The forth developer may replace all previous representations with his own SPEED_OF_LIGHT without any prefix because everybody "knows" that this is a (pyhsical) constant. This medley of naming conventions will definitely confuse every developer. And this is just a simple example considered with the mixing up the naming of global and local variables.&lt;/p&gt;&lt;p&gt;In the following section I will present my own naming conventions which are a "best-of-breed" blend of SAP naming conventions and those of my previous employers. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Call a Spade a Spade &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Naming conventions must be &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;concise&lt;/strong&gt;&lt;/span&gt;, &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;short &lt;/strong&gt;&lt;/span&gt;and &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;distinct&lt;/strong&gt;&lt;/span&gt;. Any ambiguity is a burden for maintenance in the future. Using three categories of criteria it is possible to unambigously name virtually all variables and most signature parameters:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Visibility&lt;/strong&gt;: Global / Local / Class Context&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Type&lt;/strong&gt;: Field / Structure / Table Type / Reference / Constants&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Structural Context&lt;/strong&gt;: FORM routines / Function Modules / Methods &lt;/li&gt;&lt;/ol&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;There are two general naming conventions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Variables and Class Attributes: &lt;strong&gt;&amp;lt;Visibility&amp;gt;_&amp;lt;Type&amp;gt;_&amp;lt;Description&amp;gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Signature Parameters: &lt;strong&gt;&amp;lt;Structural Context&amp;gt;_&amp;lt;Type&amp;gt;_&amp;lt;Description&amp;gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Visibility &amp;amp; Type&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;We have three kinds of visibility: Global, Local and Class Context (which includes Interfaces as well) and seven different types (see below).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix&lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Example &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Coding &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;Global &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;G&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;GD_MATNR &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: gd_matnr TYPE matnr. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;GS_KNB1 &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: gs_knb1 TYPE knb1. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;GT_VBAK &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: gt_vbak TYPE TABLE OF vbak. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;GO_GRID&lt;/p&gt;&lt;p&gt;GO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;DATA: go_grid TYPE REF TO cl_gui_alv_grid.&lt;/p&gt;&lt;p&gt;DATA: go_msglist TYPE REF TO if_reca_message_list.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;GDO_DATA &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: gdo_data TYPE REF TO data. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Constant &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;GC_LIGHTSPEED &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CONSTANTS: gc_lightspeed TYPE i VALUE '300000'. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;Local&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;L&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;LD_MATNR &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: ld_matnr TYPE matnr.&amp;#160; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;LS_KNB1 &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: ls_knb1 TYPE knb1. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;LT_VBAK &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: lt_vbak TYPE TABLE OF vbak. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;LO_GRID&lt;/p&gt;&lt;p&gt;LO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;DATA: lo_grid TYPE REF TO cl_gui_alv_grid. &lt;/p&gt;&lt;p&gt;DATA: lo_msglist TYPE REF TO if_reca_message_list.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;LDO_DATA &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: ldo_data TYPE REF TO data. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Constant &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;LC_LIGHTSPEED &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CONSTANTS: lc_lightspeed TYPE i VALUE '300000'.&amp;#160; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;Class Context &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;M &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;MD_MATNR &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: md_matnr TYPE matnr. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;MS_KNB1 &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: ms_knb1 TYPE knb1. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;MT_VBAK &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: mt_vbak TYPE TABLE OF vbak. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;MO_GRID&lt;/p&gt;&lt;p&gt;MO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;DATA: mo_grid TYPE REF TO cl_gui_alv_grid.&amp;#160; &lt;/p&gt;&lt;p&gt;DATA: mo_msglist TYPE REF TO if_reca_message_list. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;MDO_DATA &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DATA: mdo_data TYPE REF TO data. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Constant &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;MC_LIGHTSPEED &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CONSTANTS: mc_lightspeed TYPE i VALUE '300000'.&amp;#160; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The vast majority of variables within program objects are either global or local. And in the future there will be a remarkably shift towards class attributes (ABAP-OO). Thus, assigning a unique prefix to each group makes their visibility unambigous for every developer.&lt;/p&gt;&lt;p&gt;Class attributes (instance and static) are special because they are global within the class/instance whereas they appear local from outside the class/instance. Without referring to a class(name) or instance these attributes are "hidden" (i.e. local).&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Question&lt;/span&gt;: Does the type prefix offer any benefit?&lt;/p&gt;&lt;p&gt;In ABAP forum posts you may find the following definitions for ALV grid instances:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;GRID: global (?), local (?), class context (?); class reference (?)&lt;/li&gt;&lt;li&gt;G_ALV_GRID: global (!?), local (?), class context (?); class reference (!?)&lt;/li&gt;&lt;li&gt;GO_GRID: global class reference OUTSIDE any class context (my naming convention)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Answer&lt;/span&gt;: Yes, because we meet the developer's expectation and anticipation.&lt;/p&gt;&lt;p&gt;You may argue: What a big fuss about such a little subtlety. My answer to this is: Every SAP developer who comes across a GO_GRID variable in any of my programs knows in advance(!) the meaning and scope of it. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Structural Context (1): FORM routine Signature&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The SAP system does not care about which kind of &lt;em&gt;formal parameters&lt;/em&gt; (USING or CHANGING) are used in FORM routine signatures. Both kinds of formal parameters can be changed within the routine and the modified contents transferred back to the calling program. This is ambiguity at its worst.&lt;/p&gt;&lt;p&gt;In order to make the signature of a FORM routine clear as crystal we define every &lt;strong&gt;Input = USING&lt;/strong&gt; parameter and every &lt;strong&gt;Output = CHANGING&lt;/strong&gt; parameter. Within the FORM routine all USING parameters should be regarded as "constants" meaning that they are not changed nor is any change transferred back to the calling program. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Example &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;USING&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;U&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;UD_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;US_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;UT_VBAK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;UO_GRID&lt;/p&gt;&lt;p&gt;UO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;UDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;CHANGING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CD_MATNR &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CS_KNB1 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;CO_GRID&lt;/p&gt;&lt;p&gt;CO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CDO_DATA &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Again, by defining Input = USING (prefix 'U') and Output = CHANGING (prefix 'C') we meet the developer's expectation and alleviate understanding of the FORM routine. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Structural Context (2): Function Module Signature&lt;/strong&gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;The same logic applies to function modules parameters. In addition, we can facilitate the understanding of &lt;strong&gt;TABLES &lt;/strong&gt;parameters (&lt;em&gt;Yes, I know they are obsolete yet some still like to use 'em&lt;/em&gt;) by the semantics of their Input/Output behaviour:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IT_ITAB = Input only &lt;/li&gt;&lt;li&gt;ET_ITAB = Output only&lt;/li&gt;&lt;li&gt;XT_ITAB = Input &amp;amp; Output&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Prefix &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Example &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;IMPORTING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;I&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ID_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IS_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IT_VBAK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;IO_GRID&lt;/p&gt;&lt;p&gt;IO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;EXPORTING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;E&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ED_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ES_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ET_VBAK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;EO_GRID&lt;/p&gt;&lt;p&gt;EO_MSGLIST&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;EDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;CHANGING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CD_MATNR &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CS_KNB1 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;CO_GRID&lt;/p&gt;&lt;p&gt;CO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CDO_DATA &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;TABLES &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;"Importing" &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IT &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;"Exporting" &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ET &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ET_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;"Changing" &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;XT &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;XT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br/&gt;Of course there is no technical difference whatsoever between "Importing", "Exporting" and "Changing" TABLES parameters. Yet the different naming gives the developer already an idea about the function of this module without looking into the coding. Or in other words: Try to "express" the function of the module already in its signature.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br/&gt;&lt;strong&gt;Structural Context (3a): Method Signature&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The logic explained above is just applied to method parameters as well and extended to the additional RETURNING parameters of methods.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Prefix &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Example &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;IMPORTING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;I&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ID_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IS_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IT_VBAK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;IO_GRID&lt;/p&gt;&lt;p&gt;IO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;IDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;EXPORTING&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;E&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ED_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ES_KNB1 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;ET_VBAK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;EO_GRID&lt;/p&gt;&lt;p&gt;EO_MSGLIST&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;EDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;CHANGING &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;C &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CD_MATNR &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CS_KNB1 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;CO_GRID&lt;/p&gt;&lt;p&gt;CO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;CDO_DATA &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;RETURNING&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;R &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;RD_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;RS_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;RT_VBAK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;RO_GRID&lt;/p&gt;&lt;p&gt;RO_MSGLIST &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;RDO_DATA &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Structural Context (3b): Static vs. Instance Attributes&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Static attributes are special because they exist only once for all instances of this class. Modifying a static attribute within a given instance makes this change visible to all other instances. Both types of attributes have the prefix 'M' (class context) in my naming convention. In order to distinguish between static and instance attributes I apply the following convention:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instance Attribute: with self-reference me-&amp;gt; (e.g. me-&amp;gt;md_key)&lt;/li&gt;&lt;li&gt;Static Attribute: without self-reference (.e.g. ms_row) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can find an example of this naming convention in the coding of INCLUDE ZRSWBOSDR_C01 in my blog &lt;a class="jive-link-external-small" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12692"&gt;Multi-Purpose ALV Programming&lt;/a&gt;.&amp;#160;&amp;#160; &lt;/p&gt;&lt;p&gt;Another unambigous convention is to drop the self-reference prefix and use the full qualified name for static attributes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instance Attribute: md_key (with or with self-reference prefix)&lt;/li&gt;&lt;li&gt;Static Attribute: lcl_eventhandler=&amp;gt;ms_row &lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Field-Symbols&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;We can apply the same naming conventions even to field-symbols which makes them much more readable and understandable for every developer. This is particularly important because the contents of field-symbols cannot be analyzed statically but is only determined at runtime.&amp;#160;&amp;#160; &lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix &lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;strong&gt;Prefix&lt;br/&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Example &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;Global &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;G&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;GD_MATNR&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;GS_KNB1&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;GT_VBAK&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;&amp;lt;GO_GRID&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;GO_MSGLIST&amp;gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;GDO_DATA&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;Local&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;L&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Field&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;D &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;LD_MATNR&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Structure &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;S &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;LS_KNB1&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Table Type &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;T &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;LT_VBAK&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;Class&lt;/p&gt;&lt;p&gt;Interface &lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;O &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;p&gt;&amp;lt;LO_GRID&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;lt;LO_MSGLIST&amp;gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;Data Object&lt;/td&gt;&lt;td style="border:1px solid black;"&gt;DO &lt;/td&gt;&lt;td style="border:1px solid black;"&gt;&amp;lt;LDO_DATA&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP and Lego&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Why has Lego become one of the world's most famous toys? Part of the answer can be found &lt;a class="jive-link-external-small" href="http://en.wikipedia.org/wiki/Lego#Design"&gt;here&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;"Lego pieces of all varieties are a part of a universal system. \ Despite variation in the design and purpose of individual pieces over \ the years, each remains compatible in some way with existing pieces. \ Lego bricks from 1958 still interlock with those made in 2009, and Lego \ sets for young children are compatible with those made for teenagers.&lt;/p&gt;&lt;p&gt;\ Bricks, beams, axles, mini figures, and all other parts in the Lego \ system are manufactured to an exacting degree of precision. When \ snapped together, pieces must have just the right amount of strength \ and flexibility mixed together to stick together. They must stay \ together until pulled apart. They cannot be too easy to pull apart, or \ the resulting constructions would be unstable; they also cannot be too \ difficult to pull apart, since the disassembly of one creation in order \ to build another is part of the Lego appeal. In order for pieces to \ have just the right "clutch power", Lego elements are manufactured \ within a tolerance of 2 &amp;#181;m." &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;QUESTION: &lt;em&gt;"Have you ever seen a child which sits in front of a pile of Lego bricks claiming it can't build anything because all bricks have the same size???"&amp;#160; &lt;/em&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;For me SAP is just an incredibly huge pile of Lego bricks (for grown-ups). Consistent naming conventions are an indispensable standard which enables us to manufacture long-lasting developments that are easy to understand and maintain (pull apart and reassemble).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Code Inspector: Check Compliance with your Naming Conventions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Code Inspector (transaction SCI) provides you with all means to check compliance with your naming conventions. Within the check variant you an explicit check &lt;strong&gt;Programming Conventions&lt;/strong&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50453-156314/CodeInspector_1_Overview.png"&gt;&lt;img alt="CodeInspector_1_Overview.png" class="jive-image" height="388" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50453-156314/444-388/CodeInspector_1_Overview.png" width="444"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Looking at the check &lt;strong&gt;Naming Conventions&lt;/strong&gt; a popup appears where you can define your conventions for data variables and signatures (FORM routine, function module, classes).&lt;/p&gt;&lt;p&gt;Since I have not yet mentioned&amp;#160; macros (DEFINE) yet here is my convention:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;MAC_&lt;/strong&gt;&amp;lt;description&amp;gt;: e.g. mac_suppress_toolbar_btn &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;Another set of frequently used global variables are (select-)parameters and select-options:&lt;/p&gt;&lt;p&gt;SELECT-OPTIONS:&lt;/p&gt;&lt;p&gt;&amp;#160; S_MATNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FOR mara-matnr.&lt;/p&gt;&lt;p&gt;PARAMETERS:&lt;/p&gt;&lt;p&gt;&amp;#160; P_MATKL&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE matkl. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50453-156315/CodeInspector_2_NamingConventions.png"&gt;&lt;img alt="CodeInspector_2_NamingConventions.png" class="jive-image-thumbnail jive-image" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50453-156315/552-400/CodeInspector_2_NamingConventions.png" width="552"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Looking at the check &lt;strong&gt;Extended Naming Conventions for Programs&lt;/strong&gt; you will find my 7 types (Field, Structure, Table Type, Class, Interface, Data Object, Constant) grouped into 5 prefixes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Elementary Type&lt;/strong&gt; includes Field and Constant&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Object Reference&lt;/strong&gt; includes Class and Interface &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50453-156316/CodeInspector_3_ExtendedNamingConventions.png"&gt;&lt;img alt="CodeInspector_3_ExtendedNamingConventions.png" class="jive-image-thumbnail jive-image" height="206" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50453-156316/620-206/CodeInspector_3_ExtendedNamingConventions.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The prefixes shown above are the default values when opening the check with which I do not agree. For example, the prefix "R" indicates a global range according to my conventions:&lt;/p&gt;&lt;p&gt;DATA: rt_matnr&amp;#160;&amp;#160;&amp;#160; TYPE RANGE OF matnr. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It is possible to define useful naming conventions for ABAP. Naming conventions significantly help in understanding a program and navigating around it. Both the new and the senior guy will benefit in particular when it comes to maintenance because they can focus their analysis on the program logic and not the "logic" of the previous developer. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Naming conventions are not impositions for creative developers but, on the contrary, side rails for long-lasting development.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I no longer think it makes sense to explicitly distinguish between classes and interfaces because at the end of the day you always work with an interface implementing class (even if the static type is that of an interface). Therefore, the two separate rows for "Class" and "Interface" have been merged.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Further Readings&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901"&gt;Great Programmers will their Code to the New Guy&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15238"&gt;The Little SE80 of Horrors&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15457"&gt;Random Ramblings of an obsolete programmer&lt;/a&gt;&amp;#160; &lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:d3c8d7ba-f603-45b3-ba22-fd9339b872d8] --&gt;</description>
      <category domain="http://scn.sap.com/people/uwe.schieferstein/blog/tags">namingconvention</category>
      <pubDate>Sun, 30 Aug 2009 22:33:06 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/08/31/nomen-est-omen--abap-naming-conventions</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-08-30T22:33:06Z</dc:date>
      <clearspace:dateToText>5 months, 2 days ago</clearspace:dateToText>
      <clearspace:replyCount>58</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/nomen-est-omen--abap-naming-conventions</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=50453</wfw:commentRss>
    </item>
    <item>
      <title>Distribution of full master data objects from change pointers - Revisited</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/08/06/distribution-of-full-master-data-objects-from-change-pointers--revisited</link>
      <description>&lt;!-- [DocumentBodyStart:bf29bb2b-4b16-41d0-8ab8-1bc1a2c1f1e2] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;When I came back from my holidays one of the first issues I had to solve at work was to distribute complete IDocs for material master data generated from change pointers. Fortunately Michal Krawczyk's &lt;span&gt;The specified item was not found.&lt;/span&gt; hit the bull's eye and provided the solution.&lt;/p&gt;&lt;p&gt;However, since we are still on SAP release 4.6c enhancement techniques are not yet available. Modifying function module CHANGE_POINTERS_READ was not an option either because we would need to dig deeply into the ALE layers.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Chain of Calls&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We have scheduled report &lt;strong&gt;RBDMIDOC&lt;/strong&gt; which generates the MATMAS IDocs using change pointers. This report does not yet generate the IDocs but is responsible for locking table BDCPS (&lt;em&gt;Change pointer: Status&lt;/em&gt;) for the selected message type.&lt;/p&gt;&lt;p&gt;The report calls another report &lt;strong&gt;RBDMIDOX&lt;/strong&gt; which makes a call to fm &lt;strong&gt;MASTERIDOC_CREATE_SMD_CLSMAS&lt;/strong&gt; in which the change pointers are read using fm &lt;strong&gt;CHANGE_POINTERS_READ&lt;/strong&gt;. Thus, the chain of calls looks like this:&lt;/p&gt;&lt;p&gt;RBDMIDOC -&amp;gt; RBDMIDOX -&amp;gt; MASTERIDOC_CREATE_SMD_CLSMAS -&amp;gt; CHANGE_POINTERS_READ&lt;/p&gt;&lt;p&gt;I assume you understand my reluctance against any modification better now.&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Change Pointer Trick&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Change pointer records are save in table BDCP. The field BDCP-FLDNAME contains the name of the field that was changed in the master data resulting in a change pointer.&amp;#160;&lt;/p&gt;&lt;p&gt;The quintessence of the trick devised by Michal is: When we change the contents of BDCP-FLDNAME to 'ALELISTING' the master data are transferred in its entirety.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Solution (available on 4.6c, too)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Instead of changing the change pointer records &lt;em&gt;dynamically at the end&lt;/em&gt; of the process my solution modifies the records &lt;em&gt;persistently at the beginning&lt;/em&gt; of the process.&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;1. Copy RBDMIDOC to ZRBDMIDOC&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the selection-screen section of the report I just added a new checkbox parameter used to trigger full distribution. &amp;#160;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;textarea cols="75" rows="55"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report&amp;#160; ZRBDMIDOC&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; Description:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; Report copied from:*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RBDMIDOC (IDocs aus den &amp;Auml;nderungszeigern erzeugen)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; The standard report generates IDocs having only the&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Delta data but not the entire master data.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; This Z-report allows to distribute full master data from&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; change pointers. The required trick has been described by&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Michal Krawczyk:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; "Distribution of full master data objects from change pointers "&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Reference:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; &lt;span&gt;The specified item was not found.&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; NOTE: Instead of using implicit enhancement which is not available&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on 4.6c we just create a Z-version of the standard report.&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; CHANGE LOG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; nn.nn.nnnn&amp;#160; name of developer (emailaddress@domain.com)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;nnn&amp;lt; :&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; 05.08.2009&amp;#160; Uwe Schieferstein (uschieferstein@lindt.com)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;000&amp;lt; : Report created&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------*REPORT zrbdmidoc MESSAGE-ID b1.* Changes:* XLP 031298: CCMS-Runtime-MonitoringTABLES: tbdme, edimsgt.INCLUDE mbdconst.INCLUDE rbdauthi.INCLUDE rsecccms.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "XLP031298DATA: BEGIN OF t_tbdme OCCURS 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INCLUDE STRUCTURE tbdme.DATA: END OF t_tbdme.DATA: read_flag TYPE c VALUE space.PARAMETERS: mestyp LIKE tbdme-mestyp OBLIGATORY MATCHCODE OBJECT tbdme.* &amp;gt;000&amp;lt; INSERT: begin ofSELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.PARAMETERS:&amp;#160; p_full AS CHECKBOX&amp;#160; DEFAULT ' '.&amp;#160; " Default = Delta, 'X' = FullSELECTION-SCREEN END OF BLOCK bl1.* &amp;gt;000&amp;lt; INSERT: end of...&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;2. Persistently modify change pointer records on demand&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the main section of the report I added the routine for updating the change pointer records. Note that finally the standard report RBDMIDOC is executed.&lt;/p&gt;&lt;textarea cols="75" rows="38"&gt;...* distribute IDOCs for a given message typeSTART-OF-SELECTION.&amp;#160; CALL FUNCTION 'ENQUEUE_E_BDCPS'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mode_bdcps&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 'E'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mandt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = sy-mandt*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cpident&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mestype&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = mestyp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreign_lock&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; system_failure = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160; IF sy-subrc = 1.&amp;#160;&amp;#160;&amp;#160; MESSAGE e115 WITH mestyp.&amp;#160; ELSEIF sy-subrc = 2 or sy-subrc = 3.&amp;#160;&amp;#160;&amp;#160; MESSAGE e156 WITH mestyp.&amp;#160; ENDIF.* &amp;gt;000&amp;lt; INSERT: begin of**&amp;#160; SUBMIT rbdmidox WITH mestyp = mestyp AND RETURN.&amp;#160; IF ( p_full = 'X' ).&amp;#160;&amp;#160;&amp;#160; PERFORM update_change_pointer_records USING mestyp.* Standard execution&amp;#160; ELSE.&amp;#160; ENDIF.&amp;#160; CALL FUNCTION 'DEQUEUE_ALL'.&amp;#160; SUBMIT rbdmidoc WITH mestyp = mestyp AND RETURN.* &amp;gt;000&amp;lt; INSERT: end ofEND-OF-SELECTION....&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;This routine does the same as already described by Michal except that the changes are persistent in the DB table.&lt;/p&gt;&lt;textarea cols="75" rows="45"&gt;...*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; UPDATE_CHANGE_POINTER_RECORDS*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOTE: Overwriting of the fieldname that actually was changed*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; with 'ALELISTING' ensures that the full master data are*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sent.*----------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;UD_MESTYP&amp;#160; Message Type*----------------------------------------------------------------------*FORM update_change_pointer_records&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value(ud_mestyp) TYPE edi_mestyp.* define local data&amp;#160; CONSTANTS:&amp;#160;&amp;#160;&amp;#160; lc_fld_alelisting&amp;#160; TYPE fieldname&amp;#160; VALUE 'ALELISTING'.&amp;#160; DATA:&amp;#160;&amp;#160;&amp;#160; lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE STANDARD TABLE OF bdcpv,&amp;#160;&amp;#160;&amp;#160; ls_bdcp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE bdcp,&amp;#160;&amp;#160;&amp;#160; lt_bdcp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE STANDARD TABLE OF bdcp.*&amp;#160;&amp;#160; Select all not yet processed change pointers&amp;#160; SELECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * FROM&amp;#160; bdcpv INTO TABLE lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE&amp;#160; mestype&amp;#160; = ud_mestyp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND&amp;#160;&amp;#160;&amp;#160; process&amp;#160; NE 'X'.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; SELECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * FROM&amp;#160; bdcp INTO TABLE lt_bdcp&amp;#160;&amp;#160;&amp;#160; FOR ALL ENTRIES IN lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE&amp;#160; cpident&amp;#160; = lt_bdcpv-cpident.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; CLEAR: ls_bdcp.&amp;#160; ls_bdcp-fldname = lc_fld_alelisting.&amp;#160; MODIFY lt_bdcp FROM ls_bdcp&amp;#160;&amp;#160;&amp;#160; TRANSPORTING fldname&amp;#160;&amp;#160;&amp;#160; WHERE ( fldname NE lc_fld_alelisting ).&amp;#160; UPDATE bdcp FROM TABLE lt_bdcp.&amp;#160; COMMIT WORK AND WAIT.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " UPDATE_CHANGE_POINTER_RECORDS&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The following screenshot shows the different selection-screens of the standard and the Z-report:&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-50484-60554/001_RBDMIDOC_Selscreens.png"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-50484-60554/556-400/001_RBDMIDOC_Selscreens.png" width="556"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The advantages of the solution described above are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The functional difference between standard and Z-report is highly visible to the user by just looking at the selection-screens. If the flag is unmarked the Z-report just executes the standard report.&lt;/li&gt;&lt;li&gt;There is no need for any user-exit or modification (I subsume "enhancements" under modifications...).&lt;/li&gt;&lt;li&gt;The solution can be implemented on older SAP releases (e.g. 4.6c).&amp;#160;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Admittedly the direct DB update is "bad" programming but at the end of the day that is how we wanted the change pointer records to look like.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Before rushing towards user-exits or modifications (and enhancements) twist your solution around and see it from a different angle. You may come up with a tiny little "plug-in" that you can put on top (or ahead) of the standard and whose function is obvious to the user.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Appendix&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Here the entire coding of ZRBDMIDOC:&lt;/p&gt;&lt;textarea cols="75" rows="10"&gt;*&amp;amp;---------------------------------------------------------------------**&amp;amp; Report&amp;#160; ZRBDMIDOC&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; Description:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; Report copied from:*&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RBDMIDOC (IDocs aus den &amp;Auml;nderungszeigern erzeugen)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; The standard report generates IDocs having only the&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Delta data but not the entire master data.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; This Z-report allows to distribute full master data from&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; change pointers. The required trick has been described by&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Michal Krawczyk:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; "Distribution of full master data objects from change pointers "&amp;#160;&amp;#160;&amp;#160; **&amp;amp; Reference:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; &lt;span&gt;The specified item was not found.&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp; NOTE: Instead of using implicit enhancement which is not available&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on 4.6c we just create a Z-version of the standard report.&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; CHANGE LOG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; nn.nn.nnnn&amp;#160; name of developer (emailaddress@domain.com)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;nnn&amp;lt; :&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------**&amp;amp; 05.08.2009&amp;#160; Uwe Schieferstein (uschieferstein@lindt.com)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;000&amp;lt; : Report created&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **&amp;amp;---------------------------------------------------------------------*REPORT zrbdmidoc MESSAGE-ID b1.* Changes:* XLP 031298: CCMS-Runtime-MonitoringTABLES: tbdme, edimsgt.INCLUDE mbdconst.INCLUDE rbdauthi.INCLUDE rsecccms.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "XLP031298DATA: BEGIN OF t_tbdme OCCURS 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INCLUDE STRUCTURE tbdme.DATA: END OF t_tbdme.DATA: read_flag TYPE c VALUE space.PARAMETERS: mestyp LIKE tbdme-mestyp OBLIGATORY MATCHCODE OBJECT tbdme.* &amp;gt;000&amp;lt; INSERT: begin ofSELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.PARAMETERS:&amp;#160; p_full AS CHECKBOX&amp;#160; DEFAULT ' '.&amp;#160; " Default = Delta, 'X' = FullSELECTION-SCREEN END OF BLOCK bl1.* &amp;gt;000&amp;lt; INSERT: end of* authority checkAT SELECTION-SCREEN.&amp;#160; PERFORM authority_check_master_data USING mestyp c_true.* list all message types which have function modules*T SELECTION-SCREEN ON VALUE-REQUEST FOR MESTYP.* IF READ_FLAG = SPACE.*&amp;#160;&amp;#160; SELECT * FROM TBDME INTO TABLE T_TBDME WHERE IDOCFBNAME &amp;lt;&amp;gt; SPACE.*&amp;#160;&amp;#160; READ_FLAG = 'X'.* ENDIF.* PERFORM F4HELP_FBNAME_CHECK TABLES T_TBDME.* message type checkAT SELECTION-SCREEN ON mestyp.&amp;#160; IF read_flag = space.&amp;#160;&amp;#160;&amp;#160; SELECT * FROM tbdme INTO TABLE t_tbdme WHERE idocfbname &amp;lt;&amp;gt; space.&amp;#160;&amp;#160;&amp;#160; read_flag = 'X'.&amp;#160; ENDIF.&amp;#160; LOOP AT t_tbdme WHERE mestyp = mestyp.&amp;#160;&amp;#160;&amp;#160; EXIT.&amp;#160; ENDLOOP.&amp;#160; IF sy-subrc &amp;lt;&amp;gt; 0.&amp;#160;&amp;#160;&amp;#160; MESSAGE e157 WITH mestyp.&amp;#160; ENDIF.* distribute IDOCs for a given message typeSTART-OF-SELECTION.&amp;#160; CALL FUNCTION 'ENQUEUE_E_BDCPS'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mode_bdcps&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 'E'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mandt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = sy-mandt*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cpident&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mestype&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = mestyp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreign_lock&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; system_failure = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160; IF sy-subrc = 1.&amp;#160;&amp;#160;&amp;#160; MESSAGE e115 WITH mestyp.&amp;#160; ELSEIF sy-subrc = 2 or sy-subrc = 3.&amp;#160;&amp;#160;&amp;#160; MESSAGE e156 WITH mestyp.&amp;#160; ENDIF.* &amp;gt;000&amp;lt; INSERT: begin of**&amp;#160; SUBMIT rbdmidox WITH mestyp = mestyp AND RETURN.&amp;#160; IF ( p_full = 'X' ).&amp;#160;&amp;#160;&amp;#160; PERFORM update_change_pointer_records USING mestyp.* Standard execution&amp;#160; ELSE.&amp;#160; ENDIF.&amp;#160; CALL FUNCTION 'DEQUEUE_ALL'.&amp;#160; SUBMIT rbdmidoc WITH mestyp = mestyp AND RETURN.* &amp;gt;000&amp;lt; INSERT: end ofEND-OF-SELECTION.*---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FORM F4HELP_FBNAME_CHECK&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; **---------------------------------------------------------------------*FORM f4help_fbname_check TABLES t_tbdme STRUCTURE tbdme.&amp;#160; DATA: BEGIN OF t_help_value OCCURS 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INCLUDE STRUCTURE help_value.&amp;#160; DATA: END OF t_help_value.&amp;#160; DATA: BEGIN OF values OCCURS 0, string(50), END OF values.&amp;#160; t_help_value-tabname = 'EDIMSG'.&amp;#160;&amp;#160;&amp;#160;&amp;#160; " field title EDIMSG-MESTYP&amp;#160; t_help_value-fieldname = 'MESTYP'.&amp;#160; MOVE 'X' TO t_help_value-selectflag.&amp;#160; APPEND t_help_value.&amp;#160; t_help_value-tabname = 'EDIMSGT'.&amp;#160;&amp;#160;&amp;#160; " field title EDIMSGT-DESCRP&amp;#160; t_help_value-fieldname = 'DESCRP'.&amp;#160; MOVE ' ' TO t_help_value-selectflag.&amp;#160; APPEND t_help_value.&amp;#160; LOOP AT t_tbdme.&amp;#160;&amp;#160;&amp;#160; MOVE t_tbdme-mestyp TO values.&amp;#160;&amp;#160;&amp;#160; APPEND values.&amp;#160;&amp;#160;&amp;#160; CLEAR edimsgt.&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE * FROM edimsgt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE mestyp = t_tbdme-mestyp AND langua = sy-langu.&amp;#160;&amp;#160;&amp;#160; MOVE edimsgt-descrp TO values.&amp;#160;&amp;#160;&amp;#160; APPEND values.&amp;#160; ENDLOOP.&amp;#160; CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select_value = mestyp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fields&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = t_help_value&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; valuetab&amp;#160;&amp;#160;&amp;#160;&amp;#160; = values.ENDFORM.*&amp;amp;---------------------------------------------------------------------**&amp;amp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form&amp;#160; UPDATE_CHANGE_POINTER_RECORDS*&amp;amp;---------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOTE: Overwriting of the fieldname that actually was changed*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; with 'ALELISTING' ensures that the full master data are*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sent.*----------------------------------------------------------------------**&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;UD_MESTYP&amp;#160; Message Type*----------------------------------------------------------------------*FORM update_change_pointer_records&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value(ud_mestyp) TYPE edi_mestyp.* define local data&amp;#160; CONSTANTS:&amp;#160;&amp;#160;&amp;#160; lc_fld_alelisting&amp;#160; TYPE fieldname&amp;#160; VALUE 'ALELISTING'.&amp;#160; DATA:&amp;#160;&amp;#160;&amp;#160; lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE STANDARD TABLE OF bdcpv,&amp;#160;&amp;#160;&amp;#160; ls_bdcp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE bdcp,&amp;#160;&amp;#160;&amp;#160; lt_bdcp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE STANDARD TABLE OF bdcp.*&amp;#160;&amp;#160; Select all not yet processed change pointers&amp;#160; SELECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * FROM&amp;#160; bdcpv INTO TABLE lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE&amp;#160; mestype&amp;#160; = ud_mestyp&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND&amp;#160;&amp;#160;&amp;#160; process&amp;#160; NE 'X'.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; SELECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * FROM&amp;#160; bdcp INTO TABLE lt_bdcp&amp;#160;&amp;#160;&amp;#160; FOR ALL ENTRIES IN lt_bdcpv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE&amp;#160; cpident&amp;#160; = lt_bdcpv-cpident.&amp;#160; CHECK ( syst-subrc = 0 ).&amp;#160; CLEAR: ls_bdcp.&amp;#160; ls_bdcp-fldname = lc_fld_alelisting.&amp;#160; MODIFY lt_bdcp FROM ls_bdcp&amp;#160;&amp;#160;&amp;#160; TRANSPORTING fldname&amp;#160;&amp;#160;&amp;#160; WHERE ( fldname NE lc_fld_alelisting ).&amp;#160; UPDATE bdcp FROM TABLE lt_bdcp.&amp;#160; COMMIT WORK AND WAIT.ENDFORM.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; " UPDATE_CHANGE_POINTER_RECORDS&lt;/textarea&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:bf29bb2b-4b16-41d0-8ab8-1bc1a2c1f1e2] --&gt;</description>
      <pubDate>Thu, 06 Aug 2009 21:46:14 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/08/06/distribution-of-full-master-data-objects-from-change-pointers--revisited</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-08-06T21:46:14Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>6</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/distribution-of-full-master-data-objects-from-change-pointers--revisited</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=50484</wfw:commentRss>
    </item>
    <item>
      <title>Facilitating EDI Mapping by Pre-Transformation of IDocs on SAP-XI</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/06/25/facilitating-edi-mapping-by-pre-transformation-of-idocs-on-sap-xi</link>
      <description>&lt;!-- [DocumentBodyStart:b6241964-0c48-4ed1-bdfa-d0a1695e7c19] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;span&gt;*Introduction*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Currently more and more Lindt companies are on their way to integrate more tightly with their customers and suppliers by means of *EDI *(= Electronic Data Interchange).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;EDI Ordering is the process where the customer sends its purchase orders e.g. as EDIFACT ORDERS messages. With respect to EDI Ordering we can distinguish between:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span&gt;*Static *EDI Ordering: the customer does not get any response about the reception of the EDI order but only a &lt;/span&gt;&lt;em&gt;functional acknowledgement&lt;/em&gt;&lt;span&gt; from the receiving EDI system (in our system landscape we use &lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.dip.co.uk/Products2/OdexEnterprise.aspx"&gt;ODEX Enterprise &lt;/a&gt;&lt;span&gt;) &lt;/span&gt;&lt;ul class="noindent"&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;*Dynamic *EDI Ordering: the customer does not only require to receive a *CONTRL *message as immediate response but, in addition, an *ORDRSP* message that must be sent within a defined time frame after having received the ORDERS message.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;span&gt;The *CONTRL *message is an &lt;/span&gt;&lt;!--[CodeBlockStart:d8b88d94-9ea7-415a-9100-79d5fd8baf2c]--&gt;&lt;span&gt;&lt;a class="jive-link-external-small" href="http://www.123edi.com/contrl-edifact.asp"&gt;Acknowlegement/Rejection Advice Message&lt;/a&gt;&lt;/span&gt;&lt;!--[CodeBlockEnd:d8b88d94-9ea7-415a-9100-79d5fd8baf2c]--&gt;&lt;span&gt;:&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;em&gt;"Based on the United Nations Electronic Data Interchange for Administration,&amp;lt;br /&amp;gt;Commerce and Transport (UN/EDIFACT) format, CONTRL is a message that&amp;lt;br /&amp;gt;syntactically acknowledges or rejects an interchange.&amp;lt;br /&amp;gt;Within the interchange it might also be used to notify the trading partners&amp;lt;br /&amp;gt;of an acknowledgement or rejection of any of its functional groups or messages.&amp;lt;br /&amp;gt;Explanations for the rejection are also clarified and communicated within the message."&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;span&gt;The *ORDRSP *message is a &lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.edifactory.de/msginfo.php?s=D01A&amp;amp;m=ORDRSP"&gt;Purchase order response message &lt;/a&gt;&lt;span&gt;:&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;span&gt; &lt;/span&gt;&lt;em&gt;"A message from the seller to the buyer,&amp;lt;br /&amp;gt;responding to a purchase order message or a purchase order change request message."&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;span&gt;Whereas the CONTRL message is still an acknowledgement on the &lt;/span&gt;&lt;em&gt;functional&lt;/em&gt;&lt;span&gt; (syntactical) level the ORDRSP message is a full-blown +business +response.&amp;#160; &lt;/span&gt;&lt;span&gt;At the beginning of the stylesheet I defined variables for the Message Function and the Response Type (see &lt;/span&gt;&lt;a class="jive-link-anchor-small" href="#BusinessRules"&gt;Business Rules section &lt;/a&gt;&lt;span&gt; above).&lt;/span&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt;Obviously it would have been possible to do the entire XSLT transformation ORDRSP IDoc -&amp;gt; ORDRSP EDIFACT within a single stylesheet. However, splitting the transformation into a pre-processing of the XML-IDoc and a main processing (XML-IDoc -&amp;gt; XML-EDI) clearly reduced the complexity of the stylesheet. In addition, the stylesheets are easier to read and understand which facilitates maintenance in case of new or changed business rules (or modified IDoc contents) in the future.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;span&gt;*Conclusion &lt;/span&gt;&lt;strong&gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;One of the fundamental principles of Systems Engineering is to split a large project into smaller ones in order to reduce complexity and increase manageability. The same principle can be applied to complex XSLT transformations required for EDI.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;#160;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;#160;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;/strong&gt;&lt;span&gt;Further Readings*&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt;For more details about the EDIFACT message types you may refer to:&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:e21ba060-9605-4a1b-bbf8-c6d83f13555c]--&gt;&lt;span&gt;&lt;a class="jive-link-external-small" href="http://www.unece.org/cefact/cf_plenary/ge_1/1997/mar_97/r1244.pdf"&gt;Syntax and service report message for batch EDI (message type-CONTRL)&lt;/a&gt;&lt;/span&gt;&lt;!--[CodeBlockEnd:e21ba060-9605-4a1b-bbf8-c6d83f13555c]--&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;[UN/EDIFACT ORDRSP | &lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.unece.org/trade/untdid/d01b/trmd/ordrsp_c.htm"&gt;http://www.unece.org/trade/untdid/d01b/trmd/ordrsp_c.htm&lt;/a&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;[Edifactory: ORDRSP | &lt;/span&gt;&lt;a class="jive-link-external-small" href="http://www.edifactory.de/msginfo.php?s=D01A&amp;amp;m=ORDRSP"&gt;http://www.edifactory.de/msginfo.php?s=D01A&amp;amp;m=ORDRSP&lt;/a&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:b6241964-0c48-4ed1-bdfa-d0a1695e7c19] --&gt;</description>
      <pubDate>Thu, 25 Jun 2009 20:40:53 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/06/25/facilitating-edi-mapping-by-pre-transformation-of-idocs-on-sap-xi</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-06-25T20:40:53Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/facilitating-edi-mapping-by-pre-transformation-of-idocs-on-sap-xi</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=50085</wfw:commentRss>
    </item>
    <item>
      <title>Dangerous Liaisons in User-Exits - Revisited</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/06/16/dangerous-liaisons-in-user-exits--revisited</link>
      <description>&lt;!-- [DocumentBodyStart:51283fca-38bf-43f7-8554-0649d304f2ae] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It seems that my first blog about organizing Function Module-Exits (CMOD / SMOD) touched a sore point looking at the lively discussion that followed after its publication. Whereas I suggest to organize the exits in independent function groups others proposed to use BAdI like technologies (e.g. &lt;a class="jive-link-external-small" href="http://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/d0456c54-0901-0010-f0b3-cd765fb99702"&gt;Implementing a BAdI in an enhancement Project (CMOD)&lt;/a&gt;). My major objections against this proposal are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Using interfaces does not really increase transparency in case of the Multiple-Use exits&lt;/li&gt;&lt;li&gt;We should not mix two different kinds of Exit-technologies&amp;#160; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The latter point does not imply that we should refrain from using ABAP-OO within Function Module-Exits as you will see below. &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lindt UK: EDI vs. Retail Orders&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Customers of Lindt UK sending their purchase orders via EDI are obliged to order our delicious chocolate products in so-called &lt;em&gt;cases &lt;/em&gt;(= traded units, e.g. a box of chocolate bars) instead of consumer units (e.g. a single chocolate bar).&lt;/p&gt;&lt;p&gt;Example: 1 Case = 20 Consumer Units, i.e. a box of chocolate bar contains 20 bars.&lt;/p&gt;&lt;p&gt;If nevertheless a customer orders in consumer units the ordered quantity is calculated in cases within a user-exit (using fm MATERIAL_UNIT_CONVERSION).&lt;/p&gt;&lt;p&gt;Recently Lindt UK opened up a couple of LindtShops where the products are sold in consumer units. The shop sales are sent via EDI to the R/3 system where it creates (Retail) sales orders containing the quantities in &lt;em&gt;consumer units&lt;/em&gt;. EDI orders and Retail orders can be distinguished based on the order type (AUART).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Below you see the package &lt;strong&gt;ZCMOD &lt;/strong&gt;in the R/3 system of Lindt UK. Already at a glance we see that&lt;/p&gt;&lt;ul&gt;&lt;li&gt;a User-Exit has been implemented for SD-EDI&lt;/li&gt;&lt;li&gt;two different requirements have been implemented (EDI vs. Retail)&amp;#160; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59714/005_01_UK_package_zcmod_hierarchy.jpg"&gt;&lt;img align="middle" alt="Lindt UK: Package ZCMOD" border="0" height="272" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59714/590-272/005_01_UK_package_zcmod_hierarchy.jpg" width="590"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The implementation of this User-Exit is simple and straightforward:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The &lt;em&gt;Frame &lt;/em&gt;User-Exit &lt;strong&gt;ZEXIT_SAPLVEDA_011&lt;/strong&gt; is called within include ZXVEDU13 (not shown)&lt;/li&gt;&lt;li&gt;If the order type belongs to Retail we call fm &lt;strong&gt;ZEXIT_SAPLVEDA_011_RETAIL&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;ELSE we call fm &lt;strong&gt;ZEXIT_SAPLVEDA_011_EDI&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59715/005_02_UK_fm_zexit_saplveda_011.jpg"&gt;&lt;img align="middle" alt="User-Exit ZEXIT_SAPLVEDA_011" border="0" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59715/266-400/005_02_UK_fm_zexit_saplveda_011.jpg" width="266"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;p&gt;A few months after implementing this User-Exit Lindt UK came up with a new Retail order type. A quick look at the TOP-include of the User-Exit function group revealed that I just had to add a single line of coding in order to take this new Retail order type into account. &lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59716/005_03_UK_include_lzxvedtop.jpg"&gt;&lt;img align="middle" alt="TOP-include of User-Exit Function Group" height="397" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59716/504-397/005_03_UK_include_lzxvedtop.jpg" width="504"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lindt Italy (IT): Default vs. EDI Invoices&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Lindt IT sends its outbound invoices to two destinations:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;3rd party sales system&lt;/li&gt;&lt;li&gt;EDI customers (as EDIFACT messages)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Below you see the package ZCMOD in the R/3 system of Lindt IT. Already at a glance we see that&lt;/p&gt;&lt;ul&gt;&lt;li&gt;a User-Exit has been implemented for Billing Document Output&lt;/li&gt;&lt;li&gt;two different requirements have been implemented (Default vs. EDI)&amp;#160; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59717/005_04_IT_Package_ZCMOD_hierarchy.png"&gt;&lt;img align="middle" alt="Lindt IT: Package ZCMOD" height="258" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59717/564-258/005_04_IT_Package_ZCMOD_hierarchy.png" width="564"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;All outbound INVOIC IDocs are enhanced by default, irrespective of their destination.&lt;/p&gt;&lt;p&gt;Again, the implementation of this User-Exit is simple and straightforward:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Frame User-Exit &lt;strong&gt;ZEXIT_SAPLVEDF_002&lt;/strong&gt; is called within include ZXEDFU02 (not shown)&lt;/li&gt;&lt;li&gt;All outbound invoices pass fm &lt;strong&gt;ZEXIT_SAPLVEDF_002_DEFAULT&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;In addition, invoices for EDI customers pass fm &lt;strong&gt;ZEXIT_SAPLVEDF_002_EDI&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59718/005_05_it_fm_zexit_saplvedf_002.jpg"&gt;&lt;img align="top" alt="User-Exit ZEXIT_SAPLVEDF_002" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59718/338-400/005_05_it_fm_zexit_saplvedf_002.jpg" width="338"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Outbound invoices for EDI customers are well defined by their output attributes. The User-Exit service class &lt;strong&gt;ZCL_EXIT_SAPLVEDF_002_SERVICES&lt;/strong&gt; (nomen est omen!) provides two methods:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ADD_CONSUMER_UNITS_PER_TU&lt;/strong&gt;: The base unit of the sold products is cases (= traded units). The ratio Traded Unit : Consumer Units (CU) is missing in the standard INVOIC02 Idoc yet required by the EDI customers.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ADD_CONSUMER_UNITS_EAN&lt;/strong&gt;: The base unit of the sold products is cases (= traded units) and, therefore, the TU-EAN (European Article Number) appears in the INVOIC02 IDoc. However, the EDI customers require to receive the CU-EAN as well&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These two methods are called within User-Exit ZEXIT_SAPLVEDF_002_EDI. Mapping of these enhanced INVOIC02 IDocs to EDIFACT D.96A INVOIC messages happens on SAP-XI where the additional data show up in the LIN, PIA and PRI segments. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59719/005_06_it_fm_zexit_saplvedf_002_edi.jpg"&gt;&lt;img align="top" alt="User-Exit ZEXIT_SAPLVEDF_002_EDI" height="378" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59719/584-378/005_06_it_fm_zexit_saplvedf_002_edi.jpg" width="584"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lindt Poland (PL): EDI Invoicing without &amp;#946;-&lt;em&gt;blockers&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Lindt PL is about to catch up with other Lindt companies in terms of EDI trading. Namely, they want to start EDI invoicing with several customers.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Below you see the package ZCMOD in the R/3 system of Lindt PL. Already at a glance we see that&lt;/p&gt;&lt;ul&gt;&lt;li&gt;many more User-Exits are implemented on this system&lt;/li&gt;&lt;li&gt;the same User-Exits are used by different Lindt companies (Switzerland, Spain, Poland, and - not yet implemented - Sweden) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59720/005_07_PL_Package_ZCMOD_hierarchy.png"&gt;&lt;img align="middle" alt="Lindt PL: Package ZCMOD" height="383" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59720/614-383/005_07_PL_Package_ZCMOD_hierarchy.png" width="614"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;And here is the implementation of this &lt;em&gt;Multiple-Use&lt;/em&gt; User-Exit:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Frame User-Exit &lt;strong&gt;ZEXIT_SAPLVEDF_002&lt;/strong&gt; is called within include ZXEDFU02 (not shown)&lt;/li&gt;&lt;li&gt;Depending on the client the company-specifc User-Exit is called (e.g. ZEXIT_SAPLVEDF_002_ES for Spain and &lt;strong&gt;ZEXIT_SAPLVEDF_002_PL&lt;/strong&gt; for Poland) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-49977-59721/005_08_pl_fm_zexit_saplvedf_002.jpg"&gt;&lt;img align="middle" alt="User-Exit ZEXIT_SAPLVEDF_002" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-49977-59721/410-400/005_08_pl_fm_zexit_saplvedf_002.jpg" width="410"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The implementation of the EDI requirements in User-Exit ZEXIT_SAPLVEDF_002_PL is done by an external consultant mandated by Lindt PL. The User-Exit Framework ensures &lt;em&gt;structural independence&lt;/em&gt; among the different Lindt companies on the same R/3 system. Despite the fact that external consultants are currently working on a business-critical User-Exit in our R/3 system I can sleep well without the need for any &amp;#946;-&lt;em&gt;blockers&lt;/em&gt; (see my previous &lt;a class="jive-link-blog-small" data-containerId="11242" data-containerType="37" data-objectId="47979" data-objectType="38" href="http://scn.sap.com/people/uwe.schieferstein/blog/2008/11/11/dangerous-liaisons-in-user-exits-and-how-to-avoid-them"&gt;Dangerous Liaisons in User-Exits and How to Avoid Them&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lindt Australia (AU): ToBeDone...&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Lindt AU does not yet use any User-Exits (or to be more precise: I have not yet done the refactoring of existing User-Exits). However, you need little imagination to guess&lt;/p&gt;&lt;ul&gt;&lt;li&gt; what package you will find on the R/3 system of Lindt AU,&lt;/li&gt;&lt;li&gt;the naming convention of the User-Exits and&lt;/li&gt;&lt;li&gt;how they will be organized &amp;#160; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In this Weblog I have presented you the current benefits of the &lt;em&gt;User-Exit Framework&lt;/em&gt; we are reaping among the Lindt companies. These benefits include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;High transparency of implemented User-Exits&lt;/li&gt;&lt;li&gt;High transparency of implemented requirements&lt;/li&gt;&lt;li&gt;Reusability of implementations due to recurring requirements among different Lindt companies&lt;/li&gt;&lt;li&gt;Structural independent implementation (resulting in a significant drop of sleepless nights...) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The User-Exit Framework consists of "old" technology (function groups and modules). However, this technology is highly sufficient for the structural organization of different requirements and Multiple-Use implementations of User-Exits. Yet as soon as the structural purpose is served I prefer to switch to ABAP-OO means, i.e. to implement the required services within methods.&amp;#160; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In the long-term my User-Exit Framework, based on function groups, is likely to be superseded by the Enhancement Framework. However, what remains is that a smart organization of Exits / Enhancements is a prerequisite for high transparency and reusability. Both factors will speed up your implementations and eventually will reduce the development costs. &lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:51283fca-38bf-43f7-8554-0649d304f2ae] --&gt;</description>
      <pubDate>Mon, 15 Jun 2009 22:31:56 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/06/16/dangerous-liaisons-in-user-exits--revisited</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-06-15T22:31:56Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>2</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/dangerous-liaisons-in-user-exits--revisited</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=49977</wfw:commentRss>
    </item>
    <item>
      <title>Multi-Purpose ALV List Programming</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2009/01/07/multi-purpose-alv-list-programming</link>
      <description>&lt;!-- [DocumentBodyStart:d2256529-6acf-4675-ad40-7eef540f2c64] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;span&gt;*Introduction* Approved change requests (CR) initiate the creation of transport requests within our SAP systems. Each change request has a unique identifying number. In order to link change requests and transport requests we have defined a mandatory transport attribute Z_CR where the users have to maintain the change request number. Using the expanded selection screen of transaction SE03 (Option +Find Requests+) we can search for attribute Z_CR and change request numbers. &amp;#160; The internal control system at Lindt (LICS) demands that a request must not be imported into the productive system by the owner of the request. Admittedly this is not the most sophisticated transport control yet in the context of Lindt (size and complexity of the SAP system landscape) it makes sense - and it works efficiently.&amp;#160; In SAP terminology the importing user is the so-called *Admin *user. But where can we find the Admin user? Neither the +standard +list nor the +detailed +list of the import queue (transaction STMS) reveals the Admin user. &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&amp;#160;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57373/004_STMS_list_normal.jpg"&gt;&lt;img alt="Import Queue (STMS): Standard list" height="235" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57373/640-235/004_STMS_list_normal.jpg" width="640"/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57374/004_STMS_list_expanded.jpg"&gt;&lt;img alt="Import Queue (STMS): Detailed list" height="234" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57374/640-234/004_STMS_list_expanded.jpg" width="640"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;*Exploiting the SAP Standard* Looking under the hood of transaction STMS you will find that the function module behind the import history is *TMS_TM_IMPORT_HISTORY* (alternative: TMS_TU_IMPORT_HISTORY). Having the main functionality at our disposal we just need an appropriate selection screen and then build the ALV list around the collected data. Regarding the selection screen we can resort back to another SAP standard function module: *TRINT_SELECT_REQUESTS* This function module offers us the same selection screen like we have for transaction SE03 (Option +Find Requests+ =&amp;gt; report RSWBOSDR) and this is exactly what we want. The user who is already familiar with this standard function can use the same selection screen yet gets a different output (see below). &lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57375/004_ZSE03_expanded_selscreen.jpg"&gt;&lt;img alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57375/319-400/004_ZSE03_expanded_selscreen.jpg" width="319"/&gt;&lt;/a&gt; &amp;#160; *Utility Class ZCL_REQUEST* Instead of using the standard function modules directly I created the utility class ZCL_REQUEST in order to collect all required data of a selected transport request. Within the CLASS_CONSTRUCTOR of this class I determine the transport configuration using function module *TMS_CI_READ_DOMAINCONFIG*. Here I have made the following assumption (which is correct in case of our system landscape but may be wrong in a different environment): 0.1. The first system of the configuration list is the development system (DEV) 0.2. The last system of the configuration list is the productive system (PRD) &amp;#160; At Lindt we have 3-systems landscapes (DEV -&amp;gt; TST -&amp;gt; PRD). Thus, for each selected transport request we will generate three rows in the ALV list, one for each system (DEV, TST, PRD). The data for the ALV list are built from three different sources: * Transport History (fm TMS_TM_IMPORT_HISTORY) * Transport Log (fm TR_READ_GLOBAL_INFO_OF_REQUEST)&amp;#160; &amp;#160; *The Art of ALV Programming* The three different data sources are reflected by different column colours on the ALV list: 1. Transport Request: light and dark blue 2. Transport History: yellow 3. Transport Log: green In addition, I added three status columns: 0.1. +Status=RC+: LED showing the last return code (0=green, 4=yellow, ELSE=red)0.1. +Status:Admin+: Admin=Owner =&amp;gt; EQUAL icon; Admin&amp;lt;&amp;gt;Owner =&amp;gt; NOT EQUAL icon0.1. +S=Attribut+: Attribute Z_CR maintained =&amp;gt; ATTRIBUTE icon; ELSE empty In case of Admin=Owner the status icon depends on the target system: 0.1. DEV, TST: normal EQUAL icon because here the owner is allowed to release or import his or her request 0.2. PRD: _red_ EQUAL icon because here the owner violated the internal control rules &amp;#160; &lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57376/004_ZSE03_alvlist_1.jpg"&gt;&lt;img alt="" height="340" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57376/640-340/004_ZSE03_alvlist_1.jpg" width="640"/&gt;&lt;/a&gt; Sorting of the list: 1. Request number 2. Counter for systems (1=DEV; 2=TST; 3=PRD) &amp;#160; NOTE: A MUST read for all ALV programmers is the excellent tutorial {code:html}&lt;a class="jive-link-external-small" href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a415907"&gt;An Easy Reference For ALV Grid Control&lt;/a&gt;{code} &amp;#160; *The Power of ALV Lists* The initial purpose of this report was to reveal violations of the internal control rule that the owner must not import his transport request himself into the productive system. All we have to do is to define a new +layout +with the following filtering options: 0.1. Status:Admin = red EQUAL icon 0.2. Target System = LP0 (productive system) (optional)&amp;#160; And here we have the "bad guys" caught in the act: the SAP user USCHIEFERST imported his own requests into the productive system! &lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57377/004_ZSE03_alvlist_2_lics.jpg"&gt;&lt;img alt="" height="160" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57377/640-160/004_ZSE03_alvlist_2_lics.jpg" width="640"/&gt;&lt;/a&gt; &amp;#160; &amp;#160; *Single ALV List - Multiple Purposes * Going back to the full ALV list you will notice the following: the *Admin *user is empty&lt;/p&gt;&lt;ul&gt;&lt;li&gt;when the request is not yet released on DEV (pseudo-RC = NREL)&lt;/li&gt;&lt;li&gt;when the request is not yet imported into TST or PRD (pseudo-RC = NIMP)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;A request which is released but not yet imported into the PRD system may cause a problem after a system-copy (PRD -&amp;gt; TST) because these changes are lost and need to be re-imported into TST. Thus, we define a new +layout +with the following filtering options:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Status:Admin = TRANSPORT icon&lt;/li&gt;&lt;li&gt;Target System = LP0 (productive system)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;And now the ALV displays a list of transport requests that we should import prior to the next system-copy.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-48554-57378/004_ZSE03_alvlist_3_syscopy.jpg"&gt;&lt;img alt="" height="136" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-48554-57378/640-136/004_ZSE03_alvlist_3_syscopy.jpg" width="640"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:d2256529-6acf-4675-ad40-7eef540f2c64] --&gt;</description>
      <pubDate>Wed, 07 Jan 2009 06:44:12 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2009/01/07/multi-purpose-alv-list-programming</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2009-01-07T06:44:12Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>3</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/multi-purpose-alv-list-programming</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=48554</wfw:commentRss>
    </item>
    <item>
      <title>A Christmas Collection of Useful Classes</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2008/12/11/a-christmas-collection-of-useful-classes</link>
      <description>&lt;!-- [DocumentBodyStart:70ad91d4-a552-4aed-8364-00d14945139c] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CL_RECA_MESSAGE_LIST&lt;/span&gt; - &lt;em&gt;The ultimate message handler&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This class (interface IF_RECA_MESSAGE_LIST) is the ultimate message handler (collector) in ABAP at least for me.&lt;/p&gt;&lt;p&gt;About two years ago I used this class very successfully in a data migration project (purchase orders including entire history; total volume ca. 800 Mio. CHF; &lt;a class="jive-link-external-small" href="https://wiki.sdn.sap.com/wiki/display/profile/2007/07/09/Message+Handling+-+Finding+the+Needle+in+the+Haystack"&gt;Message Handling - Finding the Needle in the Haystack&lt;/a&gt;). I created a custom validation class and used CL_RECA_MESSAGE_LIST to collect and display the error messages in a tree view. Initially we started with about 150 thousands(!) error messages in the tree (no joke. Approx. 30% of the messages were overhead due to the hierarchical structuring of the messages. And we had a multiplication of errors, e.g. 5000 purchase orders had 4 vendos assigned in the history all of which contained some error =&amp;gt; 5000 x 4 = 20'000 error messages). &lt;/p&gt;&lt;p&gt;Surprisingly, the tree display had no problems with this huge numbers of nodes. The message handler helped us tremendously to find out the errors in the migration data. Within a single day we were able to reduce the number or error messages from 150'000 (morning) to about 12'000 (lunch time) to about 500 (tea-time).&lt;/p&gt;&lt;p&gt;Do not miss to check out the sample reports in package &lt;strong&gt;SZAL&lt;/strong&gt;, e.g. &lt;strong&gt;SBAL_DEMO_04_DETLEVEL&lt;/strong&gt;.&amp;#160; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;CL_RECA_GUI_SERVICES&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Still using function module TH_CREATE_MODE to open a transaction within a new GUI mode? If you have this class available on your SAP system then have a look at its static method &lt;strong&gt;CALL_TRANSACTION&lt;/strong&gt;. Using parameter IF_NEW_EXTERNAL_MODE you can decide whether you want to open a new window or not. &lt;/p&gt;&lt;p&gt;I have not yet used any of the other available methods yet they may be useful as well:&lt;/p&gt;&lt;table align="left" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;GET_GUI_FUNC_OF_GUI_STATUS &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Gets All Functions of a GUI Status&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;GET_ICON_FOR_BUSOBJ&lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Gets Icon with Quick Info for Business Object &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;GET_QUICKINFO_FOR_ICON &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Gets the Quick Info for an Icon &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;MSGLIST_RAISE_AND_FREE &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Exception of Message List with FREE &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;CL_RECA_DATE&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I believe all of us have already encounter the problem to check whether two periods overlap or not. Two periods are overlapping if the beginning or the end of one period lies with the other period or if one period lies completely within the other period. In case of overlapping periods the static method &lt;strong&gt;CHECK_INTERSECTION&lt;/strong&gt; will raise exception &lt;strong&gt;PERIODS_HAVE_INTERSECTION&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CL_RECA_GUID&lt;/span&gt; - &lt;em&gt;Making object identifiers unique&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you need to get a unique identifier for your objects then get your GUID using the static method &lt;strong&gt;GET_NEW_GUID&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;There are many more interesting classes in package &lt;strong&gt;RE_CA_BC&lt;/strong&gt; e.g. like &lt;strong&gt;CL_RECA_COMM_SERVICES&lt;/strong&gt; (Sending E-Mail) or &lt;strong&gt;CL_RECA_STRING_SERVICES&lt;/strong&gt; (String: Utilities) which may be worth being investigated.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong style="text-decoration: underline;"&gt;CL_REEXC_COMPANY_CODE &amp;amp; CL_REEXC_CONTROLLING_AREA&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you need data related to company codes (BUKRS) and controlling Areas (KOKRS) these two classes provide many useful methods.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CL_PT_EMPLOYEE&lt;/span&gt; - &lt;em&gt;The Infotype Broker &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You require access to all kinds of PAnnnn infotype data? Use this class (interface IF_PT_EMPLOYEE). It is as simply as that (&lt;a class="jive-link-external-small" href="https://wiki.sdn.sap.com/wiki/display/Snippets/Unified+Access+to+All+HR+Infotypes"&gt;Unified Access to All HR Infotypes&lt;/a&gt;). &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;CL_ABAP_CONTAINER_UTILITES&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; - &lt;em&gt;Being Unicode-Compatible&lt;/em&gt;&lt;/strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you need to shuffle data between structured and unstructured variables and you do not want to run into any problems on Unicode systems then this is the right class to use.&lt;/p&gt;&lt;table align="left" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;FILL_CONTAINER_C &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Fill Container of Type C or STRING with Content&lt;/td&gt;&lt;td style="border:0px solid black;"&gt;structured -&amp;gt; unstructured &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:0px solid black;"&gt;READ_CONTAINER_C &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;Read Container of Type C or STRING &lt;/td&gt;&lt;td style="border:0px solid black;"&gt;unstructured -&amp;gt; structured &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2015" data-containerType="14" data-objectId="430673" data-objectType="1" href="http://scn.sap.com/thread/430673"&gt;unicode -program giving dump&lt;/a&gt;&lt;a class="jive-link-thread-small" data-containerId="2015" data-containerType="14" data-objectId="430673" data-objectType="1" href="http://scn.sap.com/thread/430673"&gt;unicode -program giving dump&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-thread-small" data-containerId="2015" data-containerType="14" data-objectId="353618" data-objectType="1" href="http://scn.sap.com/thread/353618"&gt;Unicode - Transfer structure with packed fields (type p, x) into c-field&lt;/a&gt;&lt;a class="jive-link-thread-small" data-containerId="2015" data-containerType="14" data-objectId="353618" data-objectType="1" href="http://scn.sap.com/thread/353618"&gt;Unicode - Transfer structure with packed fields (type p, x) into c-field&lt;/a&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CL_GUI_CFW&lt;/span&gt; - &lt;em&gt;Mastering Control Event Handling&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Controls (like ALV grid, ALV tree, etc.) are very powerful and user-friendly development tools which should be used whenever appropriate.&lt;/p&gt;&lt;p&gt;However, there are stumbling blocks when working with controls which can be circumvented if you keep a few basic principles in mind:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Refreshing or Updating the control occurs automatically when passing PBO&lt;/li&gt;&lt;li&gt;Control events usually do NOT trigger PAI (and therefore there is no succeeding PBO - see (1.)).&lt;/li&gt;&lt;li&gt;Control events can be handled as system events (done by the control framework) or application events. &lt;/li&gt;&lt;li&gt;Using controls we have a frontend (= control) and a backend (e.g. the itab used for data display in an ALV grid).&lt;/li&gt;&lt;li&gt;For editable controls the data displayed at the frontend can differ from the data in the backend. Special control-specific methods are required to ensure synchronization between frontend and backend.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;The effect of such a "sychronization" method is demonstrated in &lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1136016" data-objectType="1" href="http://scn.sap.com/thread/1136016"&gt;put X into checkbox of alv when button select all entries.&lt;/a&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1136016" data-objectType="1" href="http://scn.sap.com/thread/1136016"&gt;put X into checkbox of alv when button select all entries.&lt;/a&gt; (CHECK_DATA_CHANGED of CL_GUI_ALV_GRID) and &lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1161716" data-objectType="1" href="http://scn.sap.com/thread/1161716"&gt;ALV Tree not getting refreshed&lt;/a&gt; (UPDATE_CALCULATIONS and FRONTEND_UPDATE of CL_GUI_ALV_TREE).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;In almost all cases I use the control events as system events. Below you see what the &lt;a class="jive-link-external-small" href="http://help.sap.com/saphelp_sm32/helpdata/en/9b/d080b49fc111d2bd68080009b4534c/content.htm"&gt;SAP online documentation&lt;/a&gt; says: &lt;/p&gt;&lt;p&gt;You construct the tables using a special ABAP Objects Control Framework method (&lt;strong&gt;control-&amp;gt;set_registered_events&lt;/strong&gt;).&amp;#160; When you register the event, you must specify whether the event is to be processed as a &lt;strong&gt;system event&lt;/strong&gt; or as an &lt;strong&gt;application event&lt;/strong&gt;. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;System events&lt;/strong&gt;are is triggered before any automatic field checks (for example, required fields) have taken place on the screen, and before any field transport. The PAI and PBO events are not triggered. Consequently, you cannot access any values that the user has just changed on the screen. Furthermore, there is no field transport back to the screen after the event, so values that you have changed in the event handling are not updated on the screen. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The handler method that you defined for the event is called automatically by the system.&amp;#160; However, you can use the method &lt;a class="jive-link-external-small" href="http://help.sap.com/saphelp_sm32/helpdata/en/06/3fa1b79f2811d2bd68080009b4534c/content.htm"&gt;set_new_ok_code&lt;/a&gt;to set a new value for the OK_CODE field. This then triggers the PAI and PBO modules, and you can evaluate the contents of the OK_CODE field as normal in a PAI module. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Application events&lt;/strong&gt;are triggered automatically at the end of the PAI event. Consequently, all field checks and field transport has taken place. If you want the event handler method to be called at a particular point during PAI processing, you must trigger the event handler using the static method &lt;/li&gt;&lt;strong&gt;CL_GUI_CFW=&amp;gt;DISPATCH&lt;/strong&gt;. &lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Not using application events means no automatic field transport, no triggering of PAI (followed by PBO) and a potential discrepancy between frontend and backend.&lt;/p&gt;&lt;p&gt;So why I am still in favour of system events? &lt;em&gt;Because they give me the freedom of choice.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If the control event is just used to display additional data (e.g. double-click on user name in ALV list -&amp;gt; call transaction SU01 for this user) there is no additonal effort required and I explicitly do not want to trigger PAI.&lt;/p&gt;&lt;p&gt;However, if the control event is used to change data (&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1159431" data-objectType="1" href="http://scn.sap.com/thread/1159431"&gt;Hotspot-clicking (Insert function) plus ALV Sorting&lt;/a&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1159431" data-objectType="1" href="http://scn.sap.com/thread/1159431"&gt;Hotspot-clicking (Insert function) plus ALV Sorting&lt;/a&gt;) then I call method CL_GUI_CFW=&amp;gt;SET_NEW_OK_CODE to trigger PAI. Thus, the system event has become an application event. All required updating of the ABAP backend (i.e. itab) is done here at PAI (and not within the event handler method). The succeeding PBO takes care of refreshing/updating the control (automatic flushing). &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;SAP provides many valuable and powerful classes and it is worth spending some time to search and find them. And, of course, adopt them. &lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:70ad91d4-a552-4aed-8364-00d14945139c] --&gt;</description>
      <pubDate>Thu, 11 Dec 2008 01:06:23 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2008/12/11/a-christmas-collection-of-useful-classes</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2008-12-11T01:06:23Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>8</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/a-christmas-collection-of-useful-classes</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=48336</wfw:commentRss>
    </item>
    <item>
      <title>Dangerous Liaisons in User-Exits and How to Avoid Them</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2008/11/11/dangerous-liaisons-in-user-exits-and-how-to-avoid-them</link>
      <description>&lt;!-- [DocumentBodyStart:d0dad2da-9185-4ab0-8c88-1f6bb2305019] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;p&gt;&lt;em&gt;"The R/3 enhancement concept allows you to add your own functionality to SAP's standard business applications without having to modify the original applications."&lt;/em&gt; (&lt;a class="jive-link-external-small" href="http://help.sap.com/saphelp_45b/helpdata/en/c8/1975d943b111d1896f0000e8322d00/content.htm"&gt;Introduction to the Enhancement Concept&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;This blog is about a specific type of exit, namely Function Module Exits. Assuming that you are familiar with transactions CMOD and SMOD I will show you how User-Exits can be organized in order to achieve four major goals:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Easy Maintenance&lt;/li&gt;&lt;li&gt;High Transparency&lt;/li&gt;&lt;li&gt;Process-Independent Testing&lt;/li&gt;&lt;li&gt;Avoidance of Dangerous Liaisons&amp;#160;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;User-Exits are normally implemented &lt;em&gt;"On-Demand"&lt;/em&gt;. Having found out that a specific behaviour of a standard application cannot be realized by means of customizing the next step is to look for appropriate User-Exits. An enhancement project (CMOD) is created and the required enhancements assigned. Now it is time to create the implementation of the User-Exit which occurs in a ZX-include predefined by SAP.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47979-56454/EXIT_SAPLVEDA_002.jpg"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47979-56454/584-400/EXIT_SAPLVEDA_002.jpg" width="584"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;These ZX-includes have to be assigned to customer packages. Depending on who implements the ZX-includes and for which purposes they are implemented these User-Exit includes are likely to be scattered around many packages.&lt;/p&gt;&lt;p&gt;On one of our ERP systems the situation looks like this:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;98 implemented ZX-includes are assigned to 15 different packages&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47979-56455/TADIR_zx_includes.jpg"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47979-56455/283-400/TADIR_zx_includes.jpg" width="283"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The ZX-includes of User-Exit XLTO (User Exits for TO Processing) have been assigned to four(!) different packages demonstrating the historical evolution of this User-Exit.&lt;/p&gt;&lt;p&gt;Considering the fact that these User-Exits are shared by three different companies residing on three different clients this is already a bad situation regarding maintenance and transparency of the User-Exits.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;From Bad to Worse&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Being responsible for SAP-XI &amp;amp; EDI support at our company I sooner or later had to modify existing User-Exits for Billing-Doc-Output (XEDF). However, I almost got a heart attack when I saw the implementation of include ZXEDFU02 (EXIT_SAPLVEDF_002) for the first time (see below).&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;textarea cols="80" rows="20"&gt;*----------------------------------------------------------------------** INCLUDE ZXEDFU02 **----------------------------------------------------------------------*DATA: L_TABIX LIKE SY-TABIX,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; L_INDEX LIKE SY-INDEX.TABLES: VBAK. " JSC 080805L_TABIX = SY-TABIX.L_INDEX = SY-INDEX.*----------------------------------------------------------------------** INI MANDT = 200&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPAIN*----------------------------------------------------------------------*IF SY-MANDT = '200'. "Espa&amp;ntilde;a&amp;#160; DATA: LSP_LINES TYPE I,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD&amp;#160;&amp;#160; LIKE EDIDD,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2&amp;#160; LIKE EDIDD,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK02 LIKE E1EDK02,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK05 LIKE E1EDK05,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP05 LIKE E1EDP05,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26 LIKE E1EDP26,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDKA1 LIKE E1EDKA1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_Z1EDKA1 LIKE Z1EDKA1,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_NRART&amp;#160;&amp;#160; LIKE TPAR-NRART.* Inicio modificacion GGC 09/07/2004&amp;#160; DATA: L_CONT TYPE I,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; L_EANWE LIKE LSP_E1EDKA1-LIFNR.&amp;#160; DATA: BEGIN OF I_EAN OCCURS 0,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VBELN LIKE VBDKR-VBELN,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "N&amp;#186; factura&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PARVW LIKE EDPAR-PARVW,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "Funci&amp;#243;n interlocutor&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EAN&amp;#160;&amp;#160; LIKE EDPAR-EXPNR,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; END OF I_EAN.&amp;#160; DATA: BEGIN OF I_EAN2 OCCURS 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INCLUDE STRUCTURE I_EAN.&amp;#160; DATA: END OF I_EAN2.&amp;#160; DATA: L_ERDAT LIKE LIKP-ERDAT.* Final modificacion GGC 09/07/2004&amp;#160; DESCRIBE TABLE INT_EDIDD LINES LSP_LINES.&amp;#160; READ TABLE INT_EDIDD INTO LSP_EDIDD INDEX LSP_LINES.&amp;#160; IF CONTROL_RECORD_OUT-MESTYP = 'INVOIC'.******************************************************************&amp;#160;&amp;#160; Fecha de CABECERA*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDK02' AND INT_EDIDD-SDATA(3) = '012'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK02 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE ERDAT INTO L_ERDAT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM LIKP WHERE VBELN = LSP_E1EDK02-BELNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK02-DATUM = L_ERDAT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDK02.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160; ENDIF.******************************************************************&amp;#160;&amp;#160; Inicio a&amp;ntilde;adir Nivel de condiciones.&amp;#160; CABECERA*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDK05'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK05 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_Z1EDK05 LIKE Z1EDK05.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE ZAEHK INTO LSP_Z1EDK05-ZCONT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM T683S WHERE KVEWE = 'A'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KAPPL = 'V'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KALSM = 'ZECLI1'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KSCHL = LSP_E1EDK05-KSCHL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD-SEGNAM = 'Z1EDK05'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD-SDATA = LSP_Z1EDK05.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPEND LSP_EDIDD TO INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDK05'.******************************************************************&amp;#160;&amp;#160; Fin a&amp;ntilde;adir Nivel de condiciones.&amp;#160; CABECERA***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio a&amp;ntilde;adir Nivel de condiciones.&amp;#160; POSICIONES*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDP05'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP05 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_Z1EDP05 LIKE Z1EDP05.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE ZAEHK INTO LSP_Z1EDP05-ZCONT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM T683S WHERE KVEWE = 'A'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KAPPL = 'V'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KALSM = 'ZECLI1'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND KSCHL = LSP_E1EDP05-KSCHL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD-SEGNAM = 'Z1EDP05'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD-SDATA = LSP_Z1EDP05.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPEND LSP_EDIDD TO INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDP05'.******************************************************************&amp;#160;&amp;#160; Fin a&amp;ntilde;adir Nivel de condiciones.&amp;#160; POSICIONES***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio determinacion del EAN EDI*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDKA1'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDKA1 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE NRART INTO LSP_NRART FROM TPAR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE PARVW = LSP_E1EDKA1-PARVW.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_NRART = 'KU'.* Inicio modificacion GGC 09/07/2004*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Comprobamos si la funcion esta repetida&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR L_CONT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT EXPNR INTO LSP_E1EDKA1-LIFNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM EDPAR WHERE KUNNR = XVBDKR-KUNAG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND PARVW = LSP_E1EDKA1-PARVW&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND INPNR = LSP_E1EDKA1-PARTN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; L_CONT = L_CONT + 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF L_CONT &amp;gt; 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXIT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDSELECT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF L_CONT = 1.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Si no esta repetida la funcion&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX LSP_LINES.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Comprobamos si el documento que estamos tratando es el mismo que*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; el anterior&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORT I_EAN FROM MEMORY ID 'ZEANWE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; READ TABLE I_EAN INDEX 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF I_EAN-VBELN &amp;lt;&amp;gt; XVBDKR-VBELN.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Si no es el mismo borramos la tabla i_ean&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; REFRESH I_EAN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORT I_EAN TO MEMORY ID 'ZEANWE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR I_EAN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF L_CONT &amp;gt; 1.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Si la funcion esta repetida la a&amp;ntilde;adimos a i_ean&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_EAN-VBELN = XVBDKR-VBELN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_EAN-PARVW = LSP_E1EDKA1-PARVW.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPEND I_EAN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORT I_EAN TO MEMORY ID 'ZEANWE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Modificamos EAN de los documentos que tenga funcion repetida&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_E1EDKA1-PARVW = 'WE' AND NOT I_EAN[] IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD WHERE SEGNAM = 'E1EDKA1'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; READ TABLE I_EAN WITH KEY PARVW = INT_EDIDD-SDATA(2).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC = 0.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Modificamos ean con ean de WE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; L_EANWE = LSP_E1EDKA1-LIFNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDKA1 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDKA1-LIFNR = L_EANWE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; REFRESH I_EAN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR I_EAN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORT I_EAN TO MEMORY ID 'ZEANWE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.* Final modificacion GGC 09/07/2004&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF LSP_NRART = 'LI'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDKA1-PARTN = LSP_E1EDKA1-LIFNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE EXPNR INTO LSP_E1EDKA1-LIFNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM EDPAR WHERE KUNNR = XVBDKR-KUNAG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND PARVW = LSP_E1EDKA1-PARVW&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND INPNR = LSP_E1EDKA1-PARTN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC&amp;#160; = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX LSP_LINES.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDKA1'.******************************************************************&amp;#160;&amp;#160; Fin determinacion del EAN EDI***********************************************************************************************************************************&amp;#160;&amp;#160; Modificamos el Valor neto de posici&amp;#243;n.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; nnnn 19.07.04******************************************************************&amp;#160; -&amp;gt; Dejamos como esta lo que propone el sistema nnnn 18.01.06******************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDP26' AND INT_EDIDD-SDATA(3) = '003'.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26 = INT_EDIDD-SDATA.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT XIKOMV WHERE KPOSN = XTVBDPR-POSNR*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND ( KNTYP = '6' OR KNTYP = '7' ).*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26-BETRG = LSP_E1EDP26-BETRG - XIKOMV-KWERT.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDP26.*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX LSP_LINES.*&amp;#160;&amp;#160;&amp;#160; ENDIF.******************************************************************&amp;#160;&amp;#160; Fin Modificamos el Valor neto de posici&amp;#243;n.&amp;#160; nnnn 19.07.04***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio a&amp;ntilde;adimos el precio Neto tras el precio bruto*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDP05'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_TAR&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE VBRP-NETWR,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_NET&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE VBRP-NETWR,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MODIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP05 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_E1EDP05-KSCHL = 'ZTAR'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_TAR = LSP_E1EDP05-KRATE / LSP_E1EDP05-UPRBS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_MODIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD INTO LSP_EDIDD2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_EDIDD2-SEGNAM = 'E1EDP01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_EDIDD2-SDATA(6) = XTVBDPR-POSNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MODIF = 'X'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_MODIF = 'X'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_EDIDD2-SEGNAM = 'E1EDP26'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND LSP_EDIDD2-SDATA(3) = '001'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26 = LSP_EDIDD2-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26-BETRG = LSP_TAR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONDENSE LSP_E1EDP26-BETRG NO-GAPS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2-SDATA = LSP_E1EDP26.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD FROM LSP_EDIDD2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26-QUALF = '006'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26-BETRG = LSP_NET.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONDENSE LSP_E1EDP26-BETRG NO-GAPS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2-SDATA = LSP_E1EDP26.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INSERT LSP_EDIDD2 INTO INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_MODIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_EDIDD2-SEGNAM = 'E1EDP26'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND LSP_EDIDD2-SDATA(3) = '003'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP26 = LSP_EDIDD2-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_NET = LSP_E1EDP26-BETRG / XTVBDPR-FKLMG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDP05'.******************************************************************&amp;#160;&amp;#160; Fin a&amp;ntilde;adimos el precio Neto tras el precio bruto***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio a&amp;ntilde;adimos segmento NIF*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDKA1'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_EDIDD2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2-SEGNAM = 'Z1EDKA1'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR LSP_Z1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE NRART INTO LSP_NRART FROM TPAR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE PARVW = LSP_E1EDKA1-PARVW.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_NRART = 'KU'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE STCD1 STCEG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO (LSP_Z1EDKA1-STCD1,LSP_Z1EDKA1-STCEG)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM KNA1 WHERE KUNNR = LSP_E1EDKA1-PARTN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2-SDATA = LSP_Z1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPEND LSP_EDIDD2 TO INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSEIF LSP_NRART = 'LI'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE STCD1 STCEG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO (LSP_Z1EDKA1-STCD1,LSP_Z1EDKA1-STCEG)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM KNA1 WHERE LIFNR = LSP_E1EDKA1-PARTN.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_EDIDD2-SDATA = LSP_Z1EDKA1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPEND LSP_EDIDD2 TO INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDKA1'.******************************************************************&amp;#160;&amp;#160; Inicio a&amp;ntilde;adimos segmento NIF***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio cantidad en unidades*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDP01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_E1EDP01 LIKE E1EDP01,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MEINH&amp;#160; LIKE MARA-MEINS,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MEINS&amp;#160; LIKE MARA-MEINS,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MATNR&amp;#160; LIKE MARA-MATNR,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MENGE&amp;#160; LIKE EKPO-MENGE,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MENGE2 LIKE EKPO-MENGE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP01 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_E1EDP01-MENEE &amp;lt;&amp;gt; 'PCE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE MSEHI INTO LSP_MEINH&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM T006 WHERE ISOCODE = LSP_E1EDP01-MENEE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE MSEH3 INTO LSP_MEINS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FROM T006A WHERE SPRAS = SY-LANGU&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND MSEHI = LSP_MEINH.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MATNR = XTVBDPR-MATNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_MENGE = LSP_E1EDP01-MENGE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_MATNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = LSP_MATNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_IN_ME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = LSP_MEINH&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_OUT_ME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 'ST'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I_MENGE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = LSP_MENGE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; E_MENGE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = LSP_MENGE2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR_IN_APPLICATION = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC&amp;#160; = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP01-MENEE = 'PCE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDP01-MENGE = LSP_MENGE2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONDENSE LSP_E1EDP01-MENGE NO-GAPS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDP01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX LSP_LINES.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDP01'.******************************************************************&amp;#160;&amp;#160; Fin cantidad en unidades***********************************************************************************************************************************&amp;#160;&amp;#160; Inicio fecha de vencimiento*****************************************************************&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM = 'E1EDK18'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_E1EDK18 LIKE E1EDK18.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA: LSP_LONG TYPE I,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_CONT TYPE I,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_FECHA(8).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK18 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DO.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_E1EDK18-ZTERM_TXT IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXIT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF LSP_E1EDK18-ZTERM_TXT(1) CA '1234567890'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONCATENATE LSP_E1EDK18-ZTERM_TXT+6(4)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK18-ZTERM_TXT+3(2)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK18-ZTERM_TXT(2)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO LSP_FECHA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXIT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SHIFT LSP_E1EDK18-ZTERM_TXT LEFT.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDDO.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LSP_E1EDK18-ZTERM_TXT = LSP_FECHA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = LSP_E1EDK18.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX LSP_LINES.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF int_edidd-segnam = 'E1EDK18'.******************************************************************&amp;#160;&amp;#160; Fin fecha de vencimiento*****************************************************************&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF control_record_out-mestyp = 'INVOIC'ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "IF sy-mandt = '200'. "Espa&amp;ntilde;a*----------------------------------------------------------------------** FIN MANDT = 200&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPAIN*----------------------------------------------------------------------**----------------------------------------------------------------------** Start MANDT = 100&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Switzerland*----------------------------------------------------------------------*IF SY-MANDT = '100'.&amp;#160;&amp;#160;&amp;#160; "Switzerland*----------------------------------------------------------------------* Wenn der Summenrecord geschrieben wird, muss der WE von der Position* auf die Kopfeben geschrieben werden&amp;#160; DATA: %INT_EDIDD_ZW LIKE EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160; DATA: %E1EDK01&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160; DATA: %KUNNR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE KNA1-KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %STCEG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE KNA1-STCEG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %E1EDP19&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE E1EDP19.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %THEAD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE THEAD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %INLINES LIKE TLINE OCCURS 0 WITH HEADER LINE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %LINES&amp;#160;&amp;#160; LIKE TLINE OCCURS 0 WITH HEADER LINE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %TABIX LIKE SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %E1EDP26&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE E1EDP26.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160; IF INT_EDIDD-SEGNAM EQ 'E1EDS01' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA(3) EQ '010'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160;&amp;#160;&amp;#160; %INT_EDIDD_ZW = INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160;&amp;#160;&amp;#160; PERFORM WE_KOPF TABLES INT_EDIDD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160;&amp;#160;&amp;#160; INT_EDIDD = %INT_EDIDD_ZW.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160; IF INT_EDIDD-SEGNAM EQ 'E1EDP26' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA(3) EQ '003'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07*/&amp;#160; IF XTVBDPR-NETWR = '0.02' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07*/&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI1 GT '0.02' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07*/&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI3 EQ '0.00'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160; IF ( XTVBDPR-NETWR = '0.02' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI1 GT '0.02' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI3 EQ '0.00' ) or&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ( XTVBDPR-NETWR = '0.01' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI1 lt '0.03' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR-KZWI3 lt '0.03' ).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07* positionieren auf Positionsdaten&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; READ TABLE INT_EDIDD WITH&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; KEY SEGNAM = 'E1EDP01'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SDATA(6) = XTVBDPR-POSNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07* auf n&amp;auml;chtem Eintrag positionieren&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if sy-subrc eq 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;TABIX = SY-TABIX + 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07* lesen Positionssegment&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD FROM &amp;amp;TABIX&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07*/&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE SEGNAM EQ 'E1EDP26'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SDATA(3) EQ '003'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDP26 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07* Betrag auf Null setzen&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR &amp;amp;P_BETRG_T.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDP26-BETRG = &amp;amp;P_BETRG_T. "Num &amp;gt; Char&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONDENSE %E1EDP26-BETRG.&amp;#160;&amp;#160;&amp;#160;&amp;#160; "Num &amp;gt; Char&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDP26.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160; CLEAR: CH_AG_KUNNR, CH_RE_KUNNR, CH_WE_KUNNR, CH_RG_KUNNR.&amp;#160; CH_AG_KUNNR = XVBDKR-KUNAG.&amp;#160; CH_RE_KUNNR = XVBDKR-KUNRE.&amp;#160; CH_WE_KUNNR = XVBDKR-KUNWE.&amp;#160; CH_RG_KUNNR = XVBDKR-KUNRG.* Lesen Steuertabelle&amp;#160; SELECT SINGLE * FROM VBAK WHERE VBELN = XVBDKR-VBELN_VAUF.&amp;#160; REFRESH CH_DATALIST.&amp;#160; SELECT * FROM ZZEDIAUART&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO CORRESPONDING FIELDS OF TABLE CH_DATALIST&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE DATUV LE SY-DATUM AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATBI GE SY-DATUM AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; BELEGART = VBAK-AUART AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VKORG&amp;#160;&amp;#160;&amp;#160; = VBAK-VKORG AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ( AG_KUNNR = CH_AG_KUNNR OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RG_KUNNR = CH_RG_KUNNR OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RE_KUNNR = CH_RE_KUNNR OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WE_KUNNR = CH_WE_KUNNR ).&amp;#160; IF SY-SUBRC = 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA01&amp;#160;&amp;#160;&amp;#160; IF CH_AG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR CH_AG_KUNNRC.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE NOT AG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CH_AG_KUNNRC = CH_AG_KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE AG_KUNNR NE CH_AG_KUNNR AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOT&amp;#160; AG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; IF CH_RE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR CH_RE_KUNNRC.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE NOT RE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CH_RE_KUNNRC = CH_RE_KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE RE_KUNNR NE CH_RE_KUNNR AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOT&amp;#160; RE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; IF CH_WE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR CH_WE_KUNNRC.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE NOT WE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CH_WE_KUNNRC = CH_WE_KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE WE_KUNNR NE CH_WE_KUNNR AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOT&amp;#160; WE_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; IF CH_RG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR CH_RG_KUNNRC.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE NOT RG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CH_RG_KUNNRC = CH_RG_KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DELETE CH_DATALIST WHERE RG_KUNNR NE CH_RG_KUNNR AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOT&amp;#160; RG_KUNNR IS INITIAL.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160; READ TABLE CH_DATALIST INDEX 1.* Wurde ein Eintrag gefunden ?&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC EQ 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA01* wird das Kopfsegment EIEDK01 verarbeitet.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM EQ 'E1EDK01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE SEGNAM EQ 'E1EDK01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF %E1EDK01-BSART EQ 'CRME' OR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01-BSART EQ 'INVO'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF %E1EDK01-FKART_RL(1) EQ 'Z'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01-FKART_RL =&amp;#160; %E1EDK01-FKART_RL+1.&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03* F&amp;#252;r Stornogutschriften soll die BSART auf CRME ge&amp;auml;ndert werden.ATA05* und Fakturaart auf LR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF XVBDKR-VBTYP EQ 'S'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF %E1EDK01-BSART EQ 'INVO'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01-BSART = 'CRME'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF %E1EDK01-FKART_RL NE 'LR'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01-FKART_RL = 'LR'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA05&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE CH_DATALIST-UEPOS_CASE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "nnnn* Im Kopfsegment muss die Kunden-MwSt gepr&amp;#252;ft werden&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM EQ 'E1EDK01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE SEGNAM EQ 'E1EDK01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF CH_DATALIST-PARVW_MWSTID IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR %E1EDK01-KUNDEUINR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ELSE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04* lesen Kundeninformation zu Partnerrolle&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR %KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE CH_DATALIST-PARVW_MWSTID.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 'AG'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %KUNNR = XVBDKR-KUNAG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 'RE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %KUNNR = XVBDKR-KUNRE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 'RG'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %KUNNR = XVBDKR-KUNRG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SELECT SINGLE STCEG&amp;#160; FROM KNA1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INTO %STCEG&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE KUNNR EQ %KUNNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC EQ 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDK01-KUNDEUINR = %STCEG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDK01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04* In den Positionen soll der Positionstext mit der ersten&amp;#160;&amp;#160; "ATA04* Zeile des Vertriebstext ersetzt werdenepr&amp;#252;ft werden&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SEGNAM EQ 'E1EDP19' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA(3) = '002'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04* lesen letzter Eintrag der Tabelle&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE SEGNAM EQ 'E1EDP19'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AND&amp;#160;&amp;#160; SDATA(3) EQ INT_EDIDD-SDATA(3).&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %TABIX = SY-TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDP19 = INT_EDIDD-SDATA.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04* lesen Vertriebstext des Materialstams&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR %THEAD.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDNAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = XTVBDPR-MATNR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDNAME+18(4) = XVBDKR-VKORG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDNAME+22(2) = XVBDKR-VTWEG.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '0001'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDOBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 'MVKE'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %THEAD-TDSPRAS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = DOBJECT-SPRAS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'READ_TEXT_INLINE'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %THEAD-TDID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INLINE_COUNT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LANGUAGE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %THEAD-TDSPRAS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %THEAD-TDNAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %THEAD-TDOBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INLINES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %INLINES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LINES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = %LINES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LANGUAGE&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NOT_FOUND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 4&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 5&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; REFERENCE_CHECK&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 7.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC EQ 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; %E1EDP19-KTEXT = %INLINES-TDLINE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD-SDATA = %E1EDP19.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MODIFY INT_EDIDD INDEX %TABIX.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04* nur Paynet-Rechnungen verarbeiten&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF NOT CH_DATALIST-PFLAG IS INITIAL.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM PARNERROLLE_PDF TABLES INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING&amp;#160; XVBDKR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CH_DATALIST.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.* pr&amp;#252;fen, ob Verarbeitung bei Summen angelangt ist, erst danach* d&amp;#252;rfen die Positionen verarbeitet werden&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CLEAR &amp;amp;LSUMME.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LOOP AT INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHERE SEGNAM EQ 'E1EDS01'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF INT_EDIDD-SDATA(3) EQ '010'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;LSUMME = 'X'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDLOOP.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IF &amp;amp;LSUMME EQ 'X'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA01* Die unterpositionen werden auf die Hauptposition summiert&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM POS_SUMMIEREN TABLES INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING&amp;#160; XVBDKR.* Durch den Chargensplitt entstehen zus&amp;auml;tzliche Positionen welche wieder* gel&amp;#246;scht werden sollen.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PERFORM POS_LOESCHEN&amp;#160; TABLES INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; USING&amp;#160; XVBDKR.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA01&amp;#160; ENDIF.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA01**---------------------------------------------------- Begin ho20070410**----------------------------------------------------------------------** User Exit for EDI CH begin ----------------------------**----------------------------------------------------------------------&amp;#160; IF CONTROL_RECORD_OUT-RCVPRT EQ 'KU' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONTROL_RECORD_OUT-IDOCTP EQ 'INVOIC02'.&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'ZEDI_INVOIC_CH_UMSCHL'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XVBDKR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = XVBDKR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DOBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = DOBJECT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CONTROL_RECORD_OUT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = CONTROL_RECORD_OUT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = INT_EDIDD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = XTVBDPR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMV&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = XIKOMV&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMVD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = XIKOMVD&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR_MESSAGE_RECEIVED&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA_NOT_RELEVANT_FOR_SENDING = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160;&amp;#160;&amp;#160; IF SY-SUBRC &amp;lt;&amp;gt; 0.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CASE SY-SUBRC.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISING ERROR_MESSAGE_RECEIVED.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WHEN 2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISING DATA_NOT_RELEVANT_FOR_SENDING.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ENDCASE.&amp;#160;&amp;#160;&amp;#160; ENDIF.&amp;#160; ENDIF.**----------------------------------------------------------------------** User Exit for EDI CH end&amp;#160;&amp;#160; ----------------------------**----------------------------------------------------------------------**---------------------------------------------------- End&amp;#160;&amp;#160; ho20070410ENDIF.*----------------------------------------------------------------------** End MANDT = 100&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Switzerland*----------------------------------------------------------------------*&lt;/textarea&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;While it is easy to spot the two companies (Spain &amp;amp; Switzerland) that have used this User-Exits it is less obvious to identify and understand the manifold requirements that have been implemented.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1 - Organizing the Mess&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In order to organize the existing and new User-Exits in a more meaningful way I created a new package &lt;strong&gt;ZCMOD&lt;/strong&gt;. This package is intended to contain all User-Exit related repository objects.&lt;/p&gt;&lt;p&gt;The next step was to clearly separate the company specific coding. This was achieved by a generic Five-Step approach:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a Z-exit function group (if not already existing)&lt;/li&gt;&lt;li&gt;Copy the Exit-Function Module to a Z-Exit Function Module&lt;/li&gt;&lt;li&gt;Create company specific Z-Exit Function Modules&lt;/li&gt;&lt;li&gt;Replace coding in ZX-include with function module call&lt;/li&gt;&lt;li&gt;Reassign ZX-includes to the new package ZCMOD&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The result of the first three steps is shown below:&lt;/p&gt;&lt;p&gt;A new function group &lt;strong&gt;ZXEDF&lt;/strong&gt; was created and assigned to the package ZCMOD. The Exit-Function module EXIT_SAPLVEDF_002 was copied to &lt;strong&gt;ZEXIT_SAPLVEDF_002&lt;/strong&gt; in function group ZXEDF. This function module was again copied twice to yield &lt;strong&gt;ZEXIT_SAPLVEDF_002_CH&lt;/strong&gt; and &lt;strong&gt;ZEXIT_SAPLVEDF_002_ES&lt;/strong&gt;. The main point is that all Z-exit function modules have the same interface like the SAP Standard Function Module-Exit.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47979-56456/FG_ZXEDF_treeview.jpg"&gt;&lt;img align="middle" alt="" height="245" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47979-56456/353-245/FG_ZXEDF_treeview.jpg" width="353"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Implementing User-Exits: Once and for All&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If we need to touch SAP standard objects we should always try to do it once and for all. In case of Function Module-Exits this can be done quite easily:&lt;/p&gt;&lt;p&gt;The ZX-include contains nothing but a call to the &lt;em&gt;frame&lt;/em&gt; Z-exit function module (see below).&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47979-56457/INCLUDE_ZXEDFU02_new.jpg"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47979-56457/299-400/INCLUDE_ZXEDFU02_new.jpg" width="299"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Using this approach we obviously never ever have to touch this ZX-include again.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The &lt;em&gt;Frame&lt;/em&gt; Z-Exit Function Module&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The &lt;em&gt;frame&lt;/em&gt; function module ZEXIT_SAPLVEDF_002 has the function to separate the coding logic at the highest hierarchical level which in our case are the companies:&lt;/p&gt;&lt;textarea cols="80" rows="60"&gt;FUNCTION zexit_saplvedf_002.*"----------------------------------------------------------------------*"*"Globale Schnittstelle:*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(XVBDKR) LIKE&amp;#160; VBDKR STRUCTURE&amp;#160; VBDKR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(DOBJECT) LIKE&amp;#160; NAST STRUCTURE&amp;#160; NAST OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(CONTROL_RECORD_OUT) LIKE&amp;#160; EDIDC STRUCTURE&amp;#160; EDIDC*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD STRUCTURE&amp;#160; EDIDD*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR STRUCTURE&amp;#160; VBDPR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMV STRUCTURE&amp;#160; KOMV OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMVD STRUCTURE&amp;#160; KOMVD OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR_MESSAGE_RECEIVED*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA_NOT_RELEVANT_FOR_SENDING*"----------------------------------------------------------------------&amp;#160; CASE syst-mandt.*&amp;#160;&amp;#160; User-Exit: Lindt Switzerland (CH)&amp;#160;&amp;#160;&amp;#160; WHEN gc_client_lindt_ch.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'ZEXIT_SAPLVEDF_002_CH'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xvbdkr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xvbdkr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dobject&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = dobject&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control_record_out&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = control_record_out&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int_edidd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = int_edidd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xtvbdpr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xtvbdpr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xikomv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xikomv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xikomvd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xikomvd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; error_message_received&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; data_not_relevant_for_sending = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.*&amp;#160;&amp;#160; User-Exit: Lindt Spain (ES)&amp;#160;&amp;#160;&amp;#160; WHEN gc_client_lindt_es.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALL FUNCTION 'ZEXIT_SAPLVEDF_002_ES'&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xvbdkr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xvbdkr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dobject&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = dobject&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control_record_out&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = control_record_out&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int_edidd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = int_edidd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xtvbdpr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xtvbdpr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xikomv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xikomv&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xikomvd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = xikomvd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; error_message_received&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; data_not_relevant_for_sending = 2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OTHERS&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 3.&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160; ENDCASE.&amp;#160; CASE syst-subrc.&amp;#160;&amp;#160;&amp;#160; when '0'.&amp;#160;&amp;#160;&amp;#160; WHEN '1'.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISING error_message_received.&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISING data_not_relevant_for_sending.&amp;#160; ENDCASE.ENDFUNCTION.&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The company specific function modules contain the company specific coding:&lt;/p&gt;&lt;textarea cols="80" rows="40"&gt;FUNCTION zexit_saplvedf_002_ch.*"----------------------------------------------------------------------*"*"Globale Schnittstelle:*"&amp;#160; IMPORTING*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(XVBDKR) LIKE&amp;#160; VBDKR STRUCTURE&amp;#160; VBDKR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(DOBJECT) LIKE&amp;#160; NAST STRUCTURE&amp;#160; NAST OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(CONTROL_RECORD_OUT) LIKE&amp;#160; EDIDC STRUCTURE&amp;#160; EDIDC OPTIONAL*"&amp;#160; TABLES*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD STRUCTURE&amp;#160; EDIDD*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR STRUCTURE&amp;#160; VBDPR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMV STRUCTURE&amp;#160; KOMV OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMVD STRUCTURE&amp;#160; KOMVD OPTIONAL*"&amp;#160; EXCEPTIONS*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR_MESSAGE_RECEIVED*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA_NOT_RELEVANT_FOR_SENDING*"----------------------------------------------------------------------* User-Exit: Lindt Switzerland (CH)&amp;#160; CHECK ( syst-mandt = gc_client_lindt_ch ).*----------------------------------------------------------------------** Start MANDT = 100&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Switzerland*----------------------------------------------------------------------** Wenn der Summenrecord geschrieben wird, muss der WE von der Position* auf die Kopfeben geschrieben werden&amp;#160; DATA: %int_edidd_zw LIKE edidd.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02&amp;#160; DATA: %e1edk01&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE e1edk01.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA03&amp;#160; DATA: %kunnr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE kna1-kunnr.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %stceg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE kna1-stceg.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %e1edp19&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE e1edp19.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %thead&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE thead.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %inlines LIKE tline OCCURS 0 WITH HEADER LINE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %lines&amp;#160;&amp;#160; LIKE tline OCCURS 0 WITH HEADER LINE.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %tabix LIKE sy-tabix.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA04&amp;#160; DATA: %e1edp26&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LIKE e1edp26.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA07&amp;#160; IF int_edidd-segnam EQ 'E1EDS01' AND&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; "ATA02...&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;textarea cols="80" rows="30"&gt;FUNCTION ZEXIT_SAPLVEDF_002_ES.*"----------------------------------------------------------------------*"*"Globale Schnittstelle:*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(XVBDKR) LIKE&amp;#160; VBDKR STRUCTURE&amp;#160; VBDKR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(DOBJECT) LIKE&amp;#160; NAST STRUCTURE&amp;#160; NAST OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(CONTROL_RECORD_OUT) LIKE&amp;#160; EDIDC STRUCTURE&amp;#160; EDIDC*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INT_EDIDD STRUCTURE&amp;#160; EDIDD*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XTVBDPR STRUCTURE&amp;#160; VBDPR*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMV STRUCTURE&amp;#160; KOMV OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XIKOMVD STRUCTURE&amp;#160; KOMVD OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXCEPTIONS*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ERROR_MESSAGE_RECEIVED*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DATA_NOT_RELEVANT_FOR_SENDING*"----------------------------------------------------------------------* User-Exit: Lindt Spain (ES)&amp;#160; CHECK ( syst-mandt = gc_client_lindt_es ).*----------------------------------------------------------------------** INCLUDE ZXEDFU02 **----------------------------------------------------------------------*DATA: L_TABIX LIKE SY-TABIX,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; L_INDEX LIKE SY-INDEX....&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2 - Complete Structural Separation of Concerns&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Even though we have now separated the company specific coding the function modules are still linked together into a single function group. Thus, if developers need to change the User-Exit for different companies at the same time they might interfere with each others. Therefore the next level of organizing User-Exits is required: the complete structural separation of concerns.&lt;/p&gt;&lt;p&gt;For each company a specific Z-Exit function group is created:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ZXMGV - &lt;em&gt;Frame&lt;/em&gt; Z-Exit function group&lt;/li&gt;&lt;li&gt;ZXMGV_CH - specific for Lindt Switzerland&lt;/li&gt;&lt;li&gt;ZXMGV_ES - specific for Lindt Spain&lt;/li&gt;&lt;li&gt;ZXMGV_ES - specific for Lindt Poland&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47979-56458/FG_ZXMGV_hierarchy.png"&gt;&lt;img align="middle" alt="" height="278" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47979-56458/503-278/FG_ZXMGV_hierarchy.png" width="503"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Within the &lt;em&gt;frame&lt;/em&gt; function module ZEXIT_SAPMV01_002 we determine the name of the company specific function module and dynamically call it.&lt;/p&gt;&lt;textarea cols="80" rows="60"&gt;FUNCTION zexit_saplmv01_002.*"----------------------------------------------------------------------*"*"Lokale Schnittstelle:*"&amp;#160; IMPORTING*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(MESSAGE_TYPE) LIKE&amp;#160; EDMSG-MSGTYP*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(SEGMENT_NAME) LIKE&amp;#160; EDIDD-SEGNAM*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MARA) LIKE&amp;#160; MARA STRUCTURE&amp;#160; MARA OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MAKT) LIKE&amp;#160; MAKT STRUCTURE&amp;#160; MAKT OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MARC) LIKE&amp;#160; MARC STRUCTURE&amp;#160; MARC OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MARD) LIKE&amp;#160; MARD STRUCTURE&amp;#160; MARD OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MFHM) LIKE&amp;#160; MFHM STRUCTURE&amp;#160; MFHM OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MPGD) LIKE&amp;#160; MPGD STRUCTURE&amp;#160; MPGD OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MPOP) LIKE&amp;#160; MPOP STRUCTURE&amp;#160; MPOP OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MPRW) LIKE&amp;#160; MPRW STRUCTURE&amp;#160; MPRW OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MVEG) LIKE&amp;#160; MVEG STRUCTURE&amp;#160; MVEG OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MVEU) LIKE&amp;#160; MVEU STRUCTURE&amp;#160; MVEU OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MKAL) LIKE&amp;#160; MKAL STRUCTURE&amp;#160; MKAL OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MARM) LIKE&amp;#160; MARM STRUCTURE&amp;#160; MARM OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MEAN) LIKE&amp;#160; MEAN STRUCTURE&amp;#160; MEAN OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MBEW) LIKE&amp;#160; MBEW STRUCTURE&amp;#160; MBEW OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MLGN) LIKE&amp;#160; MLGN STRUCTURE&amp;#160; MLGN OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MVKE) LIKE&amp;#160; MVKE STRUCTURE&amp;#160; MVKE OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MLAN) LIKE&amp;#160; MLAN STRUCTURE&amp;#160; MLAN OPTIONAL*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(F_MLGT) LIKE&amp;#160; MLGT STRUCTURE&amp;#160; MLGT OPTIONAL*"&amp;#160; EXPORTING*"&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE(IDOC_CIMTYPE) LIKE&amp;#160; EDIDC-CIMTYP*"&amp;#160; TABLES*"&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IDOC_DATA STRUCTURE&amp;#160; EDIDD*"----------------------------------------------------------------------&amp;#160; CONSTANTS:&amp;#160;&amp;#160;&amp;#160; lc_funcname&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE funcname&amp;#160; VALUE 'ZEXIT_SAPLMV01_002',*&amp;#160;&amp;#160;&amp;#160; lc_country_ch(2)&amp;#160; TYPE c&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE 'CH',&amp;#160;&amp;#160;&amp;#160; lc_country_es(2)&amp;#160; TYPE c&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE 'ES',&amp;#160;&amp;#160;&amp;#160; lc_country_pl(2)&amp;#160; TYPE c&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VALUE 'PL'.&amp;#160; DATA:&amp;#160;&amp;#160;&amp;#160; ld_func&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE funcname,&amp;#160;&amp;#160;&amp;#160; ld_suffix&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TYPE funcname.&amp;#160; CASE syst-mandt.&amp;#160;&amp;#160;&amp;#160; WHEN '100'.&amp;#160; ld_suffix = lc_country_ch.&amp;#160; " Lindt CH&amp;#160;&amp;#160;&amp;#160; WHEN '200'.&amp;#160; ld_suffix = lc_country_es.&amp;#160; " Lindt ES&amp;#160;&amp;#160;&amp;#160; WHEN '320'.&amp;#160; ld_suffix = lc_country_pl.&amp;#160; " Lindt PL&amp;#160;&amp;#160;&amp;#160; WHEN OTHERS.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXIT.&amp;#160; ENDCASE.&amp;#160; CONCATENATE lc_funcname ld_suffix&amp;#160;&amp;#160;&amp;#160; INTO ld_func&amp;#160;&amp;#160;&amp;#160; SEPARATED BY '_'.&amp;#160; CONDENSE ld_func&amp;#160; NO-GAPS.&amp;#160; TRANSLATE ld_func TO UPPER CASE.&amp;#160; CALL FUNCTION ld_func&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message_type = message_type&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; segment_name = segment_name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mara&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mara&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_makt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_makt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_marc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_marc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mard&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mard&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mfhm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mfhm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mpgd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mpgd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mpop&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mpop&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mprw&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mprw&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mveg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mveg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mveu&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mveu&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mkal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mkal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_marm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_marm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mean&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mean&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mbew&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mbew&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mlgn&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mlgn&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mvke&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mvke&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mlan&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mlan&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f_mlgt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = f_mlgt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMPORTING&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; idoc_cimtype = idoc_cimtype&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TABLES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; idoc_data&amp;#160;&amp;#160;&amp;#160; = idoc_data.ENDFUNCTION.&lt;/textarea&gt;&lt;span&gt; &lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;There are two obvious advantages of this structural organization of User-Exits:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Errors accidentially introduced into a User-Exit will not affect any other company.&lt;/li&gt;&lt;li&gt;Different companies can modify the same User-Exit at the same time without interfering with each other.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In this weblog I presented a possible strategy how to organize User-Exits (CMOD / SMOD). The major steps of this approach are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a specific package (e.g. ZCMOD) containing all User-Exit related repository objects&lt;/li&gt;&lt;li&gt;Copy the Exit-Function module to a Z-Exit function module having the very same interface. Only the &lt;em&gt;frame&lt;/em&gt; function module is called in the ZX-include.&lt;/li&gt;&lt;li&gt;Implement the ZX-include once and for all.&lt;/li&gt;&lt;li&gt;Create Z-Exit function groups for the highest hierarchical level that employs the User-Exit&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;An example for a hierarchy of Z-Exit function modules is given below:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Frame: ZEXIT_SAPLVEDA_001&lt;/li&gt;&lt;li&gt;Country specific: ZEXIT_SAPLVEDA_001_CH&lt;/li&gt;&lt;li&gt;Country &amp;amp; Customer specific: ZEXIT_SAPLVEDA_001_CH_SHOP&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;If I need to change the User-Exit for inbound ORDERS IDocs intended for our Lindt Shops I immediately know that I have to change function module&amp;#160; ZEXIT_SAPLVEDA_001_CH_SHOP. Thus, based on the requirements (SD-EDI User-Exit &amp;amp; Lindt Shops) I can deduce the affected Z-Exit function module.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Is there another advantage of replacing the coding in the ZX-includes with the call to the &lt;em&gt;frame&lt;/em&gt; Z-Exit function module?&amp;#160;&lt;/p&gt;&lt;p&gt;Yes, there is.&lt;/p&gt;&lt;p&gt;The Z-Exit function modules enable you to test the User-Exit &lt;strong&gt;independent&lt;/strong&gt; of the entire process / transaction !!!&lt;/p&gt;&lt;p&gt;If you are already working on SAP releases &amp;gt;= 6.20 you can define &lt;strong&gt;ABAP Unit&lt;/strong&gt; Tests for each Z-Exit function module. Having assigned all User-Exit related repository objects (ZX-includes and Z-Exit function groups) into a single package you can then use the Code Inspector (transaction SCI) to easily test all your User-Exits at once:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Define an &lt;em&gt;object set&lt;/em&gt; containing this package&lt;/li&gt;&lt;li&gt;Define a &lt;em&gt;check variant&lt;/em&gt; executing all dynamic tests (ABAP Unit)&lt;/li&gt;&lt;li&gt;Run an &lt;em&gt;inspection&lt;/em&gt; with object set and check variant created before&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Finally, if you intend to get rid of obsolete User-Exits and revert back to the SAP standard processes a package like ZCMOD will give you a headstart for your project.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Function Module-Exits (CMOD / SMOD) can be organized by simple means into a useful structure thereby achieving major goals like&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Easy Maintenance&lt;/li&gt;&lt;li&gt;High Transparency&lt;/li&gt;&lt;li&gt;Process-Independent Testing&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;and at the same time avoiding dangerous liaisons by separating concerns into completely independent structural components.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The topic of this blog has been continued in:&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-blog-small" data-containerId="11242" data-containerType="37" data-objectId="49977" data-objectType="38" href="http://scn.sap.com/people/uwe.schieferstein/blog/2009/06/16/dangerous-liaisons-in-user-exits--revisited"&gt;Dangerous Liaisons in User-Exits - Revisited&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:d0dad2da-9185-4ab0-8c88-1f6bb2305019] --&gt;</description>
      <pubDate>Tue, 11 Nov 2008 08:14:12 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2008/11/11/dangerous-liaisons-in-user-exits-and-how-to-avoid-them</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2008-11-11T08:14:12Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>19</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/dangerous-liaisons-in-user-exits-and-how-to-avoid-them</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=47979</wfw:commentRss>
    </item>
    <item>
      <title>Anatomy of Finding an Hitherto Unknown Solution</title>
      <link>http://scn.sap.com/people/uwe.schieferstein/blog/2008/10/22/anatomy-of-finding-an-hitherto-unknown-solution</link>
      <description>&lt;!-- [DocumentBodyStart:61ff102a-fdbb-425e-b20f-9efb3cddc0b0] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In thread &lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1092225" data-objectType="1" href="http://scn.sap.com/thread/1092225"&gt;deactivate 'APPROVE'&amp;#160;&amp;#160; button&amp;#160; in the ALV&amp;#160; in RCATS_APPROVE_ACTIVITIES.&lt;/a&gt; it has been asked how to inactivate an ALV toolbar function within a CATS approval transaction. Having done little work on CATS and none on CATS approval I nevertheless was able to provide the specific solution.&lt;/p&gt;&lt;p&gt;In the following sections I describe my strategy how I found this solution based on my experience and combined with some &lt;em&gt;Learning-By-Doing&lt;/em&gt;. Perhaps these insights may be useful for others to &lt;strong&gt;improve &lt;/strong&gt;their &lt;strong&gt;solution finding strategies&lt;/strong&gt; as well.&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;About three years ago I developed a report for a customer where CATS data needed to be collected, evaluated and aggregated and then used to update cost objects in assessment cycles (transaction KSU2). During this development I became acquainted quite well with class CL_DBSEL_CATS and its BAdI enhancement (see CONSTRUCTOR method):&lt;/p&gt;&lt;p&gt;&lt;img alt="" src=""/&gt;&lt;img alt="" src=""/&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56119/cl_dbsel_cats_CONSTRUCTOR.jpg"&gt;&lt;img align="middle" alt="CONSTRUCTOR method of CL_DBSEL_CATS" height="243" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56119/640-243/cl_dbsel_cats_CONSTRUCTOR.jpg" width="640"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Following this customer report development I worked for about six months in a localization project for an Add-On of RE-FX (which was one of the best ABAP-OO training I ever had experienced; see &lt;a class="jive-link-external-small" href="https://wiki.sdn.sap.com/wiki/display/profile/2007/07/09/Understanding+ABAP+Objects"&gt;Understanding ABAP Objects&lt;/a&gt;). In this project I came across an ALV based approval report for rental contracts which I assumed should be somehow similar to the CATS approval report. (see below).&lt;/p&gt;&lt;p&gt;Finally, about half a year ago I answered a question related to BAdI CATS_REPORTING (see &lt;a class="jive-link-thread-small" data-containerId="2016" data-containerType="14" data-objectId="797324" data-objectType="1" href="http://scn.sap.com/thread/797324"&gt;Select-options in CATS_DA using BAdI&lt;/a&gt;). &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Problem&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Below you see the ALV list with the approval toolbar function that should be inactivated (report RCATS_APPROVE_ACTIVITIES). &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56120/report_RCATS_APPROVE_ACTIVITIES.jpg"&gt;&lt;img align="middle" alt="ALV list for CATS approval" height="291" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56120/557-291/report_RCATS_APPROVE_ACTIVITIES.jpg" width="557"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Thus, the problem can be split into two parts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Trivial aspect: Inactivate toolbar function of ALV grid&lt;/li&gt;&lt;li&gt;Non-trivial aspect: How to achieve this in the context of CATS approval? &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;My Suspicion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;My first idea was that the non-trivial aspect of this problem might be solved by using BAdI &lt;strong&gt;CATS_REPORTING&lt;/strong&gt; (interface &lt;strong&gt;IF_EX_CATS_REPORTING&lt;/strong&gt;).&lt;/p&gt;&lt;p&gt;The solution for the trivial aspect has been described in detail already many times, e.g.:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;BCALV_GRID_05&lt;/li&gt;&lt;li&gt;&lt;a class="jive-link-thread-small" data-containerId="2021" data-containerType="14" data-objectId="1016773" data-objectType="1" href="http://scn.sap.com/thread/1016773"&gt;Disable Button&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I created an implementation for BAdI CATS_REPORTING with the implementing class ZCL_IM_US_SDN_CATS_REPORTING. In order to manipulate the ALV toolbar I added the event handler method HANDLE_TOOLBAR which handles event TOOLBAR of CL_GUI_ALV_GRID. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56121/zcl_im_us_sdn_cats_reporting_handle_toolbar.jpg"&gt;&lt;img align="middle" alt="" height="365" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56121/352-365/zcl_im_us_sdn_cats_reporting_handle_toolbar.jpg" width="352"/&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;(1) Searching for a Suitable Interface Method&lt;/span&gt;&lt;br/&gt;Looking at the interface IF_EX_CATS_REPORTING its method &lt;strong&gt;IF_EX_CATS_REPORTING~BEFORE_DISPLAY_APPR&lt;/strong&gt; immediately caught my attention. Based on its description (Arbeitszeit &amp;amp; Reise Genehmigung vor der Anzeige am Schirm = Working Times &amp;amp; Trip Approval before display on screen) I was convinced having found the right method. The IMPORTING parameter &lt;strong&gt;IM_ALV_GRID&lt;/strong&gt; granted me access to the grid instance used for the approval list.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56122/if_ex_cats_reporting_before_display_appr.jpg"&gt;&lt;img align="middle" alt="" height="195" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56122/640-195/if_ex_cats_reporting_before_display_appr.jpg" width="640"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;(2.a) Method Implementation: 1st Try&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The first try-out was based on the assumption that I was responsible for both making the toolbar interactive and setting an event handler. &lt;/p&gt;&lt;p&gt;Below you see the first implementation I tried... &lt;/p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56123/if_ex_cats_reporting_before_display_appr_impl1.jpg"&gt;&lt;img align="middle" alt="" height="149" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56123/626-149/if_ex_cats_reporting_before_display_appr_impl1.jpg" width="626"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;...which resulted in a short-dump when I executed the report. Apparently the ALV toolbar instance had not been instantiated yet when I called method SET_TOOLBAR_INTERACTIVE of the grid instance.&lt;/span&gt;&lt;br/&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56124/if_ex_cats_reporting_before_display_appr_impl1_result.jpg"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56124/356-400/if_ex_cats_reporting_before_display_appr_impl1_result.jpg" width="356"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&amp;#160; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;span style="text-decoration: underline;"&gt;(2.b) Method Implementation: 2nd Try&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In a silly attempt I tried to catch the exception which - of course - failed because CL_GUI_ALV_GRID does not raise class-based exceptions at its public interface. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56125/if_ex_cats_reporting_before_display_appr_impl2.jpg"&gt;&lt;img align="middle" alt="" height="217" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56125/623-217/if_ex_cats_reporting_before_display_appr_impl2.jpg" width="623"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;(I also tried to replace method BEFORE_DISPLAY_APPR with BEFORE_DISPLAY yet the report never stopped at the break-point meaning that this method was not called during report execution.)&lt;/p&gt;&lt;p&gt;Thus, my assumption on which this coding was based on appeared to be wrong and needed to be refined. &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;span style="text-decoration: underline;"&gt;(2.c) Method Implementation: 3rd Try&lt;/span&gt; &lt;/p&gt;&lt;p&gt;I modified my assumption that perhaps the standard report would take care of making the toolbar interactive. In this case I would only need to set the event handler method. &lt;/p&gt;&lt;p&gt;Below you see the third implementation I tried...&amp;#160; &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56126/if_ex_cats_reporting_before_display_appr_impl3.jpg"&gt;&lt;img align="middle" alt="" height="132" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56126/619-132/if_ex_cats_reporting_before_display_appr_impl3.jpg" width="619"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;...and it worked!&lt;/p&gt;&lt;p&gt;The report execution stopped at the break-point in the event handler method. Looking through the entries in E_OBJECT-&amp;gt;MT_TOOLBAR it was obvious that function 'CX_APPROVE' was the one that should be deactivated. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56127/zcl_im_us_sdn_cats_reporting_handle_toolbar_impl1.jpg"&gt;&lt;img align="middle" alt="" height="400" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56127/545-400/zcl_im_us_sdn_cats_reporting_handle_toolbar_impl1.jpg" width="545"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;A quick look at the data definitions of report RCATS_APPROVE_ACTIVITIES showed that the grid instance was based on class CL_GRID_APPROVAL_ACTEXP which contains the function codes as public constants. The final version of the HANDLE_TOOLBAR implementation is shown below.&lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56128/zcl_im_us_sdn_cats_reporting_handle_toolbar_impl2.jpg"&gt;&lt;img align="middle" alt="" height="370" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56128/624-370/zcl_im_us_sdn_cats_reporting_handle_toolbar_impl2.jpg" width="624"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;And that is how the final result looks like. &lt;/p&gt;&lt;p&gt;&lt;a href="http://scn.sap.com/servlet/JiveServlet/showImage/38-47783-56129/report_RCATS_APPROVE_ACTIVITIES_final.jpg"&gt;&lt;img align="middle" alt="" height="208" src="http://scn.sap.com/servlet/JiveServlet/downloadImage/38-47783-56129/477-208/report_RCATS_APPROVE_ACTIVITIES_final.jpg" width="477"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In this weblog I have tried to explain one of the strategies that I apply to find a hitherto unknown solution to a new problem. This &lt;strong&gt;scientific &lt;/strong&gt;approach consists of combining experience with formulating &lt;strong&gt;working hypotheses&lt;/strong&gt;. These hypotheses are tested in a &lt;strong&gt;systematic &lt;/strong&gt;manner.&lt;/p&gt;&lt;p&gt;My first hypothesis that BAdI CATS_REPORTING is involved in the solution proved to be correct whereas the second hypothesis (ALV event handling) required a few cycles of refinement.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The more you know about the domain of the problem the more systematic will be your approach towards the problem. At a certain level of experience this proceeding will lead you almost inevitably to the solution.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:61ff102a-fdbb-425e-b20f-9efb3cddc0b0] --&gt;</description>
      <pubDate>Wed, 22 Oct 2008 01:37:00 GMT</pubDate>
      <guid>http://scn.sap.com/people/uwe.schieferstein/blog/2008/10/22/anatomy-of-finding-an-hitherto-unknown-solution</guid>
      <dc:creator>Uwe Schieferstein</dc:creator>
      <dc:date>2008-10-22T01:37:00Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:replyCount>4</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://scn.sap.com/people/uwe.schieferstein/blog/comment/anatomy-of-finding-an-hitherto-unknown-solution</wfw:comment>
      <wfw:commentRss>http://scn.sap.com/people/uwe.schieferstein/blog/feeds/comments?blogPost=47783</wfw:commentRss>
    </item>
  </channel>
</rss>

