<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Syntax in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452138#M549567</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;ABAP/4 programming language overview&lt;/P&gt;&lt;P&gt; -&lt;/P&gt;&lt;HR originaltext="-----------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; This documentation describes the syntax and meaning of ABAP/4&lt;/P&gt;&lt;P&gt; key words (for Release 3.0). The contents are identical to the&lt;/P&gt;&lt;P&gt; online help function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ADD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ADD n TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ADD n1 THEN n2 UNTIL nz GIVING m.&lt;/P&gt;&lt;P&gt;               3. ADD n1 THEN n2 UNTIL nz TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ADD n1 THEN n2 UNTIL nz&lt;/P&gt;&lt;P&gt;                                ...ACCORDING TO sel ...GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. ADD n1 FROM m1 TO mz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     ADD n TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Adds the contents of n to the contents of M  and stores the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               result in m.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = m + n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NUMBER TYPE I VALUE 3,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM    TYPE I VALUE 5.&lt;/P&gt;&lt;P&gt;               ADD NUMBER TO SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 8, whilst the contents of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NUMBER remains unchanged at 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The details about conversions and performance described under&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE are identical for ADD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_BADDATA: P field contains incorrect BCD format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_FIELD_OVERFLOW: Result field too small (type P).&lt;/P&gt;&lt;P&gt;               -  BCD_OVERFLOW: Overflow with arithmetic operation (type P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_PLUS_OVERFLOW: Integer overflow when adding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COMPUTE, ADD-CORRESPONDING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     ADD n1 THEN n2 UNTIL nz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Adds the contents of the fields n1, n2, ..., nz together and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               stores the result in m, where n1 is the first, n2 the second&lt;/P&gt;&lt;P&gt;               and nz the last of a sequence of fields the same distance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               apart. They can be either database fields or internal fields,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               but they must all have the same type and length.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = n1 + n2 + ... + nz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;                       SIX   TYPE P VALUE 60,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN  NUMBERS-TWO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 150 but its initial value is&lt;/P&gt;&lt;P&gt;               unimportant. The fields within the field string NUMBERS remain&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     ADD n1 THEN n2 UNTIL nz TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calculates the total as in variant 2 but then adds it to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents of the field m.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = m + n1 + n2 + ... + nz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     SUM TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN  NUMBERS-TWO&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE TO SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 1150.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     ADD n1 THEN n2 UNTIL nz&lt;/P&gt;&lt;P&gt;                              ...ACCORDING TO sel ...GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Parts marked with " ..." are interchangeable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calculates the total as in variants 2 and 3. In this case,&lt;/P&gt;&lt;P&gt;               however, the operands from a sequence of fields of the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type are restricted to a partial sequence by the selection&lt;/P&gt;&lt;P&gt;               specification sel generated by SELECT-OPTIONS or RANGES. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               partial sequence results from the indexes that satisfy the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition IN sel (see IF).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     SUM   TYPE I VALUE 1000,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     INDEX TYPE I.&lt;/P&gt;&lt;P&gt;               RANGES SELECTION FOR INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SIGN   = 'I'.&lt;/P&gt;&lt;P&gt;               SELECTION-OPTION = 'BT'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-LOW    = 2.&lt;/P&gt;&lt;P&gt;               SELECTION-HIGH   = 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN NUMBERS-TWO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE&lt;/P&gt;&lt;P&gt;                               ACCORDING TO SELECTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUM now contains 90. Only the component fields TWO to FOUR were&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected from the field string NUMBERS and added together.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     ADD n1 FROM m1 TO mz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The field n1 must be the first in a sequence of consecutive&lt;/P&gt;&lt;P&gt;               fields of the same type. m1 and mz should contain the numbers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the first and last fields in this sequence to be added&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               together (whether fixed or variable). The total is stored in m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     START TYPE I VALUE 2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM   TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE FROM START TO 4 GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 90.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The details for conversion and performance specified for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE are equally valid for ADD.&lt;/P&gt;&lt;P&gt;               The runtime required for adding two numbers of type I or F is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               about 2 msn (standardized microseconds), for type P it is&lt;/P&gt;&lt;P&gt;               roughly 8 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Besides the runtime errors listed in variant 1, the error&lt;/P&gt;&lt;P&gt;               ADDF_INT_OVERFLOW can occur instead of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE_INT_PLUS_OVERFLOW in other variants.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD-CONDITIONAL is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ADD-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    ADD-CORRESPONDING rec1 TO rec2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Interprets rec1 and rec2 as field strings. If, for example,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               rec1 and rec2 are tables, executes the statement for their&lt;/P&gt;&lt;P&gt;               header lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Searches for all sub-fields which occur both in rec1 and rec2&lt;/P&gt;&lt;P&gt;               and then, for all relevant field pairs corresponding to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sub-fields ni, generates statements of the form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD rec1-ni TO rec2-ni.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other fields remain unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With complex structures, the complete names of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pairs must be textually identical.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF VECTOR,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       X      TYPE I,&lt;/P&gt;&lt;P&gt;                       Y      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       LENGTH TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF VECTOR,&lt;/P&gt;&lt;P&gt;                     BEGIN OF CIRCLE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       VOLUME TYPE P&lt;/P&gt;&lt;P&gt;                       Y      TYPE P,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       RADIUS TYPE I,&lt;/P&gt;&lt;P&gt;                       X      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF CIRCLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               ADD-CORRESPONDING VECTOR TO CIRCLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sub-fields X and Y occur in both the field strings VECTOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and CIRCLE. Therefore, the ADD-CORRESPONDING statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               equivalent to both the following statements:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD VECTOR-X TO CIRCLE-X.&lt;/P&gt;&lt;P&gt;               ADD VECTOR-Y TO CIRCLE-Y.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          All fields with the same name are added, whether numeric or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not. The same conversions are performed as with ADD and similar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime errors to those possible with ADD can also occur.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       ADD&lt;/P&gt;&lt;P&gt;               MOVE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUBTRACT-CORRESPONDING&lt;/P&gt;&lt;P&gt;               MULTIPLY-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD-SELECTIVE is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; APPEND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. APPEND [wa TO|INITIAL LINE TO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.&lt;/P&gt;&lt;P&gt;               3. APPEND [wa TO] itab SORTED BY f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     APPEND [wa TO|INITIAL LINE TO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Appends a new line to the end of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa TO, the new line is taken from the contents&lt;/P&gt;&lt;P&gt;               of the explicitly specified work area wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use INITIAL LINE TO, a line filled with the correct&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value for the type is added.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the specification before itab is omitted, the new line is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               taken from the internal tbale itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the APEND, the system field SY-TABIX contains the index&lt;/P&gt;&lt;P&gt;               of the newly added table entry.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      Generate a list with customer numbers:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SCUSTOM.&lt;/P&gt;&lt;P&gt;               DATA: CUSTOMER LIKE SCUSTOM-ID OCCURS 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND SCUSTOM-ID TO CUSTOMER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Append a blank line or a line with its initial value to the&lt;/P&gt;&lt;P&gt;               above list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND INITIAL LINE TO CUSTOMER&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Generate a compressed list with plane data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PARAMETERS: SEATS_LO LIKE SAPLANE-SEATSMAX DEFAULT 30,&lt;/P&gt;&lt;P&gt;                           SEATS_HI LIKE SAPLANE-SEATSMAX DEFAULT 50.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PLANE        LIKE SAPLANE OCCURS 0,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PLANE_NEEDED LIKE SAPLANE WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT PLANE INTO PLANE_NEEDED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                             WHERE SEATSMAX BETWEEN SEATS_LO AND SEATS_HI.&lt;/P&gt;&lt;P&gt;                 APPEND PLANE_NEEDED.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. When using internal tables with a header line, avoid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unnecessary assignments to the header line. Whenever&lt;/P&gt;&lt;P&gt;                  possible, use statements which have an explicit work area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, "APPEND wa TO itab." is approximately twice as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fast as "itab = wa. APPEND itab.". The same applies to&lt;/P&gt;&lt;P&gt;                  COLLECT and INSERT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. In contrast to COLLECT, APPEND does not check whether an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  entry with the same default key exists. Therefore, it is&lt;/P&gt;&lt;P&gt;                  considerably faster than COLLECT. If the COLLECT logic is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  not needed or lines with an identical default key cannot&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur in a particular situation, you should always use&lt;/P&gt;&lt;P&gt;                  APPEND instead of COLLECT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. The runtime required for APPEND increases with the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  width of the table and depends on the number of fields.&lt;/P&gt;&lt;P&gt;                  Appending an entry to an internal table with a width of 111&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  bytes takes about 9 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. To append an internal table to another internal table, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  should use the variant APPEND LINES OF ... which is 3 to 4&lt;/P&gt;&lt;P&gt;                  times faster than using a LOOP to process the source table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  and append the entries line-by-line to the target table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Appends the internal table itab1 or an extract from itab1 to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the end of the internal table itab2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               By specifying FROM idx1 or TO idx2 you can restrict the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area taken from the source table itab1. If there is no FROM&lt;/P&gt;&lt;P&gt;               specification, it begins with the first line of itab1. If there&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is no TO specification, it ends with the last line of itab1.&lt;/P&gt;&lt;P&gt;               This means that the complete table is appended if neither a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FROM nor a TO is specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the APPEND, the system field SY-TABIX contains the index&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the last table entry appended, i.e. the total number of&lt;/P&gt;&lt;P&gt;               entries from both tables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          By comparing the values of SY-TABIX before and after the APPEND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement, you can determine how many lines were appended to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Merge two tables with whole numbers:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: ITAB1  TYPE I OCCURS 100,&lt;/P&gt;&lt;P&gt;                     ITAB2  TYPE I OCCURS 100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 2 TO ITAB1.&lt;/P&gt;&lt;P&gt;               APPEND 3 TO ITAB1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 5 TO ITAB1.&lt;/P&gt;&lt;P&gt;               APPEND 7 TO ITAB1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 3 TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND INITIAL LINE TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND LINES OF ITAB1 FROM 2 TO 20 TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table ITAB2 now contains five lines with the values 3, 0,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3, 5 and 7.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant is 3 to 4 times faster than using a LOOP to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               process the source table and append the entries line-by-line to&lt;/P&gt;&lt;P&gt;               the target table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     APPEND [wa TO] itab SORTED BY f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Inserts the new entry into table and re-sorts the table by the&lt;/P&gt;&lt;P&gt;               sub-field f in descending order. This only makes sense if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table was sorted beforehand. When the number of table entries&lt;/P&gt;&lt;P&gt;               reaches the OCCURS parameter value, the last entry is deleted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               if the value f of a new entry is greater (particularly suitable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               for ranked lists). You can only sort by one sub-field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa TO, the new line is taken from the contents&lt;/P&gt;&lt;P&gt;               of the explicitly specified work area wa. Otherwise, it comes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from the header line of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 3,&lt;/P&gt;&lt;P&gt;                       NAME(10), SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'big'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 90.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'small'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 10.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'too small'.&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES =  5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'middle'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 50.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES SORTED BY SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table now has three (-&amp;gt; OCCURS 3) entries. The line with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the contents 'too small' in the sub-field NAME is deleted from&lt;/P&gt;&lt;P&gt;               the table because the entry for 'middle' has a greater value in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the sub-field SALES. This entry now appears in the second table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line (after 'big' and before 'small').&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. Whenever an internal table is processed with APPEND SORTED&lt;/P&gt;&lt;P&gt;                  BY, it should always be filled in this way.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If you specify APPEND with the parameter SORTED BY, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system always searches the entire table. Therefore, it is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  sometimes better to create the table with a simple APPEND&lt;/P&gt;&lt;P&gt;                  and then use SORT to sort in descending ot ascending order&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  afterwards.&lt;/P&gt;&lt;P&gt;                  You can also sort in ascending order by first determining&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the insert position with READ TABLE itab WITH KEY f = itab-f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  BINARY SEARCH and then by inserting the new entry into the&lt;/P&gt;&lt;P&gt;                  table (perhaps read SY-SUBRC beforehand) with INSERT itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  INDEX SY-TABIX.&lt;/P&gt;&lt;P&gt;                  However, you should be aware that, in such cases, the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  may contain more entries than specified in the OCCURS&lt;/P&gt;&lt;P&gt;                  parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. If several lines with an identical value f are added, lines&lt;/P&gt;&lt;P&gt;                  added later are treated as smaller, i.e. they are inserted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  after existing lines with the same value f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. If you use APPEND ... SORTED BY f with an explicitly&lt;/P&gt;&lt;P&gt;                  specified work area, this must be compatible with the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type of the internal table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. If the sort criterion f is not known until runtime, you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  use SORTED BY (name) to specify it dynamically as the&lt;/P&gt;&lt;P&gt;                  contents of the field name. If name is blank at runtime or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  contains an invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. Regardless of whether you specify it statically or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically, you can restrict the sort criterion f further&lt;/P&gt;&lt;P&gt;                  by defining an offset and/or length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COLLECT itab, INSERT itab, SELECT / FETCH NEXT CURSOR ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INTO/APPENDING TABLE itab, MODIFY itab, WRITE f TO itab INDEX&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               idx, SORT itab, READ TABLE itab, LOOP AT itab, DELETE itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASS-RPERF is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ASSIGN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ASSIGN f TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ASSIGN (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;               3. ASSIGN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;               5. ASSIGN COMPONENT idx  OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ASSIGN COMPONENT name OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     ASSIGN f TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Assigns the field f to the field symbol &amp;lt;fs&amp;gt;. The field symbol&lt;/P&gt;&lt;P&gt;               &amp;lt;fs&amp;gt; "points to" the contents of the field f at runtime, i.e.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               every change to the contents of f is reflected in &amp;lt;fs&amp;gt; and vice&lt;/P&gt;&lt;P&gt;               versa. If the field symbol &amp;lt;fs&amp;gt; is not typed (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS), the field symbol adopts the type and atrributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the field f at runtime, particularly the conversion exit.&lt;/P&gt;&lt;P&gt;               Otherwise, when the assignment is made, the system checks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               whether the type of the field f matches the type of the field&lt;/P&gt;&lt;P&gt;               symbol &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With the ASSIGN statement, the offset and length specifications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in field f (i.e. f&lt;EM&gt;off, f&lt;/EM&gt;len or f+off(len)) have a special&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  They may be variable and thus not evaluated until runtime.&lt;/P&gt;&lt;P&gt;               -  The system does not check whether the selected area still&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  lies within the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If an offset is specified, but no length, for the field f,&lt;/P&gt;&lt;P&gt;                  the field symbol &amp;lt;fs&amp;gt; adopts the length of the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Caution: &amp;lt;fs&amp;gt; also points to an area behind the field f. If&lt;/P&gt;&lt;P&gt;                  you do not want this, the offset and length specifications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  can be in the form ASSIGN f+off(*) TO &amp;lt;fs&amp;gt;.. This means that&lt;/P&gt;&lt;P&gt;                  the field symbol &amp;lt;fs&amp;gt; is set so that the field limits of f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are not exceeded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In the ASSIGN statement, you can also use offset and length&lt;/P&gt;&lt;P&gt;                  specifications to access field symbols, FORM and function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parameters.&lt;/P&gt;&lt;P&gt;               -  Warning: If the effect of the ASSIGN statement is to assign&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parts of other fields beyond the limits of the field f, the&lt;/P&gt;&lt;P&gt;                  changing of the contents via the field symbol &amp;lt;fs&amp;gt; may mean&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  that the data written to these fields does not match the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  data type of these fields and thus later results in a&lt;/P&gt;&lt;P&gt;                  runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Since the ASSIGN statement does not set any return code value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the system field SY-SUBRC, subsequent program code should&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not read this field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA NAME(4) VALUE 'JOHN'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN NAME TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NAME(12) VALUE 'JACKJOHNCARL',&lt;/P&gt;&lt;P&gt;                     X(10)    VALUE 'XXXXXXXXXX'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4 TO .&lt;/P&gt;&lt;P&gt;               WRITE .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4(*) TO .&lt;/P&gt;&lt;P&gt;               WRITE .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHNCARLXXXX JOHNCARL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(12) VALUE 'JACKJOHNCARL',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     X(10)    VALUE 'XXXXXXXXXX'.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4 TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4(*) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHNCARLXXXX JOHNCARL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With untyped field symbols, allows you to change the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type of the field symbol to the type typ. The output length of&lt;/P&gt;&lt;P&gt;               the field symbol is corrected according to its type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With typed field symbols, this addition should only be used if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the type of the field f does not match the type of the field&lt;/P&gt;&lt;P&gt;               symbol &amp;lt;fs&amp;gt;. The specified type type must be compatible with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the type of the field symbol. Since no conversion can be&lt;/P&gt;&lt;P&gt;               performed (as with MOVE, the system must be able to interpret f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               as a field with this type type.&lt;/P&gt;&lt;P&gt;               The type specification is in the form of a literal or a field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, only system types (C, D, T, P, X, N, F, I or W) are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               allowed; you can also specify type 's' for 2-byte integer&lt;/P&gt;&lt;P&gt;               fields with a sign and type 'b' for 1-byte integer fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               without a sign (see also DESCRIBE FIELD).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement results in a runtime error if the specified type&lt;/P&gt;&lt;P&gt;               is unknown or does not match the field to be assigned (due to a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               missing alignment or an inappropriate length).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA LETTER TYPE C.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN LETTER TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field symbol has the type C and the output length 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN LETTER TO &amp;lt;F&amp;gt; TYPE 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field symbol has the type X and the output length 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This addition only makes sense when used with type P. The field&lt;/P&gt;&lt;P&gt;               symbol contains dec decimal places.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Output sales in thousands:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA SALES_DEC2(10) TYPE P DECIMALS 2 VALUE 1234567.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;SALES_DEC5&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN SALES_DEC2 TO &amp;lt;SALES_DEC5&amp;gt; DECIMALS 5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE: / SALES_DEC2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      / &amp;lt;SALES_DEC5&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output:&lt;/P&gt;&lt;P&gt;                      1,234,567.00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       1,234.56700&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement results in a runtime error if the field symbol&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               has a type other than P at runtime or the specified number of&lt;/P&gt;&lt;P&gt;               decimal places is not in the range 0 to 14.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With LOCAL COPY OF, the ASSIGN&amp;lt;/ &amp;gt; statement can only be used&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in subroutines. This creates a copy of f which points to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The field symbol &amp;lt;fs&amp;gt; must also be defined locally in the&lt;/P&gt;&lt;P&gt;               subroutine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA X(4) VALUE 'Carl'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U.&lt;/P&gt;&lt;P&gt;               FORM U.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 ASSIGN LOCAL COPY OF X TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'John' TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE X.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: Carl John Carl&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     ASSIGN (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;               3. ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Assigns the field whose name is stored in the field f to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field symbol.&lt;/P&gt;&lt;P&gt;               The statement "ASSIGN (f)+off(len) TO &amp;lt;fs&amp;gt;" is not allowed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The search for the field to be assigned is performed as&lt;/P&gt;&lt;P&gt;                  follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. If the statement is in a subroutine or function module, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system first searches in this modularization unit.&lt;/P&gt;&lt;P&gt;               2. If the statement lies outside any such modularization units&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or if the field is not found there, the system searches for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the field in the global data of the program.&lt;/P&gt;&lt;P&gt;               3. If the field is not found there, the system searches in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table work areas of the main program of the current program&lt;/P&gt;&lt;P&gt;                  group declared with TABLES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The name of the field to be assigned can also be the name of&lt;/P&gt;&lt;P&gt;                  a field symbol or formal parameter (or even a component of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  one of these, if the field symbol or the parameter has a&lt;/P&gt;&lt;P&gt;                  structure).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If the name of the field to be assigned is of the form&lt;/P&gt;&lt;P&gt;                  "(program name)field name", the system searches in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  global fields of the program with the name "Program name"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  for the field with the name "Field name". However,it is only&lt;/P&gt;&lt;P&gt;                  found if the program has already been loaded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Warning: This option is for internal use by specialists&lt;/P&gt;&lt;P&gt;                  only. Incompatible changes or developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  time without warning or prior notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(4) VALUE 'XYZ',       XYZ VALUE '5'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: 5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt; Addition 3    ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions of variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     ASSIGN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Identical to variant 2, except that the system searches for the&lt;/P&gt;&lt;P&gt;               field f only in the data in the current program group declared&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with TABLES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NAME(10) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;               ASSIGN TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES T100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               T100-TEXT = 'Global'.&lt;/P&gt;&lt;P&gt;               PERFORM EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM EXAMPLE.&lt;/P&gt;&lt;P&gt;                 DATA: BEGIN OF T100, TEXT(20) VALUE 'LOCAL', END OF T100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) VALUE 'T100-TEXT'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: Local - although the global table field T100-TEXT has&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "global" contents. (This kind of name assignment of work fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is, of course, not recommended.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: F(8) VALUE 'F_global',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     G(8) VALUE 'G_global'.&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U.&lt;/P&gt;&lt;P&gt;               FORM U.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA: F(8)     VALUE 'F_local',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) VALUE 'F'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'G' TO NAME.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'TRDIR-NAME' TO NAME.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: F_local  G_global XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TRDIR.&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'TFDIR-PNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;                 PERFORM U(P1SUB).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CALL FUNCTION 'EXAMPLE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM P1SUB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TFDIR.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FORM U.&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   MOVE 'FCT_PROG' TO TFDIR-PNAME.&lt;/P&gt;&lt;P&gt;                 ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION-POOL FUN1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FUNCTION EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE / 'TRDIR-NAME cannot be accessed'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;                 ENDFUNCTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG FCT_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRDIR-NAME cannot be accessed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' to TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U USING TRDIR.&lt;/P&gt;&lt;P&gt;               FORM U USING X STRUCTURE TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'X-NAME'.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO &amp;lt;f&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Identical to variant 3, except that the system searches for the&lt;/P&gt;&lt;P&gt;               field whose name is in f steht only in the data in the program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               group of the main program declared with TABLES. However, the&lt;/P&gt;&lt;P&gt;               field symbol then points not directly to the found field, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to a copy of this field on theq value stack.&lt;/P&gt;&lt;P&gt;               This variant therefore ensures that any access to Dictionary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields of an external program group is read only and no changes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TRDIR.&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'TFDIR-PNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CALL FUNCTION 'EXAMPLE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION-POOL FUN1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FUNCTION EXAMPLE.&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   ASSIGN LOCAL COPY OF MAIN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;                     WRITE / 'TRDIR-NAME cannot be accessed'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;                 ENDFUNCTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions to variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     ASSIGN COMPONENT idx  OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt; Variant 6     ASSIGN COMPONENT name OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        If the field name or idx has the type C or if it is a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               string with no internal table, it is treated as a component&lt;/P&gt;&lt;P&gt;               name. Otherwise, it is considered as a component number. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding component of the field string rec is assigned to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field symbol &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If idx has the value 0, the entire field string is assigned to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA: BEGIN OF REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                         A VALUE 'a',&lt;/P&gt;&lt;P&gt;                         B VALUE 'b',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                         C VALUE 'c',&lt;/P&gt;&lt;P&gt;                         D VALUE 'd',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       END OF REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CN(5) VALUE 'D'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DO 3 TIMES.&lt;/P&gt;&lt;P&gt;                   ASSIGN COMPONENT SY-INDEX OF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          STRUCTURE REC TO &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC &amp;lt;&amp;gt; 0. EXIT. ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;                 ASSIGN COMPONENT CN OF STRUCTURE REC TO &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: a b c d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions to variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the operands, the ASSIGN statement can cause&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For performance reasons, you are recommended to use typed field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               symbols. The runtime for a typed ASSIGN statement amounts to&lt;/P&gt;&lt;P&gt;               approx. 9 msn (standardized microseconds) against&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               approx. 13 msn for an untyped ASSIGN statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Events in lists&lt;/P&gt;&lt;P&gt;               - AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Events on selection screens&lt;/P&gt;&lt;P&gt;               - AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Control break with extracts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT END OF f.&lt;/P&gt;&lt;P&gt;               - AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT LAST.&lt;/P&gt;&lt;P&gt;               - AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Control break with internal tables&lt;/P&gt;&lt;P&gt;               - AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT END OF f.&lt;/P&gt;&lt;P&gt;               - AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a sub-field of an internal table or extract dataset&lt;/P&gt;&lt;P&gt;               (EXTRACT) which is being processed with LOOP, i.e. the variants&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1 and 2 only make sense within a LOOP.&lt;/P&gt;&lt;P&gt;               Both "AT NEW f." and "AT END OF f." introduce processing blocks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which are concluded by "ENDAT.".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               These processing blocks are processed whenever the contents of&lt;/P&gt;&lt;P&gt;               a field f or a sub-field defined before f change as a result of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing with LOOP. "AT NEW f." begins a new group of (table)&lt;/P&gt;&lt;P&gt;               lines with the same contents as the field f while "AT END OF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f." concludes such a group.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Within the AT ... ENDAT processing of internal tables, all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               argument fields following f are filled with "*".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      1. AT for sub-fields of an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;                   WRITE / COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / COMPANIES-NAME, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT statements refer to the field COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      2. AT for the field of an extract dataset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NAME(30),&lt;/P&gt;&lt;P&gt;                     SALES TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-GROUPS: HEADER, INFOS.&lt;/P&gt;&lt;P&gt;               INSERT: NAME  INTO HEADER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES INTO INFOS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / NAME, SUM(SALES).&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If the processing you want to perform on an internal table&lt;/P&gt;&lt;P&gt;                  is fairly restricted (i.e. a WHERE addition with the LOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statement), do not use the AT statements specified in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  variants 1 to 5, since the interaction of the WHERE addition&lt;/P&gt;&lt;P&gt;                  and the AT statement is currently not defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. When you use LOOP with an extract dataset, fields on hex&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  zero are ignored during control level checking with AT NEW&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or AT END OF. This procedure is the same as the SORT&lt;/P&gt;&lt;P&gt;                  statement. When sorting extracted datasets, this statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  always sorts blank fields (i.e. fields on hex zero)&lt;/P&gt;&lt;P&gt;                  regardless of the sequence (ascending or descending) before&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  all fields that contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.  Since fields addressed with AT are not set to an initial&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  value when you enter a LOOP, the first new group of (table)&lt;/P&gt;&lt;P&gt;                  lines in AT NEW f may not be processed, if f happens to be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  set to this value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The variants 3 and 4 only make sense within a LOOP.&lt;/P&gt;&lt;P&gt;               The processing block between AT FIRST and ENDAT is executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               before the individual lines are processed; the processing block&lt;/P&gt;&lt;P&gt;               between AT LAST and ENDAT is executed after all the individual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               lines have been processed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In AT FIRST or AT LAST ... ENDAT processing, all argument&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields are filled with "*" (internal tables).&lt;/P&gt;&lt;P&gt;               When you are processing extract datasets, a control total&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUM(n) can only be processed with AT END OF or AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT FIRST.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE:    'Sum of all SALES:',&lt;/P&gt;&lt;P&gt;                          55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT,&lt;/P&gt;&lt;P&gt;                       55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Control break with extracts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;               5. AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        In a LOOP which processes a dataset created with EXTRACT, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can use special control structures for control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing. All these structures begin with AT and end with&lt;/P&gt;&lt;P&gt;               ENDAT. The sequence of statements which lies between them is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               then executed if a control break occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use these key words for control break processing with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract datasets only if the active LOOP statement is&lt;/P&gt;&lt;P&gt;               proceesing an extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The control level structure with extract datasets is dynamic.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               It corresponds exactly to the sort key of the extract dataset,&lt;/P&gt;&lt;P&gt;               i.e. to the order of fields in the field group HEADER by which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the extract dataset was sorted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the end of a control group (AT END OF, AT LAST), there are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               two types of control level information between AT and ENDAT:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If the sort key of the extract dataset contains a&lt;/P&gt;&lt;P&gt;                  non-numeric field h (particularly in the field group&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  HEADER), the field CNT(h) contains the number of control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  breaks in the (subordinate) control level h.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  For extracted number fields g (see also ABAP/4 number&lt;/P&gt;&lt;P&gt;                  types), the fields SUM(g) contain the relevant control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. The fields CNT(h) and SUM(g) can only be addressed after&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  they have been sorted. Otherwise, a runtime error may occur.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The fields CNT(h) and SUM(g) are filled with the relevant&lt;/P&gt;&lt;P&gt;                  values for a control level at the end of each control group&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (AT END OF, AT LAST), not at the beginning (AT FIRST, AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  NEW).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. When calculating totals with SUM(g), the system&lt;/P&gt;&lt;P&gt;                  automatically chooses the maximum field sizes so that an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  overflow occurs only if the absolute value area limits are&lt;/P&gt;&lt;P&gt;                  exceeded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. You can also use special control break control structures&lt;/P&gt;&lt;P&gt;                  with LOOPs on internal tables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a field from the field group HEADER. The enclosed sequence&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of statements is executed if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the field f occurs in the sort key of the extract dataset&lt;/P&gt;&lt;P&gt;                  (and thus also in the field group HEADER) and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the field f or a superior sort criterion has a different&lt;/P&gt;&lt;P&gt;                  value in the current LOOP line than in the prceding (AT NEW)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or subsequent (AT END OF) record of the extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SALES TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-GROUPS: HEADER, INFOS.&lt;/P&gt;&lt;P&gt;               INSERT: NAME  INTO HEADER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES INTO INFOS.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   WRITE: / NAME, SUM(SALES).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If the extract dataset is not sorted before processing with&lt;/P&gt;&lt;P&gt;                  LOOP, no control level structure is defined and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statements following AT NEW or AT END OF are not executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Fields which stand at hex zero are ignored by the control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  break check with AT NEW or AT END OF. This corresponds to&lt;/P&gt;&lt;P&gt;                  the behavior of the SORT statement, which always places&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unoccupied fields (i.e. fields which stand at hex zero)&lt;/P&gt;&lt;P&gt;                  before all occupied fields when sorting extract datasets,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  regardless of whether the sort sequence is in ascending or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  descending order.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the relevant series of statements just once - either&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               on the first loop pass (with AT FIRST) or on the last loop pass&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (with AT LAST).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This statement makes single record processing dependent on the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type of extracted record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sequence of statements following AT fg are executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               whenever the current LOOP record is created with EXTRACT fg (in&lt;/P&gt;&lt;P&gt;               other words: when the current record is a fg record).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the sequence of statements belonging to AT fg WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               only if the record of the field group fg in the dataset is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately followed by a record of the field group fg1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - field group definition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        When you are processing an extract dataset (EXTRACT) in a LOOP,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this statement makes single record processing dependent on the&lt;/P&gt;&lt;P&gt;               type of extracted record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The processing block specified within AT fg ... ENDAT is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed if the record just read was generated with EXTRACT fg&lt;/P&gt;&lt;P&gt;               (i.e. if the record just read is an fg record).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The processing block under AT fg WITH fg1. is executed only if&lt;/P&gt;&lt;P&gt;               the record from the field group fg in the dataset is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately followed by a record from the field group fg1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Control break with internal tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        In a LOOP which processes a dataset created with EXTRACT, you&lt;/P&gt;&lt;P&gt;               can use special control structures for control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing. All these structures begin with AT and end with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDAT. The sequence of statements which lies between them is&lt;/P&gt;&lt;P&gt;               then executed if a control break occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use these key words for control break processing with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract datasets only if the active LOOP statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               proceesing an extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The control level structure with extract datasets is dynamic.&lt;/P&gt;&lt;P&gt;               It corresponds exactly to the sort key of the extract dataset,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e. to the order of fields in the field group HEADER by which&lt;/P&gt;&lt;P&gt;               the extract dataset was sorted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the start of a new control level (i.e. immediately after&lt;/P&gt;&lt;P&gt;               AT), the following occurs in the output area of the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  All default key fields (on the right) are filled with "*"&lt;/P&gt;&lt;P&gt;                  after the current control level key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  All other fields (on the right) are set to their initial&lt;/P&gt;&lt;P&gt;                  values after the current control level key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Between AT and ENDAT, you can use SUM to insert the appropriate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               control totals in the number fields (see also ABAP/4 number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               types) of the LOOP output area (on the right) after the current&lt;/P&gt;&lt;P&gt;               control level key. Summing is supported both at the beginning&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a control level (AT FIRST, AT NEW f) and also the end of a&lt;/P&gt;&lt;P&gt;               control level (AT END OF f, AT LAST).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the end of the control level processing (i.e. after ENDAT),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the old contents of the LOOP output area are restored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When calculating totals, you must ensure that the totals are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  inserted into the same sub-fields of the LOOP output area as&lt;/P&gt;&lt;P&gt;                  those where the single values otherwise occur. If there is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  an overflow, processing terminates with a runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If an internal table is processed only in a restricted form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (using the additions FROM, TO and/or WHERE with the LOOP&lt;/P&gt;&lt;P&gt;                  statement), you should not use the control structures for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control level processing because the interaction of a&lt;/P&gt;&lt;P&gt;                  restricted LOOP with the AT statement is currenly not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  properly defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. With LOOPs on extracts, there are also special control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control structures you can use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  SUM_OVERFLOW: Overflow when calculating totals with SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a sub-field of an internal table processed with LOOP. The&lt;/P&gt;&lt;P&gt;               sequence of statements which follow it is executed if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sub-field f or a sub-field in the current LOOP line defined (on&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the left) before f has a differnt value than in the preceding&lt;/P&gt;&lt;P&gt;               (AT NEW) or subsequent (AT END OF) table line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;                   WRITE / COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / COMPANIES-NAME, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT statements refer to the field COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If a control break criterion is not known until runtime, you&lt;/P&gt;&lt;P&gt;                  can use AT NEW (name) or AT END OF (name) to specify it&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically as the contents of the field name. If name is&lt;/P&gt;&lt;P&gt;                  blank at runtime, the control break criterion is ignored and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the sequence of statements is not executed. If name contains&lt;/P&gt;&lt;P&gt;                  an invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. By defining an offset and/or length, you can further&lt;/P&gt;&lt;P&gt;                  restrict control break criteria - regardless of whether they&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are specified statically or dynamically.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. A field symbol pointing to the LOOP output area can also be&lt;/P&gt;&lt;P&gt;                  used as a dynamic control break criterion. If the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  symbol does not point to the LOOP output area, a runtime&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  AT_BAD_PARTIAL_FIELD_ACCESS: Invalid sub-field access when&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically specifying the control break criterion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  AT_ITAB_FIELD_INVALID: When dynamically specifying the&lt;/P&gt;&lt;P&gt;                  control break criterion via a field symbol, the field symbol&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  does not point to the LOOP output area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ITAB_ILLEGAL_COMPONENT: When dynamically specifying the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control break criterion via (name) the field name does not&lt;/P&gt;&lt;P&gt;                  contain a valid sub-field name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the appropriate sequence of statements once during the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               first (AT FIRST) or last (AT LAST) loop pass.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;                 AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE:    'Sum of all SALES:',&lt;/P&gt;&lt;P&gt;                          55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Events in lists&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;               3. AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is processed whenever the user chooses a valid line&lt;/P&gt;&lt;P&gt;               in the list (i.e. a line generated by statements such as WRITE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ULINE or SKIP) with the cursor and presses the function key&lt;/P&gt;&lt;P&gt;               which has the function PICK in the interface definition. This&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               should normally be the function key F2, because it has the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               effect as double-clicking the mouse, or single-clicking in the&lt;/P&gt;&lt;P&gt;               case of a hotspot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The processing for the event AT LINE-SELECTION usually&lt;/P&gt;&lt;P&gt;               generates further list output (the details list) which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               completely covers the current list display. If the latter is&lt;/P&gt;&lt;P&gt;               still visible (to aid user orientation), this may be due to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key word WINDOW.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In most cases, the information is from the selected line is&lt;/P&gt;&lt;P&gt;               used to retrieve more comprehensive information by direct&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reading. When displaying the original list, you store the key&lt;/P&gt;&lt;P&gt;               terms needed for this in the HIDE area of the output line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You can choose a line and start new processing even in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               details lists.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The following system fields are useful for orientation&lt;/P&gt;&lt;P&gt;               purposes, since their values change with each interactive event&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-LSIND       Index of list created by current event (basic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              list = 0, 1st details list = 1, ...)&lt;/P&gt;&lt;P&gt;               SY-PFKEY       Status of displayed list (SET PF-STATUS)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-LISEL       Contents of selected line&lt;/P&gt;&lt;P&gt;               SY-LILLI       Absolute number of this line in the displayed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              list&lt;/P&gt;&lt;P&gt;               SY-LISTI       Index of this list - usually SY-LSIND - 1 (READ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              LINE)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-CUROW       Last cursor position: Line in window&lt;/P&gt;&lt;P&gt;               SY-CUCOL       Last cursor position: Column in window (GET&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              CURSOR)&lt;/P&gt;&lt;P&gt;               SY-CPAGE       1st displayed page of displayed list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-STARO       1st displayed line of this page of displayed&lt;/P&gt;&lt;P&gt;                              list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-STACO       1st displayed column of displayed list (SCROLL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              LIST)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system field SY-LSIND defines the line selection level&lt;/P&gt;&lt;P&gt;               (basic list: SY-LSIND = 0).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA TEXT(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_AND_HIDE USING SPACE SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE TEXT.&lt;/P&gt;&lt;P&gt;                   WHEN 'List index'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING 'X' SPACE.&lt;/P&gt;&lt;P&gt;                   WHEN 'User command'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING SPACE 'X'.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUBTRACT 2 FROM SY-LSIND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING SPACE SPACE.&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CLEAR TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE / 'SY-LSIND:'.&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_WITH_COLOR USING SY-LSIND P_FLAG_LSIND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TEXT = 'List index'.&lt;/P&gt;&lt;P&gt;                 HIDE TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE / 'SY-UCOMM:'.&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TEXT = 'User command'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 HIDE TEXT.&lt;/P&gt;&lt;P&gt;                 IF SY-LSIND &amp;gt; 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE / 'PICK here to go back one list level'.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM WRITE_WITH_COLOR USING P_VALUE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                           P_FLAG_POSITIVE.&lt;/P&gt;&lt;P&gt;                 IF P_FLAG_POSITIVE = SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE P_VALUE COLOR COL_NORMAL.&lt;/P&gt;&lt;P&gt;                 ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE P_VALUE COLOR COL_POSITIVE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on whether you choose the line at SY-LSIND or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-UCOMM, the next details list contains the corresponding&lt;/P&gt;&lt;P&gt;               value with the color "positive". If the line is chosen without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               HIDE information, the list level is reduced.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is executed whenever the user presses a function key&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the list or makes an entry in the command field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Some functions are executed directly by the system and thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               cannot be processed by programs. These include:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PICK           See variant AT LINE-SELECTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PFn            See variant AT PFn&lt;/P&gt;&lt;P&gt;               /...           System command&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               %...           System command&lt;/P&gt;&lt;P&gt;               PRI            Print&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BACK           Back&lt;/P&gt;&lt;P&gt;               RW             Cancel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P...           Scroll function (e.g.: P&lt;EM&gt;, P-, PP&lt;/EM&gt;3, PS-- etc.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              Instead of this functions, you can use the&lt;/P&gt;&lt;P&gt;                              SCROLL statement in programs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since many of these system functions begin with "P", you should&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               avoid using this letter to start your own function codes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the effect is as for AT LINE-SELECTION; also, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               current function code is stored in the system field SY-UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NUMBER1 TYPE I VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NUMBER2 TYPE I VALUE  5,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     RESULT  TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;                 WRITE: / NUMBER1, '?', NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE SY-UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'ADD'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 + NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'SUBT'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 - NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'MULT'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 * NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'DIVI'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 / NUMBER2.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE 'Unknown function code'.&lt;/P&gt;&lt;P&gt;                     EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE: / 'Result:', RESULT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After entry of a function code, the appropriate processing is&lt;/P&gt;&lt;P&gt;               performed under the event AT USER-COMMAND and the result is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed in the details list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, n stands for a numeric value between 0 and 99.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is executed whenever the user presses a function key&lt;/P&gt;&lt;P&gt;               that contains the function code PFn in the interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition. The default status for lists contains some of these&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               functions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the effect is as for the variant AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;               The cursor can be on any line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. To ensure that the chosen function is executed only for&lt;/P&gt;&lt;P&gt;                  valid lines, you can check the current HIDE information.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. This variant should be used only for test or prototyping&lt;/P&gt;&lt;P&gt;                  purposes, since the default status is not normally used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Instead, you should set a program-specific status with SET&lt;/P&gt;&lt;P&gt;                  PF-STATUS. This should not contain any function codes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  beginning with "PF".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NUMBER LIKE SY-INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;                 DO 9 TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / 'Row', (2) SY-INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NUMBER = SY-INDEX.&lt;/P&gt;&lt;P&gt;                   HIDE NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT PF8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK NOT NUMBER IS INITIAL.&lt;/P&gt;&lt;P&gt;                 WRITE: / 'Cursor was in row', (2) NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CLEAR NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Events on selection screens&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... ON END OF sel&lt;/P&gt;&lt;P&gt;               3. ... ON VALUE-REQUEST FOR psel_low_high.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... ON HELP-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;               5. ... ON RADIOBUTTON GROUP radi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... ON BLOCK block&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               7. ... OUTPUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event only makes sense in reports, i.e. in programs set to&lt;/P&gt;&lt;P&gt;               type 1 in the attributes. Type 1 programs are started via a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               logical database and always have a selection screen where the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               user can specify the database selections.&lt;/P&gt;&lt;P&gt;               The event is processed when the selection screen has been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed (at the end of PAI).&lt;/P&gt;&lt;P&gt;               If an error message (MESSAGE Emnr) is sent during the event,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               all fields on the selection screen become ready for input.&lt;/P&gt;&lt;P&gt;               After further user input, AT SELECTION-SCREEN is executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should only perform very expensive checks with AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN if the program is then started (not every time&lt;/P&gt;&lt;P&gt;               the user presses ENTER). Here, you can read the system field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SSCRFIELDS-UCOMM (provided a statement TABLES SSCRFIELDS&lt;/P&gt;&lt;P&gt;               exists). If the field has one of the values 'ONLI' (= Execute)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or 'PRIN' (= Execute and Print), the report is then started,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e.  the selection screen is closed and the processing&lt;/P&gt;&lt;P&gt;               continues with START-OF-SELECTION. Remember that the selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen (and thus also AT SELECTION-SCREE N) is also processed&lt;/P&gt;&lt;P&gt;               in variant maintenance and with SUBMIT VIA JOB. You can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               determine which of these applies by calling the function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RS_SUBMIT_INFO .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the selection screen fields&lt;/P&gt;&lt;P&gt;               corresponding to the report parameter or selection criterion&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               psel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;               these fields become ready for input.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... ON END OF sel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        For each selection criterion sel on the selection screen, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can call a further screen by pressing a pushbutton. On this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen, you can enter any number of single values and ranges&lt;/P&gt;&lt;P&gt;               for the selection criterion sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When this screen has been processed (i.e. at the end of PAI for&lt;/P&gt;&lt;P&gt;               this screen), the event AT SELECTION-SCREEN ON END OF sel is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At this point, all the values entered are available in the&lt;/P&gt;&lt;P&gt;               internal table sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... ON VALUE-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With this addition, the field psel_low_high is either the name&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a report parameter or of the form sel-LOW or sel-HIGH, where&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sel is the name of a selection criterion. The effect of this is&lt;/P&gt;&lt;P&gt;               twofold:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. The pushbutton for F4 (Possible entries) appears beside the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  appropriate field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. When the user selects this pushbutton or presses F4 for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  field, the event is executed. You can thus implement a&lt;/P&gt;&lt;P&gt;                  self-programmed possible entries routine for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  input/output fields of the selection screen. If the program&lt;/P&gt;&lt;P&gt;                  contains such an event and the user presses F4, the system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  processes this rather than displaying the check table or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fixed values of the Dictionary field - even if the report&lt;/P&gt;&lt;P&gt;                  parameter or the selection option with LIKE or FOR points to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a Dictionary field. You can, for example, use the CALL&lt;/P&gt;&lt;P&gt;                  SCREEN statement to display a selection list of possible&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  values. The contents of the field psel_low_high at the end&lt;/P&gt;&lt;P&gt;                  of this processing block are copied to the appropriate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  input/output field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This addition is only allowed with report-specific parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (PARAMETERS) or selection options (SELECT-OPTIONS). For&lt;/P&gt;&lt;P&gt;               database-specific parameters or selection options, you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               achieve the same effect by using the addition VALUE-REQUEST FOR&lt;/P&gt;&lt;P&gt;               ... with the key word PARAMETERS or SELECT-OPTIONS in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               include DBxyzSEL (where xyz = name of logical database). In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, you must program the value help in the database&lt;/P&gt;&lt;P&gt;               program SAPDBxyz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... ON HELP-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with the addition ON VALUE-REQUEST the field psel_low_high&lt;/P&gt;&lt;P&gt;               is either the name of a report parameter or of the form sel-LOW&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or sel-HIGH, where sel is the name of a selection criterion.&lt;/P&gt;&lt;P&gt;               When the user presses F1 on the relevant field, the subsequent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing block is executed. You can thus implement a&lt;/P&gt;&lt;P&gt;               self-programmed help for the input/output fields of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selection screen. If the program contains such an event and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               user presses F1, the system processes this rather than&lt;/P&gt;&lt;P&gt;               displaying the documentation of the Dictionary field - even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the report parameter or the selection option with LIKE or FOR&lt;/P&gt;&lt;P&gt;               points to a Dictionary field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This addition is only allowed with report-specific parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (PARAMETERS) or selection options (SELECT-OPTIONS). For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database-specific parameters or selection options, you can&lt;/P&gt;&lt;P&gt;               achieve the same effect by using the addition HELP-REQUEST FOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... with the key word PARAMETERS or SELECT-OPTIONS in the&lt;/P&gt;&lt;P&gt;               include DBxyzSEL (where xyz = name of logical database). In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, you must program the help in the database program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAPDBxyz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... ON RADIOBUTTON GROUP radi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the radio button groups on the&lt;/P&gt;&lt;P&gt;               selection screen defined by PARAMETERS par RADIOBUTTON GROUP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               radi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;               these fields of the radio button group radi become ready for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               input again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... ON BLOCK block&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the blocks on the selection screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined by SELECTION-SCREEN BEGIN/END OF BLOCK block.&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these fields of the block block become ready for input again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In which sequence are the events AT SELECTION-SCREEN ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ..., AT SELECTION-SCREEN ON RADIOBUTTON GROUP ..., AT&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN ON BLOCK ..., AT SELECTION-SCREEN processed?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT SELECTION-SCREEN ON psel ... events assigned to the&lt;/P&gt;&lt;P&gt;               parameters or selection options are executed in the sequence&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               they are declared in the program, i.e. in the sequence they&lt;/P&gt;&lt;P&gt;               appear on the selection screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The events assigned to the radio button groups are executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               according to the first parameter of the radio button group.&lt;/P&gt;&lt;P&gt;               The events assigned to the blocks are executed "from the inside&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to the outside".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS SEL0 FOR SY-TVAR0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN BEGIN OF BLOCK BL0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECT-OPTIONS SEL1 FOR SY-TVAR1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECTION-SCREEN BEGIN OF BLOCK BL1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   PARAMETERS P0 RADIOBUTTON GROUP RADI.&lt;/P&gt;&lt;P&gt;                   PARAMETERS P1 RADIOBUTTON GROUP RADI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SELECTION-SCREEN BEGIN OF BLOCK BL2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PARAMETERS P3.&lt;/P&gt;&lt;P&gt;                   SELECTION-SCREEN END   OF BLOCK BL2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SELECT-OPTIONS SEL2 FOR SY-TVAR2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECTION-SCREEN END   OF BLOCK BL1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN END   OF BLOCK BL0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Sequence:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN ON...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    SEL0&lt;/P&gt;&lt;P&gt;                    SEL1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    RADIOBUTTON GROUP RADI&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    P3&lt;/P&gt;&lt;P&gt;                    BLOCK BL2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    SEL2&lt;/P&gt;&lt;P&gt;                    BLOCK BL1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    BLOCK BL0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN is executed at the very end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... OUTPUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is executed at PBO of the selection screen every&lt;/P&gt;&lt;P&gt;               time the user presses ENTER - in contrast to INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Therefore, this event is not suitable for setting selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen default values. Also, since AT SELECTION-SCREEN OUTPUT&lt;/P&gt;&lt;P&gt;               is first executed after the variant is imported (if a variant&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is used) and after adopting any values specified under SUBMIT&lt;/P&gt;&lt;P&gt;               in the WITH clause, changing the report parameters or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selection options in AT SELECTION-SCREEN OUTPUT would destroy&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the specified values.&lt;/P&gt;&lt;P&gt;               Here, however, you can use LOOP AT SCREEN or MODIFY SCREEN to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               change the input/output attributes of selection screen fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Output all fields of the SELECT-OPTION NAME highlighted:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS NAME FOR SY-REPID MODIF ID XYZ.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 LOOP AT SCREEN.&lt;/P&gt;&lt;P&gt;                   CHECK SCREEN-GROUP1 = 'XYZ'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SCREEN-INTENSIFIED = '1'.&lt;/P&gt;&lt;P&gt;                   MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The addition MODIF ID XYZ to the key word SELECT-OPTIONS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigns all fields of the selection option NAME to a group you&lt;/P&gt;&lt;P&gt;               can read in the field SCREEN-GROUP1. At PBO of the selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen, all these fields are then set to highlighted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In the context of event processing, the SET PF-STATUS statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               does not work. Instead, you must set a status using the&lt;/P&gt;&lt;P&gt;               function module RS_SET_SELSCREEN_STATUS or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RS_EXTERNAL_SELSCREEN_STATUS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AUTHORITY-CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AUTHORITY-CHECK OBJECT object&lt;/P&gt;&lt;P&gt;                   ID name1  FIELD f1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID name2  FIELD f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;                   ID name10 FIELD f10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Explanation of IDs:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object         Field which contains the name of the object for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              which the authorization is to be checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               name1 ...      Fields which contain the names of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 name10       authorization fields defined in the object.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1 ...         Fields which contain the values for which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 f10          authorization is to be checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK checks for one object whether the user has an&lt;/P&gt;&lt;P&gt;               authorization that contains all values of f (see SAP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorization concept).&lt;/P&gt;&lt;P&gt;               You must specify all authorizations for an object and a also a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value for each ID (or DUMMY).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system checks the values for the IDs by AND-ing them&lt;/P&gt;&lt;P&gt;               together, i.e. all values must be part of an authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigned to the user.&lt;/P&gt;&lt;P&gt;               If a user has several authorizations for an object, the values&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are OR-ed together. This means that if the CHECK finds all the&lt;/P&gt;&lt;P&gt;               specified values in one authorization, the user can proceed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Only if none of the authorizations for a user contains all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               required values is the user rejected.&lt;/P&gt;&lt;P&gt;               If the return code SY-SUBRC = 0, the user has the required&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorization and may continue.&lt;/P&gt;&lt;P&gt;               The return code is modified to suit the different error&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               scenarios. The return code values have the following meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4              User has no authorization in the SAP System for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              such an action. If necessary, change the user&lt;/P&gt;&lt;P&gt;                              master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Too many parameters (fields, values). Maximum&lt;/P&gt;&lt;P&gt;                              allowed is 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               12             Specified object not maintained in the user&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              master record.&lt;/P&gt;&lt;P&gt;               16             No profile entered in the user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               24             The field names of the check call do not match&lt;/P&gt;&lt;P&gt;                              those of an authorization. Either the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              authorization or the call is incorrect.&lt;/P&gt;&lt;P&gt;               28             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               32             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               36             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the return code value is 8 or possibly 24, inform the person&lt;/P&gt;&lt;P&gt;               responsible for the program. If the return code value is 4, 12,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               15 or 24, consult your system administrator if you think you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               should have the relevant authorization. In the case of errors&lt;/P&gt;&lt;P&gt;               28 to 36, contact SAP, since authorizations have probably been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destroyed.&lt;/P&gt;&lt;P&gt;               Individual authorizations are assigned to users in their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               respective user profiles, i.e. they are grouped together in&lt;/P&gt;&lt;P&gt;               profiles which are stored in the user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Instead of ID name FIELD f, you can also write ID name DUMMY.&lt;/P&gt;&lt;P&gt;               This means that no check is performed for the field concerned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The check can only be performed on CHAR fields. All other field&lt;/P&gt;&lt;P&gt;               types result in 'unauthorized'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Check whether the user is authorized for a particular plant. In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, the following authorization object applies:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Table OBJ: Definition of authorization object&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               M_EINF_WRK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ACTVT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WERKS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, M_EINF_WRK is the object name, whilst ACTVT and WERKS are&lt;/P&gt;&lt;P&gt;               authorization fields. For example, a user with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorizations&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               M_EINF_WRK_BERECH1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ACTVT 01-03&lt;/P&gt;&lt;P&gt;                  WERKS 0001-0003 .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can display and change plants within the Purchasing and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Materials Management areas.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Such a user would thus pass the checks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' FIELD '0002'&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '02'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' DUMMY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '01':&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               but would fail the check&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' FIELD '0005'&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '04'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To suppress unnecessary authorization checks or to carry out&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               checks before the user has entered all the values, use DUMMY&amp;gt; -&lt;/P&gt;&lt;P&gt;               as in this example. You can confirm the authorization later&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with another AUTHORITY-CHECK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; BACK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    BACK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns output position to the first line of the current page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the TOP-OF-PAGE processing.&lt;/P&gt;&lt;P&gt;               When used in connection with RESERVE x LINES, the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               returns the output position to the first output line after&lt;/P&gt;&lt;P&gt;               RESERVE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  TOWN(10)      VALUE 'New York',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CUSTOMER1(10) VALUE 'Charly',&lt;/P&gt;&lt;P&gt;                      CUSTOMER2(10) VALUE 'Sam',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      SALES1 TYPE I VALUE 1100,&lt;/P&gt;&lt;P&gt;                      SALES2 TYPE I VALUE 2200.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RESERVE 2 LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE:  TOWN, CUSTOMER1,&lt;/P&gt;&lt;P&gt;                     /       CUSTOMER2 UNDER CUSTOMER1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BACK.&lt;/P&gt;&lt;P&gt;               WRITE: 50 SALES1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      /  SALES2 UNDER SALES1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Using the positioning in WRITE in column 50, data not yet&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               output is not overwritten, but the sales volume is output after&lt;/P&gt;&lt;P&gt;               the customer names.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If you use a '/' with the first WRITE after the BACK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statement, this starts a (usually unwanted) new line.&lt;/P&gt;&lt;P&gt;               2. BACK in the TOP-OF-PAGE processing positions the cursor&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  after the standard header. Subsequent WRITE statements also&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  overwrite the lines output under TOP-OF-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to execute a BACK statement is about 1 msn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; BREAK-POINT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.BREAK-POINT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2.BREAK-POINT f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     BREAK-POINT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The BREAK-POINT statement interrupts the processing and diverts&lt;/P&gt;&lt;P&gt;               the system to debugging mode. You can then display the contents&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of all the fields at runtime and also control the subsequent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program flow.&lt;/P&gt;&lt;P&gt;               If the system is unable to branch to debugging for some reason&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (due to a background job or update), it generates a system log&lt;/P&gt;&lt;P&gt;               message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          -  After the BREAK-POINT, the system automatically performs any&lt;/P&gt;&lt;P&gt;                  restart in the database, if no COMMIT WORK was executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Since debugging sometimes switches off COMMIT WORK, you&lt;/P&gt;&lt;P&gt;                  should not place a BREAK-POINT statement in a SELECT loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In the editor, you can also set a breakpoint dynamically&lt;/P&gt;&lt;P&gt;                  without making any changes to the ABAP/4 program. These&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamic breakpoints are valid only for the current user in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the current session.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     BREAK-POINT f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Behaves like variation 1, except that the field contents of f&lt;/P&gt;&lt;P&gt;               remain in the event of any system log messages.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;               - CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a dialog module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL DIALOG dial.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a method of an external object&lt;/P&gt;&lt;P&gt;               - CALL METHOD OF obj m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a system function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL cfunc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL - Call a system function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 6  CALL cfunc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... ID id1 FIELD f1 ... ID idn FIELD fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the system function cfunc. The relevant function must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               exist in the file sapactab.h. If you change or recreate a&lt;/P&gt;&lt;P&gt;               function, you have to compile and link the SAP kernel again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this, you need the C source code files.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Normally, external programs should be called via RFC with CALL&lt;/P&gt;&lt;P&gt;               FUNCTION ... DESTINATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... ID id1 FIELD f1 ... ID idn FIELD fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Passes fields to the called program by reference. With "ID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               id1", you specify the name of a formal parameter, and with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "FIELD f1" the relevant field from the ABAP/4 program. If a&lt;/P&gt;&lt;P&gt;               formal parameter expects an internal table, the latter is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               passed in the form "FIELD tab[]".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA RESULT(8).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL 'MULTIPLY' ID 'P1'  FIELD '9999'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               ID 'P2'  FIELD '9999'&lt;/P&gt;&lt;P&gt;                               ID 'RES' FIELD RESULT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL_C_FUNCTION_NOT_FOUND: Specified system function is&lt;/P&gt;&lt;P&gt;               unknown.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The same as for CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func. func must be a 3-character&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               literal (e.g. '001')&lt;/P&gt;&lt;P&gt;               In line with SAP's enhancement concept, function modules are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               delivered empty and must be implemented by the customer (the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transactions used for this are SMOD at SAP and CMOD at the&lt;/P&gt;&lt;P&gt;               customer's).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The interface and call location are both defined by SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The customer can use Transaction CMOD to activate the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               module. The final name of the function module is compiled from&lt;/P&gt;&lt;P&gt;               EXIT_, the name of the module pool where the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               called, and the name func. For example, the statement "CALL&lt;/P&gt;&lt;P&gt;               CUSTOMER-FUNCTION '001'" in the module pool SAPMS38M calls the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module EXIT_SAPMS38M_001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL DIALOG - Call a dialog module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG dial.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING f1 FROM g1 ... fn FROM gn&lt;/P&gt;&lt;P&gt;               3. ... IMPORTING f1 TO   g1 ... fn TO   gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... USING itab ... MODE mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the dialog module dial; dial can be a literal or a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;               To edit dialog modules, select Tools -&amp;gt; ABAP/4 Workbench -&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Development -&amp;gt; Programming environ. -&amp;gt; Dialog modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Processes the first screen of the dialog module in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               background, if all required entry fields have been filled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING f1 FROM g1 ... fn FROM gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Specifies all data objects (fields, field strings, internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tables) to be passed to the dialog module. If the names in the&lt;/P&gt;&lt;P&gt;               calling and called programs are identical, you can omit "FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               g1". Otherwise, fi refers to the field in the dialog module,&lt;/P&gt;&lt;P&gt;               while gi specifies the field in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... IMPORTING f1 TO   g1 ... fn TO gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Specifies all data objects (fields, field strings, internal&lt;/P&gt;&lt;P&gt;               tables) to be returned from the dialog module. If the names in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the calling and called programs are identical, you can omit "TO&lt;/P&gt;&lt;P&gt;               g1". Otherwise, fi refers to the field in the dialog module,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               while gi specifies the field in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF ITAB,&lt;/P&gt;&lt;P&gt;                       LINE(72),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF ITAB,&lt;/P&gt;&lt;P&gt;                     TITLE LIKE SY-TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG 'RS_EDIT_TABLE'&lt;/P&gt;&lt;P&gt;                   EXPORTING SOURCETAB FROM ITAB&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                             TITLE&lt;/P&gt;&lt;P&gt;                   IMPORTING SOURCETAB TO   ITAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The system field SY-SUBRC is automatically exported and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  imported.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The unknown export/import data in the dialog module is&lt;/P&gt;&lt;P&gt;                  ignored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The data objects passed should have the same type or&lt;/P&gt;&lt;P&gt;                  structure in the calling program and the dialog module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... USING itab ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the dialog module dial and also passes the internal table&lt;/P&gt;&lt;P&gt;               itab which contains one or more screens in batch input format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If required, the dialog module may return a message to the&lt;/P&gt;&lt;P&gt;               system fields SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, ...,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-MSGV4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The specified processing mode mode mode can accept the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Display screen&lt;/P&gt;&lt;P&gt;                  'E'  Display only if an error occurs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'N'  No display&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition MODE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The processing was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: The dialog ended with an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  All lock arguments are automatically exported and imported.&lt;/P&gt;&lt;P&gt;                  In contrast to a transaction, a dialog module does not form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  its own LUW (see Transaction processing). Any update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  requests which occur there are not processed until the&lt;/P&gt;&lt;P&gt;                  calling program executes a COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  To return from the dialog module, use the key word LEAVE&lt;/P&gt;&lt;P&gt;                  PROGRAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NOT_FOUND: The called dialog module is unknown.&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_WRONG_TDCT_MODE: The called dialopg module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  contains errors (incorrect entry in table TDCT).&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NAME_TOO_LONG: The name of a parameter is longer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than permitted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NO_CONTAINER: No memory for parameter transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CALL TRANSACTION, CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL - call a function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a different mode (asynchronous Remote&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function Call):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CALL FUNCTION func STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in the update task:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a remote system (Remote Function&lt;/P&gt;&lt;P&gt;               Call, RFC):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Asynchronous call to a function module with transactional&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing (transactional Remote Function Call):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module which can be activated in the context of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               enhancements:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... EXPORTING  p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... IMPORTING  p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... TABLES     p1 = itab1    ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... CHANGING   p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;               5. ... EXCEPTIONS except1 = rc1 ... exceptn = rcn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func; func can be a literal or a&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To edit function modules, select Tools -&amp;gt; ABAP/4 Workbench -&amp;gt;&lt;/P&gt;&lt;P&gt;               Function Library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The assignment of parameters is by name (p1, p2, etc.), not by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sequence.&lt;/P&gt;&lt;P&gt;               To return from the function module, you use the key word EXIT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unless EXIT occurs in a loop or a subroutine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You can use the editor commands "SHOW FUNCTION func" and "SHOW&lt;/P&gt;&lt;P&gt;               FUNCTION *" to get information about the function module func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or any other function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes fields, field strings or internal tables to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function module. You must declare the parameters p1 ... pn&lt;/P&gt;&lt;P&gt;               in the function interface as import parameters. When you call&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function module, you must assign values to all import&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters which are not flagged in the interface definition as&lt;/P&gt;&lt;P&gt;               optional and do not have any default values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... IMPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        IMPORTING passes fields, field strings or internal tables from&lt;/P&gt;&lt;P&gt;               the function module back to the calling program. The parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               p1 ... pn must be declared as export parameters in the function&lt;/P&gt;&lt;P&gt;               interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. The parameters p1&lt;/P&gt;&lt;P&gt;               ... pn must be declared as table parameters in the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               interface. When you call the function module, you must assign&lt;/P&gt;&lt;P&gt;               values to all table parameters which are not flagged as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               optional in the interface definition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... CHANGING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CHANGING passes fields, field strings or internal tables to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module and the changed values are returned. The&lt;/P&gt;&lt;P&gt;               parameters p1 ... pn must be declared as CHANGING parameters in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function interface. When you call the function module, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must assign values to all CHANGING parameters of the function&lt;/P&gt;&lt;P&gt;               module which are not flagged as optional in the interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition and have no default values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... EXCEPTIONS except1 = rc1 ...&lt;/P&gt;&lt;P&gt;               exceptn = rcn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXCEPTIONS lists the exceptions to be handled by the calling&lt;/P&gt;&lt;P&gt;               program itself. At the end of the exception list, you can use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               OTHERS to refer to all the remaining exceptions.&lt;/P&gt;&lt;P&gt;               If one of the listed exceptions occurs, SY-SUBRC is set to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               appropriate value rc (a number literal!) and control passes&lt;/P&gt;&lt;P&gt;               back to the calling program. By specifying a return code, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can divided the exceptions into classes. With the second form,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               without "=rc", SY-SUBRC is set to a value other than 0 if an&lt;/P&gt;&lt;P&gt;               exception occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the function module triggers an exception (with the&lt;/P&gt;&lt;P&gt;               statements RAISE and MESSAGE ... RAISING) and the exception is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not to be handled by the calling program itself,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  RAISE terminates the program with a runtime error;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  MESSAGE ... RAISING outputs the message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The following EXCEPTIONS are predefined by the system and have&lt;/P&gt;&lt;P&gt;               a special meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  OTHERS: Covers all user-defined exceptions in the called&lt;/P&gt;&lt;P&gt;                  function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ERROR_MESSAGE: This exception instructs the system to ignore&lt;/P&gt;&lt;P&gt;                  S messages, I messages and W messages until return from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  function module (although they still appear in the log&lt;/P&gt;&lt;P&gt;                  during background processing). When an E message or an A&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  message occurs, the called function module terminates, as if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the exception ERROR_MESSAGE has been triggered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;               DATA: FIELD(30) VALUE 'Example: This is a field.',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     head(30).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL FUNCTION   'STRING_SPLIT'&lt;/P&gt;&lt;P&gt;                    EXPORTING  DELIMITER = ':'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               STRING    = FIELD&lt;/P&gt;&lt;P&gt;                    IMPORTING  HEAD      = HEAD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               TAIL      = FIELD&lt;/P&gt;&lt;P&gt;                    EXCEPTIONS NOT_FOUND = 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               OTHERS    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CASE SY-SUBRC.&lt;/P&gt;&lt;P&gt;                 WHEN 1. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WHEN 2. ....&lt;/P&gt;&lt;P&gt;               ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB1 OCCURS 10, X, END OF TAB1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF TAB2 OCCURS 20, Y, END OF TAB2.&lt;/P&gt;&lt;P&gt;               CALL FUNCTION 'ITAB_COPY'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    TABLES   TAB_IN    = TAB1&lt;/P&gt;&lt;P&gt;                             TAB_OUT   = TAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NOT_FOUND: The called function is unknown.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_VB: Only update function modules can be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  called in the update task.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NOT_ACTIVE: The called function is known, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_PARM_MISSING: The function expects a&lt;/P&gt;&lt;P&gt;                  parameter, but none was passed by the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_PARM_UNKNOWN: The calling program passed a&lt;/P&gt;&lt;P&gt;                  parameter which the function does not recognize.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_LENG: The function expected a&lt;/P&gt;&lt;P&gt;                  different actual parameter length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_TYPE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_GEN_TYP: The actual parameter type&lt;/P&gt;&lt;P&gt;                  does not satisfy the requirements of the function interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_WRONG_ALIGNMENT: An actual parameter does not&lt;/P&gt;&lt;P&gt;                  satisfy the alignment requirements of the corresponding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  formal parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_BASE_LITL: A literal was supposed to be passed&lt;/P&gt;&lt;P&gt;                  to a structured formal parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in new mode (asynchronous Remote&lt;/P&gt;&lt;P&gt;               Function Call)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CALL FUNCTION func STARTING NEW TASK taskname dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in the update task&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a remote system (Remote Function&lt;/P&gt;&lt;P&gt;               Call)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Asynchronous call to function module with transaction-like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing (transaction-like Remote Function Call)&lt;/P&gt;&lt;P&gt;               5. CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module that can be activated within framework&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of enhancement concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING  p1 = f1    ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... TABLES     p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Flags the function module func to be run asynchronously. It is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not executed at once, but the data passed with EXPORTING bzw.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES is placed in a database table and the next COMMIT WORK&lt;/P&gt;&lt;P&gt;               then executes the function module in another work process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This variant applies only from R/3 Release 3.0. Both partner&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               systems (the client and the server systems) must have a Release&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.0 version of the R/3 System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the specified destination, the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed either in another R/3 System or as a C-implemented&lt;/P&gt;&lt;P&gt;               function module. Externally callable function modules must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               flagged as such in the function library (of the target system).&lt;/P&gt;&lt;P&gt;               Since each destination defines its own program context, further&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calls to the same or different function modules with the same&lt;/P&gt;&lt;P&gt;               destination can access the local memory (global data) of these&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields and field strings from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calling program to the function module. In the function module,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the formal parameters are defined as import parameters. Default&lt;/P&gt;&lt;P&gt;               values must be assigned to all import parameters of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module in the interface definition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters of the function module must contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes&lt;/P&gt;&lt;P&gt;               If several function module calls with the same destination are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified before COMMIT WORK, these form an LUW in the target&lt;/P&gt;&lt;P&gt;               system.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type 2 destinations (R/3 - R/2 connections) cannot be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The same as with CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func; this can be activated. func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must be a 3-character literal (e.g. '001').&lt;/P&gt;&lt;P&gt;               The function modules are delivered empty within the framework&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the enhancement concept and must be implemented by the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               customer. They are maintained with the Transactions SMOD (at&lt;/P&gt;&lt;P&gt;               SAP) and CMOD (at the csutomer's).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAP determines both the interface and the place where the call&lt;/P&gt;&lt;P&gt;               is made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          By using the Transaction CMOD, the customer can activate the&lt;/P&gt;&lt;P&gt;               function module. The final name of the function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               comprises EXIT_, the name of the module pool where the function&lt;/P&gt;&lt;P&gt;               module is called, and the name func. For example, the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "CALL CUSTOMER-FUNCTION '001'" in the module pool SAPMS38M&lt;/P&gt;&lt;P&gt;               calls the function module EXIT_SAPMS38M_001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. The same as with CALL FUNCTION func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the specified destination, the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed in another R/3 or R/2 System. Externally callable&lt;/P&gt;&lt;P&gt;               function modules must be flagged as such in the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               library (of the target system).&lt;/P&gt;&lt;P&gt;               Since each destination defines its own program context, further&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calls to the same or different function modules with the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destination can access the local memory (global data) of these&lt;/P&gt;&lt;P&gt;               function modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can maintain existing destinations by selecting Tools -&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Administration -&amp;gt; Administration -&amp;gt; Network -&amp;gt; RFC&lt;/P&gt;&lt;P&gt;               destinations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Special destinations:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The destination NONE refers to the calling system. Function&lt;/P&gt;&lt;P&gt;                  modules called with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'NONE' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are executed in the system of the calling program, but in&lt;/P&gt;&lt;P&gt;                  their own program context.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can use the destination BACK if the current program was&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  already called by RFC. The, BACK refers back to the calling&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  program:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'BACK' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  If the program is not called from a "remote" source, the&lt;/P&gt;&lt;P&gt;                  exception COMMUNICATION_FAILURE is triggered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Each R/3 System has a standard name. This is formed from the&lt;/P&gt;&lt;P&gt;                  host name (e.g. SY-HOST), the system name (SY-SYSID) and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system nummer (two-character number assigned on installation&lt;/P&gt;&lt;P&gt;                  of the applications server).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  You can use this name as a destination. For example, you can&lt;/P&gt;&lt;P&gt;                  call the function module func in the system C11 on the host&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  sapxyz with system number 00 as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'sapxyz_C11_00' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can also use saprouter path names as destinations (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  also saprouter documentation).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Parameter passing. When you pass data to an externally called&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module, there are some differences to the normal&lt;/P&gt;&lt;P&gt;               function module call:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  With table parameters, only the table itself is passed, not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If one of the parameters of the interface of an externally&lt;/P&gt;&lt;P&gt;                  called function module is not specified when called, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  import parameters are set to their initial value. If no&lt;/P&gt;&lt;P&gt;                  default value was given in the interface definition, TABLES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parameters are defined as an empty table and unspecified&lt;/P&gt;&lt;P&gt;                  export parameters are lost.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Passing structured data objects. Since transport to another&lt;/P&gt;&lt;P&gt;               system may require data conversion, the structure of field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               strings and internal tables must be known to the runtime system&lt;/P&gt;&lt;P&gt;               when the call is made. The structure of a field string or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table is not known if it was defined with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    ... LIKE structure,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               if the structure passed was passed to the subroutine with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               explicit addition STRUCTURE, or if it is a parameter of a&lt;/P&gt;&lt;P&gt;               function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In these cases, external calls can result in a conversion&lt;/P&gt;&lt;P&gt;               error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          C interface. You can call externally callable function modules&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from C programs. It is also possible to store function modules&lt;/P&gt;&lt;P&gt;               in a C program and call them via CALL FUNCTION ... DESTINATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this purpose, SAP provides a C interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Function module calls with the addition DESTINATION can handle&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               two special system exceptions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SYSTEM_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              This is triggered if a system crash occurs on&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              the receiving side.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              This is triggered if there is a connection or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              communication problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In both cases, you can use the optional addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    ... MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to receive a description of the error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_DEST_TYPE:Destination type not allowed.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_DEST:Destination does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_LB_DEST:Destination (in 'Load Balancing'&lt;/P&gt;&lt;P&gt;                  mode) does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_TABINFO:Data error (info internal table)&lt;/P&gt;&lt;P&gt;                  during 'Remote Function Call'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     CALL FUNCTION func ...STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... PERFORMING form ON END OF TASK&lt;/P&gt;&lt;P&gt;               3. ... EXPORTING  p1 = f1    ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... TABLES     p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;               5. ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Starts the function module func asynchronously in a new mode.&lt;/P&gt;&lt;P&gt;               In contrast to normal function module calls, the calling&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program resumes processing as soon as the function module is&lt;/P&gt;&lt;P&gt;               started in the target system. It does not wait until the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module has finished. Through CALL SCREEN, the called&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module can, for example, display a screen and thus&lt;/P&gt;&lt;P&gt;               interact with the user.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         This variant applies only from R/3 Release 3.0. Both partner&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               systems (the client and the server systems) must have a Release&lt;/P&gt;&lt;P&gt;               3.0 version of the R/3 System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With this variant, the called function module must also be&lt;/P&gt;&lt;P&gt;               flagged in the Function Library as externally callable, even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               it is executed locally (without the addition DESTINATION).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable. The R/3 System&lt;/P&gt;&lt;P&gt;               where the function module is executed depends on the specified&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destination. Externally callable function modules must be&lt;/P&gt;&lt;P&gt;               flagged as such in the Function Library (of the target system).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... PERFORMING form ON END OF TASK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Whereas the parameters for receiving results (i.e. IMPORTING&lt;/P&gt;&lt;P&gt;               and TABLES parameters) are specified directly as additions in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the case of "conventional" function modules (see variant 2),&lt;/P&gt;&lt;P&gt;               these are logged in the FORM routine form when making an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               asynchronous call (see RECEIVE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a function module returns no result, this addition (...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORMING form ON END OF TASK) can be omitted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields and field strings from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calling program to the function module. In the function module,&lt;/P&gt;&lt;P&gt;               the formal parameters are defined as import parameters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;               parameters of the function module must contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        While any exceptions arising in the called function module are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               handled by the second addition (in the FORM routine), this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               addition can handle two special system exceptions, as with&lt;/P&gt;&lt;P&gt;               function module calls with the addition DESTINATION:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SYSTEM_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              is triggered, if a system crash occurs on the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              receiving side.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              is triggered if there is a connection or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              communication problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In both cases, you can get a description of the error with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               optional addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ... MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: MSG_TEXT(80). "Message text&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Asynchronous call to Transaction SM59 --&amp;gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create a new session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'&lt;/P&gt;&lt;P&gt;                 DESTINATION 'NONE'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 EXPORTING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TCODE = 'SM59'&lt;/P&gt;&lt;P&gt;                 EXCEPTIONS COMMUNICATION_FAILURE MESSAGE MSG_TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF SY-SUBRC NE 0.&lt;/P&gt;&lt;P&gt;                   WRITE: MSG_TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: 'O.K.'.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_TASK_YET_OPEN: Task already open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... EXPORTING  p1 = f1     ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... TABLES     p1 = itab1  ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Flags the function module func for execution in the update&lt;/P&gt;&lt;P&gt;               task. It is not executed at once, but the data passed with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               EXPORTING or TABLES is placed in a database table and a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               subsequent COMMIT WORK then causes the function module to be&lt;/P&gt;&lt;P&gt;               executed by the update task. Update function modules must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               flagged as such in the function library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Values of fields and field strings specified under EXPORTING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are passed from the calling program to the function module. In&lt;/P&gt;&lt;P&gt;               the function module, the formal parameters are defined as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               import parameters. In the interface definition, default values&lt;/P&gt;&lt;P&gt;               must be assigned to all import parameters of the update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect         TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters of the function module must have values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With update function modules, both import parameters and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               exceptions are ignored when the call is made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Administration transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL METHOD - Call a method of an external object&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL METHOD OF obj m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... = f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... NO FLUSH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the method m of the object obj. m can be a literal or a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Normally, all consecutive OLE statements are buffered by the&lt;/P&gt;&lt;P&gt;               ABAP/4 processor and sent to the presentation server in bundled&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               form. This means that it is possible for a statement to refer&lt;/P&gt;&lt;P&gt;               to the results of preceding statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In debugging, however, you should remember that the values of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the return parameters cannot be displayed until directly before&lt;/P&gt;&lt;P&gt;               execution of the first ABAP/4 statement external to OLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Even a command which refers to an object not yet generated by&lt;/P&gt;&lt;P&gt;               any OLE statement terminates the bundling.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value of SY-SUBRC indicates whether all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               bundled commands have been successfully executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  All commands were successfully executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 1:  When communicating with the presentation&lt;/P&gt;&lt;P&gt;                              server, a system error occurred. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              system field SY-MSGLI contains a short&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              description of the error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 2:  A method call resulted in an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 3:  Setting a property resulted in an error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Reading a property resulted in an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the last 3 cases, a dialog box containing an error note is&lt;/P&gt;&lt;P&gt;               displayed on the presentation server.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD belongs to a group of key words which allow you to&lt;/P&gt;&lt;P&gt;               process external objects with ABAP/4. At present, only the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object model OLE2 is supported, i.e. all objects must be of&lt;/P&gt;&lt;P&gt;               type OLE2_OBJECT. This type and other necessary data are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined in the include program OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... = f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return value of the method in the variable f. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               return value can also be of type OLE2_OBJECT. This addition&lt;/P&gt;&lt;P&gt;               must always come before other additions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields to the parameters of the&lt;/P&gt;&lt;P&gt;               method. p1, p2, ... are either key word parameters or position&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If assignment of parameters is by sequence, p1, p2, ... must&lt;/P&gt;&lt;P&gt;               begin with "#", followed by the position number of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameter. At present, only position parameters are supported.&lt;/P&gt;&lt;P&gt;               The export parameters always come at the end of the statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... NO FLUSH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The addition NO FLUSH continues the collection process, even if&lt;/P&gt;&lt;P&gt;               the next command is not an OLE statement. This means that you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can set a series of properties in a loop and download them to&lt;/P&gt;&lt;P&gt;               the presentation server in a single transport operation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you do not use NO FLUSH, you must ensure that you do not&lt;/P&gt;&lt;P&gt;               rely on the contents of return parameters not yet filled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Also, all objects must be initialized in a bundle, i.e. they&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must be generated by an OLE call that has already been&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Every FREE statement always causes a download of the buffer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Open an EXCEL file with the method 'Open'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA EXCEL    TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;               DATA WORKBOOK TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT   EXCEL    'Excel.Application'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD  OF EXCEL    'Workbooks' = WORKBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD  OF WORKBOOK 'Open'    EXPORTING #1 = 'C:\EX1.XLS'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SET PROPERTY&lt;/P&gt;&lt;P&gt;               GET PROPERTY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT&lt;/P&gt;&lt;P&gt;               FREE OBJECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL SCREEN - Call a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... STARTING AT x1 y1 ... ENDING AT x2 y2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the screen scr; scr is the number of a screen of the main&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program. You use SET SCREEN 0. or LEAVE SCREEN. to define the&lt;/P&gt;&lt;P&gt;               return from the CALL screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... STARTING AT x1 y1  ENDING AT x2 y2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The coordinates x1, y1 (start column and start line in the&lt;/P&gt;&lt;P&gt;               window) and x2, y2 (end column and end line in the window)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               define the size and position of the CALL screen ("top left -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               bottom right"). Besides these coordinates, you can also see the&lt;/P&gt;&lt;P&gt;               contents of the primary window, but cannot perform any action&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          -  If "ENDING AT ..." is not specified, suitable values are&lt;/P&gt;&lt;P&gt;                  substituted for x2 and y2, taking into account the size of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the called screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DYNP_TOO_MANY_CALL_SCREENS: No further screen level (call&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen); the maximum number of nested screen levels is&lt;/P&gt;&lt;P&gt;               restricted to 50 at present.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL TRANSACTION - Call a transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... USING itab&lt;/P&gt;&lt;P&gt;               2a.     ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2b.     ... UPDATE upd&lt;/P&gt;&lt;P&gt;               2c.     ... MESSAGES INTO messtab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the SAP Transaction tcod; tcod can be a literal or a&lt;/P&gt;&lt;P&gt;               variable. To return from the called transaction, you use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key word LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL TRANSACTION 'SP01'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Skips the first screen in the transaction (provided all the&lt;/P&gt;&lt;P&gt;               required fields have been assigned values by the SPA/GPA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               process).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... USING itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the Transaction tcod and passes the internal table itab,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which contains one or several screens in batch input format.&lt;/P&gt;&lt;P&gt;               If necessary, one of the messages output by the Transaction is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               returned to the fields SY-MSGID, SY-MSGTY SY-MSGNO, SY-MSGV1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ..., SY-MSGV4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  Processing was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: Transaction ended with an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          A called Transaction ends successfully for the following&lt;/P&gt;&lt;P&gt;               reasons:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMMIT WORK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Next screen = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. LEAVE TO TRANSACTION '    '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2a   ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified processing mode can accept the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Display screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'E'  Display screen only if an error occurs&lt;/P&gt;&lt;P&gt;                  'N'  No display&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition MODE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               set to 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2b   ... UPDATE upd&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified update mode upd defines the update type. This can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               have one of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Asynchronous update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'S'  Synchronous update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition UPDATE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;               set to 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2c   ... MESSAGES INTO messtab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified internal table contains all system messages that&lt;/P&gt;&lt;P&gt;               occur during CALL TRANSACTION USING ... . The internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               messtab must have the structure BDCMSGCOLL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA BEGIN OF BDCDATA OCCURS 100.&lt;/P&gt;&lt;P&gt;                      INCLUDE STRUCTURE BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA END OF BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA BEGIN OF MESSTAB OCCURS 10.&lt;/P&gt;&lt;P&gt;                      INCLUDE STRUCTURE BDCMSGCOLL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA END OF MESSTAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA REPORT(8).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-PROGRAM  = 'SAPMS38M'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-DYNPRO   = '0100'.&lt;/P&gt;&lt;P&gt;               BDCDATA-DYNBEGIN = 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR BDCDATA.&lt;/P&gt;&lt;P&gt;               BDCDATA-FNAM     = 'RS38M-PROGRAMM'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-FVAL     = REPORT.&lt;/P&gt;&lt;P&gt;               APPEND BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL TRANSACTION 'SE38'  USING BDCDATA  MODE 'N'&lt;/P&gt;&lt;P&gt;                                        MESSAGES INTO MESSTAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_NOT_FOUND: Transaction is unknown.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_IS_MENU: Transaction is a menu.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_USING_NESTED: Recursive CALL TRANSACTION&lt;/P&gt;&lt;P&gt;                  USING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SUBMIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CASE f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Case distinction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the current contents of a field, this statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executes one of several alternative processing branches. The&lt;/P&gt;&lt;P&gt;               field whose contents determine how the subsequent processing is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified after CASE; the individual processing branches are&lt;/P&gt;&lt;P&gt;               introduced by WHEN, followed by the value to be tested. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entire block is concluded by ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The structure of the CASE statement is as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CASE f.&lt;/P&gt;&lt;P&gt;                 WHEN f1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WHEN f2.&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;               ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               On reaching such a CASE statement, the processor compares f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with f1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f = f1, it executes the processing block between "WHEN f1."&lt;/P&gt;&lt;P&gt;               and the next WHEN statement. If there are no further WHEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statements, it executes the processing block up to the ENDCASE&lt;/P&gt;&lt;P&gt;               statement and then continues with any subsequent processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f &amp;lt;&amp;gt; f1, the processor compares the field f2 in the next&lt;/P&gt;&lt;P&gt;               WHEN statement with f and proceeds as with f1 and so on.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Although f should be a variable, f1 can be a variable or a&lt;/P&gt;&lt;P&gt;               literal. For the comparison "f = f1", the rules are the same as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               for IF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               There is a second variant of the WHEN statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               No more than one such WHEN statement is allowed within a CASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               block. The "WHEN OTHERS" processing block is always concluded&lt;/P&gt;&lt;P&gt;               by ENDCASE, i.e. no further WHEN statements can follow.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The "WHEN OTHERS" processing block is executed only if none of&lt;/P&gt;&lt;P&gt;               the preceding WHEN blocks have been executed, i.e. if all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               previous comparisons ("f = ...) have returned a negative&lt;/P&gt;&lt;P&gt;               result.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: ONE   TYPE I VALUE 1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     THREE TYPE P VALUE 3.&lt;/P&gt;&lt;P&gt;               DO 5 TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE SY-INDEX.&lt;/P&gt;&lt;P&gt;                   WHEN ONE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE / 'That is'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 2.&lt;/P&gt;&lt;P&gt;                     WRITE   'a'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN THREE.&lt;/P&gt;&lt;P&gt;                     WRITE 'good'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE 'example'.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE '!'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: "That is a good example ! !"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. You can nest several CASE statements and even combine them&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  with IF statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The statement "WHEN: f1, f2." does not make sense. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  example below shows that the block belonging to "WHEN f1" is&lt;/P&gt;&lt;P&gt;                  empty:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    WHEN f1.&lt;/P&gt;&lt;P&gt;                    WHEN f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       IF, ELSEIF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Within loops and events&lt;/P&gt;&lt;P&gt;               - CHECK logexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Special for reports with logical databases&lt;/P&gt;&lt;P&gt;               - CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK - within loops&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CHECK logexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CHECK evaluates the subsequent logical expression. If it is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               true, the processing continues with the next statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In loop structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DO     ... ENDDO&lt;/P&gt;&lt;P&gt;               WHILE  ... ENDWHILE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP   ... ENDLOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT ... ENDSELECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHECK with a negative outcome terminates the current loop pass&lt;/P&gt;&lt;P&gt;               and goes back to the beginning of the loop to start the next&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pass, if there is one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM     ...  ENDFORM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION ...  ENDFUNCTION&lt;/P&gt;&lt;P&gt;               MODULE   ...  ENDMODULE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHECK with a negative outcome terminates the routine or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               modularization unit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If CHECK is not in a loop or a routine or a modularization&lt;/P&gt;&lt;P&gt;               unit, a negative logical expression terminates the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event. In contrast, the statement REJECT terminates the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event, even from loops or subroutines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a CHECK produces a negative result in a GET event, the GET&lt;/P&gt;&lt;P&gt;               events in subordinate tables of the logical database are not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed either.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CONTINUE, EXIT, REJECT, STOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK - special for reports with logical databases&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Checks the selection criterion requested by the statement&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS sel ....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement is equivalent to f IN sel, if sel was defined by&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS sel FOR f and can be used anywhere in logical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               expressions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the result of this check is negative, the processing in this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event is terminated and the GET events for any subordinate&lt;/P&gt;&lt;P&gt;               database tables are not processed either.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant of the CHECK statement should be used only if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               logical database for the corresponding table does not support&lt;/P&gt;&lt;P&gt;               dynamic selections (see CHECK SELECT-OPTIONS), or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS with the addition NO DATABASE SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the relevant record is not read from the database&lt;/P&gt;&lt;P&gt;               and made available to the program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Called only after a GET event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement checks all the selections for SELECT-OPTIONS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               where the reference field after FOR belongs to the current&lt;/P&gt;&lt;P&gt;               table dbtab (specified after GET. However, this applies only if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the logical database for dbtab does not support dynamic&lt;/P&gt;&lt;P&gt;               selections. Otherwise, the selections are passed directly to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the logical database (with the exception: addition "NO DATABASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION" to SELECT-OPTIONS).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant of the CHECK statement only makes sense if the&lt;/P&gt;&lt;P&gt;               logical database does not support dynamic selections for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding table or SELECT-OPTIONS are defined with the&lt;/P&gt;&lt;P&gt;               addition "NO DATABASE SELECTION".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can determine from the ABAP/4 Development Workbench whether&lt;/P&gt;&lt;P&gt;               dynamic selections are defined and, if so, for which logical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database tables by selecting Development -&amp;gt; Programming&lt;/P&gt;&lt;P&gt;               environ. -&amp;gt; Logical databases followed by Extras -&amp;gt; Dynamic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selections.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       The logical database F1S of the demo flight reservation system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains the tables SPFLI with, and the table SFLIGHT without,&lt;/P&gt;&lt;P&gt;               dynamic selections.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SPFLI, SFLIGHT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SF_PRICE  FOR SFLIGHT-PRICE,&lt;/P&gt;&lt;P&gt;                 SP_CARR   FOR SPFLI-CARRID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SP_FROM   FOR SPFLI-CITYFROM NO DATABASE SELECTION,&lt;/P&gt;&lt;P&gt;                 SP_DEPT   FOR SPFLI-DEPTIME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since dynamic selections are defined with the table SPFLI, but&lt;/P&gt;&lt;P&gt;               not with the table SFLIGHT, the following procedure applies:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET SFLIGHT.&lt;/P&gt;&lt;P&gt;                 CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This CHECK statement is equivalent to the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SF_PRICE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET SPFLI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the CHECK statement is equivalent to the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SP_FROM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With CHECK SELECT-OPTIONS, fields from superior tables in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database hierarchy are not &lt;SPAN __jive_emoticon_name="alert"&gt;&lt;/SPAN&gt; checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CHECK_SELOPT_ILLEGAL_OPTION: Wrong "OPTION" in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  SELECT-OPTIONS or RANGES table&lt;/P&gt;&lt;P&gt;               -  CHECK_SELOPT_ILLEGAL_SIGN: Wrong "SIGN" in SELECT-OPTIONS or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  RANGES table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CONTINUE, EXIT, REJECT, STOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CLEAR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CLEAR f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... WITH g&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... WITH NULL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Resets the contents of f to its initial value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For predefined types (see DATA), the following initial values&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are used:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type C:      '  ... ' (blank character)&lt;/P&gt;&lt;P&gt;                 Type N:      '00...0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type &lt;span class="lia-unicode-emoji" title=":anguished_face:"&gt;😧&lt;/span&gt;      '00000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type T:      '000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type I:      0&lt;/P&gt;&lt;P&gt;                 Type P:      0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type F:      0.0E+00&lt;/P&gt;&lt;P&gt;                 Type X:      0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f is a field string, each component field is reset to its&lt;/P&gt;&lt;P&gt;               initial value. If it is an internal table without a header&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line, the entire table is deleted together with all its&lt;/P&gt;&lt;P&gt;               entries. If, however, f is an internal table with a header&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line, only the sub-fields in the table header entry are reset&lt;/P&gt;&lt;P&gt;               to their initial values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: TEXT(10)       VALUE 'Hello',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NUMBER TYPE I  VALUE 12345,&lt;/P&gt;&lt;P&gt;                     ROW(10) TYPE N VALUE '1234567890',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF PLAYER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(10)      VALUE 'John',&lt;/P&gt;&lt;P&gt;                       TEL(8) TYPE N VALUE '08154711',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       MONEY  TYPE P VALUE 30000,&lt;/P&gt;&lt;P&gt;                     END   OF PLAYER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               CLEAR: TEXT, NUMBER, PLAYER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field contents are now as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ROW          = '1234567890'&lt;/P&gt;&lt;P&gt;               TEXT         = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NUMBER       = 0&lt;/P&gt;&lt;P&gt;               PLAYER-NAME  = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PLAYER-TEL   = '00000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PLAYER-MONEY = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When CLEAR references an internal table itab with a header&lt;/P&gt;&lt;P&gt;                  line, it only resets the sub-fields in the header entry to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  their initial values (as mentioned above). The individual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table entries remain unchanged.&lt;/P&gt;&lt;P&gt;                  To delete the entire internal table together with all its&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  entries, you can use CLEAR itab[] or REFRESH itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Within a logical expression, you can use f IS INITIAL to&lt;/P&gt;&lt;P&gt;                  check that the field f contains the initial value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  appropriate for its type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Variables are normally initialized according to their type,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  even if the specification of an explicit initial value&lt;/P&gt;&lt;P&gt;                  (addition "... VALUE lit" of the DATA statement) is missing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For this reason, it is not necessary to initialize variables&lt;/P&gt;&lt;P&gt;                  again with CLEAR after defining them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... WITH g&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The field f is filled with the value of the first byte of the&lt;/P&gt;&lt;P&gt;               field g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... WITH NULL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Fills the field with hexadecimal zeros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should use this addition with particular care because the&lt;/P&gt;&lt;P&gt;               fields of most data types thus receive values which are really&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               invalid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR requires about 3 msn (standardized microseconds) of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime to process a field of type C with a length of 10 and&lt;/P&gt;&lt;P&gt;               about 2 msn to process a field of the type I. To delete an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table with 15 fields, it needs about 5 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CLOSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CLOSE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CLOSE CURSOR c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 1  CLOSE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Closes the file dsn, ignoring any errors which may occur. CLOSE&lt;/P&gt;&lt;P&gt;               is required only if you want to edit dsn several times. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               further details, see the documentation for OPEN DATASET.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 2  CLOSE CURSOR c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Closes the database cursor c. CLOSE CURSOR is only required if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               you want to read sets of database records several times with c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For further information, refer to the documentation on OPEN&lt;/P&gt;&lt;P&gt;               CURSOR and FETCH.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLOSE CURSOR belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CNT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    ... CNT(h) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CNT(h) is not a statement, but a field which is automatically&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               created and filled by the system if f is a sub-field of an&lt;/P&gt;&lt;P&gt;               extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CNT(h) can only be addressed from within a LOOP on a sorted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If h is a non-numeric field (see also ABAP/4 number types) from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field group HEADER and part of the sort key of the extract&lt;/P&gt;&lt;P&gt;               dataset, the end of a control level (AT END OF, AT LAST) is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               such that CNT(h) contains the number of different values which&lt;/P&gt;&lt;P&gt;               the field h has accepted in the group, i.e. the number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               records in the group for which the field f has changed its&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Related   SUM(g)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COLLECT [wa INTO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... SORTED BY f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        COLLECT is used to create unique or compressed datsets. The key&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields are the default key fields of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use only COLLECT to fill an internal table, COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               makes sure that the internal table does not contain two entries&lt;/P&gt;&lt;P&gt;               with the same default key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If, besides its default key fields, the internal table contains&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               number fields (see also ABAP/4 number types), the contents of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these number fields are added together if the internal table&lt;/P&gt;&lt;P&gt;               already contains an entry with the same key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the default key of an internal table processed with COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is blank, all the values are added up in the first table line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa INTO, the entry to be processed is taken from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the explicitly specified work area wa. If not, it comes from&lt;/P&gt;&lt;P&gt;               the header line of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After COLLECT, the system field SY-TABIX contains the index of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the - existing or new - table entry with default key fields&lt;/P&gt;&lt;P&gt;               which match those of the entry to be processed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. COLLECT can create unique or compressed datasets and should&lt;/P&gt;&lt;P&gt;                  be used precisely for this purpose. If uniqueness or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  compression are unimportant, or two values with identical&lt;/P&gt;&lt;P&gt;                  default key field values could not possibly occur in your&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  particular task, you should use APPEND instead. However, for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a unique or compressed dataset which is also efficient,&lt;/P&gt;&lt;P&gt;                  COLLECT is the statement to use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If you process a table with COLLECT, you should also use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  COLLECT to fill it. Only by doing this can you guarantee&lt;/P&gt;&lt;P&gt;                  that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the internal table will actually be unique or compressed, as&lt;/P&gt;&lt;P&gt;                  described above and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT will run very efficiently.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. If you use COLLECT with an explicitly specified work area,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  it must be compatible with the line type of the internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Compressed sales figures for each company&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Duck'.  COMPANIES-SALES = 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Tiger'. COMPANIES-SALES = 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Duck'.  COMPANIES-SALES = 30.&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table COMPANIES now has the following appearance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME         ! SALES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Duck         !    40&lt;/P&gt;&lt;P&gt;               Tiger        !    20&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... SORTED BY f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        COLLECT ... SORTED BY f is obsolete and should no longer be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               used. Use APPEND ... SORTED BY f which has the same meaning.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. When using internal tables with a header line, avoid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unnecessary assignments to the header line. Whenever&lt;/P&gt;&lt;P&gt;                  possible, use statements which have an explicit work area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, "APPEND wa TO itab." is approximately twice as&lt;/P&gt;&lt;P&gt;                  fast as "itab = wa. APPEND itab.". The same applies to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  COLLECT and INSERT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The cost of a COLLECT in terms of performance increases with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the width of the default key needed in the search for table&lt;/P&gt;&lt;P&gt;                  entries and the number of numeric fields with values which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  have to be added up, if an entry is found in the internal&lt;/P&gt;&lt;P&gt;                  table to match the default key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  If no such entry is found, the cost is reduced to that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  required to append a new entry to the end of the table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  A COLLECT statement used on a table which is 100 bytes wide&lt;/P&gt;&lt;P&gt;                  and has a key which is 60 bytes wide and seven numeric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fields is about approx. 50 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT_OVERFLOW: Overflow in integer field when calculating&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT_OVERFLOW_TYPE_P: Overflow in type P field when&lt;/P&gt;&lt;P&gt;                  calculating totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       APPEND, WRITE ... TO, MODIFY, INSERT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMMIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... AND WAIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes a database commit and thus closes a logical processing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unit or Logical Unit of Work (LUW) (see also Transaction&lt;/P&gt;&lt;P&gt;               processing). This means that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  all database changes are made irrevocable and cannot be&lt;/P&gt;&lt;P&gt;                  reversed with ROLLBACK WORK and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  all database locks are released.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMIT WORK also&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  calls the subroutines specified by PERFORM ... ON COMMIT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  executes asynchronously any update requests (see CALL&lt;/P&gt;&lt;P&gt;                  FUNCTION ... IN UPDATE TASK) specified in these subroutines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or started just before,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  processes the function modules specified in CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ... IN BACKGROUND TASK,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  cancels all existing locks (see SAP locking concept) if no&lt;/P&gt;&lt;P&gt;                  update requests exist,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  closes all open database cursors (see OPEN CURSOR) and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  resets the time slice counter to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMIT WORK belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value SY-SUBRC is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. All subroutines called with PERFORM ... ON COMMIT are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  processed in the LUW concluded by the COMMIT WORK command.&lt;/P&gt;&lt;P&gt;                  All V1 update requests specified in CALL FUNCTION ... IN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  UPDATE TASK are also executed in one LUW. When all V1 update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  requests have been successfully concluded, the V2 update&lt;/P&gt;&lt;P&gt;                  requests ("update with start delayed") are processed, each&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  in one LUW. Parallel to this, the function modules specified&lt;/P&gt;&lt;P&gt;                  in CALL FUNCTION ... IN BACKGROUND TASK are each executed in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  one LUW per destination.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMMIT WORK commands processed within CALL DIALOG processing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - execute a database commit (see above),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - close all open database cursors,&lt;/P&gt;&lt;P&gt;                  - reset the time slice counter and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - call the function modules specified by CALL FUNCTION IN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BACKGROUND TASK in the CALL DIALOG processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  However, subroutines and function modules called with&lt;/P&gt;&lt;P&gt;                  PERFORM ... ON COMMIT or CALL FUNCTION ... IN UPDATE TASK in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the CALL DIALOG processing are not executed in the calling&lt;/P&gt;&lt;P&gt;                  transaction until a COMMIT WORK occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Since COMMIT WORK closes all open database cursors, any&lt;/P&gt;&lt;P&gt;                  attempt to continue a SELECT loop after a COMMIT WORK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  results in a runtime error. For the same reason, a FETCH&lt;/P&gt;&lt;P&gt;                  after a COMMIT WORK on the now closed cursors also produces&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a runtime error. You must therefore ensure that any open&lt;/P&gt;&lt;P&gt;                  cursors are no longer used after the COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. With batch input and CALL TRANSACTION ... USING, COMMIT WORK&lt;/P&gt;&lt;P&gt;                  successfully concludes the processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... AND WAIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The addition ... AND WAIT makes the program wait until the type&lt;/P&gt;&lt;P&gt;               V1 updates have been completed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The update was successfully performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: The update could not be successfully performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMMIT_IN_PERFORM_ON_COMMIT: COMMIT WORK is not allowed in a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  FORM callled with PERFORM ... ON COMMIT.&lt;/P&gt;&lt;P&gt;               -  COMMIT_IN_POSTING: COMMIT WORK is not allowed in the update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  task.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMMUNICATION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMMUNICATION INIT DESTINATION dest ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMMUNICATION ALLOCATE ID id.&lt;/P&gt;&lt;P&gt;               3. COMMUNICATION ACCEPT ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. COMMUNICATION SEND ID id BUFFER f.&lt;/P&gt;&lt;P&gt;               5. COMMUNICATION RECEIVE ID id&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        ...BUFFER f&lt;/P&gt;&lt;P&gt;                                        ...DATAINFO d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        ...STATUSINFO s.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. COMMUNICATION DEALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The COMMUNICATION statement allows you to develop applications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which perform direct program-to-program communication. The&lt;/P&gt;&lt;P&gt;               basis for this is CPI-C (Common Programming Interface -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Coummunication), defined by IBM within the context of SAA&lt;/P&gt;&lt;P&gt;               standards as a standardized communications interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The COMMUNICATION statement provides the essential parameters&lt;/P&gt;&lt;P&gt;               for implementing simple communication. Its starter set covers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the following functionality:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Establishing a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Accepting a communication&lt;/P&gt;&lt;P&gt;                  Sending data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Receiving data&lt;/P&gt;&lt;P&gt;                  Closing a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other essential part of such a communication is an ABAP/4&lt;/P&gt;&lt;P&gt;               program containing a FORM routine which is executed when the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               connection has been established. This program may be in an R/3&lt;/P&gt;&lt;P&gt;               System or an R/2&amp;gt; System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, you should be aware that the application programs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               themselves declare a protocol. In particular, logon to the&lt;/P&gt;&lt;P&gt;               partner SAP System must be performed in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The partner programs must also manage different character sets,&lt;/P&gt;&lt;P&gt;               e.g. ASCII - EBCDIC themselves. A facility known as the Remote&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function Call (RFC) has now been developed to save users from&lt;/P&gt;&lt;P&gt;               having to deal with these problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               External programs (e.g. a program written in C on a UNIX&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               workstation) can also be used as partner programs. For this&lt;/P&gt;&lt;P&gt;               purpose, SAP provides a platform-specific development library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For more detailed information about communication in the SAP&lt;/P&gt;&lt;P&gt;               System, you can refer to the manual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAP Communication: Programming&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Further information about communication can be found in any of&lt;/P&gt;&lt;P&gt;               the following literature:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IBM SAA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Common Programming Interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Communication Reference&lt;/P&gt;&lt;P&gt;               SC 26-4399&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X/Open Developers' Specification CPI-C&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X/Open Company Ltd.&lt;/P&gt;&lt;P&gt;               ISBN 1 872630 02 2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     COMMUNICATION INIT DESTINATION dest ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Initializes a program-to-program connection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The partner system is specified in the dest field. You can use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               any name you like, but it must be entered in the connection&lt;/P&gt;&lt;P&gt;               table TXCOM and can be no more than 8 characters long. This&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry in TXCOM determines to which physical system a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is established using the symbolic name of the target system.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the field id, the system assigns an eight-character ID&lt;/P&gt;&lt;P&gt;               number of type C to the connection. The system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains an appropriate return code value.&lt;/P&gt;&lt;P&gt;               All return codes can be read using their symbolic names. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this purpose, you can use the program RSCPICDF which contains&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these names and can be included, if required.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     COMMUNICATION ALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sets up a program-to-program connection. The call must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately follow COMMUNICATION INIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     COMMUNICATION ACCEPT ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Accepts a connection requested by the partner program. id is a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field of type C which is 8 characters long and contains the ID&lt;/P&gt;&lt;P&gt;               of the accepted connection after a successful call.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;                 INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     COMMUNICATION SEND ID id BUFFER f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sends data to the partner program. The data is stored in the&lt;/P&gt;&lt;P&gt;               field f which follows the key word parameter BUFFER. It is sent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the full length of the field f. If the partner program is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               part of a system which has a different character set, you must&lt;/P&gt;&lt;P&gt;               perform an appropriate conversion yourself. To do this, use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LENGTH leng&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sends the contents of the field f to the partner program in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since the length is specified explicitly in this example, only&lt;/P&gt;&lt;P&gt;               the part 'The quick brown fox ' is transferred from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents of the field RECORD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     COMMUNICATION RECEIVE ID id ...BUFFER f ...DATAINFO d&lt;/P&gt;&lt;P&gt;               ...STATUSINFO s.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Parts marked with " ..." are interchangeable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LENGTH leng&lt;/P&gt;&lt;P&gt;               3. ... RECEIVED m&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... HOLD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Receives data in the field f. If no length is explicitly&lt;/P&gt;&lt;P&gt;               defined, the amount of data accepted depends on the length of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field. The fields d and s contain information about the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               receive process. You can address the contents of these using&lt;/P&gt;&lt;P&gt;               symbolic names in the include program RSCPICDF. The field d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               indicates whether the data was received in its entirety. The&lt;/P&gt;&lt;P&gt;               status field s informs the RECEIVE user of the status of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program. Here, it is important to know whether the program is&lt;/P&gt;&lt;P&gt;               in receive status or send status. It is, for example, not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               possible to send data if the program is in receive status.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For more detailed information about these protocol questions,&lt;/P&gt;&lt;P&gt;               refer to the manuals listed above.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LENGTH leng&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Receives data only in the specified length leng.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... RECEIVED m&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        After the call, m contains the number of bytes received by the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               partner program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... HOLD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Normally, data is received asynchronously, i.e. the system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               performs a rollout. However, this may not be desirable if, for&lt;/P&gt;&lt;P&gt;               example, the data is received in a SELECT loop, the database&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               cursor is lost due to the rollout and the loop is terminated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To prevent a rollout, you can use the addition HOLD. Then, the&lt;/P&gt;&lt;P&gt;               SAP process waits until the data has been received and is thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               available for use by other users.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The fields d, s and m which contain information about the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               outcome of the call must be of type X with length 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                        DINFO      TYPE C_INFO,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        SINFO      TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION RECEIVE ID         CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       BUFFER     RECORD&lt;/P&gt;&lt;P&gt;                                       STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;                                       RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     COMMUNICATION DEALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Severs connection and releases all resources.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                      LENG       TYPE I VALUE 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION DEALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The above examples illustrate the basic functionality of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key words. However, the example program can only have an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               external system as partner. If the partner is an SAP System,&lt;/P&gt;&lt;P&gt;               the calling program must first logon to the SAP System and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               receive an acknowledgement. Only then can you begin to transmit&lt;/P&gt;&lt;P&gt;               the actual data. When logging on to an R2 System and an R3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               System, the logon data must be converted to EBCDIC. All user&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               data should be converted according to the partner system. This&lt;/P&gt;&lt;P&gt;               is in the concluding example of an R/3 - R/2 connection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM ZCPICTST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF CONNECT_STRING,&lt;/P&gt;&lt;P&gt;                        REQID(4) VALUE 'CONN',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TYPE(4)  VALUE 'CPIC',&lt;/P&gt;&lt;P&gt;                        MODE(4)  VALUE '1   ',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        MANDT(3) VALUE '000',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(12) VALUE 'CPICUSER',&lt;/P&gt;&lt;P&gt;                        PASSW(8) VALUE 'CPIC',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        LANGU(1) VALUE 'D',&lt;/P&gt;&lt;P&gt;                        KORRV(1),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        REPORT(8) VALUE 'ZCPICTST',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        FORM(30)  VALUE 'CPIC_EXAMPLE',&lt;/P&gt;&lt;P&gt;                      END OF CONNECT_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  CONVID   TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST     TYPE DESTINATION VALUE 'R2-SYST',&lt;/P&gt;&lt;P&gt;                      CPIC_RC  TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DINFO    TYPE C_INFO,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      SINFO    TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                      LENG       TYPE I VALUE 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                      RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert logon data to EBCDIC&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE CONNECT_STRING TO CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID CONVID BUFFER CONNECT_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Receive acknowledgement of logon&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION RECEIVE ID      CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER     RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION RECEIVE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert acknowledgement to ASCII&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE RECORD FROM CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now begin user-specific data exchange&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Depending on the partner system, convert to another&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;character set&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE RECORD TO CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION DEALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM ZCPICTST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The receiving procedure in the relevant partner program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               follows&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;                        RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        DINFO      TYPE C_INFO,&lt;/P&gt;&lt;P&gt;                        SINFO      TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;                 COMMUNICATION RECEIVE ID         CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       BUFFER     RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;                                       DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK AND CPIC_RC NE CM_DEALLOCATED_NORMAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMPONENT-CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variations:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMPONENT-CHECK NUMBER n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMPONENT-CHECK TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;               3. COMPONENT-CHECK PROGRAM prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether a particular SAP price list component is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 1   COMPONENT-CHECK NUMBER n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component n is installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code in the system field SY-SUBRC may be set to&lt;/P&gt;&lt;P&gt;               either of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 2   COMPONENT-CHECK TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component for Transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tcod is installed. The return code in the system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               may be set to any of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Transaction tcod does not belong to any SAP&lt;/P&gt;&lt;P&gt;                              price list component (i.e. no entry in Table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              DIR).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 3   COMPONENT-CHECK PROGRAM prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component for the program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               prog is installed. The return code in the system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               may be set to any of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Program p does not belong to any SAP price list&lt;/P&gt;&lt;P&gt;                              component (i.e. no entry in Table DIR).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMPUTE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COMPUTE n = arithexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Evaluates the arithmetic expression arithexp and places the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               result in the field n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Allows use of the four basic calculation types +, -, * and /,&lt;/P&gt;&lt;P&gt;               the whole number division operators DIV (quotient) and MOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (remainder), the exponentiation operator ** (exponentiation "X&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Y means X to the power of Y) as well as the functions listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When evaluating mixed expressions, functions have priority.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then comes exponentiation, followoed by the "point operations"&lt;/P&gt;&lt;P&gt;               *, /, DIV and MOD, and finally + and - . Any combination of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parentheses is also allowed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The fields involved are usually of type I, F or P, but there&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are exceptions to this rule (see below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can omit the key word COMPUTE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Built-in functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Functions for all number types&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ABS            Amount (absolute value) |x| of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SIGN           Sign (preceding sign) of x;&lt;/P&gt;&lt;P&gt;                                           1        x &amp;gt; 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              SIGN( x ) =  0   if   x = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                          -1        x &amp;lt; 0&lt;/P&gt;&lt;P&gt;               CEIL           Smallest whole number value not less than x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FLOOR          Greatest whole number value not greater than x&lt;/P&gt;&lt;P&gt;               TRUNC          Whole number part of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FRAC           Decimal part of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Floating point functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ACOS           Arc cosine(x) in the range [-pi/2, pi/2], x from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              [-1, 1]&lt;/P&gt;&lt;P&gt;               ASIN           Arc cosine(x) in the range [0, pi], x aus [-1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              1]&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ATAN           Arc tangent(x) in the range [-pi/2, pi/2] (pi =&lt;/P&gt;&lt;P&gt;                              3.1415926535897932)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COS            Cosine of an angle specified in the arc&lt;/P&gt;&lt;P&gt;               SIN            Sine of an angle specified in the arc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TAN            Tangent of an angle specified in the arc&lt;/P&gt;&lt;P&gt;               COSH           Hyperbola cosine&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SINH           Hyperbola sine&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TANH           Hyperbola tangent&lt;/P&gt;&lt;P&gt;               EXP            Exponential function for base e =&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              2.7182818284590452&lt;/P&gt;&lt;P&gt;               LOG            Natural logarithm (i.e. base e) of a positive&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOG10          Logarithm of x for base 10, x &amp;gt; 0&lt;/P&gt;&lt;P&gt;               SQRT           Square root of a non-negative number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  String functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STRLEN         Length of a string up to the last non-blank&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              character (i.e. the occupied length)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function expressions consist of three parts:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Function identifier directly followed by an opening&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parenthesis&lt;/P&gt;&lt;P&gt;               2. Argument&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Closing parenthesis&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All parts of an expression, particularly any parts of a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function expression, must be separated from each other by at&lt;/P&gt;&lt;P&gt;               least one blank.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       The following statements, especially the arithmetic&lt;/P&gt;&lt;P&gt;               expressions, are syntactically correct:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: I1 TYPE I, I2 TYPE I, I3 TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     F1 TYPE F, F2 TYPE F,&lt;/P&gt;&lt;P&gt;                     WORD1(10), WORD2(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F1 = ( I1 + EXP( F2 ) ) * I2 / SIN( 3 - I3 ).&lt;/P&gt;&lt;P&gt;               COMPUTE F1 = SQRT( SQRT( ( I1 + I2 ) * I3 ) + F2 ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I1 = STRLEN( WORD1 ) + STRLEN( WORD2 ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When used in calculations, the amount of CPU time needed&lt;/P&gt;&lt;P&gt;                  depends on the data type. In very simple terms, type I is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the cheapest, type F needs longer and type P is the most&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  expensive.&lt;/P&gt;&lt;P&gt;                  Normally, packed numbers arithmetic is used to evaluate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  arithmetic expressions. If, however, the expression contains&lt;/P&gt;&lt;P&gt;                  a floating point function, or there is at least one type F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  operand, or the result field is type F, floating point&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  arithmetic is used instead for the entire expression. On the&lt;/P&gt;&lt;P&gt;                  other hand, if only type I fields or date and time fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur (see below), the calculation involves integer&lt;/P&gt;&lt;P&gt;                  operations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. You can also perform calculations on numeric fields other&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than type I, F or P. Before executing calculations, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  necessary type conversions are performed (see MOVE). You&lt;/P&gt;&lt;P&gt;                  can, for instance, subtract one date field (type D) from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  another, in order to calculate the number of days&lt;/P&gt;&lt;P&gt;                  difference. However, for reasons of efficiency, only&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  operands of the same number type should be used in one&lt;/P&gt;&lt;P&gt;                  arithmetic expression (apart from the operands of STRLEN).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  This means that no conversion is necessary and special&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  optimization procedures can be performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Division by 0 results in termination unless the dividend is&lt;/P&gt;&lt;P&gt;                  also 0 (0 / 0). In this case, the result is 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. As a string processing command, the STRLEN operator treats&lt;/P&gt;&lt;P&gt;                  operands (regardless of type) as character strings, without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  triggering internal conversions. On the other hand, the&lt;/P&gt;&lt;P&gt;                  operands of floating point functions are converted to type F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  if they have another type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Date and time arithmetic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: DAYS TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     DATE_FROM TYPE D VALUE '19911224',&lt;/P&gt;&lt;P&gt;                     DATE_TO   TYPE D VALUE '19920101',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DAYS = DATE_TO - DATE_FROM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DAYS now contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: SECONDS TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TIME_FROM TYPE T VALUE '200000',&lt;/P&gt;&lt;P&gt;                     TIME_TO   TYPE T VALUE '020000'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SECONDS = ( TIME_TO - TIME_FROM ) MOD 86400.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SECONDS now contains the value 21600 (i.e. 6 hours). The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               operation "MOD 86400" ensures that the result is always a&lt;/P&gt;&lt;P&gt;               positive number, even if the period extends beyond midnight.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Packed numbers arithmetic:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All P fields are treated as whole numbers. Calculations&lt;/P&gt;&lt;P&gt;               involving decimal places require additional programming to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               include multiplication or division by 10, 100, ... . The&lt;/P&gt;&lt;P&gt;               DECIMALS specification with the DATA declaration is effective&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               only for output with WRITE.&lt;/P&gt;&lt;P&gt;               If, however, fixed point arithmetic is active, the DECIMALS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specification is also taken into account. In this case,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               intermediate results are calculated with maximum accuracy (31&lt;/P&gt;&lt;P&gt;               decimal places). This applies particularly to division.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this reason, you should always set the program attribute&lt;/P&gt;&lt;P&gt;               "Fixed point arithmetic".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA P TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P = 1 / 3 * 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Without "fixed point arithmetic", P has the value 0, since "1 /&lt;/P&gt;&lt;P&gt;               3" is rounded down to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With fixed point arithmetic, P has the value 1, since the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               intermediate result of "1 / 3" is&lt;/P&gt;&lt;P&gt;               0.333333333333333333333333333333.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Floating point arithmetic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With floating point arithmetic, you must always expect some&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               loss of accuracy through rounding errors (ABAP/4 number types).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Exponentiation&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The exponential expression "x*&lt;STRONG&gt;y" means x&lt;/STRONG&gt;x&lt;STRONG&gt;...&lt;/STRONG&gt;x y times,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               provided that y is a natural number. For any value of y, x**y&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is explained by exp(y*log(x)).&lt;/P&gt;&lt;P&gt;               Operators of the same ranke are evaluated from left to right.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Only the exponential operator, as is usual in mathematics, is&lt;/P&gt;&lt;P&gt;               evaluated from right to left. The expression "4 ** 3 ** 2" thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponds to "4 ** ( 3 ** 2 )" and not "( 4 ** 3 ) ** 2", so&lt;/P&gt;&lt;P&gt;               the result is 262144 and not 4096.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The following resrtictions apply for the expression "X ** Y":&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If X is equal to 0, Y must be positive. If X is negative, Y&lt;/P&gt;&lt;P&gt;               must be a whole number.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          DIV and MOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The whole number division operators DIV and MOD are defined as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ndiv = n1 DIV n2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  nmod = n1 MOD n2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               so that:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. n1 = ndiv * n2 + nmod&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ndiv is a whole number&lt;/P&gt;&lt;P&gt;               3. 0 &amp;lt;= nmod &amp;lt; |n2|&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A runtime error occurs if n2 is equal to 0 and n1 is not equal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: D1 TYPE I, D2 TYPE I, D3 TYPE I, D4 TYPE I,&lt;/P&gt;&lt;P&gt;                     M1 TYPE P DECIMALS 1, M2 TYPE P DECIMALS 1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     M3 TYPE P DECIMALS 1, M4 TYPE P DECIMALS 1,&lt;/P&gt;&lt;P&gt;                     PF1 TYPE F VALUE '+7.3',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PF2 TYPE F VALUE '+2.4',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NF1 TYPE F VALUE '-7.3',&lt;/P&gt;&lt;P&gt;                     NF2 TYPE F VALUE '-2.4',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D1 = PF1 DIV PF2.  M1 = PF1 MOD PF2.&lt;/P&gt;&lt;P&gt;               D2 = NF1 DIV PF2.  M2 = NF1 MOD PF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D3 = PF1 DIV NF2.  M3 = PF1 MOD NF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D4 = NF1 DIV NF2.  M4 = NF1 MOD NF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variables now have the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D1 =   3,  M1 = 0.1,&lt;/P&gt;&lt;P&gt;               D2 = - 4,  M2 = 2.3,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D3 = - 3,  M3 = 0.1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D4 =   4,  M4 = 2.3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Functions ABS, SIGN, CEIL, FLOOR, TRUNC, FRAC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: I TYPE I,&lt;/P&gt;&lt;P&gt;                     P TYPE P DECIMALS 2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     M TYPE F            VALUE '-3.5',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     D TYPE P DECIMALS 1.&lt;/P&gt;&lt;P&gt;               P = ABS( M ).   " 3,5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = P.          "  4 - commercially rounded&lt;/P&gt;&lt;P&gt;               I = M.          " -4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = CEIL( P ).  "  4 - next largest whole number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = CEIL( M ).  " -3&lt;/P&gt;&lt;P&gt;               I = FLOOR( P ). "  3 - next smallest whole number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = FLOOR( M ). " -4&lt;/P&gt;&lt;P&gt;               I = TRUNC( P ). "  3 - whole number part&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = TRUNC( M ). " -3&lt;/P&gt;&lt;P&gt;               D = FRAC( P ).  "  0,5 - decimal part&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D = FRAC( M ).  " -0,5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Floating point functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Although the functions SIN, COS and TAN are defined for any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  numbers, the results are imprecise if the argument is&lt;/P&gt;&lt;P&gt;                  greater than about 1E8, i.e. 10**8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The logarithm for a base other than e or 10 is calculated as&lt;/P&gt;&lt;P&gt;                  follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Logarithm of b for base a = LOG( b ) / LOG( a )&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the operands, the above operators and functions&lt;/P&gt;&lt;P&gt;               can cause runtime errors (e.g. when evaluating the logarithm&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with a negative argument).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       ADD, SUBTRACT, MULTIPLY, DIVIDE, MOVE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONCATENATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONCATENATE f1 ... fn INTO g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... SEPARATED BY h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          As with any string processing statement, all the operands are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed here as type C fields (regardless of tyep). No&lt;/P&gt;&lt;P&gt;               internal conversion is performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Places the fields f1 to fn after g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With the fields fi (1 &amp;lt;= i &amp;lt;= n), trailing blanks are ignored,&lt;/P&gt;&lt;P&gt;               i.e. these fields are considered only to have the length&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STRLEN( fi).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The result fits in g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The result was too long for g and was only&lt;/P&gt;&lt;P&gt;                              copied to g in that length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: ONE(10)   VALUE 'John',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TWO(3)    VALUE ' F.',&lt;/P&gt;&lt;P&gt;                     THREE(10) VALUE ' Kennedy',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NAME(20).&lt;/P&gt;&lt;P&gt;               CONCATENATE ONE TWO THREE INTO NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME contains the value "John F. Kennedy".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... SEPARATED BY h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Inserts the separator h between the fields fi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, h is used in its defined length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;               DATA: ONE(10)   VALUE 'John',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TWO(3)    VALUE 'F.',&lt;/P&gt;&lt;P&gt;                     THREE(10) VALUE 'Kennedy',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NAME(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONCATENATE ONE TWO THREE INTO NAME SEPARATED BY SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME has the value "John F. Kennedy".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA SEPARATOR(4) VALUE 'USA'.&lt;/P&gt;&lt;P&gt;               CONCATENATE SPACE ONE TWO THREE INTO NAME&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                           SEPARATED BY SEPARATOR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME has the value "USA JohnUSA F.USA Ke".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return value of SY-SUBRC is set to 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SPLIT, SHIFT, REPLACE, TRANSLATE, CONDENSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You are recommended to use the key word CONCATENATE rather than&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               your own constructions because it is safer, more efficient and&lt;/P&gt;&lt;P&gt;               clearer. The runtime required to append two 30-byte fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               amounts to approx. 14 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONDENSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONDENSE c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... NO-GAPS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          As with any string processing statement, all the operands are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed here as type C fields (regardless of tyep). No&lt;/P&gt;&lt;P&gt;               internal conversion is performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Shifts the contents of the field c to the left, so that each&lt;/P&gt;&lt;P&gt;               word is separated by exactly one blank.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAME,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TITLE(8),       VALUE 'Dr.',&lt;/P&gt;&lt;P&gt;                       FIRST_NAME(10), VALUE 'Michael',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SURNAME(10),    VALUE 'Hofmann',&lt;/P&gt;&lt;P&gt;                     END   OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONDENSE NAME.&lt;/P&gt;&lt;P&gt;               WRITE NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               produces the output:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Dr. Michael Hofmann&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... NO-GAPS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Suppresses all blanks from the field c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAME,&lt;/P&gt;&lt;P&gt;                       TITLE(8),       VALUE 'Dr.',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIRST_NAME(10), VALUE 'Michael',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SURNAME(10),   VALUE 'Hofmann',&lt;/P&gt;&lt;P&gt;                     END   OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONDENSE NAME NO-GAPS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of NAME is now "Dr.MichaelHofmann".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since the field string NAME is interpreted and handled like a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type C field, the CONDENSE statement treats it as a whole and&lt;/P&gt;&lt;P&gt;               ignores any sub-fields. The contents of the component field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               would therefore now be as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME-TITLE       = 'Dr.Micha'&lt;/P&gt;&lt;P&gt;               NAME-FIRST_NAME  = 'elHofmann  '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME-SURNAME     = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Do not use CONDENSE to manipulate field strings that include&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields not of type C. This could result in these component&lt;/P&gt;&lt;P&gt;               fields containing characters of a different (i.e. incorrect)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SHIFT, CONCATENATE, REPLACE, SPLIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to condense three fields is about 20 msn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (standardized micooseconds). The variant ... NO-GAPS needs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               about 12 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONSTANTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CONSTANTS c.     ... VALUE [ val | IS INITIAL ].&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CONSTANTS c(len) ... VALUE [ val | IS INITIAL ].&lt;/P&gt;&lt;P&gt;               3. CONSTANTS: BEGIN OF crec,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               ...&lt;/P&gt;&lt;P&gt;                             END   OF crec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The CONSTANTS statement defines global and local constants.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Constants allow you to read statically declared data objects.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               They always have a particular data type. Data types and data&lt;/P&gt;&lt;P&gt;               objects are essential components of the ABAP/4 type concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In contrast to variables defined with the DATA statement, you&lt;/P&gt;&lt;P&gt;               cannot change the value of a constant once it has been defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Apart from the additions ... TYPE typ OCCURS n, ... LIKE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1OCCURS n and WITH HEADER LINE, all the additions used with&lt;/P&gt;&lt;P&gt;               the DATA statement are allowed. However, in contrast to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA statement, the addition ... VALUE val or VALUE IS INITIAL&lt;/P&gt;&lt;P&gt;               obligatory with variants 1 and 2. See additions with DATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS  CHAR1 VALUE 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS  INT   TYPE I VALUE 99.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS: BEGIN OF CONST_REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            C(2) TYPE I VALUE 'XX',&lt;/P&gt;&lt;P&gt;                            N(2) TYPE N VALUE '12',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            X    TYPE X VALUE 'FF',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            I    TYPE I VALUE 99,&lt;/P&gt;&lt;P&gt;                            P    TYPE P VALUE 99,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            F    TYPE F VALUE '9.99E9',&lt;/P&gt;&lt;P&gt;                            D    TYPE D VALUE '19950101',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            T    TYPE T VALUE '235959',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          END OF CONST_REC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONTINUE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTINUE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Within loop structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  DO     ... ENDDO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  WHILE  ... ENDWHILE&lt;/P&gt;&lt;P&gt;               -  LOOP   ... ENDLOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  SELECT ... ENDSELECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONTINUE terminates the current loop pass, returns the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing to the beginning of the loop and starts the next&lt;/P&gt;&lt;P&gt;               loop pass, if there is one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       DO loop: Omit an area (10 ... 20)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DO 100 TIMES.&lt;/P&gt;&lt;P&gt;                 IF SY-INDEX &amp;gt;= 10 AND SY-INDEX &amp;lt;= 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   CONTINUE.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CHECK, EXIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONTROLS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTROLS ctrl TYPE ctrl_type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines a control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A control defines an ABAP/4 runtime object which displays data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in a particular visual format, depending on the type. It offers&lt;/P&gt;&lt;P&gt;               the user standard processing options.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, the following types of control are supported:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Table control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       REFRESH CONTROL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ABAP/4 table control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTROLS ctrl TYPE TABLEVIEW USING SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates a table control ctrl of the type TABLEVIEW. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reference screen for the initialization is the screen scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Area of use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table control (referred to here as TC ) facilitates the&lt;/P&gt;&lt;P&gt;               display and entry of one-line, tabular data in dialog&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transactions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The functional scope has been defined so that you can implement&lt;/P&gt;&lt;P&gt;               many typical set operations usually handled by an elementary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STEP-LOOP with the standard methods of a TC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Functional scope&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Resizeable table grid for displaying and editing data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Column width and column position modifiable by user and by&lt;/P&gt;&lt;P&gt;                  program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Storing and loading of user-specific column layout.&lt;/P&gt;&lt;P&gt;               -  Selection column for line selection with color selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Variable column headers as pushbuttons for column selection.&lt;/P&gt;&lt;P&gt;               -  Simple selection, multiple selection, Select/deselect all.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Scrolling functions (horizontal and vertical) via scroll&lt;/P&gt;&lt;P&gt;                  bar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Fixing of any number of key columns.&lt;/P&gt;&lt;P&gt;               -  Setting attributes for each cell at runtime.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Programming&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data exchange between the application and the SAPgui is&lt;/P&gt;&lt;P&gt;               achieved with a STEP-LOOP, i.e. an ABAP/4 module is called to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transfer data for each page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Processing without an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS BEFORE OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pbo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS AFTER INPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pai.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In this case, the module ctrl_pbo OUTPUT is called once for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               each output line before the screen is displayed, in order to&lt;/P&gt;&lt;P&gt;               fill the output fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the user has entered data on the screen, the module&lt;/P&gt;&lt;P&gt;               ctrl_pai INPUT is executed to check the input and copy the new&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Processing with an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS BEFORE OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT itab WITH CONTROL ctrl CURSOR ctrl-CURRENT_LINE.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS AFTER INPUT.&lt;/P&gt;&lt;P&gt;               LOOP AT itab WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pai.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, the system fills the output fields before displaying the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen by reading the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the user has entered data, the module ctrl_pai INPUT must&lt;/P&gt;&lt;P&gt;               be executed to check the input and to refresh the contents of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the internal table.&lt;/P&gt;&lt;P&gt;               Vertical scrolling with the scroll bar is followed by the event&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PAI for the displayed page. Then, cntl-TOP_LINE is increased&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and PBO is processed for the next page.&lt;/P&gt;&lt;P&gt;               Program-driven scrolling and the most of the functionality&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               described above is achieved by manipulating the control&lt;/P&gt;&lt;P&gt;               attributes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Attributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The CONTROLS statement creates a complex data object of the&lt;/P&gt;&lt;P&gt;               type CXTAB_CONTROL with the name of the control.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You maintain the initial values in the Screen Painter and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assign the screen with the initial values for a control using&lt;/P&gt;&lt;P&gt;               the addition USING SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Initialization is achieved automatically in the "1st access to&lt;/P&gt;&lt;P&gt;               the control" (setting or reading values).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use the customizing button (in the top right corner) to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               save the current setting (column widths and column positions)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and use it as the initial value for the next call.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All the initial values can be overwritten by the program using&lt;/P&gt;&lt;P&gt;               the MOVE ... TO TC attributes statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       ctrl-fixed_cols = 2.    "2 columns fixed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of the SCREEN structure (table Cols) acts as a&lt;/P&gt;&lt;P&gt;               default value for each line of this column, but within LOOP ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP (flow logic), it can be overwritten by LOOP AT SCREEN /&lt;/P&gt;&lt;P&gt;               MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With the attributes listed below, you should be aware of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LINES          This must always be set as the only attribute if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              you are not using LOOP AT itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TOP_LINE       Also set by the SAPgui through the vertical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              scroll bar slider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CURRENT_LINE   Read only, set by the system (TOP_LINE +&lt;/P&gt;&lt;P&gt;                              SY-STEPL - 1)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LEFT_COL       Also set by the SAPgui through the horizontal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              scroll bar slider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLS-INDEX     Also set by the SAPgui after moving columns.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLS-SELECTED  Also set by the SAPgui after column selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When displaying the control, the system uses the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents when the event DCO occurs (i.e. after all PBO modules&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               have run). The modified values (brought about by the user&lt;/P&gt;&lt;P&gt;               making changes on the screen) are set immediately after DCI&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (i.e. before the first PAI module runs).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONVERT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CONVERT DATE f1 INTO INVERTED-DATE f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CONVERT INVERTED-DATE f1 INTO DATE f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Allows conversion between different formats which do not have&lt;/P&gt;&lt;P&gt;               their own type (see also MOVE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field f1 is converted from the source format to the target&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               format and placed in f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, the following formats are supported:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DATE          ==&amp;gt; INVERTED-DATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. INVERTED-DATE ==&amp;gt; DATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Both formats form the nine's complement of internal date&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               representation, e.g. 19950511 ==&amp;gt; 80049488 or 80049488 ==&amp;gt;&lt;/P&gt;&lt;P&gt;               19950511. In inverse date format, the most recent date has the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               lowest numerical value. This is useful when sorting date&lt;/P&gt;&lt;P&gt;               specifications.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The technique of modifying the sequence of dates by inverting&lt;/P&gt;&lt;P&gt;               the internal date format is only used in very rare cases. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               example, you can sort internal tables in ascending or&lt;/P&gt;&lt;P&gt;               descending date order much more elegantly with the additons ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASCENDING bzw. ... DESCENDING of the SORT statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA DATE_INV LIKE SY-DATUM.&lt;/P&gt;&lt;P&gt;               CONVERT DATE SY-DATUM INTO INVERTED-DATE DATE_INV.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If, for example, the internal representation of 11.05.95 in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-DATUM is 19950511, the value of DATE_INV after execution of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the CONVERT statement is 80049488.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CONVERT_ILLEGAL_CONVERSION: Conversion not possible due to&lt;/P&gt;&lt;P&gt;                  incorrect field length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CREATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CREATE OBJECT obj class.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... LANGUAGE langu&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Generates an object of the class class.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To address an OLE automation server (e.g. EXCEL) from ABAP/4,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the server must be registered with SAP. The transaction SOLE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               allows you to assign an automation server to a class.&lt;/P&gt;&lt;P&gt;               The CREATE statement generates the initial object and this can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               be processed further with the relevant key words.&lt;/P&gt;&lt;P&gt;               The return code value of SY-SUBRC indicates the result of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               generation:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0: Object successfully generated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 1: SAPGUI communication error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 2: SAPGUI function call error. The OLE function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              modules are implemented only under Windows.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 3: The OLE API call resulted in an error; this is&lt;/P&gt;&lt;P&gt;                              possibly a storage space problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4: The object is not registered with SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... LANGUAGE langu&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines the language chosen for method and attribute names&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the object class.&lt;/P&gt;&lt;P&gt;               If no specification is made, English is the default.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT belongs to a group of key words which allow you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to process external objects with ABAP/4. At present, only the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object model OLE2 is supported, i.e. all objects must be of&lt;/P&gt;&lt;P&gt;               type OLE2_OBJECT. This type and other necessary data are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined in the include program OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Generate an EXCEL object.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA EXCEL TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;               CREATE OBJECT EXCEL 'Excel.Application'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SET PROPERTY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET PROPERTY&lt;/P&gt;&lt;P&gt;               CALL METHOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FREE OBJECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement is not supported in the R/3 System. Use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following function modules instead:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONVERT_TO_FOREIGN_CURRENCY&lt;/P&gt;&lt;P&gt;               CONVERT_TO_LOCAL_CURRENCY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.DATA f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2.DATA f(len).&lt;/P&gt;&lt;P&gt;               3.DATA: BEGIN OF rec,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;                        END   OF rec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DATA: BEGIN OF itab OCCURS n,&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        END   OF itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. DATA: BEGIN OF COMMON PART c,&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        END   OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines global and local variables. Variables allow you to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               address declared data objects. They always have a particular&lt;/P&gt;&lt;P&gt;               data type. Data types and data objects are important components&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the ABAP/4 type concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DATA f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LIKE f1&lt;/P&gt;&lt;P&gt;               3. ... TYPE typ OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... LIKE f1 OCCURS n&lt;/P&gt;&lt;P&gt;               5. ... TYPE LINE OF itabtyp&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... LIKE LINE OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               7. ... VALUE lit&lt;/P&gt;&lt;P&gt;               8. ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               9. ... WITH HEADER LINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the internal field f in its standard length. If you do&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not specify the type (using the addition TYPE), a field of type&lt;/P&gt;&lt;P&gt;               C is assumed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field f can be up to 30 characters long. You can use any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               characters you like except the special characters '(', ')',&lt;/P&gt;&lt;P&gt;               '+', '-', ',' and ':'. Numeric characters are allowed but the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field name may not consist of numbers alone.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SPACE is a reserved word and therefore cannot be used. Also,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field name cannot be the same as one of the additional&lt;/P&gt;&lt;P&gt;               parameters of the introductory key word (e.g. PERFORM SUB USING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHANGING.).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Recommendations for field names:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Always use a letter as the first character.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Use the underscore to join together words which are part of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the same name (e.g. NEW_PRODUCT). The hyphen should not be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  used here, since it is reserved for the names of field&lt;/P&gt;&lt;P&gt;                  string components (see below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates a field f of the type typ. You can use either one of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the predefined types listed below or one of your own types&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which you define with TYPES.&lt;/P&gt;&lt;P&gt;               The standard length (SL) of the field depends on the type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type  Description             SL  Initial value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               C     Text (character)        1   Blank&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               N     Numeric text            1   '00...0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D     Date (YYYYMMDD)         8   '00000000'&lt;/P&gt;&lt;P&gt;               T     Time (HHMMSS)           6   '000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X     Hexadecimal             1   X'00'&lt;/P&gt;&lt;P&gt;               I     Whole number (integer)  4   0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P     Packed number           8   0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F     Floating point no.      8   '0.0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NUMBER TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Creates the field NUMBER as type I. You can also use it in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program, particularly if you want to assign number values and&lt;/P&gt;&lt;P&gt;               perform calculations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The data type I is the whole number type on which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  hardware is based. Its value range is from -2*&lt;STRONG&gt;31 to 2&lt;/STRONG&gt;*31-1&lt;/P&gt;&lt;P&gt;                  (from -2.147.483.648 to 2.147.483.647).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  You use type P for fields containing monetary amounts, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type I is more suitable for number fields, index fields,&lt;/P&gt;&lt;P&gt;                  specifying positions and so forth.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can use type F for positive and negative numbers other&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than zero in the range from 1E-307 to 1E+308 with a degree&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  of accuracy up to 15 decimal places. (The ABAP/4 processor&lt;/P&gt;&lt;P&gt;                  always uses the floating point operations of the hardware in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  question rather than standardizing them.) Floating point&lt;/P&gt;&lt;P&gt;                  literals must be enclosed in quotation marks. The standard&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  output length is 22.&lt;/P&gt;&lt;P&gt;                  Entries in type F fields may be formatted in any of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  following ways:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  As a decimal number with or without sign and with or without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a decimal point.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  In the form &amp;lt;mantissa&amp;gt;e&amp;lt;exponent&amp;gt;, where you specify the&lt;/P&gt;&lt;P&gt;                  mantissa as above and the exponent with or without a sign.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (Examples of floating point literals: '1', '-12.34567',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  '-765E-04', '1234E5', '&lt;EM&gt;12E&lt;/EM&gt;34', '+12.3E-4'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Since floating point arithmetic is fast on our hardware&lt;/P&gt;&lt;P&gt;                  platforms, you should use it when you need a greater value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  range and you are able to tolerate rounding errors. Rounding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  errors may occur when converting the external (decimal)&lt;/P&gt;&lt;P&gt;                  format to the corresponding internal format (base 2 or 16)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or vice-versa (ABAP/4 number types).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LIKE f1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the field f with the same field attributes as the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F1 which is already known. Any data objects are valid (fields,&lt;/P&gt;&lt;P&gt;               parameters, structures, ...) as long as types have been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1 can be any Dictionary reference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TABLE_INDEX LIKE SY-TABIX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field TABLE_INDEX now has the same attributes as SY-TABIX&lt;/P&gt;&lt;P&gt;               (the index for internal tables).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This addition is often useful, since the ABAP/4 runtime system&lt;/P&gt;&lt;P&gt;               performs type changes on fields automatically. Any unnecessary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and/or unwanted conversions are thus avoided.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TYPE typ OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines an internal table without header line. Such a table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               consists of any number of table lines with the type typ.&lt;/P&gt;&lt;P&gt;               To fill and edit this table, you can use statements like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND, READ TABLE, LOOP and SORT.&lt;/P&gt;&lt;P&gt;               The OCCURS parameter n defines how many tables lines are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               created initially. If necessary, you can increase the size&lt;/P&gt;&lt;P&gt;               later. Otherwise, the OCCURS parameter is of no significance,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               apart from the exception that applies with APPEND SORTED BY.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: BEGIN OF LINE_TYPE,&lt;/P&gt;&lt;P&gt;                        NAME(20) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        AGE      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      END OF LINE_TYPE.&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS    TYPE LINE_TYPE OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      PERSONS_WA TYPE LINE_TYPE.&lt;/P&gt;&lt;P&gt;               PERSONS_WA-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-AGE  = 25.&lt;/P&gt;&lt;P&gt;               APPEND PERSONS_WA TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-AGE  = 22.&lt;/P&gt;&lt;P&gt;               APPEND PERSONS_WA TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table PERSONS now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Access to table entries not in main memory takes much longer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               On the other hand, there is not enough space in main memory to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               hold such large tables because the roll area is resticted (see&lt;/P&gt;&lt;P&gt;               above).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... LIKE f1 OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines an internal table without header line. Such a table&lt;/P&gt;&lt;P&gt;               consists of any number of table lines with the structure as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified by the data object f1. Processing is the same as for&lt;/P&gt;&lt;P&gt;               addition 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF PERSON,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(20),&lt;/P&gt;&lt;P&gt;                        AGE TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      END OF PERSON.&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS LIKE PERSON OCCURS 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSON TO PERSONS.&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 22.&lt;/P&gt;&lt;P&gt;               APPEND PERSON TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table PERSONS now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... TYPE LINE OF itabtype&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified type itabtyp must be an internal table type. This&lt;/P&gt;&lt;P&gt;               operation creates a data object with the same line type as the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table type specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TYPES TAB_TYP TYPE I OCCURS 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TAB_WA TYPE LINE OF TAB_TYP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data object TAB_WA now has the same attributes as a line of&lt;/P&gt;&lt;P&gt;               the table type TAB_TYP and thus the type I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... LIKE LINE OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The data object tab must be an internal table with or without a&lt;/P&gt;&lt;P&gt;               header line. This operation creates a data object with the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line type as the table specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA TAB TYP TYPE I OCCURS 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TAB_WA TYPE LINE OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data object TAB_WA now has the same attributes as a line of&lt;/P&gt;&lt;P&gt;               the table TAB and thus the type I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... VALUE lit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The initial value of the field f is the literal lit instead of&lt;/P&gt;&lt;P&gt;               that defined in the table above. You can also specify a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               constant or even use  IS INITIAL. In the latter case, the field&lt;/P&gt;&lt;P&gt;               is preset to the type-specific initial value. This form is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               particularly important in connection with the CONSTANTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement which always requires you to use the addition VALUES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA NUMBER      TYPE I        VALUE 123,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    FLAG                      VALUE 'X',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    TABLE_INDEX LIKE SY-TABIX VALUE 45.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When created, the field NUMBER of type I contains 123 rather&lt;/P&gt;&lt;P&gt;               than the expected initial value of 0. The newly created field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FLAG of type C (length 1) contains 'X', while TABLE_INDEX&lt;/P&gt;&lt;P&gt;               contains 45, since the system field SY-TABIX is a numeric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 8    ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Only makes sense with field type P. When you perform&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calculations and on output, the field has n decimal decimal&lt;/P&gt;&lt;P&gt;               places, where n is a number between 0 and 14.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the case of newly generated programs, you normally activate&lt;/P&gt;&lt;P&gt;               fixed point arithmetic in the attributes. If it is not set, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DECIMALS specification is taken into account on output, but not&lt;/P&gt;&lt;P&gt;               when performing calculations. This means that the programmer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must take care of any decimal point calculations by multiplying&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or dividing by powers of ten. (see COMPUTE)&lt;/P&gt;&lt;P&gt;               Fixed point arithmetic should always be active when you are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               performing calculations, since this enables intermediate&lt;/P&gt;&lt;P&gt;               results (for division) to be calculated as accurately as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               possible (in this case, to 31 decimal places).&lt;/P&gt;&lt;P&gt;               To decide whether you should use the fixed point type P or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               floating point type F, see "ABAP/4 number types".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 9    ... WITH HEADER LINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        You can only use this addition with table types. When you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specify WITH HEADER LINE, you create a header line with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               same name type as a table line in addition to the table. With&lt;/P&gt;&lt;P&gt;               non-table operations (e.g. MOVE), the name f refers to this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               header line. With table operations (e.g. APPEND,&lt;/P&gt;&lt;P&gt;               the name f refers to the table or the table and header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The notation f[] always denotes the table. The result of this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               expression is a table without a header line and can be used as&lt;/P&gt;&lt;P&gt;               such.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF PERSON_TYPE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        AGE TYPE I,&lt;/P&gt;&lt;P&gt;                      END OF PERSON_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS LIKE PERSON_TYPE OCCURS 20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 22.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete header line&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               CLEAR PERSONS[].&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DATA f(len).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the field f in the length len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use this variant only for fields of type C, N, P and X.&lt;/P&gt;&lt;P&gt;               Any other field types must have their standard lengths (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table under effect of variant 1).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The lengths allowed depend on the field type:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type  Allowed lengths&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               C     1 - 65535&lt;/P&gt;&lt;P&gt;               N     1 - 65535&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P     1 - 16&lt;/P&gt;&lt;P&gt;               X     1 - 65535&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Each byte can contain (one character or) two decimal or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               hexadecimal digits. Since one place in type P fields is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reserved for the sign, a type P field of length 3 can contain 5&lt;/P&gt;&lt;P&gt;               digits, whereas a type X field of length 3 can hold 6 digits.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Both have an output length of 6.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3      DATA: BEGIN OF rec,&lt;/P&gt;&lt;P&gt;                       ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF rec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines the field string rec which groups together all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields defined for the field string rec between "BEGIN OF REC"&lt;/P&gt;&lt;P&gt;               and "END OF rec". Each field carries the prefix "rec-". Field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               strings can be nested to any depth. See Data objects.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When a field string needs the same fields as an already defined&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field string in addition to its own fields, you can include&lt;/P&gt;&lt;P&gt;               these fields in the field string with INCLUDE STRUCTURE. If no&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               additional fields are needed, it is better to use LIKE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSON,&lt;/P&gt;&lt;P&gt;                       NAME(20) VALUE 'May',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AGE TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF PERSON.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 35.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field PERSON-NAME now contains the contents "May".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSON1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIRSTNAME(20) VALUE 'Michael'.&lt;/P&gt;&lt;P&gt;                       INCLUDE STRUCTURE PERSON.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA  END   OF PERSON1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  If you list a field string as a field, this field ("rec") is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type C, but you should not use a field string like a field,&lt;/P&gt;&lt;P&gt;                  if the field string contains number fields (i.e. type I, F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or F). The length of rec is derived from the sum of the&lt;/P&gt;&lt;P&gt;                  lengths of all components of rec. However, since some fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (for example, to the limit of a word), they include padding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fields that also contribute to the overall length of rec;&lt;/P&gt;&lt;P&gt;                  for this reason, you cannot use the lengths of fields that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur before a particular field string component to&lt;/P&gt;&lt;P&gt;                  calculate its offset to the start of the field string. On&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the other hand, you can guarantee that two fields with the&lt;/P&gt;&lt;P&gt;                  same structure always have the same structure (even where&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  padding fields are concerned). This means that you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  compare and assign fields directly below each other (with&lt;/P&gt;&lt;P&gt;                  MOVE, IF, etc.) and do not have to work field by field (e.g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  with MOVE-CORRESPONDING).&lt;/P&gt;&lt;P&gt;                  INCLUDEs are aligned according to maxumum alignment of their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  components. This applies both to INCLUDEs in ABAP/4 programs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  and also INCLUDEs in Dictionary structures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The TABLES statement automatically defines a field string&lt;/P&gt;&lt;P&gt;                  (the work area. Even the header line belonging to an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  internal table (see below) is a field string.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DATA: BEGIN OF itab OCCURS n,&lt;/P&gt;&lt;P&gt;                       ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                ... VALID BETWEEN f1 AND f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               An internal table includes a header line, which is a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               string containing the fields defined between "BEGIN OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               OCCURS n" and "END OF itab" (see variant 3), and any number of&lt;/P&gt;&lt;P&gt;               table lines with the same structure as the header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To fill and edit an internal table, you use various statements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               such as APPEND, READ TABLE, LOOP and SORT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The OCCURS parameter n determines how many table lines are held&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in main storage (the roll area). If you also generate table&lt;/P&gt;&lt;P&gt;               entries, these are rolled out either to a main storage buffer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or to disk (the paging area).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSONS OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AGE TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;               PERSONS-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS-NAME = 'Gabriela'.&lt;/P&gt;&lt;P&gt;               PERSONS-AGE  = 22.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS also includes the header line (work area) through which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               all operations on the actual table pass.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Access to table entries not in main storage is considerably&lt;/P&gt;&lt;P&gt;               slower. Also, main storage cannot hold large tables in their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entirety, since the size of the roll area is restricted (see&lt;/P&gt;&lt;P&gt;               above).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... VALID BETWEEN f1 AND f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Can appear only after "END OF itab".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sub-fields f1 and f2 of the internal table itab must have&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the line-related validity range (see PROVIDE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     DATA: BEGIN OF COMMON PART c,&lt;/P&gt;&lt;P&gt;                       .....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines one or more common data areas in programs linked by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               external PERFORM calls. If only one common data area exists,&lt;/P&gt;&lt;P&gt;               you can omit the name c. There may be just one unnamed COMMON&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area or one or more named COMMON areas. You assign named COMMON&lt;/P&gt;&lt;P&gt;               areas to each other by name. The structure of data areas must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               always be the same for both the calling and the called program&lt;/P&gt;&lt;P&gt;               (otherwise, the program terminates with an error message at&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The table work areas are always in the common data area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In general, you define the area created as COMMON with a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  common INCLUDE STRUCTURE. Occasionally, you use a INCLUDE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  report which contains precisely the definition of the COMMON&lt;/P&gt;&lt;P&gt;                  PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Field symbols cannot belong to a common data area, even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the FIELD-SYMBOLS statement lies between DATA BEGIN OF&lt;/P&gt;&lt;P&gt;                  COMMON PART and DATA END OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DEFINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DEFINE macro.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines a program component (macro) under the name macro. It&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must consist only of ABAP/4 statements and is expanded at&lt;/P&gt;&lt;P&gt;               compilation time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A macro should always be concluded with the END-OF-DEFINITION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the definition, you can use &amp;amp;n to reference positional&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters (n = 0 .. 9). When the macro is called, &amp;amp;n is&lt;/P&gt;&lt;P&gt;               replaced by the n-th actual parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Define a macro called "++" for use in the program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DEFINE ++.&lt;/P&gt;&lt;P&gt;               ADD 1 TO &amp;amp;1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NUMBER TYPE I VALUE 1.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ++ NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  In general, it is better to use subroutines (FORM, FUNCTION)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  rather than macros because subroutines - unlike macros - are&lt;/P&gt;&lt;P&gt;                  supported by all the ABAP/4 Development Workbench tools&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (including debugging, runtime analysis, runtime error&lt;/P&gt;&lt;P&gt;                  handling, ...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You cannot nest macro definitions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete from a database table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE FROM dbtab       WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;               - DELETE dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE *dbtab.&lt;/P&gt;&lt;P&gt;                 DELETE (dbtabname) ... .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE dbtab       FROM TABLE itab.&lt;/P&gt;&lt;P&gt;                 DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE dbtab  VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete from an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;               - DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;               - DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE REPORT prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete text elements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE TEXTPOOL prog LANGUAGE lg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a data cluster&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE FROM DATABASE dbtab(ar) ...ID key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a file&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE DYNPRO f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a file&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the file specified in the field dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  File deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  File does not exist or could not be deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              Possible reasons:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              1) The file does not exist.&lt;/P&gt;&lt;P&gt;                              2) The file is a directory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              3) The R/3 System has no search authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 for a component of the file name.&lt;/P&gt;&lt;P&gt;                              4) The R/3 System has no search authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 for the directory which contains the file.&lt;/P&gt;&lt;P&gt;                              5) A component of the search path is not a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 directory.&lt;/P&gt;&lt;P&gt;                              6) The file is a symbolic link which cannot be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 resolved (endless loop ?).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              7) The file is a program which is currently&lt;/P&gt;&lt;P&gt;                                 running.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       OPEN DATASET, READ DATASET, CLOSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - Delete from a database table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.  DELETE FROM dbtab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;               2.  DELETE dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE *dbtab.&lt;/P&gt;&lt;P&gt;                   DELETE (dbtabname) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.  DELETE dbtab FROM TABLE itab.&lt;/P&gt;&lt;P&gt;                   DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4.  DELETE dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes lines in a database table. You can specify the name of&lt;/P&gt;&lt;P&gt;               the database table either in the program itself with DELETE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FROM dbtab ... or at runtime as the contents of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               dbtabname with DELETE FROM (dbtabname) .... In both cases, the&lt;/P&gt;&lt;P&gt;               database table must be known in the ABAP/4 Dictionary. If you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specify the name in the program, there must also be an&lt;/P&gt;&lt;P&gt;               appropriate TABLES statement. Only data from the current client&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is usually deleted. You can delete data using a view only if&lt;/P&gt;&lt;P&gt;               the view refers to a single table and was created in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary with the maintenance status "No restriction".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The DELETE statement does not perform authorization checks: You&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must program these yourself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DELETE FROM dbtab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes lines in a database table that satisfy the WHERE clause&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition. With this variant, specification of a WHERE&lt;/P&gt;&lt;P&gt;               condition is obligatory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the statement has been executed, the system field SY-DBCNT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains the number of deleted lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one line was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines were deleted, since no line was&lt;/P&gt;&lt;P&gt;                              selected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all bookings for the Lufthansa flight 0400 on 28.02.1995&lt;/P&gt;&lt;P&gt;               (in the current client):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM SBOOK WHERE CARRID = 'LH'       AND&lt;/P&gt;&lt;P&gt;                                       CONNID = '0400'     AND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       FLDATE = '19950228'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          To delete all the lines in a table, you must specify a WHERE&lt;/P&gt;&lt;P&gt;               condition that is true for all lines. You can achieve this with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WHERE f IN itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the internal table itab is empty, such a condition would&lt;/P&gt;&lt;P&gt;               select all lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Switches off automatic client handling. This allows you to&lt;/P&gt;&lt;P&gt;               delete data across all clients in the case of client-specific&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tables. The client field is then treated like a normal table&lt;/P&gt;&lt;P&gt;               field, for which you can formulate suitable conditions in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WHERE clause.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You must specify the addition CLIENT SPECIFIED immediately&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the name of the database table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DELETE dbtab.&lt;/P&gt;&lt;P&gt;               DELETE *dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE (dbtabname) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... FROM wa&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        These are SAP-specific short forms used to delete a single line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a database table. If the name of the database table is&lt;/P&gt;&lt;P&gt;               specified in the program, the primary key of the line to be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               deleted is taken from the specified work area - dbtab or&lt;/P&gt;&lt;P&gt;               *dbtab. If the name of the database table is not determined&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               until runtime (DELETE (dbtabname) ...), the addition ... FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               wa is obligatory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the statement has been executed, the system field SY-DBCNT&lt;/P&gt;&lt;P&gt;               contains the number of deleted lines (0 or 1).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The line was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines could be deleted, since no line exists&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              with the primary key specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete the booking with the booking number 3 for the Lufthansa&lt;/P&gt;&lt;P&gt;               flight 0400 on 28.02.1995 (in the current client):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;               SBOOK-CARRID = 'LH'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-CONNID = '0400'.&lt;/P&gt;&lt;P&gt;               SBOOK-FLDATE = '19950228'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-BOOKID = '00000003'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE  SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... FROM wa&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Takes the primary key for the line to be deleted not from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table work area dbtab, but from the explicitly specified work&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area wa. Here, the key values from left to right are taken from&lt;/P&gt;&lt;P&gt;               wa according to the structure of the primary key in the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               work area dbtab (see TABLES). The structure of wa is not taken&lt;/P&gt;&lt;P&gt;               into account. Therefore, the work area wa must be at least as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               wide (see DATA) as the primary key in the table work area dbtab&lt;/P&gt;&lt;P&gt;               and the alignment of the work area wa must correspond to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               alignment of the primary key in the table work area. Otherwise,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               you get a runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a work area is not explicitly specified, the values for the&lt;/P&gt;&lt;P&gt;               line to be deleted are taken from the table work area dbtab,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               even if the statement appears in a subroutine (see FORM) or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Funktionsbaustein (see FUNCTION) where the table work area is&lt;/P&gt;&lt;P&gt;               stored in a formal parameter or a local variable of the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DELETE dbtab FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Mass deletion: Deletes all database table lines for which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table itab contains values for the primary key fields.&lt;/P&gt;&lt;P&gt;               The lines of the internal table itab must satisfy the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition as the work area wa in addition 1 to variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system field SY-DBCNT contains the number of deleted lines,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e. the number of lines of the internal table itab for whose&lt;/P&gt;&lt;P&gt;               key values there were lines in the database table dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  All lines from itab could be used to delete&lt;/P&gt;&lt;P&gt;                              lines from dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  For at least one line of the internal table in&lt;/P&gt;&lt;P&gt;                              the database table, there was no line with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              same primary key. All found lines are deleted..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the internal table itab is empty, SY-SUBRC and SY-DBCNT are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DELETE dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This variant is obsolete, since variants 1 - 3 allow you to&lt;/P&gt;&lt;P&gt;               specify the database table name dynamically.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes a line in a database table, the name of which is taken&lt;/P&gt;&lt;P&gt;               from the field vers at runtime. The database table must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               known to the ABAP/4 Dictionary and its name must conform to the&lt;/P&gt;&lt;P&gt;               following naming convention: It must begin with 'T' and can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               consist of four additional characters. The field vers must&lt;/P&gt;&lt;P&gt;               contain the table name without a leading 'T'. Only lines in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               current client are deleted. The line to be deleted is taken&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from the statically specified table work area dbtab or *dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The line was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines could be deleted because no line&lt;/P&gt;&lt;P&gt;                              existed with the specified primary key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE DYNPRO - delete a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE DYNPRO f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the screen specified in the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The screen was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The screen does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of f consist of the 8-character program name and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the 4-character screen number.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DELETE DYNPRO 'SAPTESTX0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       IMPORT DYNPRO, EXPORT DYNPRO, GENERATE DYNPRO, SYNTAX-CHECK FOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DYNPRO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a data cluster&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE FROM DATABASE dbtab(ar) ID key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the data cluster stored in the table dbtab under the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area ar (constant) and the ID key (field or literal) (EXPORT&lt;/P&gt;&lt;P&gt;               ... TO DATABASE ...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES INDX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 1,&lt;/P&gt;&lt;P&gt;                       CONT(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(30) TYPE C.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               EXPORT TAB FLD TO DATABASE INDX(AR) ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can delete this data cluster with the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM DATABASE INDX(AR) ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... CLIENT f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the data cluster in the client specified in the table f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (only with client-specific import/export databases).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES INDX.&lt;/P&gt;&lt;P&gt;               DELETE FROM DATABASE INDX(AR) CLIENT '001' ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - Delete from an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;               3. DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;               5. DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes one or more lines from an internal table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The deletion of lines within a LOOP ... ENDLOOP loop is&lt;/P&gt;&lt;P&gt;               performed in a sequence of loop passes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The current entry of the internal table itab is&lt;/P&gt;&lt;P&gt;               deleted in a LOOP loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          After deleting the current entry in an internal table in a LOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               loop, the effect of further update operations on the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry without an INDEX specification is not guaranteed and may&lt;/P&gt;&lt;P&gt;               changed in later Releases.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the idx entry from the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The entry does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the line area from index idx1 to idx2 from internal&lt;/P&gt;&lt;P&gt;               table itab. At least one of the two parameters FROM idx1 or TO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               idx2 should be specified. If parameter FROM is missing, the&lt;/P&gt;&lt;P&gt;               area from the start of the table to line idx2 is deleted. If&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameter TO is missing, the area from line idx1 to the end of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the table is deleted. Start index idx1 must be greater than 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  None of the entries were deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... FROM idx1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... TO   idx2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes all entries from internal table itab, which satisfies&lt;/P&gt;&lt;P&gt;               the condition condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  None of the entries were deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... FROM idx1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The line area to be investigated is restricted to the lines up&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to index idx1. If the addition FROM idx1 is missing, a search&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is carried out from the beginning of the table.&lt;/P&gt;&lt;P&gt;               The addition FROM must come before the WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TO   idx2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Restricts the line area to be investigated to the lines up to&lt;/P&gt;&lt;P&gt;               index idx2. If the addition TO idx2 is missing, a search is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               carried out until the end of the table.&lt;/P&gt;&lt;P&gt;               The addition TO must come before the WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all lines in a name table between lines 5 and 36, if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry begins with one of the letters 'A' to 'C':&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAMETAB OCCURS 100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) TYPE C,       END OF NAMETAB.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE NAMETAB FROM 5 TO 36 WHERE NAME CA 'ABC'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... COMPARING f1 f2 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... COMPARING ALL FIELDS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes neighboring, duplicate entries from the internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               itab. If there are n duplicate entries, the first entry is&lt;/P&gt;&lt;P&gt;               retained and the other n - 1 entries are deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Two lines are considered to be duplicated if their default keys&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one duplicate exists, at least one&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              entry deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No duplicates exist, no entry deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... COMPARING f1 f2 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Two lines of the internal table itab are considered to be&lt;/P&gt;&lt;P&gt;               duplicates if the specified fields f1, f2, .... match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... COMPARING ALL FIELDS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Two lines are considered to be duplicates if all fields of the&lt;/P&gt;&lt;P&gt;               table entries match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. The DELETE ADJACENT DUPLICATES statement is especially&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  useful if the internal table itab is sorted by fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (whether in ascending or descending order) which were&lt;/P&gt;&lt;P&gt;                  compared during duplicate determination. In this case, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  deletion of neighbouring duplicates is the same as the&lt;/P&gt;&lt;P&gt;                  deletion of all duplicates.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If a comparison criterion is only known at runtime, it can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  be specified dynamically as the content of a field name by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  using COMPARING ... (name) .... If name is blank at runtime,&lt;/P&gt;&lt;P&gt;                  the comparison criterion is ignored. If name contains an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Comparison criteria - statistically or dynamically specified&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - can be further restriced by specifying the offset and/or&lt;/P&gt;&lt;P&gt;                  length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Deleting a line from an internal table incurs index&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  maintenance costs which depend on the index of the line to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  be deleted. The runtime depends on the line width of the&lt;/P&gt;&lt;P&gt;                  table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, deleting a line in the middle of an internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table with 200 entries requires about 10 msn (standardized&lt;/P&gt;&lt;P&gt;                  microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Deleting a range of entries with "DELETE itab FROM idx1 TO&lt;/P&gt;&lt;P&gt;                  idx2." deleting a set of entries with "DELETE itab WHERE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ..." only incur index maintenance costs once. Compared with&lt;/P&gt;&lt;P&gt;                  a LOOP, which deletes line-by-line, this is much faster.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. To delete neighboring, duplicate entries from an internal&lt;/P&gt;&lt;P&gt;                  table, use the variant "DELETE ADJACENT DUPLICATES FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  itab." instead of LOOP constructions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT itab, MODIFY itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE REPORT prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes some components (source code, attributes, text elements&lt;/P&gt;&lt;P&gt;               and generated version) of the program specified in the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The program was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The program does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement deletes neither the variants nor the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               documentation.&lt;/P&gt;&lt;P&gt;               Normally, you should use the function module RS_DELETE_PROGRAM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to delete a program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT REPORT, DELETE TEXTPOOL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete text elements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE TEXTPOOL prog LANGUAGE lg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes all text elements of the program specified in the field&lt;/P&gt;&lt;P&gt;               prog for the language specified in the field lg from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use the value '*' for lg, the text elements of all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               languages are deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all text elements of the program PROGNAME in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               language "English":&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PROGRAM(8) VALUE 'PROGNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE TEXTPOOL PROGRAM LANGUAGE 'E'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT TEXTPOOL, READ TEXTPOOL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DEQUEUE is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To unlock resources, you must use a function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of a field&lt;/P&gt;&lt;P&gt;               - DESCRIBE FIELD f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of an internal table&lt;/P&gt;&lt;P&gt;               - DESCRIBE TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine distance between two fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of a list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the distance between the fields f1 and f2 in f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES LFA1.&lt;/P&gt;&lt;P&gt;               DATA DIS TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE DISTANCE BETWEEN LFA1-LAND1&lt;/P&gt;&lt;P&gt;                                 AND     LFA1-NAME1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 INTO    DIS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: DIS contains the value 14, since exactly two fields lie&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               between LAND1 and NAME1, namely LNRZA (10 bytes) and LOEVM (1&lt;/P&gt;&lt;P&gt;               byte); additionally, the sub-field LAND1 is 3 bytes long.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Therefore, the start of the sub-field LAND1 is exactly 14 bytes&lt;/P&gt;&lt;P&gt;               from the start of the sub-field NAME1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - determine distance between two fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines the distance between the fields f1 and f2 and places&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the result (in bytes) in f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Determine the distance between two components of the demo table&lt;/P&gt;&lt;P&gt;               SBOOK in the flight reservation system:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA DIST TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE DISTANCE BETWEEN SBOOK-CARRID&lt;/P&gt;&lt;P&gt;                                 AND     SBOOK-BOOKID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 INTO    DIST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: DIST contains the value 15 because exactly two fields,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SFLIGHT-CONNID (4 bytes) and SBOOK-FLDATE (8 bytes), lie&lt;/P&gt;&lt;P&gt;               between the SBOOK components CARRID and BOOKID; also,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-CARRID is itself 3 bytes long. The sum of these values&lt;/P&gt;&lt;P&gt;               gives the distance between the two components in bytes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - Supply attributes of a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE FIELD f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Supplies the attributes of the field f. You must specify at&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               least one of the additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... LENGTH len&lt;/P&gt;&lt;P&gt;               2. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... TYPE typ COMPONENTS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... OUTPUT-LENGTH len&lt;/P&gt;&lt;P&gt;               5. ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... EDIT MASK mask&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the length of the field f in the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: FLD(8),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     LEN TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD LENGTH LEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: LEN contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the data type of f in the field typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(8) TYPE N,&lt;/P&gt;&lt;P&gt;                     F_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD TYPE F_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: F_TYPE contains the value 'N'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Note  Along with the elementary data types you can specify&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               under DATA (C, N, etc.), several other data types are created&lt;/P&gt;&lt;P&gt;               either with reference to Dictionary fields or during&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               generation. These data types, which are also returned by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE, have the following type IDs:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               h              Internal table&lt;/P&gt;&lt;P&gt;               s              2-byte integer with leading sign&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               b              1-byte integer without leading sign&lt;/P&gt;&lt;P&gt;               u              Structure without internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               v              Structure containing at least one internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For compatibility reasons, ... TYPE typ returns C rather than u&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or v with structures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TYPE typ COMPONENTS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Similar to ... TYPE typ except that, with structures in typ, u&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or v are returned and in the number of structure components is&lt;/P&gt;&lt;P&gt;               set in n. If f is not a structure, n is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Recursive processing of the pages of an ABAP/4 data structure:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM TEST USING F.&lt;/P&gt;&lt;P&gt;                 DATA: TYP(1) TYPE C, N TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS: &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 DO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN COMPONENT SY-INDEX OF STRUCTURE F TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC &amp;lt;&amp;gt; 0. EXIT. ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DESCRIBE FIELD &amp;lt;F&amp;gt; TYPE TYP COMPONENTS N.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   IF N &amp;gt; 0. " Equivalent is TYP = 'u' OR TYP = 'v'&lt;/P&gt;&lt;P&gt;                     PERFORM TEST USING &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;                     PERFORM DO_SOMETHING USING &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... OUTPUT-LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Enters the output length of the field f in the variable len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: FLD(4) TYPE P,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     O_LEN TYPE P.&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD OUTPUT-LENGTH O_LEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: O_LEN contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Enters the number of decimal places for the field f (defined in&lt;/P&gt;&lt;P&gt;               addition ... DECIMALS of the DATA statement or in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary) in the variable n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(8) TYPE P DECIMALS 2,&lt;/P&gt;&lt;P&gt;                     DEC TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD DECIMALS DEC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Resultat: DEC contains the value 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... EDIT MASK mask&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        If the field f has a conversion routine in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary, this is placed in the field mask in the form&lt;/P&gt;&lt;P&gt;               "==conv". "conv" stands for the name of the conversion routine,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               e.g. "==ALPHA" in the conversion routine "ALPHA". In this form,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               mask can then be used in the addition USING EDIT MASK mask of&lt;/P&gt;&lt;P&gt;               the WRITE statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Check whether there is a conversion routine for the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "customer number" in the table SBOOK:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: CONV_EXIT(10).&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD SBOOK-CUSTOMID EDIT MASK CONV_EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CONV_EXIT &amp;lt;&amp;gt; SPACE. ... ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: CONV_EXIT contains the value "==ALPHA".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the required field is only known at runtime, this field can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               also be assigned dynamically to a field symbol (see&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS, ASSIGN).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - supply attributes of a list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;               3. DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DESCRIBE LIST PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of a list. All variants have the&lt;/P&gt;&lt;P&gt;               addition ... INDEX idx allowing you to determine the attributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a particular list level (SY-LSIND = 0,1,2,3,... ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should use this key word only in exceptional cases (e.g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               when editing an 'anonymous' list in a program other than that&lt;/P&gt;&lt;P&gt;               which generated the list). In all other cases, you should save&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the relevant values when you generate the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Take care when attempting to retrieve the list attributes being&lt;/P&gt;&lt;P&gt;               set up (...INDEX SY-LSIND), since some attributes (number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pages, number of lines, ...) may not have been updated yet.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: List does not exist (only with the addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              INDEX)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the number of lines in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LN LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST NUMBER OF LINES LN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable LN now contains the number of lines in the&lt;/P&gt;&lt;P&gt;               displayed list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of pages in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: List does not exist (only with the addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              INDEX)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the number of pages in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PN LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST NUMBER OF PAGES PN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable PN now contains the number of pages in the&lt;/P&gt;&lt;P&gt;               displayed list (i.e. the contents of the system field SY-PAGNO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the list has been generated!).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of the page for the line lin in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In interactive reporting, line selection causes a value to be&lt;/P&gt;&lt;P&gt;               assigned to the system field SY-LILLI (absolute number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected list line). The system field SY-CPAGE contains the&lt;/P&gt;&lt;P&gt;               page number for the first displayed line in the list. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected line does not have to belong to this page (in cases&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               where several pages are displayed at the same time). The page&lt;/P&gt;&lt;P&gt;               number may be of interest even with direct reading of lines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (see READ LINE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Line does not exist&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 8:  List does not exist&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the page number for the&lt;/P&gt;&lt;P&gt;               selected line (SY-LILLI):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PAGENUMBER LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST LINE SY-LILLI PAGE PAGENUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable PAGENUMBER now contains the page number for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line SY-LILLI (i.e. the contents of the system field SY-PAGNO&lt;/P&gt;&lt;P&gt;               when outputting the line SY-LILLI!).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DESCRIBE LIST PAGE pag&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... INDEX idx&lt;/P&gt;&lt;P&gt;               2. ... LINE-SIZE col&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... LINE-COUNT lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... LINES lin&lt;/P&gt;&lt;P&gt;               5. ... FIRST-LINE lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... TOP-LINES lin&lt;/P&gt;&lt;P&gt;               7. ... TITLE-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8. ... HEAD-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               9. ... END-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the page pag in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Page does not exist&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 8:  List does not exist&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition 1    ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LINE-SIZE col&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the line length for the page pag (see&lt;/P&gt;&lt;P&gt;               NEW-PAGE...LINE-SIZE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... LINE-COUNT lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the permitted number of lines for the page pag (see&lt;/P&gt;&lt;P&gt;               NEW-PAGE...LINE-COUNT).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output on the page pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... FIRST-LINE lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the absolute line number of the first line of the page&lt;/P&gt;&lt;P&gt;               pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... TOP-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output by page header processing&lt;/P&gt;&lt;P&gt;               (i.e. standard title + column headers + TOP-OF-PAGE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... TITLE-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output as standard title lines by&lt;/P&gt;&lt;P&gt;               page header processing (see NEW-PAGE...NO-TITLE/WITH-TITLE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The value of TITLE-LINES is contained in TOP-LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 8    ... HEAD-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output as column headers by page&lt;/P&gt;&lt;P&gt;               header processing (see NEW-PAGE...NO-HEADING/WITH-HEADING).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The value of HEAD-LINES is contained in TOP-LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 9    ... END-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines reserved for end-of-page processing&lt;/P&gt;&lt;P&gt;               (see END-OF-PAGE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Determine the number of lines output on the third page of the&lt;/P&gt;&lt;P&gt;               basic list (SY-LSIND = 0) in the event TOP-OF-PAGE:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: TOP TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     HEAD TYPE I,&lt;/P&gt;&lt;P&gt;                     TITLE TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     REAL_TOP TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST INDEX 0 PAGE 3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TOP-LINES TOP&lt;/P&gt;&lt;P&gt;                        HEAD-LINES HEAD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TITLE-LINES TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               REAL_TOP = TOP - TITLE - HEAD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      Determine the absolute number of lines in the displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LN  TYPE I,          "number of lines on a page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     FLN TYPE I,          "number of first line on a page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PN  TYPE I,          "number of a page&lt;/P&gt;&lt;P&gt;                     LIST_LINES TYPE I.   "total number of lines in list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine number of last page:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST NUMBER OF PAGES PN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine number of first line of last page and number of lines&lt;/P&gt;&lt;P&gt;               on that page:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST PAGE PN FIRST-LINE FLN LINES LN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Number of list lines = number of first line of last page +&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               number of lines - 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LIST_LINES = FLN + LN - 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Or: Count lines of all pages in a loop:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR LIST_LINES.&lt;/P&gt;&lt;P&gt;               DO PN TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  DESCRIBE LIST PAGE SY-INDEX LINES LN.&lt;/P&gt;&lt;P&gt;                  ADD LN TO LIST_LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST NUMBER OF LINES LIST_LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - return attributes of an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the internal table itab. You must use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               at least one of the additions listed below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.... LINES lin&lt;/P&gt;&lt;P&gt;               2.... OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Places the number of filled lines of the table t in the field&lt;/P&gt;&lt;P&gt;               lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       X,&lt;/P&gt;&lt;P&gt;                     END OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LIN TYPE P.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR TAB. REFRESH TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               MOVE '?' TO TAB-X.&lt;/P&gt;&lt;P&gt;               APPEND TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE TABLE TAB LINES LIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: LIN contains the value 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Transfers the size of the OCCURS parameter from the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition to the variable n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 10,&lt;/P&gt;&lt;P&gt;                       X,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END OF TAB.&lt;/P&gt;&lt;P&gt;                     OCC TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE TABLE TAB OCCURS OCC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: OCC contains the value 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the table is meant to accept more lines than specified by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the OCCURS parameter, the parameter value is roughly doubled as&lt;/P&gt;&lt;P&gt;               long as the table size remains smaller than 8 KB; this table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area is held in the roll area. If the table exceeds the maximum&lt;/P&gt;&lt;P&gt;               permitted size, the OCCURS parameter is not increased and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               remaining part of the table is rolled out to the paging area&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (see DATA).&lt;/P&gt;&lt;P&gt;               For this reason, the OCCURS value determined by the DESCRIBE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement may differ from that in the DATA statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to execute the DESCRIBE TABLE statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               approx. 4 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DETAIL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DETAIL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This key word is the same as the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORMAT INTENSIFIED OFF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The latter is recommended due to better readability.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          When outputting data to a list, you also use the addition&lt;/P&gt;&lt;P&gt;               INTENSIFIED OFF of the WRITE statement to change the output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               format for single fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       FORMAT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DIVIDE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DIVIDE n1 BY n2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Divides the contents of n1 by n2 and places the result in n1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This is equivalent to: n1 = n1 / n2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: SUM TYPE P, NUMBER TYPE P.&lt;/P&gt;&lt;P&gt;               DIVIDE SUM BY NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The details regarding conversions and performance given under&lt;/P&gt;&lt;P&gt;               COMPUTE apply equally to DIVIDE. Furthermore: Division by 0 is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not allowed, except where 0 / 0 results in 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_BADDATA: P field contains no correct BCD format&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_FIELD_OVERFLOW: Result field is too small (type P)&lt;/P&gt;&lt;P&gt;               -  BCD_OVERFLOW: Overflow during arithmetic operation (type P)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_ZERODIVIDE: Division by 0 (type P)&lt;/P&gt;&lt;P&gt;               -  COMPUTE_FLOAT_ZERODIVIDE: Division by 0 (type F)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_DIV_OVERFLOW: Whole number overflow with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  division&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_ZERODIVIDE: Division by 0 (type I)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COMPUTE, DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DIVIDE-CORRESPONDING rec1 BY rec2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Interprets rec1 and rec2 as field strings, i.e. if rec1 and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               rec2 are tables with header lines, the statement is executed&lt;/P&gt;&lt;P&gt;               for their header lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Searches for all sub-fields that occur both in rec1 and rec2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and then generates, for all field pairs corresponding to the&lt;/P&gt;&lt;P&gt;               sub-fields ni, statements similar in the following form:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE rec1-ni BY rec2-ni.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other fields remain unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With more complex structures, the complete names of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pairs must be identical.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF MONEY,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       VALUE_IN(20) VALUE 'German marks'.&lt;/P&gt;&lt;P&gt;                       USA TYPE I VALUE 100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FRG TYPE I VALUE 200,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AUT TYPE I VALUE 300,&lt;/P&gt;&lt;P&gt;                     END   OF MONEY,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF CHANGE,&lt;/P&gt;&lt;P&gt;                       DESCRIPTION(30)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                           VALUE 'DM to national currency'.&lt;/P&gt;&lt;P&gt;                       USA TYPE F VALUE '1.5',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FRG TYPE F VALUE '1.0',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AUT TYPE F VALUE '0.14286',&lt;/P&gt;&lt;P&gt;                     END   OF CHANGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE-CORRESPONDING MONEY BY CHANGE.&lt;/P&gt;&lt;P&gt;   &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 03 Jul 2007 04:28:03 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-07-03T04:28:03Z</dc:date>
    <item>
      <title>Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452135#M549564</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can any one give me all the Syntax in ABAP?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2007 04:23:45 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452135#M549564</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-07-03T04:23:45Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452136#M549565</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PLEASE CHECK OUT THE LINK BELOW IT WILL HELP YOU&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://help.sap.com/saphelp_nw2004s/helpdata/en/fc/eb2ed0358411d1829f0000e829fbfe/content.htm" target="test_blank"&gt;http://help.sap.com/saphelp_nw2004s/helpdata/en/fc/eb2ed0358411d1829f0000e829fbfe/content.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**********&lt;STRONG&gt;PLEASE REWARD POINTS IF THE INFORMATION IS HELPFUL TO YOU&lt;/STRONG&gt;************&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2007 04:25:31 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452136#M549565</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-07-03T04:25:31Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452137#M549566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Goto ABAPDOCU there you can find syntax for all the keywords.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regrds,&lt;/P&gt;&lt;P&gt;Sesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2007 04:27:08 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452137#M549566</guid>
      <dc:creator>seshatalpasai_madala</dc:creator>
      <dc:date>2007-07-03T04:27:08Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452138#M549567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;ABAP/4 programming language overview&lt;/P&gt;&lt;P&gt; -&lt;/P&gt;&lt;HR originaltext="-----------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; This documentation describes the syntax and meaning of ABAP/4&lt;/P&gt;&lt;P&gt; key words (for Release 3.0). The contents are identical to the&lt;/P&gt;&lt;P&gt; online help function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ADD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ADD n TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ADD n1 THEN n2 UNTIL nz GIVING m.&lt;/P&gt;&lt;P&gt;               3. ADD n1 THEN n2 UNTIL nz TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ADD n1 THEN n2 UNTIL nz&lt;/P&gt;&lt;P&gt;                                ...ACCORDING TO sel ...GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. ADD n1 FROM m1 TO mz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     ADD n TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Adds the contents of n to the contents of M  and stores the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               result in m.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = m + n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NUMBER TYPE I VALUE 3,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM    TYPE I VALUE 5.&lt;/P&gt;&lt;P&gt;               ADD NUMBER TO SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 8, whilst the contents of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NUMBER remains unchanged at 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The details about conversions and performance described under&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE are identical for ADD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_BADDATA: P field contains incorrect BCD format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_FIELD_OVERFLOW: Result field too small (type P).&lt;/P&gt;&lt;P&gt;               -  BCD_OVERFLOW: Overflow with arithmetic operation (type P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_PLUS_OVERFLOW: Integer overflow when adding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COMPUTE, ADD-CORRESPONDING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     ADD n1 THEN n2 UNTIL nz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Adds the contents of the fields n1, n2, ..., nz together and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               stores the result in m, where n1 is the first, n2 the second&lt;/P&gt;&lt;P&gt;               and nz the last of a sequence of fields the same distance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               apart. They can be either database fields or internal fields,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               but they must all have the same type and length.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = n1 + n2 + ... + nz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;                       SIX   TYPE P VALUE 60,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN  NUMBERS-TWO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 150 but its initial value is&lt;/P&gt;&lt;P&gt;               unimportant. The fields within the field string NUMBERS remain&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     ADD n1 THEN n2 UNTIL nz TO m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calculates the total as in variant 2 but then adds it to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents of the field m.&lt;/P&gt;&lt;P&gt;               This is equivalent to: m = m + n1 + n2 + ... + nz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     SUM TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN  NUMBERS-TWO&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE TO SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 1150.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     ADD n1 THEN n2 UNTIL nz&lt;/P&gt;&lt;P&gt;                              ...ACCORDING TO sel ...GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Parts marked with " ..." are interchangeable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calculates the total as in variants 2 and 3. In this case,&lt;/P&gt;&lt;P&gt;               however, the operands from a sequence of fields of the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type are restricted to a partial sequence by the selection&lt;/P&gt;&lt;P&gt;               specification sel generated by SELECT-OPTIONS or RANGES. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               partial sequence results from the indexes that satisfy the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition IN sel (see IF).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     SUM   TYPE I VALUE 1000,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     INDEX TYPE I.&lt;/P&gt;&lt;P&gt;               RANGES SELECTION FOR INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SIGN   = 'I'.&lt;/P&gt;&lt;P&gt;               SELECTION-OPTION = 'BT'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-LOW    = 2.&lt;/P&gt;&lt;P&gt;               SELECTION-HIGH   = 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE THEN NUMBERS-TWO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               UNTIL NUMBERS-FIVE&lt;/P&gt;&lt;P&gt;                               ACCORDING TO SELECTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUM now contains 90. Only the component fields TWO to FOUR were&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected from the field string NUMBERS and added together.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     ADD n1 FROM m1 TO mz GIVING m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The field n1 must be the first in a sequence of consecutive&lt;/P&gt;&lt;P&gt;               fields of the same type. m1 and mz should contain the numbers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the first and last fields in this sequence to be added&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               together (whether fixed or variable). The total is stored in m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NUMBERS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       ONE   TYPE P VALUE 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TWO   TYPE P VALUE 20,&lt;/P&gt;&lt;P&gt;                       THREE TYPE P VALUE 30,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FOUR  TYPE P VALUE 40,&lt;/P&gt;&lt;P&gt;                       FIVE  TYPE P VALUE 50,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF NUMBERS,&lt;/P&gt;&lt;P&gt;                     START TYPE I VALUE 2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUM   TYPE I VALUE 1000.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD NUMBERS-ONE FROM START TO 4 GIVING SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field SUM now contains 90.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The details for conversion and performance specified for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE are equally valid for ADD.&lt;/P&gt;&lt;P&gt;               The runtime required for adding two numbers of type I or F is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               about 2 msn (standardized microseconds), for type P it is&lt;/P&gt;&lt;P&gt;               roughly 8 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Besides the runtime errors listed in variant 1, the error&lt;/P&gt;&lt;P&gt;               ADDF_INT_OVERFLOW can occur instead of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPUTE_INT_PLUS_OVERFLOW in other variants.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD-CONDITIONAL is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ADD-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    ADD-CORRESPONDING rec1 TO rec2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Interprets rec1 and rec2 as field strings. If, for example,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               rec1 and rec2 are tables, executes the statement for their&lt;/P&gt;&lt;P&gt;               header lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Searches for all sub-fields which occur both in rec1 and rec2&lt;/P&gt;&lt;P&gt;               and then, for all relevant field pairs corresponding to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sub-fields ni, generates statements of the form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD rec1-ni TO rec2-ni.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other fields remain unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With complex structures, the complete names of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pairs must be textually identical.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF VECTOR,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       X      TYPE I,&lt;/P&gt;&lt;P&gt;                       Y      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       LENGTH TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF VECTOR,&lt;/P&gt;&lt;P&gt;                     BEGIN OF CIRCLE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       VOLUME TYPE P&lt;/P&gt;&lt;P&gt;                       Y      TYPE P,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       RADIUS TYPE I,&lt;/P&gt;&lt;P&gt;                       X      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF CIRCLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               ADD-CORRESPONDING VECTOR TO CIRCLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sub-fields X and Y occur in both the field strings VECTOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and CIRCLE. Therefore, the ADD-CORRESPONDING statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               equivalent to both the following statements:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD VECTOR-X TO CIRCLE-X.&lt;/P&gt;&lt;P&gt;               ADD VECTOR-Y TO CIRCLE-Y.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          All fields with the same name are added, whether numeric or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not. The same conversions are performed as with ADD and similar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime errors to those possible with ADD can also occur.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       ADD&lt;/P&gt;&lt;P&gt;               MOVE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUBTRACT-CORRESPONDING&lt;/P&gt;&lt;P&gt;               MULTIPLY-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ADD-SELECTIVE is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; APPEND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. APPEND [wa TO|INITIAL LINE TO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.&lt;/P&gt;&lt;P&gt;               3. APPEND [wa TO] itab SORTED BY f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     APPEND [wa TO|INITIAL LINE TO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Appends a new line to the end of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa TO, the new line is taken from the contents&lt;/P&gt;&lt;P&gt;               of the explicitly specified work area wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use INITIAL LINE TO, a line filled with the correct&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value for the type is added.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the specification before itab is omitted, the new line is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               taken from the internal tbale itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the APEND, the system field SY-TABIX contains the index&lt;/P&gt;&lt;P&gt;               of the newly added table entry.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      Generate a list with customer numbers:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SCUSTOM.&lt;/P&gt;&lt;P&gt;               DATA: CUSTOMER LIKE SCUSTOM-ID OCCURS 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND SCUSTOM-ID TO CUSTOMER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Append a blank line or a line with its initial value to the&lt;/P&gt;&lt;P&gt;               above list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND INITIAL LINE TO CUSTOMER&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Generate a compressed list with plane data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PARAMETERS: SEATS_LO LIKE SAPLANE-SEATSMAX DEFAULT 30,&lt;/P&gt;&lt;P&gt;                           SEATS_HI LIKE SAPLANE-SEATSMAX DEFAULT 50.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PLANE        LIKE SAPLANE OCCURS 0,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PLANE_NEEDED LIKE SAPLANE WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT PLANE INTO PLANE_NEEDED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                             WHERE SEATSMAX BETWEEN SEATS_LO AND SEATS_HI.&lt;/P&gt;&lt;P&gt;                 APPEND PLANE_NEEDED.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. When using internal tables with a header line, avoid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unnecessary assignments to the header line. Whenever&lt;/P&gt;&lt;P&gt;                  possible, use statements which have an explicit work area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, "APPEND wa TO itab." is approximately twice as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fast as "itab = wa. APPEND itab.". The same applies to&lt;/P&gt;&lt;P&gt;                  COLLECT and INSERT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. In contrast to COLLECT, APPEND does not check whether an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  entry with the same default key exists. Therefore, it is&lt;/P&gt;&lt;P&gt;                  considerably faster than COLLECT. If the COLLECT logic is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  not needed or lines with an identical default key cannot&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur in a particular situation, you should always use&lt;/P&gt;&lt;P&gt;                  APPEND instead of COLLECT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. The runtime required for APPEND increases with the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  width of the table and depends on the number of fields.&lt;/P&gt;&lt;P&gt;                  Appending an entry to an internal table with a width of 111&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  bytes takes about 9 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. To append an internal table to another internal table, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  should use the variant APPEND LINES OF ... which is 3 to 4&lt;/P&gt;&lt;P&gt;                  times faster than using a LOOP to process the source table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  and append the entries line-by-line to the target table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Appends the internal table itab1 or an extract from itab1 to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the end of the internal table itab2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               By specifying FROM idx1 or TO idx2 you can restrict the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area taken from the source table itab1. If there is no FROM&lt;/P&gt;&lt;P&gt;               specification, it begins with the first line of itab1. If there&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is no TO specification, it ends with the last line of itab1.&lt;/P&gt;&lt;P&gt;               This means that the complete table is appended if neither a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FROM nor a TO is specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the APPEND, the system field SY-TABIX contains the index&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the last table entry appended, i.e. the total number of&lt;/P&gt;&lt;P&gt;               entries from both tables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          By comparing the values of SY-TABIX before and after the APPEND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement, you can determine how many lines were appended to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Merge two tables with whole numbers:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: ITAB1  TYPE I OCCURS 100,&lt;/P&gt;&lt;P&gt;                     ITAB2  TYPE I OCCURS 100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 2 TO ITAB1.&lt;/P&gt;&lt;P&gt;               APPEND 3 TO ITAB1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 5 TO ITAB1.&lt;/P&gt;&lt;P&gt;               APPEND 7 TO ITAB1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND 3 TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND INITIAL LINE TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND LINES OF ITAB1 FROM 2 TO 20 TO ITAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table ITAB2 now contains five lines with the values 3, 0,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3, 5 and 7.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant is 3 to 4 times faster than using a LOOP to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               process the source table and append the entries line-by-line to&lt;/P&gt;&lt;P&gt;               the target table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     APPEND [wa TO] itab SORTED BY f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Inserts the new entry into table and re-sorts the table by the&lt;/P&gt;&lt;P&gt;               sub-field f in descending order. This only makes sense if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table was sorted beforehand. When the number of table entries&lt;/P&gt;&lt;P&gt;               reaches the OCCURS parameter value, the last entry is deleted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               if the value f of a new entry is greater (particularly suitable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               for ranked lists). You can only sort by one sub-field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa TO, the new line is taken from the contents&lt;/P&gt;&lt;P&gt;               of the explicitly specified work area wa. Otherwise, it comes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from the header line of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 3,&lt;/P&gt;&lt;P&gt;                       NAME(10), SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'big'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 90.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'small'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 10.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'too small'.&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES =  5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'middle'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-SALES = 50.&lt;/P&gt;&lt;P&gt;               APPEND COMPANIES SORTED BY SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table now has three (-&amp;gt; OCCURS 3) entries. The line with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the contents 'too small' in the sub-field NAME is deleted from&lt;/P&gt;&lt;P&gt;               the table because the entry for 'middle' has a greater value in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the sub-field SALES. This entry now appears in the second table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line (after 'big' and before 'small').&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. Whenever an internal table is processed with APPEND SORTED&lt;/P&gt;&lt;P&gt;                  BY, it should always be filled in this way.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If you specify APPEND with the parameter SORTED BY, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system always searches the entire table. Therefore, it is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  sometimes better to create the table with a simple APPEND&lt;/P&gt;&lt;P&gt;                  and then use SORT to sort in descending ot ascending order&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  afterwards.&lt;/P&gt;&lt;P&gt;                  You can also sort in ascending order by first determining&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the insert position with READ TABLE itab WITH KEY f = itab-f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  BINARY SEARCH and then by inserting the new entry into the&lt;/P&gt;&lt;P&gt;                  table (perhaps read SY-SUBRC beforehand) with INSERT itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  INDEX SY-TABIX.&lt;/P&gt;&lt;P&gt;                  However, you should be aware that, in such cases, the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  may contain more entries than specified in the OCCURS&lt;/P&gt;&lt;P&gt;                  parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. If several lines with an identical value f are added, lines&lt;/P&gt;&lt;P&gt;                  added later are treated as smaller, i.e. they are inserted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  after existing lines with the same value f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. If you use APPEND ... SORTED BY f with an explicitly&lt;/P&gt;&lt;P&gt;                  specified work area, this must be compatible with the line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type of the internal table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. If the sort criterion f is not known until runtime, you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  use SORTED BY (name) to specify it dynamically as the&lt;/P&gt;&lt;P&gt;                  contents of the field name. If name is blank at runtime or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  contains an invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. Regardless of whether you specify it statically or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically, you can restrict the sort criterion f further&lt;/P&gt;&lt;P&gt;                  by defining an offset and/or length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COLLECT itab, INSERT itab, SELECT / FETCH NEXT CURSOR ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INTO/APPENDING TABLE itab, MODIFY itab, WRITE f TO itab INDEX&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               idx, SORT itab, READ TABLE itab, LOOP AT itab, DELETE itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASS-RPERF is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ASSIGN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ASSIGN f TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ASSIGN (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;               3. ASSIGN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;               5. ASSIGN COMPONENT idx  OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ASSIGN COMPONENT name OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     ASSIGN f TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Assigns the field f to the field symbol &amp;lt;fs&amp;gt;. The field symbol&lt;/P&gt;&lt;P&gt;               &amp;lt;fs&amp;gt; "points to" the contents of the field f at runtime, i.e.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               every change to the contents of f is reflected in &amp;lt;fs&amp;gt; and vice&lt;/P&gt;&lt;P&gt;               versa. If the field symbol &amp;lt;fs&amp;gt; is not typed (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS), the field symbol adopts the type and atrributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the field f at runtime, particularly the conversion exit.&lt;/P&gt;&lt;P&gt;               Otherwise, when the assignment is made, the system checks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               whether the type of the field f matches the type of the field&lt;/P&gt;&lt;P&gt;               symbol &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With the ASSIGN statement, the offset and length specifications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in field f (i.e. f&lt;EM&gt;off, f&lt;/EM&gt;len or f+off(len)) have a special&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  They may be variable and thus not evaluated until runtime.&lt;/P&gt;&lt;P&gt;               -  The system does not check whether the selected area still&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  lies within the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If an offset is specified, but no length, for the field f,&lt;/P&gt;&lt;P&gt;                  the field symbol &amp;lt;fs&amp;gt; adopts the length of the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Caution: &amp;lt;fs&amp;gt; also points to an area behind the field f. If&lt;/P&gt;&lt;P&gt;                  you do not want this, the offset and length specifications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  can be in the form ASSIGN f+off(*) TO &amp;lt;fs&amp;gt;.. This means that&lt;/P&gt;&lt;P&gt;                  the field symbol &amp;lt;fs&amp;gt; is set so that the field limits of f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are not exceeded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In the ASSIGN statement, you can also use offset and length&lt;/P&gt;&lt;P&gt;                  specifications to access field symbols, FORM and function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parameters.&lt;/P&gt;&lt;P&gt;               -  Warning: If the effect of the ASSIGN statement is to assign&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parts of other fields beyond the limits of the field f, the&lt;/P&gt;&lt;P&gt;                  changing of the contents via the field symbol &amp;lt;fs&amp;gt; may mean&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  that the data written to these fields does not match the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  data type of these fields and thus later results in a&lt;/P&gt;&lt;P&gt;                  runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Since the ASSIGN statement does not set any return code value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the system field SY-SUBRC, subsequent program code should&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not read this field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA NAME(4) VALUE 'JOHN'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN NAME TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NAME(12) VALUE 'JACKJOHNCARL',&lt;/P&gt;&lt;P&gt;                     X(10)    VALUE 'XXXXXXXXXX'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4 TO .&lt;/P&gt;&lt;P&gt;               WRITE .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4(*) TO .&lt;/P&gt;&lt;P&gt;               WRITE .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHNCARLXXXX JOHNCARL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(12) VALUE 'JACKJOHNCARL',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     X(10)    VALUE 'XXXXXXXXXX'.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4 TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN NAME+4(*) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: JOHNCARLXXXX JOHNCARL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With untyped field symbols, allows you to change the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type of the field symbol to the type typ. The output length of&lt;/P&gt;&lt;P&gt;               the field symbol is corrected according to its type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With typed field symbols, this addition should only be used if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the type of the field f does not match the type of the field&lt;/P&gt;&lt;P&gt;               symbol &amp;lt;fs&amp;gt;. The specified type type must be compatible with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the type of the field symbol. Since no conversion can be&lt;/P&gt;&lt;P&gt;               performed (as with MOVE, the system must be able to interpret f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               as a field with this type type.&lt;/P&gt;&lt;P&gt;               The type specification is in the form of a literal or a field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, only system types (C, D, T, P, X, N, F, I or W) are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               allowed; you can also specify type 's' for 2-byte integer&lt;/P&gt;&lt;P&gt;               fields with a sign and type 'b' for 1-byte integer fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               without a sign (see also DESCRIBE FIELD).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement results in a runtime error if the specified type&lt;/P&gt;&lt;P&gt;               is unknown or does not match the field to be assigned (due to a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               missing alignment or an inappropriate length).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA LETTER TYPE C.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN LETTER TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field symbol has the type C and the output length 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN LETTER TO &amp;lt;F&amp;gt; TYPE 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field symbol has the type X and the output length 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This addition only makes sense when used with type P. The field&lt;/P&gt;&lt;P&gt;               symbol contains dec decimal places.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Output sales in thousands:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA SALES_DEC2(10) TYPE P DECIMALS 2 VALUE 1234567.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;SALES_DEC5&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASSIGN SALES_DEC2 TO &amp;lt;SALES_DEC5&amp;gt; DECIMALS 5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE: / SALES_DEC2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      / &amp;lt;SALES_DEC5&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output:&lt;/P&gt;&lt;P&gt;                      1,234,567.00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       1,234.56700&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement results in a runtime error if the field symbol&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               has a type other than P at runtime or the specified number of&lt;/P&gt;&lt;P&gt;               decimal places is not in the range 0 to 14.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With LOCAL COPY OF, the ASSIGN&amp;lt;/ &amp;gt; statement can only be used&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in subroutines. This creates a copy of f which points to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The field symbol &amp;lt;fs&amp;gt; must also be defined locally in the&lt;/P&gt;&lt;P&gt;               subroutine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA X(4) VALUE 'Carl'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U.&lt;/P&gt;&lt;P&gt;               FORM U.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 ASSIGN LOCAL COPY OF X TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'John' TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE X.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: Carl John Carl&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     ASSIGN (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;               3. ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Assigns the field whose name is stored in the field f to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field symbol.&lt;/P&gt;&lt;P&gt;               The statement "ASSIGN (f)+off(len) TO &amp;lt;fs&amp;gt;" is not allowed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The search for the field to be assigned is performed as&lt;/P&gt;&lt;P&gt;                  follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. If the statement is in a subroutine or function module, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system first searches in this modularization unit.&lt;/P&gt;&lt;P&gt;               2. If the statement lies outside any such modularization units&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or if the field is not found there, the system searches for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the field in the global data of the program.&lt;/P&gt;&lt;P&gt;               3. If the field is not found there, the system searches in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table work areas of the main program of the current program&lt;/P&gt;&lt;P&gt;                  group declared with TABLES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The name of the field to be assigned can also be the name of&lt;/P&gt;&lt;P&gt;                  a field symbol or formal parameter (or even a component of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  one of these, if the field symbol or the parameter has a&lt;/P&gt;&lt;P&gt;                  structure).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If the name of the field to be assigned is of the form&lt;/P&gt;&lt;P&gt;                  "(program name)field name", the system searches in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  global fields of the program with the name "Program name"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  for the field with the name "Field name". However,it is only&lt;/P&gt;&lt;P&gt;                  found if the program has already been loaded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Warning: This option is for internal use by specialists&lt;/P&gt;&lt;P&gt;                  only. Incompatible changes or developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  time without warning or prior notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(4) VALUE 'XYZ',       XYZ VALUE '5'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: 5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt; Addition 3    ... LOCAL COPY OF ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions of variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     ASSIGN TABLE FIELD (f) TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Identical to variant 2, except that the system searches for the&lt;/P&gt;&lt;P&gt;               field f only in the data in the current program group declared&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with TABLES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NAME(10) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;               ASSIGN TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES T100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               T100-TEXT = 'Global'.&lt;/P&gt;&lt;P&gt;               PERFORM EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM EXAMPLE.&lt;/P&gt;&lt;P&gt;                 DATA: BEGIN OF T100, TEXT(20) VALUE 'LOCAL', END OF T100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) VALUE 'T100-TEXT'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: Local - although the global table field T100-TEXT has&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "global" contents. (This kind of name assignment of work fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is, of course, not recommended.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: F(8) VALUE 'F_global',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     G(8) VALUE 'G_global'.&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U.&lt;/P&gt;&lt;P&gt;               FORM U.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA: F(8)     VALUE 'F_local',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) VALUE 'F'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'G' TO NAME.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'TRDIR-NAME' TO NAME.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: F_local  G_global XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TRDIR.&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'TFDIR-PNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;                 PERFORM U(P1SUB).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CALL FUNCTION 'EXAMPLE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM P1SUB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TFDIR.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FORM U.&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   MOVE 'FCT_PROG' TO TFDIR-PNAME.&lt;/P&gt;&lt;P&gt;                 ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION-POOL FUN1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FUNCTION EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE / 'TRDIR-NAME cannot be accessed'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;                 ENDFUNCTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG FCT_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRDIR-NAME cannot be accessed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES TRDIR.&lt;/P&gt;&lt;P&gt;               MOVE 'XYZ_PROG' to TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORM U USING TRDIR.&lt;/P&gt;&lt;P&gt;               FORM U USING X STRUCTURE TRDIR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'X-NAME'.&lt;/P&gt;&lt;P&gt;                 ASSIGN (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO &amp;lt;f&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Identical to variant 3, except that the system searches for the&lt;/P&gt;&lt;P&gt;               field whose name is in f steht only in the data in the program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               group of the main program declared with TABLES. However, the&lt;/P&gt;&lt;P&gt;               field symbol then points not directly to the found field, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to a copy of this field on theq value stack.&lt;/P&gt;&lt;P&gt;               This variant therefore ensures that any access to Dictionary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields of an external program group is read only and no changes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TABLES TRDIR.&lt;/P&gt;&lt;P&gt;                 DATA NAME(30) VALUE 'TFDIR-PNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 MOVE 'XYZ_PROG' TO TRDIR-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CALL FUNCTION 'EXAMPLE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION-POOL FUN1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FUNCTION EXAMPLE.&lt;/P&gt;&lt;P&gt;                   DATA NAME(30) VALUE 'TRDIR-NAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   FIELD-SYMBOLS &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   ASSIGN LOCAL COPY OF MAIN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TABLE FIELD (NAME) TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;                     WRITE / 'TRDIR-NAME cannot be accessed'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;                 ENDFUNCTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: XYZ_PROG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions to variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     ASSIGN COMPONENT idx  OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt; Variant 6     ASSIGN COMPONENT name OF STRUCTURE rec TO &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        If the field name or idx has the type C or if it is a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               string with no internal table, it is treated as a component&lt;/P&gt;&lt;P&gt;               name. Otherwise, it is considered as a component number. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding component of the field string rec is assigned to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field symbol &amp;lt;fs&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The assignment was successful.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The field could not be assigned to the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If idx has the value 0, the entire field string is assigned to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field symbol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM P1MAIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA: BEGIN OF REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                         A VALUE 'a',&lt;/P&gt;&lt;P&gt;                         B VALUE 'b',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                         C VALUE 'c',&lt;/P&gt;&lt;P&gt;                         D VALUE 'd',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       END OF REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CN(5) VALUE 'D'.&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DO 3 TIMES.&lt;/P&gt;&lt;P&gt;                   ASSIGN COMPONENT SY-INDEX OF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          STRUCTURE REC TO &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC &amp;lt;&amp;gt; 0. EXIT. ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;                 ASSIGN COMPONENT CN OF STRUCTURE REC TO &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE &amp;lt;FS&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: a b c d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... DECIMALS dec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        See similar additions to variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the operands, the ASSIGN statement can cause&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For performance reasons, you are recommended to use typed field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               symbols. The runtime for a typed ASSIGN statement amounts to&lt;/P&gt;&lt;P&gt;               approx. 9 msn (standardized microseconds) against&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               approx. 13 msn for an untyped ASSIGN statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Events in lists&lt;/P&gt;&lt;P&gt;               - AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Events on selection screens&lt;/P&gt;&lt;P&gt;               - AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Control break with extracts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT END OF f.&lt;/P&gt;&lt;P&gt;               - AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT LAST.&lt;/P&gt;&lt;P&gt;               - AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Control break with internal tables&lt;/P&gt;&lt;P&gt;               - AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT END OF f.&lt;/P&gt;&lt;P&gt;               - AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a sub-field of an internal table or extract dataset&lt;/P&gt;&lt;P&gt;               (EXTRACT) which is being processed with LOOP, i.e. the variants&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1 and 2 only make sense within a LOOP.&lt;/P&gt;&lt;P&gt;               Both "AT NEW f." and "AT END OF f." introduce processing blocks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which are concluded by "ENDAT.".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               These processing blocks are processed whenever the contents of&lt;/P&gt;&lt;P&gt;               a field f or a sub-field defined before f change as a result of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing with LOOP. "AT NEW f." begins a new group of (table)&lt;/P&gt;&lt;P&gt;               lines with the same contents as the field f while "AT END OF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f." concludes such a group.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Within the AT ... ENDAT processing of internal tables, all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               argument fields following f are filled with "*".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      1. AT for sub-fields of an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;                   WRITE / COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / COMPANIES-NAME, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT statements refer to the field COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      2. AT for the field of an extract dataset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NAME(30),&lt;/P&gt;&lt;P&gt;                     SALES TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-GROUPS: HEADER, INFOS.&lt;/P&gt;&lt;P&gt;               INSERT: NAME  INTO HEADER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES INTO INFOS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / NAME, SUM(SALES).&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If the processing you want to perform on an internal table&lt;/P&gt;&lt;P&gt;                  is fairly restricted (i.e. a WHERE addition with the LOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statement), do not use the AT statements specified in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  variants 1 to 5, since the interaction of the WHERE addition&lt;/P&gt;&lt;P&gt;                  and the AT statement is currently not defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. When you use LOOP with an extract dataset, fields on hex&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  zero are ignored during control level checking with AT NEW&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or AT END OF. This procedure is the same as the SORT&lt;/P&gt;&lt;P&gt;                  statement. When sorting extracted datasets, this statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  always sorts blank fields (i.e. fields on hex zero)&lt;/P&gt;&lt;P&gt;                  regardless of the sequence (ascending or descending) before&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  all fields that contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.  Since fields addressed with AT are not set to an initial&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  value when you enter a LOOP, the first new group of (table)&lt;/P&gt;&lt;P&gt;                  lines in AT NEW f may not be processed, if f happens to be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  set to this value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The variants 3 and 4 only make sense within a LOOP.&lt;/P&gt;&lt;P&gt;               The processing block between AT FIRST and ENDAT is executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               before the individual lines are processed; the processing block&lt;/P&gt;&lt;P&gt;               between AT LAST and ENDAT is executed after all the individual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               lines have been processed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In AT FIRST or AT LAST ... ENDAT processing, all argument&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields are filled with "*" (internal tables).&lt;/P&gt;&lt;P&gt;               When you are processing extract datasets, a control total&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SUM(n) can only be processed with AT END OF or AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT FIRST.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE:    'Sum of all SALES:',&lt;/P&gt;&lt;P&gt;                          55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT,&lt;/P&gt;&lt;P&gt;                       55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Control break with extracts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;               5. AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        In a LOOP which processes a dataset created with EXTRACT, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can use special control structures for control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing. All these structures begin with AT and end with&lt;/P&gt;&lt;P&gt;               ENDAT. The sequence of statements which lies between them is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               then executed if a control break occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use these key words for control break processing with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract datasets only if the active LOOP statement is&lt;/P&gt;&lt;P&gt;               proceesing an extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The control level structure with extract datasets is dynamic.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               It corresponds exactly to the sort key of the extract dataset,&lt;/P&gt;&lt;P&gt;               i.e. to the order of fields in the field group HEADER by which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the extract dataset was sorted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the end of a control group (AT END OF, AT LAST), there are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               two types of control level information between AT and ENDAT:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If the sort key of the extract dataset contains a&lt;/P&gt;&lt;P&gt;                  non-numeric field h (particularly in the field group&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  HEADER), the field CNT(h) contains the number of control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  breaks in the (subordinate) control level h.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  For extracted number fields g (see also ABAP/4 number&lt;/P&gt;&lt;P&gt;                  types), the fields SUM(g) contain the relevant control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. The fields CNT(h) and SUM(g) can only be addressed after&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  they have been sorted. Otherwise, a runtime error may occur.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The fields CNT(h) and SUM(g) are filled with the relevant&lt;/P&gt;&lt;P&gt;                  values for a control level at the end of each control group&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (AT END OF, AT LAST), not at the beginning (AT FIRST, AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  NEW).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. When calculating totals with SUM(g), the system&lt;/P&gt;&lt;P&gt;                  automatically chooses the maximum field sizes so that an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  overflow occurs only if the absolute value area limits are&lt;/P&gt;&lt;P&gt;                  exceeded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. You can also use special control break control structures&lt;/P&gt;&lt;P&gt;                  with LOOPs on internal tables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a field from the field group HEADER. The enclosed sequence&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of statements is executed if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the field f occurs in the sort key of the extract dataset&lt;/P&gt;&lt;P&gt;                  (and thus also in the field group HEADER) and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the field f or a superior sort criterion has a different&lt;/P&gt;&lt;P&gt;                  value in the current LOOP line than in the prceding (AT NEW)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or subsequent (AT END OF) record of the extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SALES TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FIELD-GROUPS: HEADER, INFOS.&lt;/P&gt;&lt;P&gt;               INSERT: NAME  INTO HEADER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES INTO INFOS.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   WRITE: / NAME, SUM(SALES).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If the extract dataset is not sorted before processing with&lt;/P&gt;&lt;P&gt;                  LOOP, no control level structure is defined and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statements following AT NEW or AT END OF are not executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Fields which stand at hex zero are ignored by the control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  break check with AT NEW or AT END OF. This corresponds to&lt;/P&gt;&lt;P&gt;                  the behavior of the SORT statement, which always places&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unoccupied fields (i.e. fields which stand at hex zero)&lt;/P&gt;&lt;P&gt;                  before all occupied fields when sorting extract datasets,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  regardless of whether the sort sequence is in ascending or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  descending order.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the relevant series of statements just once - either&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               on the first loop pass (with AT FIRST) or on the last loop pass&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (with AT LAST).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This statement makes single record processing dependent on the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type of extracted record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sequence of statements following AT fg are executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               whenever the current LOOP record is created with EXTRACT fg (in&lt;/P&gt;&lt;P&gt;               other words: when the current record is a fg record).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the sequence of statements belonging to AT fg WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               only if the record of the field group fg in the dataset is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately followed by a record of the field group fg1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - field group definition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AT fg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        When you are processing an extract dataset (EXTRACT) in a LOOP,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this statement makes single record processing dependent on the&lt;/P&gt;&lt;P&gt;               type of extracted record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The processing block specified within AT fg ... ENDAT is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed if the record just read was generated with EXTRACT fg&lt;/P&gt;&lt;P&gt;               (i.e. if the record just read is an fg record).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... WITH fg1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The processing block under AT fg WITH fg1. is executed only if&lt;/P&gt;&lt;P&gt;               the record from the field group fg in the dataset is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately followed by a record from the field group fg1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Control break with internal tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT END OF f.&lt;/P&gt;&lt;P&gt;               3. AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        In a LOOP which processes a dataset created with EXTRACT, you&lt;/P&gt;&lt;P&gt;               can use special control structures for control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing. All these structures begin with AT and end with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDAT. The sequence of statements which lies between them is&lt;/P&gt;&lt;P&gt;               then executed if a control break occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use these key words for control break processing with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract datasets only if the active LOOP statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               proceesing an extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The control level structure with extract datasets is dynamic.&lt;/P&gt;&lt;P&gt;               It corresponds exactly to the sort key of the extract dataset,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e. to the order of fields in the field group HEADER by which&lt;/P&gt;&lt;P&gt;               the extract dataset was sorted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the start of a new control level (i.e. immediately after&lt;/P&gt;&lt;P&gt;               AT), the following occurs in the output area of the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  All default key fields (on the right) are filled with "*"&lt;/P&gt;&lt;P&gt;                  after the current control level key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  All other fields (on the right) are set to their initial&lt;/P&gt;&lt;P&gt;                  values after the current control level key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Between AT and ENDAT, you can use SUM to insert the appropriate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               control totals in the number fields (see also ABAP/4 number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               types) of the LOOP output area (on the right) after the current&lt;/P&gt;&lt;P&gt;               control level key. Summing is supported both at the beginning&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a control level (AT FIRST, AT NEW f) and also the end of a&lt;/P&gt;&lt;P&gt;               control level (AT END OF f, AT LAST).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At the end of the control level processing (i.e. after ENDAT),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the old contents of the LOOP output area are restored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When calculating totals, you must ensure that the totals are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  inserted into the same sub-fields of the LOOP output area as&lt;/P&gt;&lt;P&gt;                  those where the single values otherwise occur. If there is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  an overflow, processing terminates with a runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If an internal table is processed only in a restricted form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (using the additions FROM, TO and/or WHERE with the LOOP&lt;/P&gt;&lt;P&gt;                  statement), you should not use the control structures for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control level processing because the interaction of a&lt;/P&gt;&lt;P&gt;                  restricted LOOP with the AT statement is currenly not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  properly defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. With LOOPs on extracts, there are also special control break&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control structures you can use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  SUM_OVERFLOW: Overflow when calculating totals with SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT NEW f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT END OF f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        f is a sub-field of an internal table processed with LOOP. The&lt;/P&gt;&lt;P&gt;               sequence of statements which follow it is executed if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sub-field f or a sub-field in the current LOOP line defined (on&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the left) before f has a differnt value than in the preceding&lt;/P&gt;&lt;P&gt;               (AT NEW) or subsequent (AT END OF) table line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT NEW NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NEW-PAGE.&lt;/P&gt;&lt;P&gt;                   WRITE / COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 AT END OF NAME.&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / COMPANIES-NAME, COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT statements refer to the field COMPANIES-NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If a control break criterion is not known until runtime, you&lt;/P&gt;&lt;P&gt;                  can use AT NEW (name) or AT END OF (name) to specify it&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically as the contents of the field name. If name is&lt;/P&gt;&lt;P&gt;                  blank at runtime, the control break criterion is ignored and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the sequence of statements is not executed. If name contains&lt;/P&gt;&lt;P&gt;                  an invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. By defining an offset and/or length, you can further&lt;/P&gt;&lt;P&gt;                  restrict control break criteria - regardless of whether they&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are specified statically or dynamically.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. A field symbol pointing to the LOOP output area can also be&lt;/P&gt;&lt;P&gt;                  used as a dynamic control break criterion. If the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  symbol does not point to the LOOP output area, a runtime&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  AT_BAD_PARTIAL_FIELD_ACCESS: Invalid sub-field access when&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamically specifying the control break criterion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  AT_ITAB_FIELD_INVALID: When dynamically specifying the&lt;/P&gt;&lt;P&gt;                  control break criterion via a field symbol, the field symbol&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  does not point to the LOOP output area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ITAB_ILLEGAL_COMPONENT: When dynamically specifying the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  control break criterion via (name) the field name does not&lt;/P&gt;&lt;P&gt;                  contain a valid sub-field name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     AT LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the appropriate sequence of statements once during the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               first (AT FIRST) or last (AT LAST) loop pass.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       PRODUCT(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT COMPANIES.&lt;/P&gt;&lt;P&gt;                 AT FIRST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SUM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE:    'Sum of all SALES:',&lt;/P&gt;&lt;P&gt;                          55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDAT.&lt;/P&gt;&lt;P&gt;                 WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       55 COMPANIES-SALES.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Events in lists&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;               3. AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is processed whenever the user chooses a valid line&lt;/P&gt;&lt;P&gt;               in the list (i.e. a line generated by statements such as WRITE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ULINE or SKIP) with the cursor and presses the function key&lt;/P&gt;&lt;P&gt;               which has the function PICK in the interface definition. This&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               should normally be the function key F2, because it has the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               effect as double-clicking the mouse, or single-clicking in the&lt;/P&gt;&lt;P&gt;               case of a hotspot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The processing for the event AT LINE-SELECTION usually&lt;/P&gt;&lt;P&gt;               generates further list output (the details list) which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               completely covers the current list display. If the latter is&lt;/P&gt;&lt;P&gt;               still visible (to aid user orientation), this may be due to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key word WINDOW.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In most cases, the information is from the selected line is&lt;/P&gt;&lt;P&gt;               used to retrieve more comprehensive information by direct&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reading. When displaying the original list, you store the key&lt;/P&gt;&lt;P&gt;               terms needed for this in the HIDE area of the output line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You can choose a line and start new processing even in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               details lists.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The following system fields are useful for orientation&lt;/P&gt;&lt;P&gt;               purposes, since their values change with each interactive event&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-LSIND       Index of list created by current event (basic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              list = 0, 1st details list = 1, ...)&lt;/P&gt;&lt;P&gt;               SY-PFKEY       Status of displayed list (SET PF-STATUS)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-LISEL       Contents of selected line&lt;/P&gt;&lt;P&gt;               SY-LILLI       Absolute number of this line in the displayed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              list&lt;/P&gt;&lt;P&gt;               SY-LISTI       Index of this list - usually SY-LSIND - 1 (READ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              LINE)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-CUROW       Last cursor position: Line in window&lt;/P&gt;&lt;P&gt;               SY-CUCOL       Last cursor position: Column in window (GET&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              CURSOR)&lt;/P&gt;&lt;P&gt;               SY-CPAGE       1st displayed page of displayed list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-STARO       1st displayed line of this page of displayed&lt;/P&gt;&lt;P&gt;                              list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-STACO       1st displayed column of displayed list (SCROLL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              LIST)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system field SY-LSIND defines the line selection level&lt;/P&gt;&lt;P&gt;               (basic list: SY-LSIND = 0).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA TEXT(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_AND_HIDE USING SPACE SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE TEXT.&lt;/P&gt;&lt;P&gt;                   WHEN 'List index'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING 'X' SPACE.&lt;/P&gt;&lt;P&gt;                   WHEN 'User command'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING SPACE 'X'.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     SUBTRACT 2 FROM SY-LSIND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PERFORM WRITE_AND_HIDE USING SPACE SPACE.&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CLEAR TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE / 'SY-LSIND:'.&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_WITH_COLOR USING SY-LSIND P_FLAG_LSIND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TEXT = 'List index'.&lt;/P&gt;&lt;P&gt;                 HIDE TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE / 'SY-UCOMM:'.&lt;/P&gt;&lt;P&gt;                 PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TEXT = 'User command'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 HIDE TEXT.&lt;/P&gt;&lt;P&gt;                 IF SY-LSIND &amp;gt; 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE / 'PICK here to go back one list level'.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM WRITE_WITH_COLOR USING P_VALUE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                           P_FLAG_POSITIVE.&lt;/P&gt;&lt;P&gt;                 IF P_FLAG_POSITIVE = SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE P_VALUE COLOR COL_NORMAL.&lt;/P&gt;&lt;P&gt;                 ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE P_VALUE COLOR COL_POSITIVE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on whether you choose the line at SY-LSIND or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-UCOMM, the next details list contains the corresponding&lt;/P&gt;&lt;P&gt;               value with the color "positive". If the line is chosen without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               HIDE information, the list level is reduced.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is executed whenever the user presses a function key&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the list or makes an entry in the command field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Some functions are executed directly by the system and thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               cannot be processed by programs. These include:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PICK           See variant AT LINE-SELECTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PFn            See variant AT PFn&lt;/P&gt;&lt;P&gt;               /...           System command&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               %...           System command&lt;/P&gt;&lt;P&gt;               PRI            Print&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BACK           Back&lt;/P&gt;&lt;P&gt;               RW             Cancel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P...           Scroll function (e.g.: P&lt;EM&gt;, P-, PP&lt;/EM&gt;3, PS-- etc.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              Instead of this functions, you can use the&lt;/P&gt;&lt;P&gt;                              SCROLL statement in programs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since many of these system functions begin with "P", you should&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               avoid using this letter to start your own function codes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the effect is as for AT LINE-SELECTION; also, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               current function code is stored in the system field SY-UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: NUMBER1 TYPE I VALUE 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NUMBER2 TYPE I VALUE  5,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     RESULT  TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;                 WRITE: / NUMBER1, '?', NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT USER-COMMAND.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE SY-UCOMM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'ADD'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 + NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'SUBT'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 - NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'MULT'.&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 * NUMBER2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 'DIVI'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     RESULT = NUMBER1 / NUMBER2.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE 'Unknown function code'.&lt;/P&gt;&lt;P&gt;                     EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WRITE: / 'Result:', RESULT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After entry of a function code, the appropriate processing is&lt;/P&gt;&lt;P&gt;               performed under the event AT USER-COMMAND and the result is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed in the details list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     AT PFn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Event in interactive reporting&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, n stands for a numeric value between 0 and 99.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This event is executed whenever the user presses a function key&lt;/P&gt;&lt;P&gt;               that contains the function code PFn in the interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition. The default status for lists contains some of these&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               functions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the effect is as for the variant AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;               The cursor can be on any line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. To ensure that the chosen function is executed only for&lt;/P&gt;&lt;P&gt;                  valid lines, you can check the current HIDE information.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. This variant should be used only for test or prototyping&lt;/P&gt;&lt;P&gt;                  purposes, since the default status is not normally used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Instead, you should set a program-specific status with SET&lt;/P&gt;&lt;P&gt;                  PF-STATUS. This should not contain any function codes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  beginning with "PF".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NUMBER LIKE SY-INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;                 DO 9 TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: / 'Row', (2) SY-INDEX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   NUMBER = SY-INDEX.&lt;/P&gt;&lt;P&gt;                   HIDE NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT PF8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK NOT NUMBER IS INITIAL.&lt;/P&gt;&lt;P&gt;                 WRITE: / 'Cursor was in row', (2) NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CLEAR NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AT - Events on selection screens&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... ON END OF sel&lt;/P&gt;&lt;P&gt;               3. ... ON VALUE-REQUEST FOR psel_low_high.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... ON HELP-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;               5. ... ON RADIOBUTTON GROUP radi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... ON BLOCK block&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               7. ... OUTPUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event only makes sense in reports, i.e. in programs set to&lt;/P&gt;&lt;P&gt;               type 1 in the attributes. Type 1 programs are started via a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               logical database and always have a selection screen where the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               user can specify the database selections.&lt;/P&gt;&lt;P&gt;               The event is processed when the selection screen has been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed (at the end of PAI).&lt;/P&gt;&lt;P&gt;               If an error message (MESSAGE Emnr) is sent during the event,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               all fields on the selection screen become ready for input.&lt;/P&gt;&lt;P&gt;               After further user input, AT SELECTION-SCREEN is executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should only perform very expensive checks with AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN if the program is then started (not every time&lt;/P&gt;&lt;P&gt;               the user presses ENTER). Here, you can read the system field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SSCRFIELDS-UCOMM (provided a statement TABLES SSCRFIELDS&lt;/P&gt;&lt;P&gt;               exists). If the field has one of the values 'ONLI' (= Execute)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or 'PRIN' (= Execute and Print), the report is then started,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e.  the selection screen is closed and the processing&lt;/P&gt;&lt;P&gt;               continues with START-OF-SELECTION. Remember that the selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen (and thus also AT SELECTION-SCREE N) is also processed&lt;/P&gt;&lt;P&gt;               in variant maintenance and with SUBMIT VIA JOB. You can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               determine which of these applies by calling the function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RS_SUBMIT_INFO .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the selection screen fields&lt;/P&gt;&lt;P&gt;               corresponding to the report parameter or selection criterion&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               psel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;               these fields become ready for input.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... ON END OF sel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        For each selection criterion sel on the selection screen, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can call a further screen by pressing a pushbutton. On this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen, you can enter any number of single values and ranges&lt;/P&gt;&lt;P&gt;               for the selection criterion sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When this screen has been processed (i.e. at the end of PAI for&lt;/P&gt;&lt;P&gt;               this screen), the event AT SELECTION-SCREEN ON END OF sel is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At this point, all the values entered are available in the&lt;/P&gt;&lt;P&gt;               internal table sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... ON VALUE-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        With this addition, the field psel_low_high is either the name&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a report parameter or of the form sel-LOW or sel-HIGH, where&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sel is the name of a selection criterion. The effect of this is&lt;/P&gt;&lt;P&gt;               twofold:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. The pushbutton for F4 (Possible entries) appears beside the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  appropriate field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. When the user selects this pushbutton or presses F4 for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  field, the event is executed. You can thus implement a&lt;/P&gt;&lt;P&gt;                  self-programmed possible entries routine for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  input/output fields of the selection screen. If the program&lt;/P&gt;&lt;P&gt;                  contains such an event and the user presses F4, the system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  processes this rather than displaying the check table or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fixed values of the Dictionary field - even if the report&lt;/P&gt;&lt;P&gt;                  parameter or the selection option with LIKE or FOR points to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a Dictionary field. You can, for example, use the CALL&lt;/P&gt;&lt;P&gt;                  SCREEN statement to display a selection list of possible&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  values. The contents of the field psel_low_high at the end&lt;/P&gt;&lt;P&gt;                  of this processing block are copied to the appropriate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  input/output field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This addition is only allowed with report-specific parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (PARAMETERS) or selection options (SELECT-OPTIONS). For&lt;/P&gt;&lt;P&gt;               database-specific parameters or selection options, you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               achieve the same effect by using the addition VALUE-REQUEST FOR&lt;/P&gt;&lt;P&gt;               ... with the key word PARAMETERS or SELECT-OPTIONS in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               include DBxyzSEL (where xyz = name of logical database). In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, you must program the value help in the database&lt;/P&gt;&lt;P&gt;               program SAPDBxyz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... ON HELP-REQUEST FOR psel_low_high&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with the addition ON VALUE-REQUEST the field psel_low_high&lt;/P&gt;&lt;P&gt;               is either the name of a report parameter or of the form sel-LOW&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or sel-HIGH, where sel is the name of a selection criterion.&lt;/P&gt;&lt;P&gt;               When the user presses F1 on the relevant field, the subsequent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing block is executed. You can thus implement a&lt;/P&gt;&lt;P&gt;               self-programmed help for the input/output fields of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selection screen. If the program contains such an event and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               user presses F1, the system processes this rather than&lt;/P&gt;&lt;P&gt;               displaying the documentation of the Dictionary field - even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the report parameter or the selection option with LIKE or FOR&lt;/P&gt;&lt;P&gt;               points to a Dictionary field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This addition is only allowed with report-specific parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (PARAMETERS) or selection options (SELECT-OPTIONS). For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database-specific parameters or selection options, you can&lt;/P&gt;&lt;P&gt;               achieve the same effect by using the addition HELP-REQUEST FOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... with the key word PARAMETERS or SELECT-OPTIONS in the&lt;/P&gt;&lt;P&gt;               include DBxyzSEL (where xyz = name of logical database). In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, you must program the help in the database program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAPDBxyz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... ON RADIOBUTTON GROUP radi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the radio button groups on the&lt;/P&gt;&lt;P&gt;               selection screen defined by PARAMETERS par RADIOBUTTON GROUP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               radi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;               these fields of the radio button group radi become ready for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               input again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... ON BLOCK block&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is assigned to the blocks on the selection screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined by SELECTION-SCREEN BEGIN/END OF BLOCK block.&lt;/P&gt;&lt;P&gt;               If the report starts an error dialog at this point, precisely&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these fields of the block block become ready for input again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In which sequence are the events AT SELECTION-SCREEN ON psel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ..., AT SELECTION-SCREEN ON RADIOBUTTON GROUP ..., AT&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN ON BLOCK ..., AT SELECTION-SCREEN processed?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The AT SELECTION-SCREEN ON psel ... events assigned to the&lt;/P&gt;&lt;P&gt;               parameters or selection options are executed in the sequence&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               they are declared in the program, i.e. in the sequence they&lt;/P&gt;&lt;P&gt;               appear on the selection screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The events assigned to the radio button groups are executed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               according to the first parameter of the radio button group.&lt;/P&gt;&lt;P&gt;               The events assigned to the blocks are executed "from the inside&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to the outside".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS SEL0 FOR SY-TVAR0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN BEGIN OF BLOCK BL0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECT-OPTIONS SEL1 FOR SY-TVAR1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECTION-SCREEN BEGIN OF BLOCK BL1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   PARAMETERS P0 RADIOBUTTON GROUP RADI.&lt;/P&gt;&lt;P&gt;                   PARAMETERS P1 RADIOBUTTON GROUP RADI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SELECTION-SCREEN BEGIN OF BLOCK BL2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PARAMETERS P3.&lt;/P&gt;&lt;P&gt;                   SELECTION-SCREEN END   OF BLOCK BL2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SELECT-OPTIONS SEL2 FOR SY-TVAR2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SELECTION-SCREEN END   OF BLOCK BL1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION-SCREEN END   OF BLOCK BL0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Sequence:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN ON...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    SEL0&lt;/P&gt;&lt;P&gt;                    SEL1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    RADIOBUTTON GROUP RADI&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    P3&lt;/P&gt;&lt;P&gt;                    BLOCK BL2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    SEL2&lt;/P&gt;&lt;P&gt;                    BLOCK BL1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    BLOCK BL0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN is executed at the very end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... OUTPUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        This event is executed at PBO of the selection screen every&lt;/P&gt;&lt;P&gt;               time the user presses ENTER - in contrast to INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Therefore, this event is not suitable for setting selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen default values. Also, since AT SELECTION-SCREEN OUTPUT&lt;/P&gt;&lt;P&gt;               is first executed after the variant is imported (if a variant&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is used) and after adopting any values specified under SUBMIT&lt;/P&gt;&lt;P&gt;               in the WITH clause, changing the report parameters or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selection options in AT SELECTION-SCREEN OUTPUT would destroy&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the specified values.&lt;/P&gt;&lt;P&gt;               Here, however, you can use LOOP AT SCREEN or MODIFY SCREEN to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               change the input/output attributes of selection screen fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Output all fields of the SELECT-OPTION NAME highlighted:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS NAME FOR SY-REPID MODIF ID XYZ.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               AT SELECTION-SCREEN OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 LOOP AT SCREEN.&lt;/P&gt;&lt;P&gt;                   CHECK SCREEN-GROUP1 = 'XYZ'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   SCREEN-INTENSIFIED = '1'.&lt;/P&gt;&lt;P&gt;                   MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The addition MODIF ID XYZ to the key word SELECT-OPTIONS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigns all fields of the selection option NAME to a group you&lt;/P&gt;&lt;P&gt;               can read in the field SCREEN-GROUP1. At PBO of the selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen, all these fields are then set to highlighted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In the context of event processing, the SET PF-STATUS statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               does not work. Instead, you must set a status using the&lt;/P&gt;&lt;P&gt;               function module RS_SET_SELSCREEN_STATUS or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RS_EXTERNAL_SELSCREEN_STATUS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; AUTHORITY-CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    AUTHORITY-CHECK OBJECT object&lt;/P&gt;&lt;P&gt;                   ID name1  FIELD f1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID name2  FIELD f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;                   ID name10 FIELD f10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Explanation of IDs:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object         Field which contains the name of the object for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              which the authorization is to be checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               name1 ...      Fields which contain the names of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 name10       authorization fields defined in the object.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1 ...         Fields which contain the values for which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 f10          authorization is to be checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK checks for one object whether the user has an&lt;/P&gt;&lt;P&gt;               authorization that contains all values of f (see SAP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorization concept).&lt;/P&gt;&lt;P&gt;               You must specify all authorizations for an object and a also a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value for each ID (or DUMMY).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system checks the values for the IDs by AND-ing them&lt;/P&gt;&lt;P&gt;               together, i.e. all values must be part of an authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigned to the user.&lt;/P&gt;&lt;P&gt;               If a user has several authorizations for an object, the values&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are OR-ed together. This means that if the CHECK finds all the&lt;/P&gt;&lt;P&gt;               specified values in one authorization, the user can proceed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Only if none of the authorizations for a user contains all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               required values is the user rejected.&lt;/P&gt;&lt;P&gt;               If the return code SY-SUBRC = 0, the user has the required&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorization and may continue.&lt;/P&gt;&lt;P&gt;               The return code is modified to suit the different error&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               scenarios. The return code values have the following meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4              User has no authorization in the SAP System for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              such an action. If necessary, change the user&lt;/P&gt;&lt;P&gt;                              master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Too many parameters (fields, values). Maximum&lt;/P&gt;&lt;P&gt;                              allowed is 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               12             Specified object not maintained in the user&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              master record.&lt;/P&gt;&lt;P&gt;               16             No profile entered in the user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               24             The field names of the check call do not match&lt;/P&gt;&lt;P&gt;                              those of an authorization. Either the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              authorization or the call is incorrect.&lt;/P&gt;&lt;P&gt;               28             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               32             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               36             Incorrect structure for user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the return code value is 8 or possibly 24, inform the person&lt;/P&gt;&lt;P&gt;               responsible for the program. If the return code value is 4, 12,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               15 or 24, consult your system administrator if you think you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               should have the relevant authorization. In the case of errors&lt;/P&gt;&lt;P&gt;               28 to 36, contact SAP, since authorizations have probably been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destroyed.&lt;/P&gt;&lt;P&gt;               Individual authorizations are assigned to users in their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               respective user profiles, i.e. they are grouped together in&lt;/P&gt;&lt;P&gt;               profiles which are stored in the user master record.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Instead of ID name FIELD f, you can also write ID name DUMMY.&lt;/P&gt;&lt;P&gt;               This means that no check is performed for the field concerned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The check can only be performed on CHAR fields. All other field&lt;/P&gt;&lt;P&gt;               types result in 'unauthorized'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Check whether the user is authorized for a particular plant. In&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this case, the following authorization object applies:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Table OBJ: Definition of authorization object&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               M_EINF_WRK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ACTVT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WERKS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, M_EINF_WRK is the object name, whilst ACTVT and WERKS are&lt;/P&gt;&lt;P&gt;               authorization fields. For example, a user with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               authorizations&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               M_EINF_WRK_BERECH1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ACTVT 01-03&lt;/P&gt;&lt;P&gt;                  WERKS 0001-0003 .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can display and change plants within the Purchasing and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Materials Management areas.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Such a user would thus pass the checks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' FIELD '0002'&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '02'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' DUMMY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '01':&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               but would fail the check&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AUTHORITY-CHECK OBJECT 'M_EINF_WRK'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ID 'WERKS' FIELD '0005'&lt;/P&gt;&lt;P&gt;                   ID 'ACTVT' FIELD '04'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To suppress unnecessary authorization checks or to carry out&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               checks before the user has entered all the values, use DUMMY&amp;gt; -&lt;/P&gt;&lt;P&gt;               as in this example. You can confirm the authorization later&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with another AUTHORITY-CHECK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; BACK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    BACK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns output position to the first line of the current page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the TOP-OF-PAGE processing.&lt;/P&gt;&lt;P&gt;               When used in connection with RESERVE x LINES, the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               returns the output position to the first output line after&lt;/P&gt;&lt;P&gt;               RESERVE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  TOWN(10)      VALUE 'New York',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CUSTOMER1(10) VALUE 'Charly',&lt;/P&gt;&lt;P&gt;                      CUSTOMER2(10) VALUE 'Sam',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      SALES1 TYPE I VALUE 1100,&lt;/P&gt;&lt;P&gt;                      SALES2 TYPE I VALUE 2200.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RESERVE 2 LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WRITE:  TOWN, CUSTOMER1,&lt;/P&gt;&lt;P&gt;                     /       CUSTOMER2 UNDER CUSTOMER1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BACK.&lt;/P&gt;&lt;P&gt;               WRITE: 50 SALES1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      /  SALES2 UNDER SALES1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Using the positioning in WRITE in column 50, data not yet&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               output is not overwritten, but the sales volume is output after&lt;/P&gt;&lt;P&gt;               the customer names.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. If you use a '/' with the first WRITE after the BACK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  statement, this starts a (usually unwanted) new line.&lt;/P&gt;&lt;P&gt;               2. BACK in the TOP-OF-PAGE processing positions the cursor&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  after the standard header. Subsequent WRITE statements also&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  overwrite the lines output under TOP-OF-PAGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to execute a BACK statement is about 1 msn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; BREAK-POINT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.BREAK-POINT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2.BREAK-POINT f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     BREAK-POINT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The BREAK-POINT statement interrupts the processing and diverts&lt;/P&gt;&lt;P&gt;               the system to debugging mode. You can then display the contents&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of all the fields at runtime and also control the subsequent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program flow.&lt;/P&gt;&lt;P&gt;               If the system is unable to branch to debugging for some reason&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (due to a background job or update), it generates a system log&lt;/P&gt;&lt;P&gt;               message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          -  After the BREAK-POINT, the system automatically performs any&lt;/P&gt;&lt;P&gt;                  restart in the database, if no COMMIT WORK was executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Since debugging sometimes switches off COMMIT WORK, you&lt;/P&gt;&lt;P&gt;                  should not place a BREAK-POINT statement in a SELECT loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In the editor, you can also set a breakpoint dynamically&lt;/P&gt;&lt;P&gt;                  without making any changes to the ABAP/4 program. These&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  dynamic breakpoints are valid only for the current user in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the current session.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     BREAK-POINT f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Behaves like variation 1, except that the field contents of f&lt;/P&gt;&lt;P&gt;               remain in the event of any system log messages.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;               - CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a dialog module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL DIALOG dial.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a method of an external object&lt;/P&gt;&lt;P&gt;               - CALL METHOD OF obj m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a system function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CALL cfunc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL - Call a system function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 6  CALL cfunc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... ID id1 FIELD f1 ... ID idn FIELD fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the system function cfunc. The relevant function must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               exist in the file sapactab.h. If you change or recreate a&lt;/P&gt;&lt;P&gt;               function, you have to compile and link the SAP kernel again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this, you need the C source code files.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Normally, external programs should be called via RFC with CALL&lt;/P&gt;&lt;P&gt;               FUNCTION ... DESTINATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... ID id1 FIELD f1 ... ID idn FIELD fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Passes fields to the called program by reference. With "ID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               id1", you specify the name of a formal parameter, and with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "FIELD f1" the relevant field from the ABAP/4 program. If a&lt;/P&gt;&lt;P&gt;               formal parameter expects an internal table, the latter is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               passed in the form "FIELD tab[]".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA RESULT(8).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL 'MULTIPLY' ID 'P1'  FIELD '9999'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               ID 'P2'  FIELD '9999'&lt;/P&gt;&lt;P&gt;                               ID 'RES' FIELD RESULT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL_C_FUNCTION_NOT_FOUND: Specified system function is&lt;/P&gt;&lt;P&gt;               unknown.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The same as for CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func. func must be a 3-character&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               literal (e.g. '001')&lt;/P&gt;&lt;P&gt;               In line with SAP's enhancement concept, function modules are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               delivered empty and must be implemented by the customer (the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transactions used for this are SMOD at SAP and CMOD at the&lt;/P&gt;&lt;P&gt;               customer's).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The interface and call location are both defined by SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The customer can use Transaction CMOD to activate the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               module. The final name of the function module is compiled from&lt;/P&gt;&lt;P&gt;               EXIT_, the name of the module pool where the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               called, and the name func. For example, the statement "CALL&lt;/P&gt;&lt;P&gt;               CUSTOMER-FUNCTION '001'" in the module pool SAPMS38M calls the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module EXIT_SAPMS38M_001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL DIALOG - Call a dialog module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG dial.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING f1 FROM g1 ... fn FROM gn&lt;/P&gt;&lt;P&gt;               3. ... IMPORTING f1 TO   g1 ... fn TO   gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... USING itab ... MODE mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the dialog module dial; dial can be a literal or a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;               To edit dialog modules, select Tools -&amp;gt; ABAP/4 Workbench -&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Development -&amp;gt; Programming environ. -&amp;gt; Dialog modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Processes the first screen of the dialog module in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               background, if all required entry fields have been filled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING f1 FROM g1 ... fn FROM gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Specifies all data objects (fields, field strings, internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tables) to be passed to the dialog module. If the names in the&lt;/P&gt;&lt;P&gt;               calling and called programs are identical, you can omit "FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               g1". Otherwise, fi refers to the field in the dialog module,&lt;/P&gt;&lt;P&gt;               while gi specifies the field in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... IMPORTING f1 TO   g1 ... fn TO gn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Specifies all data objects (fields, field strings, internal&lt;/P&gt;&lt;P&gt;               tables) to be returned from the dialog module. If the names in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the calling and called programs are identical, you can omit "TO&lt;/P&gt;&lt;P&gt;               g1". Otherwise, fi refers to the field in the dialog module,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               while gi specifies the field in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF ITAB,&lt;/P&gt;&lt;P&gt;                       LINE(72),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF ITAB,&lt;/P&gt;&lt;P&gt;                     TITLE LIKE SY-TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG 'RS_EDIT_TABLE'&lt;/P&gt;&lt;P&gt;                   EXPORTING SOURCETAB FROM ITAB&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                             TITLE&lt;/P&gt;&lt;P&gt;                   IMPORTING SOURCETAB TO   ITAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The system field SY-SUBRC is automatically exported and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  imported.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The unknown export/import data in the dialog module is&lt;/P&gt;&lt;P&gt;                  ignored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The data objects passed should have the same type or&lt;/P&gt;&lt;P&gt;                  structure in the calling program and the dialog module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... USING itab ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the dialog module dial and also passes the internal table&lt;/P&gt;&lt;P&gt;               itab which contains one or more screens in batch input format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If required, the dialog module may return a message to the&lt;/P&gt;&lt;P&gt;               system fields SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, ...,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-MSGV4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The specified processing mode mode mode can accept the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Display screen&lt;/P&gt;&lt;P&gt;                  'E'  Display only if an error occurs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'N'  No display&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition MODE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The processing was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: The dialog ended with an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  All lock arguments are automatically exported and imported.&lt;/P&gt;&lt;P&gt;                  In contrast to a transaction, a dialog module does not form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  its own LUW (see Transaction processing). Any update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  requests which occur there are not processed until the&lt;/P&gt;&lt;P&gt;                  calling program executes a COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  To return from the dialog module, use the key word LEAVE&lt;/P&gt;&lt;P&gt;                  PROGRAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NOT_FOUND: The called dialog module is unknown.&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_WRONG_TDCT_MODE: The called dialopg module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  contains errors (incorrect entry in table TDCT).&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NAME_TOO_LONG: The name of a parameter is longer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than permitted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_DIALOG_NO_CONTAINER: No memory for parameter transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CALL TRANSACTION, CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL - call a function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a different mode (asynchronous Remote&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function Call):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CALL FUNCTION func STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in the update task:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a remote system (Remote Function&lt;/P&gt;&lt;P&gt;               Call, RFC):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Asynchronous call to a function module with transactional&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing (transactional Remote Function Call):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module which can be activated in the context of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               enhancements:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... EXPORTING  p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... IMPORTING  p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... TABLES     p1 = itab1    ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... CHANGING   p1 = f1       ... pn = fn&lt;/P&gt;&lt;P&gt;               5. ... EXCEPTIONS except1 = rc1 ... exceptn = rcn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func; func can be a literal or a&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To edit function modules, select Tools -&amp;gt; ABAP/4 Workbench -&amp;gt;&lt;/P&gt;&lt;P&gt;               Function Library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The assignment of parameters is by name (p1, p2, etc.), not by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               sequence.&lt;/P&gt;&lt;P&gt;               To return from the function module, you use the key word EXIT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unless EXIT occurs in a loop or a subroutine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You can use the editor commands "SHOW FUNCTION func" and "SHOW&lt;/P&gt;&lt;P&gt;               FUNCTION *" to get information about the function module func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or any other function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes fields, field strings or internal tables to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function module. You must declare the parameters p1 ... pn&lt;/P&gt;&lt;P&gt;               in the function interface as import parameters. When you call&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function module, you must assign values to all import&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters which are not flagged in the interface definition as&lt;/P&gt;&lt;P&gt;               optional and do not have any default values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... IMPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        IMPORTING passes fields, field strings or internal tables from&lt;/P&gt;&lt;P&gt;               the function module back to the calling program. The parameters&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               p1 ... pn must be declared as export parameters in the function&lt;/P&gt;&lt;P&gt;               interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. The parameters p1&lt;/P&gt;&lt;P&gt;               ... pn must be declared as table parameters in the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               interface. When you call the function module, you must assign&lt;/P&gt;&lt;P&gt;               values to all table parameters which are not flagged as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               optional in the interface definition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... CHANGING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CHANGING passes fields, field strings or internal tables to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module and the changed values are returned. The&lt;/P&gt;&lt;P&gt;               parameters p1 ... pn must be declared as CHANGING parameters in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the function interface. When you call the function module, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must assign values to all CHANGING parameters of the function&lt;/P&gt;&lt;P&gt;               module which are not flagged as optional in the interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition and have no default values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... EXCEPTIONS except1 = rc1 ...&lt;/P&gt;&lt;P&gt;               exceptn = rcn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXCEPTIONS lists the exceptions to be handled by the calling&lt;/P&gt;&lt;P&gt;               program itself. At the end of the exception list, you can use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               OTHERS to refer to all the remaining exceptions.&lt;/P&gt;&lt;P&gt;               If one of the listed exceptions occurs, SY-SUBRC is set to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               appropriate value rc (a number literal!) and control passes&lt;/P&gt;&lt;P&gt;               back to the calling program. By specifying a return code, you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can divided the exceptions into classes. With the second form,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               without "=rc", SY-SUBRC is set to a value other than 0 if an&lt;/P&gt;&lt;P&gt;               exception occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the function module triggers an exception (with the&lt;/P&gt;&lt;P&gt;               statements RAISE and MESSAGE ... RAISING) and the exception is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not to be handled by the calling program itself,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  RAISE terminates the program with a runtime error;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  MESSAGE ... RAISING outputs the message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The following EXCEPTIONS are predefined by the system and have&lt;/P&gt;&lt;P&gt;               a special meaning:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  OTHERS: Covers all user-defined exceptions in the called&lt;/P&gt;&lt;P&gt;                  function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ERROR_MESSAGE: This exception instructs the system to ignore&lt;/P&gt;&lt;P&gt;                  S messages, I messages and W messages until return from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  function module (although they still appear in the log&lt;/P&gt;&lt;P&gt;                  during background processing). When an E message or an A&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  message occurs, the called function module terminates, as if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the exception ERROR_MESSAGE has been triggered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;               DATA: FIELD(30) VALUE 'Example: This is a field.',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     head(30).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL FUNCTION   'STRING_SPLIT'&lt;/P&gt;&lt;P&gt;                    EXPORTING  DELIMITER = ':'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               STRING    = FIELD&lt;/P&gt;&lt;P&gt;                    IMPORTING  HEAD      = HEAD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               TAIL      = FIELD&lt;/P&gt;&lt;P&gt;                    EXCEPTIONS NOT_FOUND = 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               OTHERS    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CASE SY-SUBRC.&lt;/P&gt;&lt;P&gt;                 WHEN 1. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WHEN 2. ....&lt;/P&gt;&lt;P&gt;               ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB1 OCCURS 10, X, END OF TAB1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF TAB2 OCCURS 20, Y, END OF TAB2.&lt;/P&gt;&lt;P&gt;               CALL FUNCTION 'ITAB_COPY'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    TABLES   TAB_IN    = TAB1&lt;/P&gt;&lt;P&gt;                             TAB_OUT   = TAB2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NOT_FOUND: The called function is unknown.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_VB: Only update function modules can be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  called in the update task.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NOT_ACTIVE: The called function is known, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_PARM_MISSING: The function expects a&lt;/P&gt;&lt;P&gt;                  parameter, but none was passed by the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_PARM_UNKNOWN: The calling program passed a&lt;/P&gt;&lt;P&gt;                  parameter which the function does not recognize.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_LENG: The function expected a&lt;/P&gt;&lt;P&gt;                  different actual parameter length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_TYPE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_CONFLICT_GEN_TYP: The actual parameter type&lt;/P&gt;&lt;P&gt;                  does not satisfy the requirements of the function interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_WRONG_ALIGNMENT: An actual parameter does not&lt;/P&gt;&lt;P&gt;                  satisfy the alignment requirements of the corresponding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  formal parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_BASE_LITL: A literal was supposed to be passed&lt;/P&gt;&lt;P&gt;                  to a structured formal parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in new mode (asynchronous Remote&lt;/P&gt;&lt;P&gt;               Function Call)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CALL FUNCTION func STARTING NEW TASK taskname dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in the update task&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module in a remote system (Remote Function&lt;/P&gt;&lt;P&gt;               Call)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Asynchronous call to function module with transaction-like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing (transaction-like Remote Function Call)&lt;/P&gt;&lt;P&gt;               5. CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call a function module that can be activated within framework&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of enhancement concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     CALL FUNCTION func IN BACKGROUND TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING  p1 = f1    ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... TABLES     p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Flags the function module func to be run asynchronously. It is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not executed at once, but the data passed with EXPORTING bzw.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES is placed in a database table and the next COMMIT WORK&lt;/P&gt;&lt;P&gt;               then executes the function module in another work process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This variant applies only from R/3 Release 3.0. Both partner&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               systems (the client and the server systems) must have a Release&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.0 version of the R/3 System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the specified destination, the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed either in another R/3 System or as a C-implemented&lt;/P&gt;&lt;P&gt;               function module. Externally callable function modules must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               flagged as such in the function library (of the target system).&lt;/P&gt;&lt;P&gt;               Since each destination defines its own program context, further&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calls to the same or different function modules with the same&lt;/P&gt;&lt;P&gt;               destination can access the local memory (global data) of these&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields and field strings from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calling program to the function module. In the function module,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the formal parameters are defined as import parameters. Default&lt;/P&gt;&lt;P&gt;               values must be assigned to all import parameters of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module in the interface definition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters of the function module must contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes&lt;/P&gt;&lt;P&gt;               If several function module calls with the same destination are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified before COMMIT WORK, these form an LUW in the target&lt;/P&gt;&lt;P&gt;               system.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type 2 destinations (R/3 - R/2 connections) cannot be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     CALL CUSTOMER-FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The same as with CALL FUNCTION func.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the function module func; this can be activated. func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must be a 3-character literal (e.g. '001').&lt;/P&gt;&lt;P&gt;               The function modules are delivered empty within the framework&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the enhancement concept and must be implemented by the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               customer. They are maintained with the Transactions SMOD (at&lt;/P&gt;&lt;P&gt;               SAP) and CMOD (at the csutomer's).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAP determines both the interface and the place where the call&lt;/P&gt;&lt;P&gt;               is made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          By using the Transaction CMOD, the customer can activate the&lt;/P&gt;&lt;P&gt;               function module. The final name of the function module&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               comprises EXIT_, the name of the module pool where the function&lt;/P&gt;&lt;P&gt;               module is called, and the name func. For example, the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "CALL CUSTOMER-FUNCTION '001'" in the module pool SAPMS38M&lt;/P&gt;&lt;P&gt;               calls the function module EXIT_SAPMS38M_001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     CALL FUNCTION func DESTINATION dest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. The same as with CALL FUNCTION func&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the specified destination, the function module is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executed in another R/3 or R/2 System. Externally callable&lt;/P&gt;&lt;P&gt;               function modules must be flagged as such in the function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               library (of the target system).&lt;/P&gt;&lt;P&gt;               Since each destination defines its own program context, further&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calls to the same or different function modules with the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destination can access the local memory (global data) of these&lt;/P&gt;&lt;P&gt;               function modules.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can maintain existing destinations by selecting Tools -&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Administration -&amp;gt; Administration -&amp;gt; Network -&amp;gt; RFC&lt;/P&gt;&lt;P&gt;               destinations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Special destinations:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The destination NONE refers to the calling system. Function&lt;/P&gt;&lt;P&gt;                  modules called with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'NONE' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  are executed in the system of the calling program, but in&lt;/P&gt;&lt;P&gt;                  their own program context.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can use the destination BACK if the current program was&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  already called by RFC. The, BACK refers back to the calling&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  program:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'BACK' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  If the program is not called from a "remote" source, the&lt;/P&gt;&lt;P&gt;                  exception COMMUNICATION_FAILURE is triggered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Each R/3 System has a standard name. This is formed from the&lt;/P&gt;&lt;P&gt;                  host name (e.g. SY-HOST), the system name (SY-SYSID) and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  system nummer (two-character number assigned on installation&lt;/P&gt;&lt;P&gt;                  of the applications server).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  You can use this name as a destination. For example, you can&lt;/P&gt;&lt;P&gt;                  call the function module func in the system C11 on the host&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  sapxyz with system number 00 as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       CALL FUNCTION func DESTINATION 'sapxyz_C11_00' ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can also use saprouter path names as destinations (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  also saprouter documentation).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Parameter passing. When you pass data to an externally called&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module, there are some differences to the normal&lt;/P&gt;&lt;P&gt;               function module call:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  With table parameters, only the table itself is passed, not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  If one of the parameters of the interface of an externally&lt;/P&gt;&lt;P&gt;                  called function module is not specified when called, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  import parameters are set to their initial value. If no&lt;/P&gt;&lt;P&gt;                  default value was given in the interface definition, TABLES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parameters are defined as an empty table and unspecified&lt;/P&gt;&lt;P&gt;                  export parameters are lost.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Passing structured data objects. Since transport to another&lt;/P&gt;&lt;P&gt;               system may require data conversion, the structure of field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               strings and internal tables must be known to the runtime system&lt;/P&gt;&lt;P&gt;               when the call is made. The structure of a field string or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table is not known if it was defined with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    ... LIKE structure,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               if the structure passed was passed to the subroutine with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               explicit addition STRUCTURE, or if it is a parameter of a&lt;/P&gt;&lt;P&gt;               function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In these cases, external calls can result in a conversion&lt;/P&gt;&lt;P&gt;               error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          C interface. You can call externally callable function modules&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from C programs. It is also possible to store function modules&lt;/P&gt;&lt;P&gt;               in a C program and call them via CALL FUNCTION ... DESTINATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this purpose, SAP provides a C interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Function module calls with the addition DESTINATION can handle&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               two special system exceptions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SYSTEM_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              This is triggered if a system crash occurs on&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              the receiving side.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              This is triggered if there is a connection or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              communication problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In both cases, you can use the optional addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    ... MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to receive a description of the error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_DEST_TYPE:Destination type not allowed.&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_DEST:Destination does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_NO_LB_DEST:Destination (in 'Load Balancing'&lt;/P&gt;&lt;P&gt;                  mode) does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_TABINFO:Data error (info internal table)&lt;/P&gt;&lt;P&gt;                  during 'Remote Function Call'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     CALL FUNCTION func ...STARTING NEW TASK taskname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... PERFORMING form ON END OF TASK&lt;/P&gt;&lt;P&gt;               3. ... EXPORTING  p1 = f1    ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... TABLES     p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;               5. ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Starts the function module func asynchronously in a new mode.&lt;/P&gt;&lt;P&gt;               In contrast to normal function module calls, the calling&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program resumes processing as soon as the function module is&lt;/P&gt;&lt;P&gt;               started in the target system. It does not wait until the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module has finished. Through CALL SCREEN, the called&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module can, for example, display a screen and thus&lt;/P&gt;&lt;P&gt;               interact with the user.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         This variant applies only from R/3 Release 3.0. Both partner&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               systems (the client and the server systems) must have a Release&lt;/P&gt;&lt;P&gt;               3.0 version of the R/3 System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With this variant, the called function module must also be&lt;/P&gt;&lt;P&gt;               flagged in the Function Library as externally callable, even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               it is executed locally (without the addition DESTINATION).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... DESTINATION dest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes the function module externally as a Remote Function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Call (RFC); dest can be a literal or a variable. The R/3 System&lt;/P&gt;&lt;P&gt;               where the function module is executed depends on the specified&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               destination. Externally callable function modules must be&lt;/P&gt;&lt;P&gt;               flagged as such in the Function Library (of the target system).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... PERFORMING form ON END OF TASK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Whereas the parameters for receiving results (i.e. IMPORTING&lt;/P&gt;&lt;P&gt;               and TABLES parameters) are specified directly as additions in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the case of "conventional" function modules (see variant 2),&lt;/P&gt;&lt;P&gt;               these are logged in the FORM routine form when making an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               asynchronous call (see RECEIVE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a function module returns no result, this addition (...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERFORMING form ON END OF TASK) can be omitted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields and field strings from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calling program to the function module. In the function module,&lt;/P&gt;&lt;P&gt;               the formal parameters are defined as import parameters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;               parameters of the function module must contain values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... EXCEPTIONS syst_except = rc MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        While any exceptions arising in the called function module are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               handled by the second addition (in the FORM routine), this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               addition can handle two special system exceptions, as with&lt;/P&gt;&lt;P&gt;               function module calls with the addition DESTINATION:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SYSTEM_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              is triggered, if a system crash occurs on the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              receiving side.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION_FAILURE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              is triggered if there is a connection or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              communication problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In both cases, you can get a description of the error with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               optional addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ... MESSAGE mess&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: MSG_TEXT(80). "Message text&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Asynchronous call to Transaction SM59 --&amp;gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create a new session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'&lt;/P&gt;&lt;P&gt;                 DESTINATION 'NONE'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 EXPORTING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TCODE = 'SM59'&lt;/P&gt;&lt;P&gt;                 EXCEPTIONS COMMUNICATION_FAILURE MESSAGE MSG_TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF SY-SUBRC NE 0.&lt;/P&gt;&lt;P&gt;                   WRITE: MSG_TEXT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WRITE: 'O.K.'.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_FUNCTION_TASK_YET_OPEN: Task already open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     CALL FUNCTION func IN UPDATE TASK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... EXPORTING  p1 = f1     ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... TABLES     p1 = itab1  ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Flags the function module func for execution in the update&lt;/P&gt;&lt;P&gt;               task. It is not executed at once, but the data passed with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               EXPORTING or TABLES is placed in a database table and a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               subsequent COMMIT WORK then causes the function module to be&lt;/P&gt;&lt;P&gt;               executed by the update task. Update function modules must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               flagged as such in the function library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Values of fields and field strings specified under EXPORTING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are passed from the calling program to the function module. In&lt;/P&gt;&lt;P&gt;               the function module, the formal parameters are defined as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               import parameters. In the interface definition, default values&lt;/P&gt;&lt;P&gt;               must be assigned to all import parameters of the update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TABLES p1 = itab1 ... pn = itabn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect         TABLES passes references to internal tables. All table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters of the function module must have values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With update function modules, both import parameters and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               exceptions are ignored when the call is made.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Administration transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL METHOD - Call a method of an external object&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL METHOD OF obj m.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... = f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;               3. ... NO FLUSH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the method m of the object obj. m can be a literal or a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Normally, all consecutive OLE statements are buffered by the&lt;/P&gt;&lt;P&gt;               ABAP/4 processor and sent to the presentation server in bundled&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               form. This means that it is possible for a statement to refer&lt;/P&gt;&lt;P&gt;               to the results of preceding statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In debugging, however, you should remember that the values of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the return parameters cannot be displayed until directly before&lt;/P&gt;&lt;P&gt;               execution of the first ABAP/4 statement external to OLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Even a command which refers to an object not yet generated by&lt;/P&gt;&lt;P&gt;               any OLE statement terminates the bundling.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value of SY-SUBRC indicates whether all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               bundled commands have been successfully executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  All commands were successfully executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 1:  When communicating with the presentation&lt;/P&gt;&lt;P&gt;                              server, a system error occurred. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              system field SY-MSGLI contains a short&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              description of the error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 2:  A method call resulted in an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 3:  Setting a property resulted in an error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Reading a property resulted in an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the last 3 cases, a dialog box containing an error note is&lt;/P&gt;&lt;P&gt;               displayed on the presentation server.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD belongs to a group of key words which allow you to&lt;/P&gt;&lt;P&gt;               process external objects with ABAP/4. At present, only the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object model OLE2 is supported, i.e. all objects must be of&lt;/P&gt;&lt;P&gt;               type OLE2_OBJECT. This type and other necessary data are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined in the include program OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... = f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return value of the method in the variable f. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               return value can also be of type OLE2_OBJECT. This addition&lt;/P&gt;&lt;P&gt;               must always come before other additions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... EXPORTING p1 = f1 ... pn = fn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        EXPORTING passes values of fields to the parameters of the&lt;/P&gt;&lt;P&gt;               method. p1, p2, ... are either key word parameters or position&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If assignment of parameters is by sequence, p1, p2, ... must&lt;/P&gt;&lt;P&gt;               begin with "#", followed by the position number of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameter. At present, only position parameters are supported.&lt;/P&gt;&lt;P&gt;               The export parameters always come at the end of the statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... NO FLUSH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The addition NO FLUSH continues the collection process, even if&lt;/P&gt;&lt;P&gt;               the next command is not an OLE statement. This means that you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               can set a series of properties in a loop and download them to&lt;/P&gt;&lt;P&gt;               the presentation server in a single transport operation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you do not use NO FLUSH, you must ensure that you do not&lt;/P&gt;&lt;P&gt;               rely on the contents of return parameters not yet filled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Also, all objects must be initialized in a bundle, i.e. they&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must be generated by an OLE call that has already been&lt;/P&gt;&lt;P&gt;               executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Every FREE statement always causes a download of the buffer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Open an EXCEL file with the method 'Open'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA EXCEL    TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;               DATA WORKBOOK TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT   EXCEL    'Excel.Application'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD  OF EXCEL    'Workbooks' = WORKBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL METHOD  OF WORKBOOK 'Open'    EXPORTING #1 = 'C:\EX1.XLS'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SET PROPERTY&lt;/P&gt;&lt;P&gt;               GET PROPERTY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT&lt;/P&gt;&lt;P&gt;               FREE OBJECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL SCREEN - Call a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... STARTING AT x1 y1 ... ENDING AT x2 y2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the screen scr; scr is the number of a screen of the main&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program. You use SET SCREEN 0. or LEAVE SCREEN. to define the&lt;/P&gt;&lt;P&gt;               return from the CALL screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... STARTING AT x1 y1  ENDING AT x2 y2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The coordinates x1, y1 (start column and start line in the&lt;/P&gt;&lt;P&gt;               window) and x2, y2 (end column and end line in the window)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               define the size and position of the CALL screen ("top left -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               bottom right"). Besides these coordinates, you can also see the&lt;/P&gt;&lt;P&gt;               contents of the primary window, but cannot perform any action&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          -  If "ENDING AT ..." is not specified, suitable values are&lt;/P&gt;&lt;P&gt;                  substituted for x2 and y2, taking into account the size of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the called screen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DYNP_TOO_MANY_CALL_SCREENS: No further screen level (call&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen); the maximum number of nested screen levels is&lt;/P&gt;&lt;P&gt;               restricted to 50 at present.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL TRANSACTION - Call a transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CALL TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... USING itab&lt;/P&gt;&lt;P&gt;               2a.     ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2b.     ... UPDATE upd&lt;/P&gt;&lt;P&gt;               2c.     ... MESSAGES INTO messtab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the SAP Transaction tcod; tcod can be a literal or a&lt;/P&gt;&lt;P&gt;               variable. To return from the called transaction, you use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key word LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL TRANSACTION 'SP01'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... AND SKIP FIRST SCREEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Skips the first screen in the transaction (provided all the&lt;/P&gt;&lt;P&gt;               required fields have been assigned values by the SPA/GPA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               process).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... USING itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Calls the Transaction tcod and passes the internal table itab,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which contains one or several screens in batch input format.&lt;/P&gt;&lt;P&gt;               If necessary, one of the messages output by the Transaction is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               returned to the fields SY-MSGID, SY-MSGTY SY-MSGNO, SY-MSGV1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ..., SY-MSGV4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  Processing was successful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: Transaction ended with an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          A called Transaction ends successfully for the following&lt;/P&gt;&lt;P&gt;               reasons:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMMIT WORK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Next screen = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. LEAVE TO TRANSACTION '    '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2a   ... MODE mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified processing mode can accept the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Display screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'E'  Display screen only if an error occurs&lt;/P&gt;&lt;P&gt;                  'N'  No display&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition MODE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               set to 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2b   ... UPDATE upd&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified update mode upd defines the update type. This can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               have one of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'A'  Asynchronous update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  'S'  Synchronous update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the addition UPDATE is not specified, the processing mode is&lt;/P&gt;&lt;P&gt;               set to 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2c   ... MESSAGES INTO messtab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified internal table contains all system messages that&lt;/P&gt;&lt;P&gt;               occur during CALL TRANSACTION USING ... . The internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               messtab must have the structure BDCMSGCOLL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA BEGIN OF BDCDATA OCCURS 100.&lt;/P&gt;&lt;P&gt;                      INCLUDE STRUCTURE BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA END OF BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA BEGIN OF MESSTAB OCCURS 10.&lt;/P&gt;&lt;P&gt;                      INCLUDE STRUCTURE BDCMSGCOLL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA END OF MESSTAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA REPORT(8).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-PROGRAM  = 'SAPMS38M'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-DYNPRO   = '0100'.&lt;/P&gt;&lt;P&gt;               BDCDATA-DYNBEGIN = 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR BDCDATA.&lt;/P&gt;&lt;P&gt;               BDCDATA-FNAM     = 'RS38M-PROGRAMM'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               BDCDATA-FVAL     = REPORT.&lt;/P&gt;&lt;P&gt;               APPEND BDCDATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL TRANSACTION 'SE38'  USING BDCDATA  MODE 'N'&lt;/P&gt;&lt;P&gt;                                        MESSAGES INTO MESSTAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_NOT_FOUND: Transaction is unknown.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_IS_MENU: Transaction is a menu.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CALL_TRANSACTION_USING_NESTED: Recursive CALL TRANSACTION&lt;/P&gt;&lt;P&gt;                  USING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SUBMIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CALL DIALOG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CASE f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Case distinction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the current contents of a field, this statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               executes one of several alternative processing branches. The&lt;/P&gt;&lt;P&gt;               field whose contents determine how the subsequent processing is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified after CASE; the individual processing branches are&lt;/P&gt;&lt;P&gt;               introduced by WHEN, followed by the value to be tested. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entire block is concluded by ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The structure of the CASE statement is as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CASE f.&lt;/P&gt;&lt;P&gt;                 WHEN f1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 WHEN f2.&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;               ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               On reaching such a CASE statement, the processor compares f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with f1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f = f1, it executes the processing block between "WHEN f1."&lt;/P&gt;&lt;P&gt;               and the next WHEN statement. If there are no further WHEN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statements, it executes the processing block up to the ENDCASE&lt;/P&gt;&lt;P&gt;               statement and then continues with any subsequent processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f &amp;lt;&amp;gt; f1, the processor compares the field f2 in the next&lt;/P&gt;&lt;P&gt;               WHEN statement with f and proceeds as with f1 and so on.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Although f should be a variable, f1 can be a variable or a&lt;/P&gt;&lt;P&gt;               literal. For the comparison "f = f1", the rules are the same as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               for IF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               There is a second variant of the WHEN statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               No more than one such WHEN statement is allowed within a CASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               block. The "WHEN OTHERS" processing block is always concluded&lt;/P&gt;&lt;P&gt;               by ENDCASE, i.e. no further WHEN statements can follow.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The "WHEN OTHERS" processing block is executed only if none of&lt;/P&gt;&lt;P&gt;               the preceding WHEN blocks have been executed, i.e. if all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               previous comparisons ("f = ...) have returned a negative&lt;/P&gt;&lt;P&gt;               result.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: ONE   TYPE I VALUE 1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     THREE TYPE P VALUE 3.&lt;/P&gt;&lt;P&gt;               DO 5 TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CASE SY-INDEX.&lt;/P&gt;&lt;P&gt;                   WHEN ONE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE / 'That is'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN 2.&lt;/P&gt;&lt;P&gt;                     WRITE   'a'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   WHEN THREE.&lt;/P&gt;&lt;P&gt;                     WRITE 'good'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE 'example'.&lt;/P&gt;&lt;P&gt;                   WHEN OTHERS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     WRITE '!'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDCASE.&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Output: "That is a good example ! !"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. You can nest several CASE statements and even combine them&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  with IF statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The statement "WHEN: f1, f2." does not make sense. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  example below shows that the block belonging to "WHEN f1" is&lt;/P&gt;&lt;P&gt;                  empty:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    WHEN f1.&lt;/P&gt;&lt;P&gt;                    WHEN f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       IF, ELSEIF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Within loops and events&lt;/P&gt;&lt;P&gt;               - CHECK logexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Special for reports with logical databases&lt;/P&gt;&lt;P&gt;               - CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK - within loops&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CHECK logexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CHECK evaluates the subsequent logical expression. If it is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               true, the processing continues with the next statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In loop structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DO     ... ENDDO&lt;/P&gt;&lt;P&gt;               WHILE  ... ENDWHILE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP   ... ENDLOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT ... ENDSELECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHECK with a negative outcome terminates the current loop pass&lt;/P&gt;&lt;P&gt;               and goes back to the beginning of the loop to start the next&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pass, if there is one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM     ...  ENDFORM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FUNCTION ...  ENDFUNCTION&lt;/P&gt;&lt;P&gt;               MODULE   ...  ENDMODULE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHECK with a negative outcome terminates the routine or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               modularization unit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If CHECK is not in a loop or a routine or a modularization&lt;/P&gt;&lt;P&gt;               unit, a negative logical expression terminates the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event. In contrast, the statement REJECT terminates the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event, even from loops or subroutines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a CHECK produces a negative result in a GET event, the GET&lt;/P&gt;&lt;P&gt;               events in subordinate tables of the logical database are not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed either.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CONTINUE, EXIT, REJECT, STOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CHECK - special for reports with logical databases&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     CHECK sel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Checks the selection criterion requested by the statement&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS sel ....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement is equivalent to f IN sel, if sel was defined by&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS sel FOR f and can be used anywhere in logical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               expressions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the result of this check is negative, the processing in this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               event is terminated and the GET events for any subordinate&lt;/P&gt;&lt;P&gt;               database tables are not processed either.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant of the CHECK statement should be used only if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               logical database for the corresponding table does not support&lt;/P&gt;&lt;P&gt;               dynamic selections (see CHECK SELECT-OPTIONS), or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS with the addition NO DATABASE SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Otherwise, the relevant record is not read from the database&lt;/P&gt;&lt;P&gt;               and made available to the program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Called only after a GET event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement checks all the selections for SELECT-OPTIONS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               where the reference field after FOR belongs to the current&lt;/P&gt;&lt;P&gt;               table dbtab (specified after GET. However, this applies only if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the logical database for dbtab does not support dynamic&lt;/P&gt;&lt;P&gt;               selections. Otherwise, the selections are passed directly to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the logical database (with the exception: addition "NO DATABASE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECTION" to SELECT-OPTIONS).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This variant of the CHECK statement only makes sense if the&lt;/P&gt;&lt;P&gt;               logical database does not support dynamic selections for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponding table or SELECT-OPTIONS are defined with the&lt;/P&gt;&lt;P&gt;               addition "NO DATABASE SELECTION".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can determine from the ABAP/4 Development Workbench whether&lt;/P&gt;&lt;P&gt;               dynamic selections are defined and, if so, for which logical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database tables by selecting Development -&amp;gt; Programming&lt;/P&gt;&lt;P&gt;               environ. -&amp;gt; Logical databases followed by Extras -&amp;gt; Dynamic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selections.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       The logical database F1S of the demo flight reservation system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains the tables SPFLI with, and the table SFLIGHT without,&lt;/P&gt;&lt;P&gt;               dynamic selections.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SPFLI, SFLIGHT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SELECT-OPTIONS:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SF_PRICE  FOR SFLIGHT-PRICE,&lt;/P&gt;&lt;P&gt;                 SP_CARR   FOR SPFLI-CARRID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 SP_FROM   FOR SPFLI-CITYFROM NO DATABASE SELECTION,&lt;/P&gt;&lt;P&gt;                 SP_DEPT   FOR SPFLI-DEPTIME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since dynamic selections are defined with the table SPFLI, but&lt;/P&gt;&lt;P&gt;               not with the table SFLIGHT, the following procedure applies:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET SFLIGHT.&lt;/P&gt;&lt;P&gt;                 CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This CHECK statement is equivalent to the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SF_PRICE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET SPFLI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SELECT-OPTIONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the CHECK statement is equivalent to the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 CHECK SP_FROM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          With CHECK SELECT-OPTIONS, fields from superior tables in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               database hierarchy are not &lt;SPAN __jive_emoticon_name="alert"&gt;&lt;/SPAN&gt; checked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CHECK_SELOPT_ILLEGAL_OPTION: Wrong "OPTION" in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  SELECT-OPTIONS or RANGES table&lt;/P&gt;&lt;P&gt;               -  CHECK_SELOPT_ILLEGAL_SIGN: Wrong "SIGN" in SELECT-OPTIONS or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  RANGES table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CONTINUE, EXIT, REJECT, STOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CLEAR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CLEAR f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... WITH g&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... WITH NULL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Resets the contents of f to its initial value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For predefined types (see DATA), the following initial values&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are used:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type C:      '  ... ' (blank character)&lt;/P&gt;&lt;P&gt;                 Type N:      '00...0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type &lt;span class="lia-unicode-emoji" title=":anguished_face:"&gt;😧&lt;/span&gt;      '00000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type T:      '000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type I:      0&lt;/P&gt;&lt;P&gt;                 Type P:      0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Type F:      0.0E+00&lt;/P&gt;&lt;P&gt;                 Type X:      0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If f is a field string, each component field is reset to its&lt;/P&gt;&lt;P&gt;               initial value. If it is an internal table without a header&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line, the entire table is deleted together with all its&lt;/P&gt;&lt;P&gt;               entries. If, however, f is an internal table with a header&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line, only the sub-fields in the table header entry are reset&lt;/P&gt;&lt;P&gt;               to their initial values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: TEXT(10)       VALUE 'Hello',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NUMBER TYPE I  VALUE 12345,&lt;/P&gt;&lt;P&gt;                     ROW(10) TYPE N VALUE '1234567890',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF PLAYER,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(10)      VALUE 'John',&lt;/P&gt;&lt;P&gt;                       TEL(8) TYPE N VALUE '08154711',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       MONEY  TYPE P VALUE 30000,&lt;/P&gt;&lt;P&gt;                     END   OF PLAYER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;               CLEAR: TEXT, NUMBER, PLAYER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field contents are now as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ROW          = '1234567890'&lt;/P&gt;&lt;P&gt;               TEXT         = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NUMBER       = 0&lt;/P&gt;&lt;P&gt;               PLAYER-NAME  = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PLAYER-TEL   = '00000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PLAYER-MONEY = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When CLEAR references an internal table itab with a header&lt;/P&gt;&lt;P&gt;                  line, it only resets the sub-fields in the header entry to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  their initial values (as mentioned above). The individual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table entries remain unchanged.&lt;/P&gt;&lt;P&gt;                  To delete the entire internal table together with all its&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  entries, you can use CLEAR itab[] or REFRESH itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Within a logical expression, you can use f IS INITIAL to&lt;/P&gt;&lt;P&gt;                  check that the field f contains the initial value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  appropriate for its type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Variables are normally initialized according to their type,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  even if the specification of an explicit initial value&lt;/P&gt;&lt;P&gt;                  (addition "... VALUE lit" of the DATA statement) is missing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For this reason, it is not necessary to initialize variables&lt;/P&gt;&lt;P&gt;                  again with CLEAR after defining them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... WITH g&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The field f is filled with the value of the first byte of the&lt;/P&gt;&lt;P&gt;               field g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... WITH NULL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Fills the field with hexadecimal zeros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should use this addition with particular care because the&lt;/P&gt;&lt;P&gt;               fields of most data types thus receive values which are really&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               invalid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR requires about 3 msn (standardized microseconds) of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime to process a field of type C with a length of 10 and&lt;/P&gt;&lt;P&gt;               about 2 msn to process a field of the type I. To delete an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table with 15 fields, it needs about 5 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CLOSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CLOSE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CLOSE CURSOR c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 1  CLOSE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Closes the file dsn, ignoring any errors which may occur. CLOSE&lt;/P&gt;&lt;P&gt;               is required only if you want to edit dsn several times. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               further details, see the documentation for OPEN DATASET.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form 2  CLOSE CURSOR c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Closes the database cursor c. CLOSE CURSOR is only required if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               you want to read sets of database records several times with c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For further information, refer to the documentation on OPEN&lt;/P&gt;&lt;P&gt;               CURSOR and FETCH.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLOSE CURSOR belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CNT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    ... CNT(h) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        CNT(h) is not a statement, but a field which is automatically&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               created and filled by the system if f is a sub-field of an&lt;/P&gt;&lt;P&gt;               extract dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CNT(h) can only be addressed from within a LOOP on a sorted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               extract.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If h is a non-numeric field (see also ABAP/4 number types) from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field group HEADER and part of the sort key of the extract&lt;/P&gt;&lt;P&gt;               dataset, the end of a control level (AT END OF, AT LAST) is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               such that CNT(h) contains the number of different values which&lt;/P&gt;&lt;P&gt;               the field h has accepted in the group, i.e. the number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               records in the group for which the field f has changed its&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Related   SUM(g)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COLLECT [wa INTO] itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... SORTED BY f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        COLLECT is used to create unique or compressed datsets. The key&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields are the default key fields of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use only COLLECT to fill an internal table, COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               makes sure that the internal table does not contain two entries&lt;/P&gt;&lt;P&gt;               with the same default key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If, besides its default key fields, the internal table contains&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               number fields (see also ABAP/4 number types), the contents of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these number fields are added together if the internal table&lt;/P&gt;&lt;P&gt;               already contains an entry with the same key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the default key of an internal table processed with COLLECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is blank, all the values are added up in the first table line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you specify wa INTO, the entry to be processed is taken from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the explicitly specified work area wa. If not, it comes from&lt;/P&gt;&lt;P&gt;               the header line of the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After COLLECT, the system field SY-TABIX contains the index of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the - existing or new - table entry with default key fields&lt;/P&gt;&lt;P&gt;               which match those of the entry to be processed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. COLLECT can create unique or compressed datasets and should&lt;/P&gt;&lt;P&gt;                  be used precisely for this purpose. If uniqueness or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  compression are unimportant, or two values with identical&lt;/P&gt;&lt;P&gt;                  default key field values could not possibly occur in your&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  particular task, you should use APPEND instead. However, for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a unique or compressed dataset which is also efficient,&lt;/P&gt;&lt;P&gt;                  COLLECT is the statement to use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If you process a table with COLLECT, you should also use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  COLLECT to fill it. Only by doing this can you guarantee&lt;/P&gt;&lt;P&gt;                  that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  the internal table will actually be unique or compressed, as&lt;/P&gt;&lt;P&gt;                  described above and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT will run very efficiently.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. If you use COLLECT with an explicitly specified work area,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  it must be compatible with the line type of the internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Compressed sales figures for each company&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF COMPANIES OCCURS 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(20),&lt;/P&gt;&lt;P&gt;                       SALES TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMPANIES.&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Duck'.  COMPANIES-SALES = 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Tiger'. COMPANIES-SALES = 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMPANIES-NAME = 'Duck'.  COMPANIES-SALES = 30.&lt;/P&gt;&lt;P&gt;               COLLECT COMPANIES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table COMPANIES now has the following appearance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME         ! SALES&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Duck         !    40&lt;/P&gt;&lt;P&gt;               Tiger        !    20&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... SORTED BY f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        COLLECT ... SORTED BY f is obsolete and should no longer be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               used. Use APPEND ... SORTED BY f which has the same meaning.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. When using internal tables with a header line, avoid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  unnecessary assignments to the header line. Whenever&lt;/P&gt;&lt;P&gt;                  possible, use statements which have an explicit work area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, "APPEND wa TO itab." is approximately twice as&lt;/P&gt;&lt;P&gt;                  fast as "itab = wa. APPEND itab.". The same applies to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  COLLECT and INSERT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The cost of a COLLECT in terms of performance increases with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the width of the default key needed in the search for table&lt;/P&gt;&lt;P&gt;                  entries and the number of numeric fields with values which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  have to be added up, if an entry is found in the internal&lt;/P&gt;&lt;P&gt;                  table to match the default key fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  If no such entry is found, the cost is reduced to that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  required to append a new entry to the end of the table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  A COLLECT statement used on a table which is 100 bytes wide&lt;/P&gt;&lt;P&gt;                  and has a key which is 60 bytes wide and seven numeric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fields is about approx. 50 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT_OVERFLOW: Overflow in integer field when calculating&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COLLECT_OVERFLOW_TYPE_P: Overflow in type P field when&lt;/P&gt;&lt;P&gt;                  calculating totals.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       APPEND, WRITE ... TO, MODIFY, INSERT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMMIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... AND WAIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Executes a database commit and thus closes a logical processing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               unit or Logical Unit of Work (LUW) (see also Transaction&lt;/P&gt;&lt;P&gt;               processing). This means that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  all database changes are made irrevocable and cannot be&lt;/P&gt;&lt;P&gt;                  reversed with ROLLBACK WORK and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  all database locks are released.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMIT WORK also&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  calls the subroutines specified by PERFORM ... ON COMMIT,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  executes asynchronously any update requests (see CALL&lt;/P&gt;&lt;P&gt;                  FUNCTION ... IN UPDATE TASK) specified in these subroutines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or started just before,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  processes the function modules specified in CALL FUNCTION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ... IN BACKGROUND TASK,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  cancels all existing locks (see SAP locking concept) if no&lt;/P&gt;&lt;P&gt;                  update requests exist,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  closes all open database cursors (see OPEN CURSOR) and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  resets the time slice counter to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMIT WORK belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value SY-SUBRC is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. All subroutines called with PERFORM ... ON COMMIT are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  processed in the LUW concluded by the COMMIT WORK command.&lt;/P&gt;&lt;P&gt;                  All V1 update requests specified in CALL FUNCTION ... IN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  UPDATE TASK are also executed in one LUW. When all V1 update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  requests have been successfully concluded, the V2 update&lt;/P&gt;&lt;P&gt;                  requests ("update with start delayed") are processed, each&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  in one LUW. Parallel to this, the function modules specified&lt;/P&gt;&lt;P&gt;                  in CALL FUNCTION ... IN BACKGROUND TASK are each executed in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  one LUW per destination.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMMIT WORK commands processed within CALL DIALOG processing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - execute a database commit (see above),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - close all open database cursors,&lt;/P&gt;&lt;P&gt;                  - reset the time slice counter and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - call the function modules specified by CALL FUNCTION IN&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BACKGROUND TASK in the CALL DIALOG processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  However, subroutines and function modules called with&lt;/P&gt;&lt;P&gt;                  PERFORM ... ON COMMIT or CALL FUNCTION ... IN UPDATE TASK in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the CALL DIALOG processing are not executed in the calling&lt;/P&gt;&lt;P&gt;                  transaction until a COMMIT WORK occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Since COMMIT WORK closes all open database cursors, any&lt;/P&gt;&lt;P&gt;                  attempt to continue a SELECT loop after a COMMIT WORK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  results in a runtime error. For the same reason, a FETCH&lt;/P&gt;&lt;P&gt;                  after a COMMIT WORK on the now closed cursors also produces&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a runtime error. You must therefore ensure that any open&lt;/P&gt;&lt;P&gt;                  cursors are no longer used after the COMMIT WORK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. With batch input and CALL TRANSACTION ... USING, COMMIT WORK&lt;/P&gt;&lt;P&gt;                  successfully concludes the processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... AND WAIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The addition ... AND WAIT makes the program wait until the type&lt;/P&gt;&lt;P&gt;               V1 updates have been completed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The update was successfully performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: The update could not be successfully performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMMIT_IN_PERFORM_ON_COMMIT: COMMIT WORK is not allowed in a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  FORM callled with PERFORM ... ON COMMIT.&lt;/P&gt;&lt;P&gt;               -  COMMIT_IN_POSTING: COMMIT WORK is not allowed in the update&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  task.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMMUNICATION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMMUNICATION INIT DESTINATION dest ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMMUNICATION ALLOCATE ID id.&lt;/P&gt;&lt;P&gt;               3. COMMUNICATION ACCEPT ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. COMMUNICATION SEND ID id BUFFER f.&lt;/P&gt;&lt;P&gt;               5. COMMUNICATION RECEIVE ID id&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        ...BUFFER f&lt;/P&gt;&lt;P&gt;                                        ...DATAINFO d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        ...STATUSINFO s.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. COMMUNICATION DEALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The COMMUNICATION statement allows you to develop applications&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which perform direct program-to-program communication. The&lt;/P&gt;&lt;P&gt;               basis for this is CPI-C (Common Programming Interface -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Coummunication), defined by IBM within the context of SAA&lt;/P&gt;&lt;P&gt;               standards as a standardized communications interface.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The COMMUNICATION statement provides the essential parameters&lt;/P&gt;&lt;P&gt;               for implementing simple communication. Its starter set covers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the following functionality:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Establishing a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Accepting a communication&lt;/P&gt;&lt;P&gt;                  Sending data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Receiving data&lt;/P&gt;&lt;P&gt;                  Closing a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other essential part of such a communication is an ABAP/4&lt;/P&gt;&lt;P&gt;               program containing a FORM routine which is executed when the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               connection has been established. This program may be in an R/3&lt;/P&gt;&lt;P&gt;               System or an R/2&amp;gt; System.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, you should be aware that the application programs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               themselves declare a protocol. In particular, logon to the&lt;/P&gt;&lt;P&gt;               partner SAP System must be performed in the calling program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The partner programs must also manage different character sets,&lt;/P&gt;&lt;P&gt;               e.g. ASCII - EBCDIC themselves. A facility known as the Remote&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function Call (RFC) has now been developed to save users from&lt;/P&gt;&lt;P&gt;               having to deal with these problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               External programs (e.g. a program written in C on a UNIX&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               workstation) can also be used as partner programs. For this&lt;/P&gt;&lt;P&gt;               purpose, SAP provides a platform-specific development library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For more detailed information about communication in the SAP&lt;/P&gt;&lt;P&gt;               System, you can refer to the manual&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SAP Communication: Programming&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Further information about communication can be found in any of&lt;/P&gt;&lt;P&gt;               the following literature:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IBM SAA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Common Programming Interface&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Communication Reference&lt;/P&gt;&lt;P&gt;               SC 26-4399&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X/Open Developers' Specification CPI-C&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X/Open Company Ltd.&lt;/P&gt;&lt;P&gt;               ISBN 1 872630 02 2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     COMMUNICATION INIT DESTINATION dest ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Initializes a program-to-program connection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The partner system is specified in the dest field. You can use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               any name you like, but it must be entered in the connection&lt;/P&gt;&lt;P&gt;               table TXCOM and can be no more than 8 characters long. This&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry in TXCOM determines to which physical system a connection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is established using the symbolic name of the target system.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the field id, the system assigns an eight-character ID&lt;/P&gt;&lt;P&gt;               number of type C to the connection. The system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains an appropriate return code value.&lt;/P&gt;&lt;P&gt;               All return codes can be read using their symbolic names. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               this purpose, you can use the program RSCPICDF which contains&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               these names and can be included, if required.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     COMMUNICATION ALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sets up a program-to-program connection. The call must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               immediately follow COMMUNICATION INIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     COMMUNICATION ACCEPT ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Accepts a connection requested by the partner program. id is a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field of type C which is 8 characters long and contains the ID&lt;/P&gt;&lt;P&gt;               of the accepted connection after a successful call.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;                 INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     COMMUNICATION SEND ID id BUFFER f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sends data to the partner program. The data is stored in the&lt;/P&gt;&lt;P&gt;               field f which follows the key word parameter BUFFER. It is sent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in the full length of the field f. If the partner program is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               part of a system which has a different character set, you must&lt;/P&gt;&lt;P&gt;               perform an appropriate conversion yourself. To do this, use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LENGTH leng&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Sends the contents of the field f to the partner program in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE.&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since the length is specified explicitly in this example, only&lt;/P&gt;&lt;P&gt;               the part 'The quick brown fox ' is transferred from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents of the field RECORD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     COMMUNICATION RECEIVE ID id ...BUFFER f ...DATAINFO d&lt;/P&gt;&lt;P&gt;               ...STATUSINFO s.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Parts marked with " ..." are interchangeable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LENGTH leng&lt;/P&gt;&lt;P&gt;               3. ... RECEIVED m&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... HOLD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Receives data in the field f. If no length is explicitly&lt;/P&gt;&lt;P&gt;               defined, the amount of data accepted depends on the length of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field. The fields d and s contain information about the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               receive process. You can address the contents of these using&lt;/P&gt;&lt;P&gt;               symbolic names in the include program RSCPICDF. The field d&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               indicates whether the data was received in its entirety. The&lt;/P&gt;&lt;P&gt;               status field s informs the RECEIVE user of the status of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program. Here, it is important to know whether the program is&lt;/P&gt;&lt;P&gt;               in receive status or send status. It is, for example, not&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               possible to send data if the program is in receive status.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For more detailed information about these protocol questions,&lt;/P&gt;&lt;P&gt;               refer to the manuals listed above.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... RETURNCODE rc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Stores the return code in the field rc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LENGTH leng&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Receives data only in the specified length leng.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... RECEIVED m&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        After the call, m contains the number of bytes received by the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               partner program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... HOLD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Normally, data is received asynchronously, i.e. the system&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               performs a rollout. However, this may not be desirable if, for&lt;/P&gt;&lt;P&gt;               example, the data is received in a SELECT loop, the database&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               cursor is lost due to the rollout and the loop is terminated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To prevent a rollout, you can use the addition HOLD. Then, the&lt;/P&gt;&lt;P&gt;               SAP process waits until the data has been received and is thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               available for use by other users.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The fields d, s and m which contain information about the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               outcome of the call must be of type X with length 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                        DINFO      TYPE C_INFO,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        SINFO      TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION RECEIVE ID         CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       BUFFER     RECORD&lt;/P&gt;&lt;P&gt;                                       STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;                                       RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 6     COMMUNICATION DEALLOCATE ID id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Severs connection and releases all resources.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;               DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST    TYPE DESTINATION VALUE 'C00'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                      LENG       TYPE I VALUE 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION DEALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The above examples illustrate the basic functionality of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               key words. However, the example program can only have an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               external system as partner. If the partner is an SAP System,&lt;/P&gt;&lt;P&gt;               the calling program must first logon to the SAP System and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               receive an acknowledgement. Only then can you begin to transmit&lt;/P&gt;&lt;P&gt;               the actual data. When logging on to an R2 System and an R3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               System, the logon data must be converted to EBCDIC. All user&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               data should be converted according to the partner system. This&lt;/P&gt;&lt;P&gt;               is in the concluding example of an R/3 - R/2 connection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               PROGRAM ZCPICTST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;                      DESTINATION(8)     TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF CONNECT_STRING,&lt;/P&gt;&lt;P&gt;                        REQID(4) VALUE 'CONN',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TYPE(4)  VALUE 'CPIC',&lt;/P&gt;&lt;P&gt;                        MODE(4)  VALUE '1   ',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        MANDT(3) VALUE '000',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(12) VALUE 'CPICUSER',&lt;/P&gt;&lt;P&gt;                        PASSW(8) VALUE 'CPIC',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        LANGU(1) VALUE 'D',&lt;/P&gt;&lt;P&gt;                        KORRV(1),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        REPORT(8) VALUE 'ZCPICTST',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        FORM(30)  VALUE 'CPIC_EXAMPLE',&lt;/P&gt;&lt;P&gt;                      END OF CONNECT_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  CONVID   TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DEST     TYPE DESTINATION VALUE 'R2-SYST',&lt;/P&gt;&lt;P&gt;                      CPIC_RC  TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      DINFO    TYPE C_INFO,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      SINFO    TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;                      LENG       TYPE I VALUE 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION INIT DESTINATION DEST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  ID          CONVID&lt;/P&gt;&lt;P&gt;                                  RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION ALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                      RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert logon data to EBCDIC&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE CONNECT_STRING TO CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID CONVID BUFFER CONNECT_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Receive acknowledgement of logon&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION RECEIVE ID      CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER     RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION RECEIVE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert acknowledgement to ASCII&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE RECORD FROM CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now begin user-specific data exchange&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               RECORD = 'The quick brown fox jumps over the lazy dog'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Depending on the partner system, convert to another&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;character set&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TRANSLATE RECORD TO CODE PAGE '0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COMMUNICATION SEND ID     CONVID&lt;/P&gt;&lt;P&gt;                                  BUFFER RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  LENGTH LENG&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                  RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;               COMMUNICATION DEALLOCATE ID CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                        RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                  WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  EXIT.&lt;/P&gt;&lt;P&gt;               ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROGRAM ZCPICTST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE RSCPICDF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The receiving procedure in the relevant partner program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               follows&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM CPIC_EXAMPLE.&lt;/P&gt;&lt;P&gt;                 TYPES: CONVERSATION_ID(8) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        RETURN_CODE        LIKE SY-SUBRC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        C_INFO(4)          TYPE X.&lt;/P&gt;&lt;P&gt;                 DATA:  CONVID  TYPE CONVERSATION_ID,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        CPIC_RC TYPE RETURN_CODE,&lt;/P&gt;&lt;P&gt;                        RECORD(80) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        DINFO      TYPE C_INFO,&lt;/P&gt;&lt;P&gt;                        SINFO      TYPE C_INFO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 COMMUNICATION ACCEPT ID CONVID&lt;/P&gt;&lt;P&gt;                                      RETURNCODE  CPIC_RC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK.&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;                 COMMUNICATION RECEIVE ID         CONVID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       BUFFER     RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       STATUSINFO SINFO&lt;/P&gt;&lt;P&gt;                                       DATAINFO   DINFO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       RETURNCODE CPIC_RC.&lt;/P&gt;&lt;P&gt;                 IF CPIC_RC NE CM_OK AND CPIC_RC NE CM_DEALLOCATED_NORMAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMPONENT-CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variations:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. COMPONENT-CHECK NUMBER n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. COMPONENT-CHECK TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;               3. COMPONENT-CHECK PROGRAM prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether a particular SAP price list component is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 1   COMPONENT-CHECK NUMBER n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component n is installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code in the system field SY-SUBRC may be set to&lt;/P&gt;&lt;P&gt;               either of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 2   COMPONENT-CHECK TRANSACTION tcod.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component for Transaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tcod is installed. The return code in the system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               may be set to any of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Transaction tcod does not belong to any SAP&lt;/P&gt;&lt;P&gt;                              price list component (i.e. no entry in Table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              DIR).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variation 3   COMPONENT-CHECK PROGRAM prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines whether the SAP price list component for the program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               prog is installed. The return code in the system field SY-SUBRC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               may be set to any of the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               0              SAP price list component active.&lt;/P&gt;&lt;P&gt;               4              SAP price list component not active.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8              Program p does not belong to any SAP price list&lt;/P&gt;&lt;P&gt;                              component (i.e. no entry in Table DIR).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; COMPUTE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    COMPUTE n = arithexp.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Evaluates the arithmetic expression arithexp and places the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               result in the field n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Allows use of the four basic calculation types +, -, * and /,&lt;/P&gt;&lt;P&gt;               the whole number division operators DIV (quotient) and MOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (remainder), the exponentiation operator ** (exponentiation "X&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Y means X to the power of Y) as well as the functions listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When evaluating mixed expressions, functions have priority.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then comes exponentiation, followoed by the "point operations"&lt;/P&gt;&lt;P&gt;               *, /, DIV and MOD, and finally + and - . Any combination of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parentheses is also allowed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The fields involved are usually of type I, F or P, but there&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               are exceptions to this rule (see below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can omit the key word COMPUTE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Built-in functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Functions for all number types&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ABS            Amount (absolute value) |x| of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SIGN           Sign (preceding sign) of x;&lt;/P&gt;&lt;P&gt;                                           1        x &amp;gt; 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              SIGN( x ) =  0   if   x = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                          -1        x &amp;lt; 0&lt;/P&gt;&lt;P&gt;               CEIL           Smallest whole number value not less than x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FLOOR          Greatest whole number value not greater than x&lt;/P&gt;&lt;P&gt;               TRUNC          Whole number part of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FRAC           Decimal part of x&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Floating point functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ACOS           Arc cosine(x) in the range [-pi/2, pi/2], x from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              [-1, 1]&lt;/P&gt;&lt;P&gt;               ASIN           Arc cosine(x) in the range [0, pi], x aus [-1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              1]&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ATAN           Arc tangent(x) in the range [-pi/2, pi/2] (pi =&lt;/P&gt;&lt;P&gt;                              3.1415926535897932)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COS            Cosine of an angle specified in the arc&lt;/P&gt;&lt;P&gt;               SIN            Sine of an angle specified in the arc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TAN            Tangent of an angle specified in the arc&lt;/P&gt;&lt;P&gt;               COSH           Hyperbola cosine&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SINH           Hyperbola sine&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TANH           Hyperbola tangent&lt;/P&gt;&lt;P&gt;               EXP            Exponential function for base e =&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              2.7182818284590452&lt;/P&gt;&lt;P&gt;               LOG            Natural logarithm (i.e. base e) of a positive&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOG10          Logarithm of x for base 10, x &amp;gt; 0&lt;/P&gt;&lt;P&gt;               SQRT           Square root of a non-negative number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  String functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STRLEN         Length of a string up to the last non-blank&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              character (i.e. the occupied length)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Function expressions consist of three parts:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Function identifier directly followed by an opening&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  parenthesis&lt;/P&gt;&lt;P&gt;               2. Argument&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Closing parenthesis&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All parts of an expression, particularly any parts of a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               function expression, must be separated from each other by at&lt;/P&gt;&lt;P&gt;               least one blank.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       The following statements, especially the arithmetic&lt;/P&gt;&lt;P&gt;               expressions, are syntactically correct:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: I1 TYPE I, I2 TYPE I, I3 TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     F1 TYPE F, F2 TYPE F,&lt;/P&gt;&lt;P&gt;                     WORD1(10), WORD2(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F1 = ( I1 + EXP( F2 ) ) * I2 / SIN( 3 - I3 ).&lt;/P&gt;&lt;P&gt;               COMPUTE F1 = SQRT( SQRT( ( I1 + I2 ) * I3 ) + F2 ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I1 = STRLEN( WORD1 ) + STRLEN( WORD2 ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. When used in calculations, the amount of CPU time needed&lt;/P&gt;&lt;P&gt;                  depends on the data type. In very simple terms, type I is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the cheapest, type F needs longer and type P is the most&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  expensive.&lt;/P&gt;&lt;P&gt;                  Normally, packed numbers arithmetic is used to evaluate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  arithmetic expressions. If, however, the expression contains&lt;/P&gt;&lt;P&gt;                  a floating point function, or there is at least one type F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  operand, or the result field is type F, floating point&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  arithmetic is used instead for the entire expression. On the&lt;/P&gt;&lt;P&gt;                  other hand, if only type I fields or date and time fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur (see below), the calculation involves integer&lt;/P&gt;&lt;P&gt;                  operations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. You can also perform calculations on numeric fields other&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than type I, F or P. Before executing calculations, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  necessary type conversions are performed (see MOVE). You&lt;/P&gt;&lt;P&gt;                  can, for instance, subtract one date field (type D) from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  another, in order to calculate the number of days&lt;/P&gt;&lt;P&gt;                  difference. However, for reasons of efficiency, only&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  operands of the same number type should be used in one&lt;/P&gt;&lt;P&gt;                  arithmetic expression (apart from the operands of STRLEN).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  This means that no conversion is necessary and special&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  optimization procedures can be performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Division by 0 results in termination unless the dividend is&lt;/P&gt;&lt;P&gt;                  also 0 (0 / 0). In this case, the result is 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. As a string processing command, the STRLEN operator treats&lt;/P&gt;&lt;P&gt;                  operands (regardless of type) as character strings, without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  triggering internal conversions. On the other hand, the&lt;/P&gt;&lt;P&gt;                  operands of floating point functions are converted to type F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  if they have another type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Date and time arithmetic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: DAYS TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     DATE_FROM TYPE D VALUE '19911224',&lt;/P&gt;&lt;P&gt;                     DATE_TO   TYPE D VALUE '19920101',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DAYS = DATE_TO - DATE_FROM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DAYS now contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: SECONDS TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TIME_FROM TYPE T VALUE '200000',&lt;/P&gt;&lt;P&gt;                     TIME_TO   TYPE T VALUE '020000'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SECONDS = ( TIME_TO - TIME_FROM ) MOD 86400.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SECONDS now contains the value 21600 (i.e. 6 hours). The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               operation "MOD 86400" ensures that the result is always a&lt;/P&gt;&lt;P&gt;               positive number, even if the period extends beyond midnight.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Packed numbers arithmetic:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All P fields are treated as whole numbers. Calculations&lt;/P&gt;&lt;P&gt;               involving decimal places require additional programming to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               include multiplication or division by 10, 100, ... . The&lt;/P&gt;&lt;P&gt;               DECIMALS specification with the DATA declaration is effective&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               only for output with WRITE.&lt;/P&gt;&lt;P&gt;               If, however, fixed point arithmetic is active, the DECIMALS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specification is also taken into account. In this case,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               intermediate results are calculated with maximum accuracy (31&lt;/P&gt;&lt;P&gt;               decimal places). This applies particularly to division.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For this reason, you should always set the program attribute&lt;/P&gt;&lt;P&gt;               "Fixed point arithmetic".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA P TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P = 1 / 3 * 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Without "fixed point arithmetic", P has the value 0, since "1 /&lt;/P&gt;&lt;P&gt;               3" is rounded down to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With fixed point arithmetic, P has the value 1, since the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               intermediate result of "1 / 3" is&lt;/P&gt;&lt;P&gt;               0.333333333333333333333333333333.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Floating point arithmetic&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With floating point arithmetic, you must always expect some&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               loss of accuracy through rounding errors (ABAP/4 number types).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Exponentiation&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The exponential expression "x*&lt;STRONG&gt;y" means x&lt;/STRONG&gt;x&lt;STRONG&gt;...&lt;/STRONG&gt;x y times,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               provided that y is a natural number. For any value of y, x**y&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is explained by exp(y*log(x)).&lt;/P&gt;&lt;P&gt;               Operators of the same ranke are evaluated from left to right.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Only the exponential operator, as is usual in mathematics, is&lt;/P&gt;&lt;P&gt;               evaluated from right to left. The expression "4 ** 3 ** 2" thus&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               corresponds to "4 ** ( 3 ** 2 )" and not "( 4 ** 3 ) ** 2", so&lt;/P&gt;&lt;P&gt;               the result is 262144 and not 4096.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The following resrtictions apply for the expression "X ** Y":&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If X is equal to 0, Y must be positive. If X is negative, Y&lt;/P&gt;&lt;P&gt;               must be a whole number.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          DIV and MOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The whole number division operators DIV and MOD are defined as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  ndiv = n1 DIV n2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  nmod = n1 MOD n2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               so that:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. n1 = ndiv * n2 + nmod&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ndiv is a whole number&lt;/P&gt;&lt;P&gt;               3. 0 &amp;lt;= nmod &amp;lt; |n2|&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A runtime error occurs if n2 is equal to 0 and n1 is not equal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: D1 TYPE I, D2 TYPE I, D3 TYPE I, D4 TYPE I,&lt;/P&gt;&lt;P&gt;                     M1 TYPE P DECIMALS 1, M2 TYPE P DECIMALS 1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     M3 TYPE P DECIMALS 1, M4 TYPE P DECIMALS 1,&lt;/P&gt;&lt;P&gt;                     PF1 TYPE F VALUE '+7.3',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PF2 TYPE F VALUE '+2.4',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NF1 TYPE F VALUE '-7.3',&lt;/P&gt;&lt;P&gt;                     NF2 TYPE F VALUE '-2.4',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D1 = PF1 DIV PF2.  M1 = PF1 MOD PF2.&lt;/P&gt;&lt;P&gt;               D2 = NF1 DIV PF2.  M2 = NF1 MOD PF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D3 = PF1 DIV NF2.  M3 = PF1 MOD NF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D4 = NF1 DIV NF2.  M4 = NF1 MOD NF2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variables now have the following values:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D1 =   3,  M1 = 0.1,&lt;/P&gt;&lt;P&gt;               D2 = - 4,  M2 = 2.3,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D3 = - 3,  M3 = 0.1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D4 =   4,  M4 = 2.3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Functions ABS, SIGN, CEIL, FLOOR, TRUNC, FRAC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: I TYPE I,&lt;/P&gt;&lt;P&gt;                     P TYPE P DECIMALS 2,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     M TYPE F            VALUE '-3.5',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     D TYPE P DECIMALS 1.&lt;/P&gt;&lt;P&gt;               P = ABS( M ).   " 3,5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = P.          "  4 - commercially rounded&lt;/P&gt;&lt;P&gt;               I = M.          " -4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = CEIL( P ).  "  4 - next largest whole number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = CEIL( M ).  " -3&lt;/P&gt;&lt;P&gt;               I = FLOOR( P ). "  3 - next smallest whole number&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = FLOOR( M ). " -4&lt;/P&gt;&lt;P&gt;               I = TRUNC( P ). "  3 - whole number part&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               I = TRUNC( M ). " -3&lt;/P&gt;&lt;P&gt;               D = FRAC( P ).  "  0,5 - decimal part&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D = FRAC( M ).  " -0,5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         Floating point functions&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Although the functions SIN, COS and TAN are defined for any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  numbers, the results are imprecise if the argument is&lt;/P&gt;&lt;P&gt;                  greater than about 1E8, i.e. 10**8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. The logarithm for a base other than e or 10 is calculated as&lt;/P&gt;&lt;P&gt;                  follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Logarithm of b for base a = LOG( b ) / LOG( a )&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Depending on the operands, the above operators and functions&lt;/P&gt;&lt;P&gt;               can cause runtime errors (e.g. when evaluating the logarithm&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               with a negative argument).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       ADD, SUBTRACT, MULTIPLY, DIVIDE, MOVE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONCATENATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONCATENATE f1 ... fn INTO g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... SEPARATED BY h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          As with any string processing statement, all the operands are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed here as type C fields (regardless of tyep). No&lt;/P&gt;&lt;P&gt;               internal conversion is performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Places the fields f1 to fn after g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With the fields fi (1 &amp;lt;= i &amp;lt;= n), trailing blanks are ignored,&lt;/P&gt;&lt;P&gt;               i.e. these fields are considered only to have the length&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STRLEN( fi).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The result fits in g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The result was too long for g and was only&lt;/P&gt;&lt;P&gt;                              copied to g in that length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: ONE(10)   VALUE 'John',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TWO(3)    VALUE ' F.',&lt;/P&gt;&lt;P&gt;                     THREE(10) VALUE ' Kennedy',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NAME(20).&lt;/P&gt;&lt;P&gt;               CONCATENATE ONE TWO THREE INTO NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME contains the value "John F. Kennedy".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... SEPARATED BY h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Inserts the separator h between the fields fi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, h is used in its defined length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples&lt;/P&gt;&lt;P&gt;               DATA: ONE(10)   VALUE 'John',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     TWO(3)    VALUE 'F.',&lt;/P&gt;&lt;P&gt;                     THREE(10) VALUE 'Kennedy',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     NAME(20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONCATENATE ONE TWO THREE INTO NAME SEPARATED BY SPACE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME has the value "John F. Kennedy".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA SEPARATOR(4) VALUE 'USA'.&lt;/P&gt;&lt;P&gt;               CONCATENATE SPACE ONE TWO THREE INTO NAME&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                           SEPARATED BY SEPARATOR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Then, NAME has the value "USA JohnUSA F.USA Ke".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return value of SY-SUBRC is set to 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SPLIT, SHIFT, REPLACE, TRANSLATE, CONDENSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You are recommended to use the key word CONCATENATE rather than&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               your own constructions because it is safer, more efficient and&lt;/P&gt;&lt;P&gt;               clearer. The runtime required to append two 30-byte fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               amounts to approx. 14 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONDENSE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONDENSE c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... NO-GAPS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          As with any string processing statement, all the operands are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processed here as type C fields (regardless of tyep). No&lt;/P&gt;&lt;P&gt;               internal conversion is performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Shifts the contents of the field c to the left, so that each&lt;/P&gt;&lt;P&gt;               word is separated by exactly one blank.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAME,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       TITLE(8),       VALUE 'Dr.',&lt;/P&gt;&lt;P&gt;                       FIRST_NAME(10), VALUE 'Michael',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SURNAME(10),    VALUE 'Hofmann',&lt;/P&gt;&lt;P&gt;                     END   OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONDENSE NAME.&lt;/P&gt;&lt;P&gt;               WRITE NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               produces the output:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 Dr. Michael Hofmann&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... NO-GAPS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Suppresses all blanks from the field c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAME,&lt;/P&gt;&lt;P&gt;                       TITLE(8),       VALUE 'Dr.',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIRST_NAME(10), VALUE 'Michael',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       SURNAME(10),   VALUE 'Hofmann',&lt;/P&gt;&lt;P&gt;                     END   OF NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONDENSE NAME NO-GAPS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of NAME is now "Dr.MichaelHofmann".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Since the field string NAME is interpreted and handled like a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type C field, the CONDENSE statement treats it as a whole and&lt;/P&gt;&lt;P&gt;               ignores any sub-fields. The contents of the component field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               would therefore now be as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME-TITLE       = 'Dr.Micha'&lt;/P&gt;&lt;P&gt;               NAME-FIRST_NAME  = 'elHofmann  '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               NAME-SURNAME     = '          '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Do not use CONDENSE to manipulate field strings that include&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields not of type C. This could result in these component&lt;/P&gt;&lt;P&gt;               fields containing characters of a different (i.e. incorrect)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SHIFT, CONCATENATE, REPLACE, SPLIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to condense three fields is about 20 msn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (standardized micooseconds). The variant ... NO-GAPS needs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               about 12 msn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONSTANTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CONSTANTS c.     ... VALUE [ val | IS INITIAL ].&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CONSTANTS c(len) ... VALUE [ val | IS INITIAL ].&lt;/P&gt;&lt;P&gt;               3. CONSTANTS: BEGIN OF crec,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                               ...&lt;/P&gt;&lt;P&gt;                             END   OF crec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The CONSTANTS statement defines global and local constants.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Constants allow you to read statically declared data objects.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               They always have a particular data type. Data types and data&lt;/P&gt;&lt;P&gt;               objects are essential components of the ABAP/4 type concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In contrast to variables defined with the DATA statement, you&lt;/P&gt;&lt;P&gt;               cannot change the value of a constant once it has been defined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Apart from the additions ... TYPE typ OCCURS n, ... LIKE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1OCCURS n and WITH HEADER LINE, all the additions used with&lt;/P&gt;&lt;P&gt;               the DATA statement are allowed. However, in contrast to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA statement, the addition ... VALUE val or VALUE IS INITIAL&lt;/P&gt;&lt;P&gt;               obligatory with variants 1 and 2. See additions with DATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS  CHAR1 VALUE 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS  INT   TYPE I VALUE 99.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONSTANTS: BEGIN OF CONST_REC,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            C(2) TYPE I VALUE 'XX',&lt;/P&gt;&lt;P&gt;                            N(2) TYPE N VALUE '12',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            X    TYPE X VALUE 'FF',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            I    TYPE I VALUE 99,&lt;/P&gt;&lt;P&gt;                            P    TYPE P VALUE 99,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            F    TYPE F VALUE '9.99E9',&lt;/P&gt;&lt;P&gt;                            D    TYPE D VALUE '19950101',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                            T    TYPE T VALUE '235959',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          END OF CONST_REC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONTINUE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTINUE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Within loop structures like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  DO     ... ENDDO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  WHILE  ... ENDWHILE&lt;/P&gt;&lt;P&gt;               -  LOOP   ... ENDLOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  SELECT ... ENDSELECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONTINUE terminates the current loop pass, returns the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               processing to the beginning of the loop and starts the next&lt;/P&gt;&lt;P&gt;               loop pass, if there is one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       DO loop: Omit an area (10 ... 20)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DO 100 TIMES.&lt;/P&gt;&lt;P&gt;                 IF SY-INDEX &amp;gt;= 10 AND SY-INDEX &amp;lt;= 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   CONTINUE.&lt;/P&gt;&lt;P&gt;                 ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ...&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       CHECK, EXIT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONTROLS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTROLS ctrl TYPE ctrl_type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines a control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A control defines an ABAP/4 runtime object which displays data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in a particular visual format, depending on the type. It offers&lt;/P&gt;&lt;P&gt;               the user standard processing options.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, the following types of control are supported:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Table control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       REFRESH CONTROL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ABAP/4 table control&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CONTROLS ctrl TYPE TABLEVIEW USING SCREEN scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates a table control ctrl of the type TABLEVIEW. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reference screen for the initialization is the screen scr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Area of use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The table control (referred to here as TC ) facilitates the&lt;/P&gt;&lt;P&gt;               display and entry of one-line, tabular data in dialog&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transactions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The functional scope has been defined so that you can implement&lt;/P&gt;&lt;P&gt;               many typical set operations usually handled by an elementary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               STEP-LOOP with the standard methods of a TC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Functional scope&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Resizeable table grid for displaying and editing data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Column width and column position modifiable by user and by&lt;/P&gt;&lt;P&gt;                  program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Storing and loading of user-specific column layout.&lt;/P&gt;&lt;P&gt;               -  Selection column for line selection with color selection&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Variable column headers as pushbuttons for column selection.&lt;/P&gt;&lt;P&gt;               -  Simple selection, multiple selection, Select/deselect all.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Scrolling functions (horizontal and vertical) via scroll&lt;/P&gt;&lt;P&gt;                  bar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Fixing of any number of key columns.&lt;/P&gt;&lt;P&gt;               -  Setting attributes for each cell at runtime.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Programming&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data exchange between the application and the SAPgui is&lt;/P&gt;&lt;P&gt;               achieved with a STEP-LOOP, i.e. an ABAP/4 module is called to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               transfer data for each page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Processing without an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS BEFORE OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pbo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS AFTER INPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pai.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In this case, the module ctrl_pbo OUTPUT is called once for&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               each output line before the screen is displayed, in order to&lt;/P&gt;&lt;P&gt;               fill the output fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               After the user has entered data on the screen, the module&lt;/P&gt;&lt;P&gt;               ctrl_pai INPUT is executed to check the input and copy the new&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Processing with an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS BEFORE OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LOOP AT itab WITH CONTROL ctrl CURSOR ctrl-CURRENT_LINE.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PROCESS AFTER INPUT.&lt;/P&gt;&lt;P&gt;               LOOP AT itab WITH CONTROL ctrl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 MODULE ctrl_pai.&lt;/P&gt;&lt;P&gt;               ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Here, the system fills the output fields before displaying the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               screen by reading the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the user has entered data, the module ctrl_pai INPUT must&lt;/P&gt;&lt;P&gt;               be executed to check the input and to refresh the contents of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the internal table.&lt;/P&gt;&lt;P&gt;               Vertical scrolling with the scroll bar is followed by the event&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PAI for the displayed page. Then, cntl-TOP_LINE is increased&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and PBO is processed for the next page.&lt;/P&gt;&lt;P&gt;               Program-driven scrolling and the most of the functionality&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               described above is achieved by manipulating the control&lt;/P&gt;&lt;P&gt;               attributes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Attributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The CONTROLS statement creates a complex data object of the&lt;/P&gt;&lt;P&gt;               type CXTAB_CONTROL with the name of the control.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You maintain the initial values in the Screen Painter and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assign the screen with the initial values for a control using&lt;/P&gt;&lt;P&gt;               the addition USING SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Initialization is achieved automatically in the "1st access to&lt;/P&gt;&lt;P&gt;               the control" (setting or reading values).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use the customizing button (in the top right corner) to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               save the current setting (column widths and column positions)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and use it as the initial value for the next call.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               All the initial values can be overwritten by the program using&lt;/P&gt;&lt;P&gt;               the MOVE ... TO TC attributes statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       ctrl-fixed_cols = 2.    "2 columns fixed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of the SCREEN structure (table Cols) acts as a&lt;/P&gt;&lt;P&gt;               default value for each line of this column, but within LOOP ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDLOOP (flow logic), it can be overwritten by LOOP AT SCREEN /&lt;/P&gt;&lt;P&gt;               MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With the attributes listed below, you should be aware of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LINES          This must always be set as the only attribute if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              you are not using LOOP AT itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TOP_LINE       Also set by the SAPgui through the vertical&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              scroll bar slider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CURRENT_LINE   Read only, set by the system (TOP_LINE +&lt;/P&gt;&lt;P&gt;                              SY-STEPL - 1)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LEFT_COL       Also set by the SAPgui through the horizontal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              scroll bar slider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLS-INDEX     Also set by the SAPgui after moving columns.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               COLS-SELECTED  Also set by the SAPgui after column selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When displaying the control, the system uses the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contents when the event DCO occurs (i.e. after all PBO modules&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               have run). The modified values (brought about by the user&lt;/P&gt;&lt;P&gt;               making changes on the screen) are set immediately after DCI&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (i.e. before the first PAI module runs).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CONVERT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. CONVERT DATE f1 INTO INVERTED-DATE f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. CONVERT INVERTED-DATE f1 INTO DATE f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Allows conversion between different formats which do not have&lt;/P&gt;&lt;P&gt;               their own type (see also MOVE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field f1 is converted from the source format to the target&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               format and placed in f2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               At present, the following formats are supported:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DATE          ==&amp;gt; INVERTED-DATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. INVERTED-DATE ==&amp;gt; DATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Both formats form the nine's complement of internal date&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               representation, e.g. 19950511 ==&amp;gt; 80049488 or 80049488 ==&amp;gt;&lt;/P&gt;&lt;P&gt;               19950511. In inverse date format, the most recent date has the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               lowest numerical value. This is useful when sorting date&lt;/P&gt;&lt;P&gt;               specifications.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The technique of modifying the sequence of dates by inverting&lt;/P&gt;&lt;P&gt;               the internal date format is only used in very rare cases. For&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               example, you can sort internal tables in ascending or&lt;/P&gt;&lt;P&gt;               descending date order much more elegantly with the additons ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ASCENDING bzw. ... DESCENDING of the SORT statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA DATE_INV LIKE SY-DATUM.&lt;/P&gt;&lt;P&gt;               CONVERT DATE SY-DATUM INTO INVERTED-DATE DATE_INV.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If, for example, the internal representation of 11.05.95 in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-DATUM is 19950511, the value of DATE_INV after execution of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the CONVERT statement is 80049488.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  CONVERT_ILLEGAL_CONVERSION: Conversion not possible due to&lt;/P&gt;&lt;P&gt;                  incorrect field length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CREATE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    CREATE OBJECT obj class.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... LANGUAGE langu&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Generates an object of the class class.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To address an OLE automation server (e.g. EXCEL) from ABAP/4,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the server must be registered with SAP. The transaction SOLE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               allows you to assign an automation server to a class.&lt;/P&gt;&lt;P&gt;               The CREATE statement generates the initial object and this can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               be processed further with the relevant key words.&lt;/P&gt;&lt;P&gt;               The return code value of SY-SUBRC indicates the result of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               generation:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0: Object successfully generated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 1: SAPGUI communication error.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 2: SAPGUI function call error. The OLE function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              modules are implemented only under Windows.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 3: The OLE API call resulted in an error; this is&lt;/P&gt;&lt;P&gt;                              possibly a storage space problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4: The object is not registered with SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... LANGUAGE langu&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines the language chosen for method and attribute names&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the object class.&lt;/P&gt;&lt;P&gt;               If no specification is made, English is the default.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CREATE OBJECT belongs to a group of key words which allow you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to process external objects with ABAP/4. At present, only the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               object model OLE2 is supported, i.e. all objects must be of&lt;/P&gt;&lt;P&gt;               type OLE2_OBJECT. This type and other necessary data are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               defined in the include program OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Generate an EXCEL object.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               INCLUDE OLE2INCL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA EXCEL TYPE OLE2_OBJECT.&lt;/P&gt;&lt;P&gt;               CREATE OBJECT EXCEL 'Excel.Application'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       SET PROPERTY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               GET PROPERTY&lt;/P&gt;&lt;P&gt;               CALL METHOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FREE OBJECT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This statement is not supported in the R/3 System. Use the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               following function modules instead:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CONVERT_TO_FOREIGN_CURRENCY&lt;/P&gt;&lt;P&gt;               CONVERT_TO_LOCAL_CURRENCY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.DATA f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2.DATA f(len).&lt;/P&gt;&lt;P&gt;               3.DATA: BEGIN OF rec,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;                        END   OF rec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DATA: BEGIN OF itab OCCURS n,&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        END   OF itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               5. DATA: BEGIN OF COMMON PART c,&lt;/P&gt;&lt;P&gt;                          ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        END   OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines global and local variables. Variables allow you to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               address declared data objects. They always have a particular&lt;/P&gt;&lt;P&gt;               data type. Data types and data objects are important components&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of the ABAP/4 type concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DATA f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... LIKE f1&lt;/P&gt;&lt;P&gt;               3. ... TYPE typ OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... LIKE f1 OCCURS n&lt;/P&gt;&lt;P&gt;               5. ... TYPE LINE OF itabtyp&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... LIKE LINE OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               7. ... VALUE lit&lt;/P&gt;&lt;P&gt;               8. ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               9. ... WITH HEADER LINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the internal field f in its standard length. If you do&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not specify the type (using the addition TYPE), a field of type&lt;/P&gt;&lt;P&gt;               C is assumed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field f can be up to 30 characters long. You can use any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               characters you like except the special characters '(', ')',&lt;/P&gt;&lt;P&gt;               '+', '-', ',' and ':'. Numeric characters are allowed but the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field name may not consist of numbers alone.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SPACE is a reserved word and therefore cannot be used. Also,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the field name cannot be the same as one of the additional&lt;/P&gt;&lt;P&gt;               parameters of the introductory key word (e.g. PERFORM SUB USING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CHANGING.).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Recommendations for field names:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Always use a letter as the first character.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. Use the underscore to join together words which are part of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the same name (e.g. NEW_PRODUCT). The hyphen should not be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  used here, since it is reserved for the names of field&lt;/P&gt;&lt;P&gt;                  string components (see below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... TYPE typ.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates a field f of the type typ. You can use either one of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the predefined types listed below or one of your own types&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               which you define with TYPES.&lt;/P&gt;&lt;P&gt;               The standard length (SL) of the field depends on the type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type  Description             SL  Initial value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               C     Text (character)        1   Blank&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               N     Numeric text            1   '00...0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               D     Date (YYYYMMDD)         8   '00000000'&lt;/P&gt;&lt;P&gt;               T     Time (HHMMSS)           6   '000000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               X     Hexadecimal             1   X'00'&lt;/P&gt;&lt;P&gt;               I     Whole number (integer)  4   0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P     Packed number           8   0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F     Floating point no.      8   '0.0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA NUMBER TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Creates the field NUMBER as type I. You can also use it in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               program, particularly if you want to assign number values and&lt;/P&gt;&lt;P&gt;               perform calculations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  The data type I is the whole number type on which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  hardware is based. Its value range is from -2*&lt;STRONG&gt;31 to 2&lt;/STRONG&gt;*31-1&lt;/P&gt;&lt;P&gt;                  (from -2.147.483.648 to 2.147.483.647).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  You use type P for fields containing monetary amounts, but&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type I is more suitable for number fields, index fields,&lt;/P&gt;&lt;P&gt;                  specifying positions and so forth.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You can use type F for positive and negative numbers other&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  than zero in the range from 1E-307 to 1E+308 with a degree&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  of accuracy up to 15 decimal places. (The ABAP/4 processor&lt;/P&gt;&lt;P&gt;                  always uses the floating point operations of the hardware in&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  question rather than standardizing them.) Floating point&lt;/P&gt;&lt;P&gt;                  literals must be enclosed in quotation marks. The standard&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  output length is 22.&lt;/P&gt;&lt;P&gt;                  Entries in type F fields may be formatted in any of the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  following ways:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  As a decimal number with or without sign and with or without&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  a decimal point.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  In the form &amp;lt;mantissa&amp;gt;e&amp;lt;exponent&amp;gt;, where you specify the&lt;/P&gt;&lt;P&gt;                  mantissa as above and the exponent with or without a sign.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (Examples of floating point literals: '1', '-12.34567',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  '-765E-04', '1234E5', '&lt;EM&gt;12E&lt;/EM&gt;34', '+12.3E-4'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Since floating point arithmetic is fast on our hardware&lt;/P&gt;&lt;P&gt;                  platforms, you should use it when you need a greater value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  range and you are able to tolerate rounding errors. Rounding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  errors may occur when converting the external (decimal)&lt;/P&gt;&lt;P&gt;                  format to the corresponding internal format (base 2 or 16)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or vice-versa (ABAP/4 number types).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LIKE f1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the field f with the same field attributes as the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               F1 which is already known. Any data objects are valid (fields,&lt;/P&gt;&lt;P&gt;               parameters, structures, ...) as long as types have been&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               assigned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               f1 can be any Dictionary reference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TABLE_INDEX LIKE SY-TABIX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field TABLE_INDEX now has the same attributes as SY-TABIX&lt;/P&gt;&lt;P&gt;               (the index for internal tables).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This addition is often useful, since the ABAP/4 runtime system&lt;/P&gt;&lt;P&gt;               performs type changes on fields automatically. Any unnecessary&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and/or unwanted conversions are thus avoided.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TYPE typ OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines an internal table without header line. Such a table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               consists of any number of table lines with the type typ.&lt;/P&gt;&lt;P&gt;               To fill and edit this table, you can use statements like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND, READ TABLE, LOOP and SORT.&lt;/P&gt;&lt;P&gt;               The OCCURS parameter n defines how many tables lines are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               created initially. If necessary, you can increase the size&lt;/P&gt;&lt;P&gt;               later. Otherwise, the OCCURS parameter is of no significance,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               apart from the exception that applies with APPEND SORTED BY.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TYPES: BEGIN OF LINE_TYPE,&lt;/P&gt;&lt;P&gt;                        NAME(20) TYPE C,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        AGE      TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      END OF LINE_TYPE.&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS    TYPE LINE_TYPE OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      PERSONS_WA TYPE LINE_TYPE.&lt;/P&gt;&lt;P&gt;               PERSONS_WA-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-AGE  = 25.&lt;/P&gt;&lt;P&gt;               APPEND PERSONS_WA TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS_WA-AGE  = 22.&lt;/P&gt;&lt;P&gt;               APPEND PERSONS_WA TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table PERSONS now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Access to table entries not in main memory takes much longer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               On the other hand, there is not enough space in main memory to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               hold such large tables because the roll area is resticted (see&lt;/P&gt;&lt;P&gt;               above).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... LIKE f1 OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines an internal table without header line. Such a table&lt;/P&gt;&lt;P&gt;               consists of any number of table lines with the structure as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specified by the data object f1. Processing is the same as for&lt;/P&gt;&lt;P&gt;               addition 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF PERSON,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(20),&lt;/P&gt;&lt;P&gt;                        AGE TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                      END OF PERSON.&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS LIKE PERSON OCCURS 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSON TO PERSONS.&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 22.&lt;/P&gt;&lt;P&gt;               APPEND PERSON TO PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table PERSONS now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... TYPE LINE OF itabtype&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The specified type itabtyp must be an internal table type. This&lt;/P&gt;&lt;P&gt;               operation creates a data object with the same line type as the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table type specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TYPES TAB_TYP TYPE I OCCURS 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TAB_WA TYPE LINE OF TAB_TYP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data object TAB_WA now has the same attributes as a line of&lt;/P&gt;&lt;P&gt;               the table type TAB_TYP and thus the type I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... LIKE LINE OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The data object tab must be an internal table with or without a&lt;/P&gt;&lt;P&gt;               header line. This operation creates a data object with the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line type as the table specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA TAB TYP TYPE I OCCURS 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA TAB_WA TYPE LINE OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The data object TAB_WA now has the same attributes as a line of&lt;/P&gt;&lt;P&gt;               the table TAB and thus the type I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... VALUE lit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The initial value of the field f is the literal lit instead of&lt;/P&gt;&lt;P&gt;               that defined in the table above. You can also specify a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               constant or even use  IS INITIAL. In the latter case, the field&lt;/P&gt;&lt;P&gt;               is preset to the type-specific initial value. This form is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               particularly important in connection with the CONSTANTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement which always requires you to use the addition VALUES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA NUMBER      TYPE I        VALUE 123,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    FLAG                      VALUE 'X',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                    TABLE_INDEX LIKE SY-TABIX VALUE 45.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When created, the field NUMBER of type I contains 123 rather&lt;/P&gt;&lt;P&gt;               than the expected initial value of 0. The newly created field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FLAG of type C (length 1) contains 'X', while TABLE_INDEX&lt;/P&gt;&lt;P&gt;               contains 45, since the system field SY-TABIX is a numeric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 8    ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Only makes sense with field type P. When you perform&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               calculations and on output, the field has n decimal decimal&lt;/P&gt;&lt;P&gt;               places, where n is a number between 0 and 14.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the case of newly generated programs, you normally activate&lt;/P&gt;&lt;P&gt;               fixed point arithmetic in the attributes. If it is not set, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DECIMALS specification is taken into account on output, but not&lt;/P&gt;&lt;P&gt;               when performing calculations. This means that the programmer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must take care of any decimal point calculations by multiplying&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or dividing by powers of ten. (see COMPUTE)&lt;/P&gt;&lt;P&gt;               Fixed point arithmetic should always be active when you are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               performing calculations, since this enables intermediate&lt;/P&gt;&lt;P&gt;               results (for division) to be calculated as accurately as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               possible (in this case, to 31 decimal places).&lt;/P&gt;&lt;P&gt;               To decide whether you should use the fixed point type P or the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               floating point type F, see "ABAP/4 number types".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 9    ... WITH HEADER LINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        You can only use this addition with table types. When you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specify WITH HEADER LINE, you create a header line with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               same name type as a table line in addition to the table. With&lt;/P&gt;&lt;P&gt;               non-table operations (e.g. MOVE), the name f refers to this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               header line. With table operations (e.g. APPEND,&lt;/P&gt;&lt;P&gt;               the name f refers to the table or the table and header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The notation f[] always denotes the table. The result of this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               expression is a table without a header line and can be used as&lt;/P&gt;&lt;P&gt;               such.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA:  BEGIN OF PERSON_TYPE,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        NAME(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        AGE TYPE I,&lt;/P&gt;&lt;P&gt;                      END OF PERSON_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA:  PERSONS LIKE PERSON_TYPE OCCURS 20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-NAME = 'Gabriela'&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 22.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete header line&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;               CLEAR PERSONS[].&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DATA f(len).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               As for variant 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Creates the field f in the length len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can use this variant only for fields of type C, N, P and X.&lt;/P&gt;&lt;P&gt;               Any other field types must have their standard lengths (see&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table under effect of variant 1).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The lengths allowed depend on the field type:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Type  Allowed lengths&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               C     1 - 65535&lt;/P&gt;&lt;P&gt;               N     1 - 65535&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               P     1 - 16&lt;/P&gt;&lt;P&gt;               X     1 - 65535&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Each byte can contain (one character or) two decimal or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               hexadecimal digits. Since one place in type P fields is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               reserved for the sign, a type P field of length 3 can contain 5&lt;/P&gt;&lt;P&gt;               digits, whereas a type X field of length 3 can hold 6 digits.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Both have an output length of 6.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3      DATA: BEGIN OF rec,&lt;/P&gt;&lt;P&gt;                       ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF rec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines the field string rec which groups together all the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               fields defined for the field string rec between "BEGIN OF REC"&lt;/P&gt;&lt;P&gt;               and "END OF rec". Each field carries the prefix "rec-". Field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               strings can be nested to any depth. See Data objects.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When a field string needs the same fields as an already defined&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               field string in addition to its own fields, you can include&lt;/P&gt;&lt;P&gt;               these fields in the field string with INCLUDE STRUCTURE. If no&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               additional fields are needed, it is better to use LIKE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSON,&lt;/P&gt;&lt;P&gt;                       NAME(20) VALUE 'May',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AGE TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF PERSON.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSON-AGE  = 35.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The field PERSON-NAME now contains the contents "May".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSON1,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FIRSTNAME(20) VALUE 'Michael'.&lt;/P&gt;&lt;P&gt;                       INCLUDE STRUCTURE PERSON.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA  END   OF PERSON1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  If you list a field string as a field, this field ("rec") is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  type C, but you should not use a field string like a field,&lt;/P&gt;&lt;P&gt;                  if the field string contains number fields (i.e. type I, F&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  or F). The length of rec is derived from the sum of the&lt;/P&gt;&lt;P&gt;                  lengths of all components of rec. However, since some fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (for example, to the limit of a word), they include padding&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  fields that also contribute to the overall length of rec;&lt;/P&gt;&lt;P&gt;                  for this reason, you cannot use the lengths of fields that&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  occur before a particular field string component to&lt;/P&gt;&lt;P&gt;                  calculate its offset to the start of the field string. On&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the other hand, you can guarantee that two fields with the&lt;/P&gt;&lt;P&gt;                  same structure always have the same structure (even where&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  padding fields are concerned). This means that you can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  compare and assign fields directly below each other (with&lt;/P&gt;&lt;P&gt;                  MOVE, IF, etc.) and do not have to work field by field (e.g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  with MOVE-CORRESPONDING).&lt;/P&gt;&lt;P&gt;                  INCLUDEs are aligned according to maxumum alignment of their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  components. This applies both to INCLUDEs in ABAP/4 programs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  and also INCLUDEs in Dictionary structures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The TABLES statement automatically defines a field string&lt;/P&gt;&lt;P&gt;                  (the work area. Even the header line belonging to an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  internal table (see below) is a field string.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DATA: BEGIN OF itab OCCURS n,&lt;/P&gt;&lt;P&gt;                       ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                ... VALID BETWEEN f1 AND f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               An internal table includes a header line, which is a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               string containing the fields defined between "BEGIN OF itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               OCCURS n" and "END OF itab" (see variant 3), and any number of&lt;/P&gt;&lt;P&gt;               table lines with the same structure as the header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To fill and edit an internal table, you use various statements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               such as APPEND, READ TABLE, LOOP and SORT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The OCCURS parameter n determines how many table lines are held&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               in main storage (the roll area). If you also generate table&lt;/P&gt;&lt;P&gt;               entries, these are rolled out either to a main storage buffer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or to disk (the paging area).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF PERSONS OCCURS 20,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(20),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AGE TYPE I,&lt;/P&gt;&lt;P&gt;                     END   OF PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS-NAME = 'Michael'.&lt;/P&gt;&lt;P&gt;               PERSONS-AGE  = 25.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS-NAME = 'Gabriela'.&lt;/P&gt;&lt;P&gt;               PERSONS-AGE  = 22.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               APPEND PERSONS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The internal table now consists of two table entries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               PERSONS also includes the header line (work area) through which&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               all operations on the actual table pass.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Access to table entries not in main storage is considerably&lt;/P&gt;&lt;P&gt;               slower. Also, main storage cannot hold large tables in their&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entirety, since the size of the roll area is restricted (see&lt;/P&gt;&lt;P&gt;               above).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... VALID BETWEEN f1 AND f2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Can appear only after "END OF itab".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The sub-fields f1 and f2 of the internal table itab must have&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the line-related validity range (see PROVIDE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     DATA: BEGIN OF COMMON PART c,&lt;/P&gt;&lt;P&gt;                       .....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines one or more common data areas in programs linked by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               external PERFORM calls. If only one common data area exists,&lt;/P&gt;&lt;P&gt;               you can omit the name c. There may be just one unnamed COMMON&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area or one or more named COMMON areas. You assign named COMMON&lt;/P&gt;&lt;P&gt;               areas to each other by name. The structure of data areas must&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               always be the same for both the calling and the called program&lt;/P&gt;&lt;P&gt;               (otherwise, the program terminates with an error message at&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               runtime).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  The table work areas are always in the common data area.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  In general, you define the area created as COMMON with a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  common INCLUDE STRUCTURE. Occasionally, you use a INCLUDE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  report which contains precisely the definition of the COMMON&lt;/P&gt;&lt;P&gt;                  PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  Field symbols cannot belong to a common data area, even if&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  the FIELD-SYMBOLS statement lies between DATA BEGIN OF&lt;/P&gt;&lt;P&gt;                  COMMON PART and DATA END OF COMMON PART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DEFINE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DEFINE macro.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Defines a program component (macro) under the name macro. It&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must consist only of ABAP/4 statements and is expanded at&lt;/P&gt;&lt;P&gt;               compilation time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               A macro should always be concluded with the END-OF-DEFINITION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               In the definition, you can use &amp;amp;n to reference positional&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameters (n = 0 .. 9). When the macro is called, &amp;amp;n is&lt;/P&gt;&lt;P&gt;               replaced by the n-th actual parameter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Define a macro called "++" for use in the program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DEFINE ++.&lt;/P&gt;&lt;P&gt;               ADD 1 TO &amp;amp;1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: NUMBER TYPE I VALUE 1.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ++ NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         -  In general, it is better to use subroutines (FORM, FUNCTION)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  rather than macros because subroutines - unlike macros - are&lt;/P&gt;&lt;P&gt;                  supported by all the ABAP/4 Development Workbench tools&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (including debugging, runtime analysis, runtime error&lt;/P&gt;&lt;P&gt;                  handling, ...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  You cannot nest macro definitions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete from a database table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE FROM dbtab       WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;               - DELETE dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE *dbtab.&lt;/P&gt;&lt;P&gt;                 DELETE (dbtabname) ... .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE dbtab       FROM TABLE itab.&lt;/P&gt;&lt;P&gt;                 DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE dbtab  VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete from an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;               - DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;               - DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE REPORT prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete text elements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE TEXTPOOL prog LANGUAGE lg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a data cluster&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE FROM DATABASE dbtab(ar) ...ID key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a file&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Delete a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DELETE DYNPRO f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a file&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE DATASET dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the file specified in the field dsn.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  File deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  File does not exist or could not be deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              Possible reasons:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              1) The file does not exist.&lt;/P&gt;&lt;P&gt;                              2) The file is a directory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              3) The R/3 System has no search authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 for a component of the file name.&lt;/P&gt;&lt;P&gt;                              4) The R/3 System has no search authorization&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 for the directory which contains the file.&lt;/P&gt;&lt;P&gt;                              5) A component of the search path is not a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 directory.&lt;/P&gt;&lt;P&gt;                              6) The file is a symbolic link which cannot be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 resolved (endless loop ?).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              7) The file is a program which is currently&lt;/P&gt;&lt;P&gt;                                 running.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       OPEN DATASET, READ DATASET, CLOSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - Delete from a database table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.  DELETE FROM dbtab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;               2.  DELETE dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE *dbtab.&lt;/P&gt;&lt;P&gt;                   DELETE (dbtabname) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3.  DELETE dbtab FROM TABLE itab.&lt;/P&gt;&lt;P&gt;                   DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4.  DELETE dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes lines in a database table. You can specify the name of&lt;/P&gt;&lt;P&gt;               the database table either in the program itself with DELETE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FROM dbtab ... or at runtime as the contents of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               dbtabname with DELETE FROM (dbtabname) .... In both cases, the&lt;/P&gt;&lt;P&gt;               database table must be known in the ABAP/4 Dictionary. If you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               specify the name in the program, there must also be an&lt;/P&gt;&lt;P&gt;               appropriate TABLES statement. Only data from the current client&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is usually deleted. You can delete data using a view only if&lt;/P&gt;&lt;P&gt;               the view refers to a single table and was created in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary with the maintenance status "No restriction".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE belongs to the Open SQL command set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The DELETE statement does not perform authorization checks: You&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               must program these yourself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DELETE FROM dbtab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM (dbtabname) WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes lines in a database table that satisfy the WHERE clause&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition. With this variant, specification of a WHERE&lt;/P&gt;&lt;P&gt;               condition is obligatory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the statement has been executed, the system field SY-DBCNT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               contains the number of deleted lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one line was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines were deleted, since no line was&lt;/P&gt;&lt;P&gt;                              selected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all bookings for the Lufthansa flight 0400 on 28.02.1995&lt;/P&gt;&lt;P&gt;               (in the current client):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM SBOOK WHERE CARRID = 'LH'       AND&lt;/P&gt;&lt;P&gt;                                       CONNID = '0400'     AND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                       FLDATE = '19950228'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          To delete all the lines in a table, you must specify a WHERE&lt;/P&gt;&lt;P&gt;               condition that is true for all lines. You can achieve this with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... WHERE f IN itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If the internal table itab is empty, such a condition would&lt;/P&gt;&lt;P&gt;               select all lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Switches off automatic client handling. This allows you to&lt;/P&gt;&lt;P&gt;               delete data across all clients in the case of client-specific&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               tables. The client field is then treated like a normal table&lt;/P&gt;&lt;P&gt;               field, for which you can formulate suitable conditions in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               WHERE clause.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You must specify the addition CLIENT SPECIFIED immediately&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the name of the database table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DELETE dbtab.&lt;/P&gt;&lt;P&gt;               DELETE *dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE (dbtabname) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... FROM wa&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        These are SAP-specific short forms used to delete a single line&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a database table. If the name of the database table is&lt;/P&gt;&lt;P&gt;               specified in the program, the primary key of the line to be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               deleted is taken from the specified work area - dbtab or&lt;/P&gt;&lt;P&gt;               *dbtab. If the name of the database table is not determined&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               until runtime (DELETE (dbtabname) ...), the addition ... FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               wa is obligatory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               When the statement has been executed, the system field SY-DBCNT&lt;/P&gt;&lt;P&gt;               contains the number of deleted lines (0 or 1).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The line was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines could be deleted, since no line exists&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              with the primary key specified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete the booking with the booking number 3 for the Lufthansa&lt;/P&gt;&lt;P&gt;               flight 0400 on 28.02.1995 (in the current client):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;               SBOOK-CARRID = 'LH'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-CONNID = '0400'.&lt;/P&gt;&lt;P&gt;               SBOOK-FLDATE = '19950228'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-BOOKID = '00000003'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE  SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... FROM wa&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Takes the primary key for the line to be deleted not from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               table work area dbtab, but from the explicitly specified work&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area wa. Here, the key values from left to right are taken from&lt;/P&gt;&lt;P&gt;               wa according to the structure of the primary key in the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               work area dbtab (see TABLES). The structure of wa is not taken&lt;/P&gt;&lt;P&gt;               into account. Therefore, the work area wa must be at least as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               wide (see DATA) as the primary key in the table work area dbtab&lt;/P&gt;&lt;P&gt;               and the alignment of the work area wa must correspond to the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               alignment of the primary key in the table work area. Otherwise,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               you get a runtime error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If a work area is not explicitly specified, the values for the&lt;/P&gt;&lt;P&gt;               line to be deleted are taken from the table work area dbtab,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               even if the statement appears in a subroutine (see FORM) or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Funktionsbaustein (see FUNCTION) where the table work area is&lt;/P&gt;&lt;P&gt;               stored in a formal parameter or a local variable of the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DELETE dbtab FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE (dbtabname) FROM TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Mass deletion: Deletes all database table lines for which the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               internal table itab contains values for the primary key fields.&lt;/P&gt;&lt;P&gt;               The lines of the internal table itab must satisfy the same&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               condition as the work area wa in addition 1 to variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The system field SY-DBCNT contains the number of deleted lines,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               i.e. the number of lines of the internal table itab for whose&lt;/P&gt;&lt;P&gt;               key values there were lines in the database table dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  All lines from itab could be used to delete&lt;/P&gt;&lt;P&gt;                              lines from dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  For at least one line of the internal table in&lt;/P&gt;&lt;P&gt;                              the database table, there was no line with the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              same primary key. All found lines are deleted..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the internal table itab is empty, SY-SUBRC and SY-DBCNT are&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... CLIENT SPECIFIED&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        As with variant 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DELETE dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE *dbtab VERSION vers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This variant is obsolete, since variants 1 - 3 allow you to&lt;/P&gt;&lt;P&gt;               specify the database table name dynamically.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes a line in a database table, the name of which is taken&lt;/P&gt;&lt;P&gt;               from the field vers at runtime. The database table must be&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               known to the ABAP/4 Dictionary and its name must conform to the&lt;/P&gt;&lt;P&gt;               following naming convention: It must begin with 'T' and can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               consist of four additional characters. The field vers must&lt;/P&gt;&lt;P&gt;               contain the table name without a leading 'T'. Only lines in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               current client are deleted. The line to be deleted is taken&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               from the statically specified table work area dbtab or *dbtab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The line was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No lines could be deleted because no line&lt;/P&gt;&lt;P&gt;                              existed with the specified primary key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE DYNPRO - delete a screen&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE DYNPRO f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the screen specified in the field f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The screen was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The screen does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The contents of f consist of the 8-character program name and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the 4-character screen number.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DELETE DYNPRO 'SAPTESTX0100'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       IMPORT DYNPRO, EXPORT DYNPRO, GENERATE DYNPRO, SYNTAX-CHECK FOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DYNPRO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a data cluster&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE FROM DATABASE dbtab(ar) ID key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... CLIENT f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the data cluster stored in the table dbtab under the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area ar (constant) and the ID key (field or literal) (EXPORT&lt;/P&gt;&lt;P&gt;               ... TO DATABASE ...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               TABLES INDX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 1,&lt;/P&gt;&lt;P&gt;                       CONT(30),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END   OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(30) TYPE C.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               EXPORT TAB FLD TO DATABASE INDX(AR) ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               You can delete this data cluster with the following statement:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE FROM DATABASE INDX(AR) ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... CLIENT f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the data cluster in the client specified in the table f&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (only with client-specific import/export databases).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES INDX.&lt;/P&gt;&lt;P&gt;               DELETE FROM DATABASE INDX(AR) CLIENT '001' ID 'TEST'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - Delete from an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;               3. DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;               5. DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes one or more lines from an internal table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The deletion of lines within a LOOP ... ENDLOOP loop is&lt;/P&gt;&lt;P&gt;               performed in a sequence of loop passes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DELETE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The current entry of the internal table itab is&lt;/P&gt;&lt;P&gt;               deleted in a LOOP loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          After deleting the current entry in an internal table in a LOOP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               loop, the effect of further update operations on the current&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry without an INDEX specification is not guaranteed and may&lt;/P&gt;&lt;P&gt;               changed in later Releases.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DELETE itab INDEX idx.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the idx entry from the internal table itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The entry does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DELETE itab FROM idx1 TO idx2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes the line area from index idx1 to idx2 from internal&lt;/P&gt;&lt;P&gt;               table itab. At least one of the two parameters FROM idx1 or TO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               idx2 should be specified. If parameter FROM is missing, the&lt;/P&gt;&lt;P&gt;               area from the start of the table to line idx2 is deleted. If&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               parameter TO is missing, the area from line idx1 to the end of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the table is deleted. Start index idx1 must be greater than 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  None of the entries were deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DELETE itab WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... FROM idx1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... TO   idx2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes all entries from internal table itab, which satisfies&lt;/P&gt;&lt;P&gt;               the condition condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one entry was deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  None of the entries were deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... FROM idx1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        The line area to be investigated is restricted to the lines up&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to index idx1. If the addition FROM idx1 is missing, a search&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               is carried out from the beginning of the table.&lt;/P&gt;&lt;P&gt;               The addition FROM must come before the WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TO   idx2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Restricts the line area to be investigated to the lines up to&lt;/P&gt;&lt;P&gt;               index idx2. If the addition TO idx2 is missing, a search is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               carried out until the end of the table.&lt;/P&gt;&lt;P&gt;               The addition TO must come before the WHERE condition.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all lines in a name table between lines 5 and 36, if the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               entry begins with one of the letters 'A' to 'C':&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF NAMETAB OCCURS 100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       NAME(30) TYPE C,       END OF NAMETAB.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE NAMETAB FROM 5 TO 36 WHERE NAME CA 'ABC'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 5     DELETE ADJACENT DUPLICATES FROM itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... COMPARING f1 f2 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. ... COMPARING ALL FIELDS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes neighboring, duplicate entries from the internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               itab. If there are n duplicate entries, the first entry is&lt;/P&gt;&lt;P&gt;               retained and the other n - 1 entries are deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Two lines are considered to be duplicated if their default keys&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  At least one duplicate exists, at least one&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              entry deleted.&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  No duplicates exist, no entry deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... COMPARING f1 f2 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Two lines of the internal table itab are considered to be&lt;/P&gt;&lt;P&gt;               duplicates if the specified fields f1, f2, .... match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... COMPARING ALL FIELDS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Two lines are considered to be duplicates if all fields of the&lt;/P&gt;&lt;P&gt;               table entries match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Notes         1. The DELETE ADJACENT DUPLICATES statement is especially&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  useful if the internal table itab is sorted by fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  (whether in ascending or descending order) which were&lt;/P&gt;&lt;P&gt;                  compared during duplicate determination. In this case, the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  deletion of neighbouring duplicates is the same as the&lt;/P&gt;&lt;P&gt;                  deletion of all duplicates.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. If a comparison criterion is only known at runtime, it can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  be specified dynamically as the content of a field name by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  using COMPARING ... (name) .... If name is blank at runtime,&lt;/P&gt;&lt;P&gt;                  the comparison criterion is ignored. If name contains an&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  invalid component name, a runtime error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. Comparison criteria - statistically or dynamically specified&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  - can be further restriced by specifying the offset and/or&lt;/P&gt;&lt;P&gt;                  length.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Performance:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. Deleting a line from an internal table incurs index&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  maintenance costs which depend on the index of the line to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  be deleted. The runtime depends on the line width of the&lt;/P&gt;&lt;P&gt;                  table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  For example, deleting a line in the middle of an internal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  table with 200 entries requires about 10 msn (standardized&lt;/P&gt;&lt;P&gt;                  microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  Deleting a range of entries with "DELETE itab FROM idx1 TO&lt;/P&gt;&lt;P&gt;                  idx2." deleting a set of entries with "DELETE itab WHERE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  ..." only incur index maintenance costs once. Compared with&lt;/P&gt;&lt;P&gt;                  a LOOP, which deletes line-by-line, this is much faster.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. To delete neighboring, duplicate entries from an internal&lt;/P&gt;&lt;P&gt;                  table, use the variant "DELETE ADJACENT DUPLICATES FROM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  itab." instead of LOOP constructions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT itab, MODIFY itab&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete a program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE REPORT prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes some components (source code, attributes, text elements&lt;/P&gt;&lt;P&gt;               and generated version) of the program specified in the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               prog.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  The program was deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  The program does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement deletes neither the variants nor the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               documentation.&lt;/P&gt;&lt;P&gt;               Normally, you should use the function module RS_DELETE_PROGRAM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               to delete a program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT REPORT, DELETE TEXTPOOL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DELETE - delete text elements&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          This statement is for internal use only.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Incompatible changes or further developments may occur at any&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               time without warning or notice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DELETE TEXTPOOL prog LANGUAGE lg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Deletes all text elements of the program specified in the field&lt;/P&gt;&lt;P&gt;               prog for the language specified in the field lg from the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               library.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               If you use the value '*' for lg, the text elements of all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               languages are deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Delete all text elements of the program PROGNAME in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               language "English":&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PROGRAM(8) VALUE 'PROGNAME'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DELETE TEXTPOOL PROGRAM LANGUAGE 'E'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       INSERT TEXTPOOL, READ TEXTPOOL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DEQUEUE is not an ABAP/4 key word (in R/3).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               To unlock resources, you must use a function module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of a field&lt;/P&gt;&lt;P&gt;               - DESCRIBE FIELD f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of an internal table&lt;/P&gt;&lt;P&gt;               - DESCRIBE TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine distance between two fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Return attributes of a list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;               - DESCRIBE LIST PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the distance between the fields f1 and f2 in f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES LFA1.&lt;/P&gt;&lt;P&gt;               DATA DIS TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE DISTANCE BETWEEN LFA1-LAND1&lt;/P&gt;&lt;P&gt;                                 AND     LFA1-NAME1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 INTO    DIS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: DIS contains the value 14, since exactly two fields lie&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               between LAND1 and NAME1, namely LNRZA (10 bytes) and LOEVM (1&lt;/P&gt;&lt;P&gt;               byte); additionally, the sub-field LAND1 is 3 bytes long.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Therefore, the start of the sub-field LAND1 is exactly 14 bytes&lt;/P&gt;&lt;P&gt;               from the start of the sub-field NAME1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - determine distance between two fields&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Determines the distance between the fields f1 and f2 and places&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the result (in bytes) in f3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Determine the distance between two components of the demo table&lt;/P&gt;&lt;P&gt;               SBOOK in the flight reservation system:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA DIST TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE DISTANCE BETWEEN SBOOK-CARRID&lt;/P&gt;&lt;P&gt;                                 AND     SBOOK-BOOKID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                                 INTO    DIST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: DIST contains the value 15 because exactly two fields,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SFLIGHT-CONNID (4 bytes) and SBOOK-FLDATE (8 bytes), lie&lt;/P&gt;&lt;P&gt;               between the SBOOK components CARRID and BOOKID; also,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SBOOK-CARRID is itself 3 bytes long. The sum of these values&lt;/P&gt;&lt;P&gt;               gives the distance between the two components in bytes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - Supply attributes of a field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE FIELD f.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Supplies the attributes of the field f. You must specify at&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               least one of the additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... LENGTH len&lt;/P&gt;&lt;P&gt;               2. ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... TYPE typ COMPONENTS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... OUTPUT-LENGTH len&lt;/P&gt;&lt;P&gt;               5. ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... EDIT MASK mask&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the length of the field f in the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: FLD(8),&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     LEN TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD LENGTH LEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: LEN contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... TYPE typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the data type of f in the field typ&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(8) TYPE N,&lt;/P&gt;&lt;P&gt;                     F_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD TYPE F_TYPE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: F_TYPE contains the value 'N'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Note  Along with the elementary data types you can specify&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               under DATA (C, N, etc.), several other data types are created&lt;/P&gt;&lt;P&gt;               either with reference to Dictionary fields or during&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               generation. These data types, which are also returned by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE, have the following type IDs:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               h              Internal table&lt;/P&gt;&lt;P&gt;               s              2-byte integer with leading sign&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               b              1-byte integer without leading sign&lt;/P&gt;&lt;P&gt;               u              Structure without internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               v              Structure containing at least one internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               For compatibility reasons, ... TYPE typ returns C rather than u&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or v with structures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... TYPE typ COMPONENTS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Similar to ... TYPE typ except that, with structures in typ, u&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or v are returned and in the number of structure components is&lt;/P&gt;&lt;P&gt;               set in n. If f is not a structure, n is set to 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Recursive processing of the pages of an ABAP/4 data structure:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORM TEST USING F.&lt;/P&gt;&lt;P&gt;                 DATA: TYP(1) TYPE C, N TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 FIELD-SYMBOLS: &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                 DO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ASSIGN COMPONENT SY-INDEX OF STRUCTURE F TO &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;                   IF SY-SUBRC &amp;lt;&amp;gt; 0. EXIT. ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   DESCRIBE FIELD &amp;lt;F&amp;gt; TYPE TYP COMPONENTS N.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   IF N &amp;gt; 0. " Equivalent is TYP = 'u' OR TYP = 'v'&lt;/P&gt;&lt;P&gt;                     PERFORM TEST USING &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ELSE.&lt;/P&gt;&lt;P&gt;                     PERFORM DO_SOMETHING USING &amp;lt;F&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                   ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 ENDDO.&lt;/P&gt;&lt;P&gt;               ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... OUTPUT-LENGTH len&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Enters the output length of the field f in the variable len.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: FLD(4) TYPE P,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     O_LEN TYPE P.&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD OUTPUT-LENGTH O_LEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: O_LEN contains the value 8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... DECIMALS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Enters the number of decimal places for the field f (defined in&lt;/P&gt;&lt;P&gt;               addition ... DECIMALS of the DATA statement or in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary) in the variable n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: FLD(8) TYPE P DECIMALS 2,&lt;/P&gt;&lt;P&gt;                     DEC TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD FLD DECIMALS DEC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Resultat: DEC contains the value 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... EDIT MASK mask&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        If the field f has a conversion routine in the ABAP/4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Dictionary, this is placed in the field mask in the form&lt;/P&gt;&lt;P&gt;               "==conv". "conv" stands for the name of the conversion routine,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               e.g. "==ALPHA" in the conversion routine "ALPHA". In this form,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               mask can then be used in the addition USING EDIT MASK mask of&lt;/P&gt;&lt;P&gt;               the WRITE statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Check whether there is a conversion routine for the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               "customer number" in the table SBOOK:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               TABLES SBOOK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: CONV_EXIT(10).&lt;/P&gt;&lt;P&gt;               DESCRIBE FIELD SBOOK-CUSTOMID EDIT MASK CONV_EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               IF CONV_EXIT &amp;lt;&amp;gt; SPACE. ... ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: CONV_EXIT contains the value "==ALPHA".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the required field is only known at runtime, this field can&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               also be assigned dynamically to a field symbol (see&lt;/P&gt;&lt;P&gt;               FIELD-SYMBOLS, ASSIGN).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - supply attributes of a list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Variants:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               2. DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;               3. DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. DESCRIBE LIST PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of a list. All variants have the&lt;/P&gt;&lt;P&gt;               addition ... INDEX idx allowing you to determine the attributes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               of a particular list level (SY-LSIND = 0,1,2,3,... ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          You should use this key word only in exceptional cases (e.g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               when editing an 'anonymous' list in a program other than that&lt;/P&gt;&lt;P&gt;               which generated the list). In all other cases, you should save&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the relevant values when you generate the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Take care when attempting to retrieve the list attributes being&lt;/P&gt;&lt;P&gt;               set up (...INDEX SY-LSIND), since some attributes (number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pages, number of lines, ...) may not have been updated yet.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 1     DESCRIBE LIST NUMBER OF LINES lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: List does not exist (only with the addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              INDEX)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the number of lines in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LN LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST NUMBER OF LINES LN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable LN now contains the number of lines in the&lt;/P&gt;&lt;P&gt;               displayed list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 2     DESCRIBE LIST NUMBER OF PAGES n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of pages in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC &amp;lt;&amp;gt; 0: List does not exist (only with the addition&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                              INDEX)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the number of pages in the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PN LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST NUMBER OF PAGES PN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable PN now contains the number of pages in the&lt;/P&gt;&lt;P&gt;               displayed list (i.e. the contents of the system field SY-PAGNO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               after the list has been generated!).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 3     DESCRIBE LIST LINE lin PAGE pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of the page for the line lin in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          In interactive reporting, line selection causes a value to be&lt;/P&gt;&lt;P&gt;               assigned to the system field SY-LILLI (absolute number of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected list line). The system field SY-CPAGE contains the&lt;/P&gt;&lt;P&gt;               page number for the first displayed line in the list. The&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               selected line does not have to belong to this page (in cases&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               where several pages are displayed at the same time). The page&lt;/P&gt;&lt;P&gt;               number may be of interest even with direct reading of lines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (see READ LINE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Line does not exist&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 8:  List does not exist&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition      ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       After line selection, determine the page number for the&lt;/P&gt;&lt;P&gt;               selected line (SY-LILLI):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: PAGENUMBER LIKE SY-PAGNO. ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               AT LINE-SELECTION.&lt;/P&gt;&lt;P&gt;                 DESCRIBE LIST LINE SY-LILLI PAGE PAGENUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The variable PAGENUMBER now contains the page number for the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               line SY-LILLI (i.e. the contents of the system field SY-PAGNO&lt;/P&gt;&lt;P&gt;               when outputting the line SY-LILLI!).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Variant 4     DESCRIBE LIST PAGE pag&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1. ... INDEX idx&lt;/P&gt;&lt;P&gt;               2. ... LINE-SIZE col&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               3. ... LINE-COUNT lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               4. ... LINES lin&lt;/P&gt;&lt;P&gt;               5. ... FIRST-LINE lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               6. ... TOP-LINES lin&lt;/P&gt;&lt;P&gt;               7. ... TITLE-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               8. ... HEAD-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               9. ... END-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the page pag in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The return code value is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 0:  OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 4:  Page does not exist&lt;/P&gt;&lt;P&gt;               SY-SUBRC = 8:  List does not exist&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Addition 1    ... INDEX idx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the list level idx (0, 1,2,3,...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... LINE-SIZE col&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the line length for the page pag (see&lt;/P&gt;&lt;P&gt;               NEW-PAGE...LINE-SIZE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 3    ... LINE-COUNT lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the permitted number of lines for the page pag (see&lt;/P&gt;&lt;P&gt;               NEW-PAGE...LINE-COUNT).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 4    ... LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output on the page pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 5    ... FIRST-LINE lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the absolute line number of the first line of the page&lt;/P&gt;&lt;P&gt;               pag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 6    ... TOP-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output by page header processing&lt;/P&gt;&lt;P&gt;               (i.e. standard title + column headers + TOP-OF-PAGE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 7    ... TITLE-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output as standard title lines by&lt;/P&gt;&lt;P&gt;               page header processing (see NEW-PAGE...NO-TITLE/WITH-TITLE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The value of TITLE-LINES is contained in TOP-LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 8    ... HEAD-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines output as column headers by page&lt;/P&gt;&lt;P&gt;               header processing (see NEW-PAGE...NO-HEADING/WITH-HEADING).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The value of HEAD-LINES is contained in TOP-LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 9    ... END-LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the number of lines reserved for end-of-page processing&lt;/P&gt;&lt;P&gt;               (see END-OF-PAGE).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example       Determine the number of lines output on the third page of the&lt;/P&gt;&lt;P&gt;               basic list (SY-LSIND = 0) in the event TOP-OF-PAGE:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: TOP TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     HEAD TYPE I,&lt;/P&gt;&lt;P&gt;                     TITLE TYPE I,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     REAL_TOP TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST INDEX 0 PAGE 3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TOP-LINES TOP&lt;/P&gt;&lt;P&gt;                        HEAD-LINES HEAD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                        TITLE-LINES TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               REAL_TOP = TOP - TITLE - HEAD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Examples      Determine the absolute number of lines in the displayed list:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LN  TYPE I,          "number of lines on a page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     FLN TYPE I,          "number of first line on a page&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     PN  TYPE I,          "number of a page&lt;/P&gt;&lt;P&gt;                     LIST_LINES TYPE I.   "total number of lines in list&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine number of last page:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST NUMBER OF PAGES PN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Determine number of first line of last page and number of lines&lt;/P&gt;&lt;P&gt;               on that page:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST PAGE PN FIRST-LINE FLN LINES LN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Number of list lines = number of first line of last page +&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               number of lines - 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               LIST_LINES = FLN + LN - 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Or: Count lines of all pages in a loop:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR LIST_LINES.&lt;/P&gt;&lt;P&gt;               DO PN TIMES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  DESCRIBE LIST PAGE SY-INDEX LINES LN.&lt;/P&gt;&lt;P&gt;                  ADD LN TO LIST_LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               or:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE LIST NUMBER OF LINES LIST_LINES.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DESCRIBE - return attributes of an internal table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DESCRIBE TABLE itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Returns the attributes of the internal table itab. You must use&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               at least one of the additions listed below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Additions:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               1.... LINES lin&lt;/P&gt;&lt;P&gt;               2.... OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 1    ... LINES lin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Places the number of filled lines of the table t in the field&lt;/P&gt;&lt;P&gt;               lin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 10,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       X,&lt;/P&gt;&lt;P&gt;                     END OF TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: LIN TYPE P.&lt;/P&gt;&lt;P&gt;               ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               CLEAR TAB. REFRESH TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               MOVE '?' TO TAB-X.&lt;/P&gt;&lt;P&gt;               APPEND TAB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE TABLE TAB LINES LIN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: LIN contains the value 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Addition 2    ... OCCURS n&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Transfers the size of the OCCURS parameter from the table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               definition to the variable n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF TAB OCCURS 10,&lt;/P&gt;&lt;P&gt;                       X,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     END OF TAB.&lt;/P&gt;&lt;P&gt;                     OCC TYPE P.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DESCRIBE TABLE TAB OCCURS OCC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Result: OCC contains the value 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          If the table is meant to accept more lines than specified by&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               the OCCURS parameter, the parameter value is roughly doubled as&lt;/P&gt;&lt;P&gt;               long as the table size remains smaller than 8 KB; this table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               area is held in the roll area. If the table exceeds the maximum&lt;/P&gt;&lt;P&gt;               permitted size, the OCCURS parameter is not increased and the&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               remaining part of the table is rolled out to the paging area&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               (see DATA).&lt;/P&gt;&lt;P&gt;               For this reason, the OCCURS value determined by the DESCRIBE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               statement may differ from that in the DATA statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The runtime required to execute the DESCRIBE TABLE statement is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               approx. 4 msn (standardized microseconds).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DETAIL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DETAIL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This key word is the same as the statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               FORMAT INTENSIFIED OFF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The latter is recommended due to better readability.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          When outputting data to a list, you also use the addition&lt;/P&gt;&lt;P&gt;               INTENSIFIED OFF of the WRITE statement to change the output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               format for single fields.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       FORMAT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DIVIDE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DIVIDE n1 BY n2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Divides the contents of n1 by n2 and places the result in n1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               This is equivalent to: n1 = n1 / n2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DATA: SUM TYPE P, NUMBER TYPE P.&lt;/P&gt;&lt;P&gt;               DIVIDE SUM BY NUMBER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          The details regarding conversions and performance given under&lt;/P&gt;&lt;P&gt;               COMPUTE apply equally to DIVIDE. Furthermore: Division by 0 is&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               not allowed, except where 0 / 0 results in 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Note          Runtime errors:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_BADDATA: P field contains no correct BCD format&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_FIELD_OVERFLOW: Result field is too small (type P)&lt;/P&gt;&lt;P&gt;               -  BCD_OVERFLOW: Overflow during arithmetic operation (type P)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  BCD_ZERODIVIDE: Division by 0 (type P)&lt;/P&gt;&lt;P&gt;               -  COMPUTE_FLOAT_ZERODIVIDE: Division by 0 (type F)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_DIV_OVERFLOW: Whole number overflow with&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                  division&lt;/P&gt;&lt;P&gt;               -  COMPUTE_INT_ZERODIVIDE: Division by 0 (type I)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Related       COMPUTE, DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; DIVIDE-CORRESPONDING&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Basic form    DIVIDE-CORRESPONDING rec1 BY rec2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Effect        Interprets rec1 and rec2 as field strings, i.e. if rec1 and&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               rec2 are tables with header lines, the statement is executed&lt;/P&gt;&lt;P&gt;               for their header lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               Searches for all sub-fields that occur both in rec1 and rec2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               and then generates, for all field pairs corresponding to the&lt;/P&gt;&lt;P&gt;               sub-fields ni, statements similar in the following form:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE rec1-ni BY rec2-ni.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               The other fields remain unchanged.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               With more complex structures, the complete names of the field&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               pairs must be identical.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Example&lt;/P&gt;&lt;P&gt;               DATA: BEGIN OF MONEY,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       VALUE_IN(20) VALUE 'German marks'.&lt;/P&gt;&lt;P&gt;                       USA TYPE I VALUE 100,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FRG TYPE I VALUE 200,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AUT TYPE I VALUE 300,&lt;/P&gt;&lt;P&gt;                     END   OF MONEY,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                     BEGIN OF CHANGE,&lt;/P&gt;&lt;P&gt;                       DESCRIPTION(30)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                           VALUE 'DM to national currency'.&lt;/P&gt;&lt;P&gt;                       USA TYPE F VALUE '1.5',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       FRG TYPE F VALUE '1.0',&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;                       AUT TYPE F VALUE '0.14286',&lt;/P&gt;&lt;P&gt;                     END   OF CHANGE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;               DIVIDE-CORRESPONDING MONEY BY CHANGE.&lt;/P&gt;&lt;P&gt;   &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2007 04:28:03 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452138#M549567</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-07-03T04:28:03Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452139#M549568</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;see this link&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.sapbrainsonline.com/REFERENCES/ABAP_SYNTAX/SAP_ABAP_SYNTAX.html" target="test_blank"&gt;http://www.sapbrainsonline.com/REFERENCES/ABAP_SYNTAX/SAP_ABAP_SYNTAX.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://help.sap.com/saphelp_nw2004s/helpdata/en/fc/eb2ed0358411d1829f0000e829fbfe/frameset.htm" target="test_blank"&gt;http://help.sap.com/saphelp_nw2004s/helpdata/en/fc/eb2ed0358411d1829f0000e829fbfe/frameset.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;b&amp;gt;rewards if helpful.&amp;lt;/b&amp;gt;&lt;/P&gt;&lt;P&gt;rgds,&lt;/P&gt;&lt;P&gt;bharat.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2007 04:28:50 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452139#M549568</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-07-03T04:28:50Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452140#M549569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Are you sure this is usefull for the requestor?&lt;/P&gt;&lt;P&gt;At least your entry will be found by using serch - and this is definitly not helpful.&lt;/P&gt;&lt;P&gt;I would prefere if you remove your entry.&lt;/P&gt;&lt;P&gt;Thanks, Horst&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 May 2009 12:15:24 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452140#M549569</guid>
      <dc:creator>horst_schubert</dc:creator>
      <dc:date>2009-05-07T12:15:24Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452141#M549570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Good point. Theres more to this thread than a supposedly useful answer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;pk&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PS: And they always hunt in packs too:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.sdn.sap.com/irj/servlet/prt/portal/prteventname/htmlbevent/prtroot/pcd!3aportal_content!2fcom.sap.sdn.folder.sdn!2fcom.sap.sdn.folder.application!2fcom.sap.sdn.folder.iviews!2fcom.sap.sdn.folder.crp!2fcom.sap.sdn.app.crp.mypoints" target="test_blank"&gt;https://www.sdn.sap.com/irj/servlet/prt/portal/prteventname/htmlbevent/prtroot/pcd!3aportal_content!2fcom.sap.sdn.folder.sdn!2fcom.sap.sdn.folder.application!2fcom.sap.sdn.folder.iviews!2fcom.sap.sdn.folder.crp!2fcom.sap.sdn.app.crp.mypoints&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edited by: kishan P on May 7, 2009 6:01 PM&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 May 2009 12:19:57 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452141#M549570</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2009-05-07T12:19:57Z</dc:date>
    </item>
    <item>
      <title>Re: Syntax</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452142#M549571</link>
      <description>&lt;P&gt;Priceless &lt;span class="lia-unicode-emoji" title=":face_with_tongue:"&gt;😛&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 05 May 2020 07:53:31 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/syntax/m-p/2452142#M549571</guid>
      <dc:creator>JaySchwendemann</dc:creator>
      <dc:date>2020-05-05T07:53:31Z</dc:date>
    </item>
  </channel>
</rss>

