Abap Code Book
Abap Code Book
*&---------------------------------------------------------------------*
*& Chapter 1: A Few Simple Examples
*&---------------------------------------------------------------------*
REPORT CHAP0102.
* Date fields are type d with the fixed length 8 and the internal
* representation YYYYMMDD (year, month, and day).
* The initial value of a date field is 00000000.
DATA TODAY TYPE D.
* The write command formats dates according to personal settings of
* the end user.
TODAY = SY-DATUM.
WRITE (10) TODAY.
* Using date fields to perform computations
DATA ULTIMO TYPE D.
* Set variable to first day of current month.
ULTIMO = SY-DATUM.
ULTIMO+6(2) = '01'.
* Set variable to last day of previous month.
SUBTRACT 1 FROM ULTIMO.
WRITE / ULTIMO.
* Time fields are type t with the fixed length 6
* and the format HHMMSS (hours, minutes, and seconds)
DATA MY_TIME TYPE T.
WRITE /(8) MY_TIME.
*&---------------------------------------------------------------------*
*& Chapter 4: Hexadecimal (or binary) data
*&---------------------------------------------------------------------*
REPORT CHAP0406.
END OF CUSTOMER.
* Working with the different components and the structure itself
DATA VENDOR LIKE CUSTOMER.
CUSTOMER-ID = '87654321'.
CUSTOMER-NAME = 'Edison'.
CUSTOMER-TELEPHONE = '111-111-1111'.
MOVE CUSTOMER TO VENDOR.
WRITE / VENDOR-NAME.
* Defining an internal table each entry having the structure of
* the record customer
DATA ALL_CUSTOMERS LIKE CUSTOMER OCCURS 100.
* Using a reference to a non-elementary type.
TYPES: BEGIN OF PERSONAL_DATA,
NAME(25),
CITY(25),
STREET(30),
END OF PERSONAL_DATA.
DATA PEOPLE TYPE PERSONAL_DATA OCCURS 300.
* Internal table with a header line, which is used as a default record
* to hold the record currently being added to the table
DATA NEW_CUSTOMERS LIKE CUSTOMER OCCURS 100
WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& Chapter 4: Complex Non-Elementary Types and Data Objects
*&---------------------------------------------------------------------*
REPORT CHAP0408.
* Nested records
TYPES: BEGIN OF ADDRESS,
CITY(25),
STREET(30),
END OF ADDRESS,
BEGIN OF PERSON,
NAME(25),
ADDRESS TYPE ADDRESS,
END OF PERSON.
DATA RECEIVER TYPE PERSON.
RECEIVER-NAME = 'Smith'.
RECEIVER-ADDRESS-CITY = 'Big City'.
RECEIVER-ADDRESS-STREET = 'Main street'.
17 TO COUNTER.
MOVE SOURCE TO TARGET.
* Using the compute command (keyword can be omitted)
COMPUTE TARGET = SOURCE.
TARGET = SOURCE.
* Concatenating compute commands
DATA: PHONE_1 LIKE SOURCE,
PHONE_2 LIKE PHONE_1,
PHONE_3 LIKE PHONE_2,
PHONE_4 LIKE PHONE_3.
PHONE_4 = PHONE_3 = PHONE_2 = PHONE_1 = SOURCE.
*&---------------------------------------------------------------------*
*& Chapter 7: Simple examples of field conversion
*&---------------------------------------------------------------------*
REPORT CHAP0702.
* Converting to numbers during computations
DATA: NUMBER_1(4) VALUE '1771',
NUMBER_2(3),
RESULT TYPE I.
NUMBER_2 = '005'.
RESULT = NUMBER_1 + NUMBER_2.
WRITE / RESULT.
NUMBER_2 = ' 5'.
RESULT = NUMBER_1 + NUMBER_2.
WRITE / RESULT.
* Padding character fields with blanks
DATA: OLD_CUSTOMER_NAME(10) VALUE 'Edison',
NEW_CUSTOMER_NAME(25).
MOVE OLD_CUSTOMER_NAME TO NEW_CUSTOMER_NAME.
WRITE / NEW_CUSTOMER_NAME.
* Calculating dates
DATA: ANY_DATE TYPE D,
SAME_DAY_OF_NEXT_WEEK TYPE D.
ANY_DATE = '19991231'.
SAME_DAY_OF_NEXT_WEEK = ANY_DATE + 7.
WRITE / SAME_DAY_OF_NEXT_WEEK.
ANY_DATE = '20000228'.
SAME_DAY_OF_NEXT_WEEK = ANY_DATE + 7.
WRITE / SAME_DAY_OF_NEXT_WEEK.
*&---------------------------------------------------------------------*
*& Chapter 7: Converting character fields
*&---------------------------------------------------------------------*
REPORT CHAP0703.
* Truncating fields or padding with blanks
DATA: SHORT_NAME(8),
LONG_NAME(16).
MOVE 'Washington' TO: SHORT_NAME, LONG_NAME.
WRITE: / SHORT_NAME, LONG_NAME.
* Take care of intermediate steps
LONG_NAME = SHORT_NAME = 'Washington'.
WRITE: / SHORT_NAME, LONG_NAME.
*&---------------------------------------------------------------------*
*& Chapter 7: Converting number fields
*&---------------------------------------------------------------------*
REPORT CHAP0704.
* Using numeric texts and packed numbers
DATA: NO_EMPLOYEES(4) TYPE N,
NO_ROOMS
TYPE P,
EMPLOYEES_PER_ROOM TYPE P DECIMALS 2.
EMPLOYEES_PER_ROOM = NO_EMPLOYEES / NO_ROOMS.
* Rounding with integers and packed numbers
DATA: INCOME
TYPE I
VALUE '10000',
TAX
TYPE P DECIMALS 2 VALUE '0.2',
NET_INCOME
TYPE P DECIMALS 2,
ROUNDED_NET_INCOME TYPE I.
NET_INCOME = INCOME * ( 1 - TAX ).
ROUNDED_NET_INCOME = INCOME * ( 1 - TAX ).
WRITE: / NET_INCOME, ROUNDED_NET_INCOME.
INCOME = '10002'.
NET_INCOME = INCOME * ( 1 - TAX ).
ROUNDED_NET_INCOME = INCOME * ( 1 - TAX ).
WRITE: / NET_INCOME, ROUNDED_NET_INCOME.
---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Chapter 7: Copying structured objects
*&---------------------------------------------------------------------*
REPORT CHAP0706.
* Using move-corresponding to copy fields with the same name
DATA: BEGIN OF MY_CUSTOMER,
ID(8) TYPE N,
NAME(25),
CITY(25),
END OF MY_CUSTOMER,
BEGIN OF CITY_OF_CUSTOMER,
CITY LIKE MY_CUSTOMER-CITY,
TEXT(30),
ID LIKE MY_CUSTOMER-ID,
END OF CITY_OF_CUSTOMER.
MY_CUSTOMER-ID = '87654321'.
CITY_OF_CUSTOMER-TEXT = 'Old text'.
MOVE-CORRESPONDING MY_CUSTOMER TO CITY_OF_CUSTOMER.
WRITE: / 'Changed ID', CITY_OF_CUSTOMER-ID,
/ 'Unchanged text', CITY_OF_CUSTOMER-TEXT.
* Using the move command for structures
DATA: CURRENT_CUSTOMER LIKE MY_CUSTOMER,
BEGIN OF PREVIOUS_CUSTOMER,
IDENTIFIER LIKE MY_CUSTOMER-ID,
NAME
LIKE MY_CUSTOMER-NAME,
CITY
LIKE MY_CUSTOMER-CITY,
END OF PREVIOUS_CUSTOMER.
CURRENT_CUSTOMER-ID = '12345678'.
MOVE CURRENT_CUSTOMER TO PREVIOUS_CUSTOMER.
WRITE: / 'Changed ID', PREVIOUS_CUSTOMER-IDENTIFIER.
* Copying complete internal tables
TYPES: BEGIN OF TABLE_LINE,
FIELD_1,
FIELD_2 TYPE I,
END OF TABLE_LINE.
DATA: SOURCE_TABLE TYPE TABLE_LINE OCCURS 100,
TARGET_TABLE TYPE TABLE_LINE OCCURS 50.
MOVE SOURCE_TABLE TO TARGET_TABLE.
*&---------------------------------------------------------------------*
*& Chapter 7: Arithmetic Expressions and Mathematical Functions
*&---------------------------------------------------------------------*
REPORT CHAP0707.
* Self-explanatory formulas
DATA: A TYPE P, B LIKE A, X LIKE A, Y LIKE A,
INCOME TYPE I, TAX TYPE P, NET_INCOME TYPE P,
ALPHA TYPE P.
Y = A * X + B.
NET_INCOME = INCOME * ( 1 - TAX ).
Y = X * COS( ALPHA ).
* Arithmetic expressions
DATA: BLACK_SWANS TYPE I,
WHITE_SWANS TYPE I.
DATA PERCENTAGE TYPE P DECIMALS 2.
PERCENTAGE = BLACK_SWANS * 100 / ( BLACK_SWANS + WHITE_SWANS ).
* Associative law
DATA: N1 TYPE P, N2 TYPE P, N3 TYPE P, N4 TYPE P, N5 TYPE P.
N5 = ( ( N1 - ( N2 / N3 ) ) * ( N4 + N1 ) / N5 ).
N5 = ( N1 - N2 / N3 ) * ( N4 + N1 ) / N5.
* More formulas including mathematical functions
DATA: W TYPE P, D TYPE I, N TYPE P, Q TYPE I, R TYPE P.
Y = X * COS( ALPHA ).
A = 1.
W = EXP( B * LOG( A ) ).
D = N DIV Q.
*&---------------------------------------------------------------------*
*& Chapter 7: String Operations
*&---------------------------------------------------------------------*
REPORT CHAP0708.
* Concatenating strings without delimiter
DATA: FIRST_NAME(25), MIDDLE_NAME(2), LAST_NAME(25),
FULL_NAME(54).
FIRST_NAME = 'John'.
MIDDLE_NAME = 'F.'.
LAST_NAME = 'Kennedy'.
CONCATENATE FIRST_NAME MIDDLE_NAME LAST_NAME INTO
FULL_NAME.
WRITE / FULL_NAME.
* Concatenating strings with delimiter
DATA: DIRECTORY_1(2), DIRECTORY_2(10), FILE_NAME(10),
PATH(24).
DIRECTORY_1 = 'a:'.
DIRECTORY_2 = 'usr'.
FILE_NAME = 'programs'.
CONCATENATE DIRECTORY_1 DIRECTORY_2 FILE_NAME
INTO PATH
SEPARATED BY '\'.
WRITE / PATH.
* Splitting strings
DATA: LIST(40),
NAME_1(25), NAME_2(25), NAME_3(25).
LIST = 'Edison,Smith,Young'.
SPLIT LIST AT ',' INTO NAME_1 NAME_2 NAME_3.
WRITE: / NAME_1, NAME_2, NAME_3.
* Splitting strings with result in an internal table
DATA NAMES LIKE NAME_1 OCCURS 10 WITH HEADER LINE.
LIST = 'Edison,Smith,Young,Edwards'.
SPLIT LIST AT ',' INTO TABLE NAMES.
LOOP AT NAMES.
WRITE / NAMES.
ENDLOOP.
* Shifting strings by a fixed number of places
NAME_1 = 'Edison'.
NAME_2 = 'Smith'.
NAME_3 = 'Young'.
SHIFT NAME_1.
SHIFT NAME_2 BY 3 PLACES.
SHIFT NAME_3 RIGHT.
WRITE: / NAME_1, NAME_2, NAME_3.
* Shifting strings up to a substring
NAMES = 'Alexander Bill Charles'.
SHIFT NAMES UP TO 'Bill'.
WRITE / NAMES.
* Shifting strings deleting blanks
NAMES = 'Joanne___'.
SHIFT NAMES RIGHT DELETING TRAILING SPACE.
WRITE / NAMES.
* Replacing and translating characters in strings
DATA: STRING(80),
EXPRESSION(30).
STRING = 'Variable: &. The variable & is substituted later.'.
REPLACE '&' WITH 'X' INTO STRING.
WRITE / STRING.
TRANSLATE STRING USING '&X'.
WRITE / STRING.
EXPRESSION = 'a ** 2 + b ** 2 = c ** 2'.
TRANSLATE EXPRESSION USING 'axbycz'.
WRITE / EXPRESSION.
* Searching for strings in fields or internal tables
DATA TEXT(100) VALUE 'Texas California New Mexico Louisiana Oregon'.
SEARCH TEXT FOR 'California'.
IF SY-SUBRC NE 0. WRITE 'Not found'. ENDIF.
SEARCH TEXT FOR 'cAliforniA'.
IF SY-SUBRC NE 0. WRITE 'Not found'. ENDIF.
SEARCH TEXT FOR 'New M'.
IF SY-SUBRC NE 0. WRITE 'Not found'. ENDIF.
* Working with parts of fields
DATA: S(8) VALUE 'ABCDEFGH',
T(8) VALUE '12345678',
OFF1 TYPE I, OFF2 TYPE I,
LEN1 TYPE I, LEN2 TYPE I.
OFF1 = 2.
LEN1 = 3.
OFF2 = 4.
LEN2 = 3.
MOVE S+OFF1(LEN1) TO T+OFF2(LEN2).
WRITE / T.
*&---------------------------------------------------------------------*
*& Chapter 7: Special conversions
*&---------------------------------------------------------------------*
REPORT CHAP0709.
* Converting type c to type n
DATA: SCN(4) VALUE '12x4',
T1CN(2) TYPE N,
T2CN(6) TYPE N.
MOVE: SCN TO T1CN,
SCN TO T2CN.
* Converting type n to type c
DATA: SNC(4) TYPE N VALUE '0124',
T1NC(2),
T2NC(6).
MOVE: SNC TO T1NC,
SNC TO T2NC.
* Converting type n to type p
DATA: SNP(6) TYPE N VALUE '012345',
T1NP(10) TYPE P,
T2NP(2) TYPE P.
MOVE SNP TO T1NP.
*move snp to t2np. "This produces a runtime error when activated!
* Converting type p to type n
DATA: SPN(4) TYPE P VALUE 124,
T1PN(2) TYPE N,
T2PN(6) TYPE N.
MOVE: SPN TO T1PN,
SPN TO T2PN.
WRITE 'Program finished'.
*&---------------------------------------------------------------------*
*& Chapter 8: Using the Basic Layout Formats
*&---------------------------------------------------------------------*
REPORT CHAP0801.
* Simple output containing the current date
*&---------------------------------------------------------------------*
N = N - 1.
ENDIF.
* Using a case clause
CASE COLOR.
WHEN 'red'. WRITE 'color is red'.
WHEN 'green'. WRITE 'color is green'.
WHEN 'yellow'. WRITE 'color is yellow'.
WHEN OTHERS. WRITE 'non-standard color'.
ENDCASE.
* Some logical expressions in if clauses
IF N IS INITIAL.
WRITE 'initial'.
ELSEIF N LT 0
OR N GT 5.
WRITE / 'less than zero or greater than 5'.
ELSE.
WRITE / 'something else'.
ENDIF.
IF N > P.
WRITE / 'n is greater than p'.
ENDIF.
* Conversion in an expression
IF C4 = C5.
WRITE / 'c4 and c5 are equal'.
ENDIF.
* Comparing character strings
DATA: A(6) VALUE 'ABAP/4',
RESULT(6).
IF A CA 'XP'.
RESULT = A+SY-FDPOS(2).
WRITE / RESULT.
ENDIF.
IF A CO 'ABP'.
WRITE / 'a only contains A,B, and P'.
ENDIF.
IF A CS 'BAP'.
WRITE / 'a contains the string BAP'.
ENDIF.
IF A CP '*AP++'.
WRITE / 'a contains AP followed by two more characters'.
ENDIF.
* Unconditional loop
DO 100 TIMES.
SQUARE_NUMBER = SY-INDEX ** 2.
WRITE / SQUARE_NUMBER.
ENDDO.
* Terminating a loop
DO.
* terminate loop after 5 steps or when the color is red
IF SY-INDEX > 5 OR COLOR = 'red'. EXIT. ENDIF.
* main loop step
WRITE / SY-INDEX.
ENDDO.
* Using a conditional loop.
X = Y - 2.
WHILE X <> Y.
X = Y + 1.
WRITE / X.
IF X > Y. EXIT. ENDIF.
ENDWHILE.
*&---------------------------------------------------------------------*
*& Chapter 10: Simple form (local subroutine of a program)
*&---------------------------------------------------------------------*
REPORT CHAP1001.
* Global field of the program
DATA FLAG VALUE 'G'.
* Displaying the global field
WRITE FLAG.
* Calling a form
PERFORM SET_FLAG.
* Displaying the global field again
WRITE FLAG.
* Defining a form
FORM SET_FLAG.
* Changing and displaying the global field
FLAG = 'L'.
WRITE FLAG.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 10: Local data in a form
*&---------------------------------------------------------------------*
REPORT CHAP1002.
* Global field of the program
DATA FLAG VALUE 'G'.
* Displaying the global field
WRITE FLAG.
* Calling a form
PERFORM WRITE_FLAG.
* Displaying the global field again
WRITE FLAG.
* Defining a form with local data
FORM WRITE_FLAG.
* Local data
DATA L_FLAG.
* Changing and displaying local data
L_FLAG = 'L'.
WRITE L_FLAG.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 10: Using static variables
*&---------------------------------------------------------------------*
REPORT CHAP1003.
* Calling a form twice
PERFORM COUNT.
PERFORM COUNT.
* Defining a form with a static variable
FORM COUNT.
STATICS CALLS TYPE I.
CALLS = CALLS + 1.
WRITE CALLS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 10: Using interface parameters of a form
*&---------------------------------------------------------------------*
REPORT CHAP1004.
* Types and data for later use
TYPES: T_NAME(20).
DATA: NAME_1 TYPE T_NAME VALUE 'A',
ENDLOOP.
* Defining a form with a table parameter
FORM READ_CUSTOMERS TABLES F_CUSTOMERS STRUCTURE
ALL_CUSTOMERS.
SELECT * FROM CUSTOMERS INTO TABLE F_CUSTOMERS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 10: Type check for form parameters
*&---------------------------------------------------------------------*
REPORT CHAP1007.
* Types and variables for later use
TYPES: T_NAME_1(20),
T_NAME_2(20).
DATA: NAME_1 TYPE T_NAME_1,
NAME_2 TYPE T_NAME_2.
* Calling forms with different actual parameters
PERFORM SET_NAME_LIKE CHANGING NAME_1.
PERFORM SET_NAME_LIKE CHANGING NAME_2.
PERFORM SET_NAME_TYPE CHANGING NAME_1.
PERFORM SET_NAME_TYPE CHANGING NAME_2.
* Form definition with type reference via like
FORM SET_NAME_LIKE CHANGING F_NAME LIKE NAME_2.
F_NAME = 'Smith'.
ENDFORM.
* Form definition with type reference via type
FORM SET_NAME_TYPE CHANGING F_NAME TYPE T_NAME_2.
F_NAME = 'Smith'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 10: Form parameters without type reference
*&---------------------------------------------------------------------*
REPORT CHAP1008.
* Variable for later use
DATA: STRING_1(2) VALUE 'AB',
STRING_2(8) VALUE ' ABAP/4'.
* Calling forms with different actual parameters
PERFORM WRITE_FIRST_CHARACTER CHANGING: STRING_1,
STRING_2.
* Form parameters without type reference
FORM WRITE_FIRST_CHARACTER CHANGING F_STRING.
SHIFT F_STRING LEFT DELETING LEADING SPACE.
WRITE AT (1) F_STRING.
ENDFORM.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
LOOP AT ALL_CUSTOMERS.
LOOP AT ALL_BOOKINGS
WHERE CUSTOMID = ALL_CUSTOMERS-ID.
WRITE: / ALL_CUSTOMERS-NAME,
ALL_BOOKINGS-FLDATE.
ENDLOOP.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 12: A simple internal table
*&---------------------------------------------------------------------*
REPORT CHAP1201.
* Work area for a database table
TABLES CUSTOMERS.
* Defining an internal table
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100.
* Reading all entries of the database table into the internal table
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
*&---------------------------------------------------------------------*
*& Chapter 12: Internal tables with header lines
*&---------------------------------------------------------------------*
REPORT CHAP1202.
* Work area for a database table
TABLES CUSTOMERS.
* Defining an internal table with header line
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
* Reading all entries of the database table into the internal table
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
*&---------------------------------------------------------------------*
*& Chapter 12: Filling an internal table from a database table
*&---------------------------------------------------------------------*
REPORT CHAP1203.
* Work area for a database table
TABLES CUSTOMERS.
* Defining an internal table with header line
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
* Filling the internal table (previous content overwritten)
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
* Filling the internal table (previous content kept)
SELECT * FROM CUSTOMERS APPENDING TABLE ALL_CUSTOMERS.
* Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 12: Appending single lines
*&---------------------------------------------------------------------*
REPORT CHAP1204.
* Work area for a database table
TABLES CUSTOMERS.
* Types for later use
TYPES: BEGIN OF T_CUSTOMER_CITY,
ID LIKE CUSTOMERS-ID,
CITY LIKE CUSTOMERS-CITY,
END OF T_CUSTOMER_CITY.
* Internal table with two columns
DATA CUSTOMER_CITIES TYPE T_CUSTOMER_CITY OCCURS 100
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS.
MOVE-CORRESPONDING CUSTOMERS TO CUSTOMER_CITIES.
APPEND CUSTOMER_CITIES.
ENDSELECT.
* Displaying the result
LOOP AT CUSTOMER_CITIES.
WRITE / CUSTOMER_CITIES-CITY.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 12: Appending multiple lines
*&---------------------------------------------------------------------*
REPORT CHAP1205.
* Work area for a database table
TABLES CUSTOMERS.
* Defining internal tables
DATA: ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE,
OLD_CUSTOMERS LIKE CUSTOMERS OCCURS 10
WITH HEADER LINE.
* Filling both internal tables
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
SELECT * FROM CUSTOMERS INTO TABLE OLD_CUSTOMERS.
* Appending one internal table to the other
APPEND LINES OF OLD_CUSTOMERS TO ALL_CUSTOMERS.
* Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 12: Inserting lines at a specified position
*&---------------------------------------------------------------------*
REPORT CHAP1206.
* Work area for a database table
TABLES CUSTOMERS.
* Types for later use
TYPES: BEGIN OF T_CUSTOMER_CITY,
ID LIKE CUSTOMERS-ID,
CITY LIKE CUSTOMERS-CITY,
END OF T_CUSTOMER_CITY.
* Internal table with two columns
DATA CUSTOMER_CITIES TYPE T_CUSTOMER_CITY OCCURS 100
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS.
MOVE-CORRESPONDING CUSTOMERS TO CUSTOMER_CITIES.
APPEND CUSTOMER_CITIES.
ENDSELECT.
* Inserting a line at a specified position
CUSTOMER_CITIES-ID = '00000005'.
CUSTOMER_CITIES-CITY = 'Pleasant Site'.
INSERT CUSTOMER_CITIES INDEX 3.
* Displaying the result
LOOP AT CUSTOMER_CITIES.
WRITE / CUSTOMER_CITIES-CITY.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 12: Inserting lines at a specified position
*&---------------------------------------------------------------------*
REPORT CHAP1206.
* Work area for a database table
TABLES CUSTOMERS.
* Types for later use
TYPES: BEGIN OF T_CUSTOMER_CITY,
ID LIKE CUSTOMERS-ID,
CITY LIKE CUSTOMERS-CITY,
END OF T_CUSTOMER_CITY.
* Internal table with two columns
DATA CUSTOMER_CITIES TYPE T_CUSTOMER_CITY OCCURS 100
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS.
ALL_CUSTOMERS-NAME = 'Brown'.
APPEND ALL_CUSTOMERS.
ALL_CUSTOMERS-ID = '11111111'.
ALL_CUSTOMERS-NAME = 'Green'.
APPEND ALL_CUSTOMERS.
ALL_CUSTOMERS-ID = '12121212'.
ALL_CUSTOMERS-NAME = 'White'.
APPEND ALL_CUSTOMERS.
* Inserting the internal table
INSERT CUSTOMERS FROM TABLE ALL_CUSTOMERS.
*&---------------------------------------------------------------------*
*& Chapter 13: Updating single entries in a database table
*&---------------------------------------------------------------------*
REPORT CHAP1303.
* Work area
TABLES CUSTOMERS.
* Record used as alternative work area
DATA MY_CUSTOMER LIKE CUSTOMERS.
* Updating one entry from the work area
CUSTOMERS-ID = '12345678'.
CUSTOMERS-CITY = 'Village'.
UPDATE CUSTOMERS.
IF SY-SUBRC <> 0.
WRITE: 'Entry not existing:', CUSTOMERS-ID.
ENDIF.
*&---------------------------------------------------------------------*
*& Chapter 13: Updating multiple entries in a database table
*&---------------------------------------------------------------------*
REPORT CHAP1304.
* Work area
TABLES CUSTOMERS.
* Internal table for changed entries
DATA CHANGED_CUSTOMERS LIKE CUSTOMERS OCCURS 50
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS INTO TABLE CHANGED_CUSTOMERS
WHERE CITY = SPACE.
LOOP AT CHANGED_CUSTOMERS.
CHANGED_CUSTOMERS-CITY = 'City unknown'.
MODIFY CHANGED_CUSTOMERS.
ENDLOOP.
* Updating the database table with values from the internal table
UPDATE CUSTOMERS FROM TABLE CHANGED_CUSTOMERS.
* Updating the database table according to a where condition
*&---------------------------------------------------------------------*
*& Chapter 13: Deleting multiple entries from a database table
*&---------------------------------------------------------------------*
REPORT CHAP1308.
* Work area
TABLES CUSTOMERS.
* Internal table for deleted entries
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 50
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS
WHERE CITY = SPACE.
* Deleting entries with values from the internal table
DELETE CUSTOMERS FROM TABLE ALL_CUSTOMERS.
* Deleting entries according to a where condition
DELETE FROM CUSTOMERS
WHERE ID LIKE '1%'.
*&---------------------------------------------------------------------*
*& Chapter 14: Exporting to the ABAP/4 Memory
*&---------------------------------------------------------------------*
REPORT CHAP1401.
* Work areas
TABLES: CUSTOMERS, BOOKINGS.
* Internal tables which will be exported
DATA: ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE,
ALL_BOOKINGS LIKE BOOKINGS OCCURS 10
WITH HEADER LINE.
* Filling the internal tables
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
SELECT * FROM BOOKINGS INTO TABLE ALL_BOOKINGS.
* Exporting to the ABAP/4 Memory
EXPORT ALL_CUSTOMERS ALL_BOOKINGS
TO MEMORY ID 'CUSTBOOK'.
* Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
LOOP AT ALL_BOOKINGS.
WRITE / ALL_BOOKINGS-FLDATE.
ENDLOOP.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Chapter 15: Using a Logical Database
*&---------------------------------------------------------------------*
REPORT CHAP1502.
* Work areas
TABLES: CUSTOMERS, BOOKINGS.
* Reading data
GET CUSTOMERS.
WRITE / CUSTOMERS-NAME.
GET BOOKINGS.
WRITE: AT /3 BOOKINGS-FLDATE.
*&---------------------------------------------------------------------*
*& Chapter 15: Using the events start-of-selection and end-of-selection
*&---------------------------------------------------------------------*
REPORT CHAP1503.
* Work area
TABLES BOOKINGS.
* Initial processing
START-OF-SELECTION.
WRITE / 'Start'.
* Reading data
GET BOOKINGS.
WRITE: AT /3 BOOKINGS-FLDATE.
* Final processing
END-OF-SELECTION.
WRITE / 'Finished'.
*&---------------------------------------------------------------------*
*& Chapter 15: Working with get events
*&---------------------------------------------------------------------*
REPORT CHAP1504.
* Work areas
TABLES BOOKINGS.
* Reading data
GET BOOKINGS.
WRITE / BOOKINGS-FLDATE.
*&---------------------------------------------------------------------*
*& Chapter 16: Parameters on the selection screen
*&---------------------------------------------------------------------*
REPORT CHAP1601.
* Defining parameters
PARAMETERS:
P_CITY LIKE CUSTOMERS-CITY,
*&---------------------------------------------------------------------*
*& Chapter 16: Working with Select-Options
*&---------------------------------------------------------------------*
REPORT CHAP1602.
* Work area
TABLES CUSTOMERS.
* Defining Select-Options
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
SELECT * FROM CUSTOMERS
WHERE NAME IN S_NAME.
WRITE / CUSTOMERS-NAME.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Chapter 16: Selection screen events
*&---------------------------------------------------------------------*
REPORT CHAP1603 MESSAGE-ID SU.
* Worka area
TABLES CUSTOMERS.
* Selection criteria
PARAMETERS PCODE LIKE CUSTOMERS-POSTCODE.
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
* Variables
DATA: PARAMETER_LENGTH TYPE I,
NUMBER_OF_SELECTIONS TYPE I.
* Checking user input in Parameter pcode
AT SELECTION-SCREEN ON PCODE.
PARAMETER_LENGTH = STRLEN( PCODE ).
IF PARAMETER_LENGTH < 5.
MESSAGE E000 WITH 'ZIP code invalid'.
ENDIF.
* Checking user input in Select-Option s_name
AT SELECTION-SCREEN ON S_NAME.
DESCRIBE TABLE S_NAME LINES NUMBER_OF_SELECTIONS.
IF NUMBER_OF_SELECTIONS = 0.
MESSAGE E000 WITH 'Please specify name of customer'.
ENDIF.
* Processing data
START-OF-SELECTION.
SELECT * FROM CUSTOMERS
WHERE NAME IN S_NAME.
WRITE / CUSTOMERS-NAME.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Chapter 17: Double-clicking
*&---------------------------------------------------------------------*
REPORT CHAP1701.
START-OF-SELECTION.
WRITE 'Basic list'.
AT LINE-SELECTION.
WRITE 'New list after double-click'.
*&---------------------------------------------------------------------*
*& Chapter 17: Clicking on a hotspot area
*&---------------------------------------------------------------------*
REPORT CHAP1702.
* work area
TABLES CUSTOMERS.
* Processing data
START-OF-SELECTION.
SELECT * FROM CUSTOMERS.
WRITE / CUSTOMERS-NAME HOTSPOT ON.
ENDSELECT.
* Single click
AT LINE-SELECTION.
WRITE 'New list after single-click on a hotspot area'.
*&---------------------------------------------------------------------*
*& Chapter 17: Pop-up Screens
*&---------------------------------------------------------------------*
REPORT CHAP1703.
* work area
TABLES CUSTOMERS.
* Processing data
START-OF-SELECTION.
SELECT * FROM CUSTOMERS.
WRITE / CUSTOMERS-NAME HOTSPOT ON.
ENDSELECT.
* Single click
AT LINE-SELECTION.
WINDOW STARTING AT 10 10
ENDING AT 40 20.
ENDDO.
ULINE.
*&---------------------------------------------------------------------*
*& Chapter 18: Sample report with selection criteria
*&---------------------------------------------------------------------*
REPORT CHAP1801.
TABLES: CUSTOMERS, BOOKINGS.
PARAMETERS P_DATE TYPE D.
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
SELECT * FROM CUSTOMERS
WHERE NAME IN S_NAME.
WRITE / CUSTOMERS-NAME.
SELECT * FROM BOOKINGS
WHERE ORDER_DATE = P_DATE
AND CUSTOMID = CUSTOMERS-ID.
WRITE: / BOOKINGS-CARRID,
BOOKINGS-CONNID,
BOOKINGS-FLDATE.
ENDSELECT.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Chapter 18: Running a report
*&---------------------------------------------------------------------*
REPORT CHAP1802.
* Work area
TABLES CUSTOMERS.
* Selection criteria
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
* Running report chap1801 with specified selection criteria
SUBMIT CHAP1801
WITH P_DATE = SY-DATUM
WITH S_NAME IN S_NAME.
*&---------------------------------------------------------------------*
*& Chapter 18: Displaying the selection screen
*&---------------------------------------------------------------------*
REPORT CHAP1803.
* Work area
TABLES CUSTOMERS.
* Selection criteria
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
* running chap1801 and displaying the selection screen
SUBMIT CHAP1801
VIA SELECTION-SCREEN
CONSTANTS:
* Boolean constants
TRUE
TYPE C VALUE 'X',
FALSE
TYPE C VALUE ' ',
* Screen codes
C_SCREEN_REQUEST TYPE SCREEN_CODE VALUE '0100',
C_SCREEN_BOOKING TYPE SCREEN_CODE VALUE '0200',
* Status codes
C_STATUS_REQUEST TYPE STATUS_CODE VALUE 'REQUEST',
C_STATUS_BOOKING TYPE STATUS_CODE VALUE 'BOOKING',
C_STATUS_LIST TYPE STATUS_CODE VALUE 'LIST',
* Titlebar codes
C_TITLE_REQUEST
TYPE TITLEBAR_CODE VALUE '100',
C_TITLE_BOOKING
TYPE TITLEBAR_CODE VALUE '200',
C_TITLE_LIST_CUSTOMERS TYPE TITLEBAR_CODE VALUE '110',
* Function codes
C_FCODE_REQUEST TYPE FUNCTION_CODE VALUE 'REQU',
C_FCODE_BOOKING TYPE FUNCTION_CODE VALUE 'BOOK',
C_FCODE_CLEAR TYPE FUNCTION_CODE VALUE 'CLEA',
C_FCODE_BACK TYPE FUNCTION_CODE VALUE 'BACK',
C_FCODE_EXIT TYPE FUNCTION_CODE VALUE 'EXIT'.
*----------------------------------------------------------------------***INCLUDE MSABBI01 .
*----------------------------------------------------------------------*&---------------------------------------------------------------------*
*&
Module EXIT_SCREEN INPUT
*&---------------------------------------------------------------------*
*
Handles back, exit, and clear command.
*
*----------------------------------------------------------------------*
MODULE EXIT_SCREEN INPUT.
CASE FCODE.
WHEN C_FCODE_Clear.
* Just clear the input fields
CASE SY-DYNNR.
WHEN c_screen_request. CLEAR: PLANFLI, ACTFLI.
WHEN C_SCREEN_BOOKING. CLEAR CUSTOMERS.
SEATS_REQUIRED = 1.
ENDCASE.
WHEN C_FCODE_BACK.
*------------------------------------------------------------------***INCLUDE MSABBO01 .
*------------------------------------------------------------------*&---------------------------------------------------------------------*
*& Module INIT_REQUEST OUTPUT
*&---------------------------------------------------------------------*
*
Initializes titlebar and status of the screen for a flight *
*
request.
*
*----------------------------------------------------------------------*
*------------------------------------------------------------------***INCLUDE MSABBF01 .
*------------------------------------------------------------------*&---------------------------------------------------------------------*
*& Form FLIGHT_REQUEST
*&---------------------------------------------------------------------*
*
Check for a valid connection
*
*----------------------------------------------------------------------*
FORM FLIGHT_REQUEST CHANGING F_FLAG_FOUND TYPE BOOLEAN.
* First check for a valid connection, i.e. check if carrier CARRID
* offers a flight starting in city CITYFROM with destination CITYTO.
F_FLAG_FOUND = FALSE.
SELECT
* FROM PLANFLI
WHERE CARRID
= PLANFLI-CARRID
AND CITYFROM = PLANFLI-CITYFROM
AND CITYTO
= PLANFLI-CITYTO.
* Then check if the connection is also offered for the
* specified date.
SELECT SINGLE * FROM ACTFLI
WHERE CARRID
= PLANFLI-CARRID
AND CONNID
= PLANFLI-CONNID
AND FLDATE
= ACTFLI-FLDATE.
IF SY-SUBRC = 0.
F_FLAG_FOUND = TRUE.
EXIT.
ENDIF.
ENDSELECT.
ENDFORM.
" FLIGHT_REQUEST
*&---------------------------------------------------------------------*
*&
Form FLIGHT_BOOKING
*&---------------------------------------------------------------------*
*
Insert the booking into database tables
*
*----------------------------------------------------------------------*
FORM FLIGHT_BOOKING.
DATA: L_CUSTOMERS LIKE CUSTOMERS OCCURS 10
WITH HEADER LINE,
L_LINE_COUNT TYPE I,
L_INDEX LIKE SY-TABIX.
* 1. Check if seats are available
*
i_bookings = bookings
*
i_actfli = actfli.
* commit work.
* 5. Message: booking successful for customer ...
MESSAGE I002 WITH ACTFLI-CONNID CUSTOMERS-NAME.
ENDFORM.
" FLIGHT_BOOKING
*&---------------------------------------------------------------------*
*&
Form SET_BOOKID
*&---------------------------------------------------------------------*
*
Determine a new booking id.
*
*----------------------------------------------------------------------*
FORM SET_BOOKID CHANGING F_BOOKID LIKE BOOKINGS-BOOKID.
* Get maximum bookid and increment it by 1
SELECT MAX( BOOKID ) INTO (F_BOOKID) FROM BOOKINGS.
ADD 1 TO F_BOOKID.
ENDFORM.
" SET_BOOKID
*------------------------------------------------------------------***INCLUDE MSABBE01 .
*------------------------------------------------------------------*&---------------------------------------------------------------------*
*& Event AT LINE-SELECTION
*&---------------------------------------------------------------------*
at line-selection.
* Get selected customer and display name
read table all_customers with key id = all_customers-id.
if sy-subrc = 0.
customers-name = all_customers-name.
endif.
leave to screen 0.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic sort command
*&---------------------------------------------------------------------*
REPORT CHAP2301.
* Parameter for the sort criterion, can be modified by the end user
PARAMETERS COLUMN(10) DEFAULT 'NAME'.
* Declarations for later use
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
* Dynamic sort
SORT ALL_CUSTOMERS BY (COLUMN).
* Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE: / ALL_CUSTOMERS-ID,
ALL_CUSTOMERS-NAME,
ALL_CUSTOMERS-CITY,
ALL_CUSTOMERS-TELEPHONE.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic sort command with several sort criteria
*&---------------------------------------------------------------------*
REPORT CHAP2302.
* Parameters for the sort criterion, can be modified by the end user
PARAMETERS: COLUMN1(10)
DEFAULT 'NAME',
COLUMN2 LIKE COLUMN1 DEFAULT 'ID'.
* Declarations for later use
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
* Filling the internal table
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
* Dynamic sort with two sort criteria
SORT ALL_CUSTOMERS BY (COLUMN1) (COLUMN2) DESCENDING.
* Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE: / ALL_CUSTOMERS-ID,
ALL_CUSTOMERS-NAME,
ALL_CUSTOMERS-CITY,
ALL_CUSTOMERS-TELEPHONE.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic read table command
*&---------------------------------------------------------------------*
REPORT CHAP2303.
* Parameters for reading a single line, can be modified by the end user
PARAMETERS: KEY1(10)
DEFAULT 'NAME',
VALUE1(25),
KEY2 LIKE KEY1 DEFAULT 'ID',
CLEAR SUM_OCCUPIED_SEATS.
ENDAT.
ADD MY_FLIGHTS-SEATSOCC TO SUM_OCCUPIED_SEATS.
WRITE / MY_FLIGHTS-SEATSOCC.
AT END OF (COLUMN).
WRITE: / 'Occupied seats total:', SUM_OCCUPIED_SEATS.
ENDAT.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic Open SQL Commands: table name
*&---------------------------------------------------------------------*
REPORT CHAP2305.
PARAMETERS TABLENAME(10) DEFAULT 'CUSTOMERS'.
DATA COUNT_ROWS TYPE I.
SELECT COUNT( * ) FROM (TABLENAME) INTO COUNT_ROWS.
WRITE: TABLENAME, COUNT_ROWS.
DATA WHERE_TAB(80) OCCURS 10 WITH HEADER LINE.
APPEND 'name like ''E%''' TO WHERE_TAB.
APPEND 'and city like ''S%''' TO WHERE_TAB.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS
WHERE ID BETWEEN 1 AND 999
AND (WHERE_TAB).
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic Open SQL Commands: table name
*&---------------------------------------------------------------------*
REPORT CHAP2305.
PARAMETERS TABLENAME(10) DEFAULT 'CUSTOMERS'.
DATA COUNT_ROWS TYPE I.
SELECT COUNT( * ) FROM (TABLENAME) INTO COUNT_ROWS.
WRITE: TABLENAME, COUNT_ROWS.
DATA WHERE_TAB(80) OCCURS 10 WITH HEADER LINE.
APPEND 'name like ''E%''' TO WHERE_TAB.
APPEND 'and city like ''S%''' TO WHERE_TAB.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS
WHERE ID BETWEEN 1 AND 999
AND (WHERE_TAB).
*&---------------------------------------------------------------------*
*& Chapter 23: External perform (caller)
*&---------------------------------------------------------------------*
REPORT CHAP2307.
* List of the current program
WRITE / 'I am program chap2307'.
* External perform
PERFORM EXTFORM IN PROGRAM CHAP2308.
*&---------------------------------------------------------------------*
*& Chapter 23: External perform (called form)
*&---------------------------------------------------------------------*
REPORT CHAP2308.
* Form definition
FORM EXTFORM.
WRITE / 'I am extform in program chap2308'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic external perform (call back form)
*&---------------------------------------------------------------------*
REPORT CHAP2309.
PERFORM EXTFORM IN PROGRAM CHAP2310
USING 'CALL_BACK_FORM'
SY-CPROG.
FORM CALL_BACK_FORM.
WRITE / 'I am the call back form in chap2309.'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 23: Dynamic external perform
*&---------------------------------------------------------------------*
REPORT CHAP2310.
FORM EXTFORM
USING F_CALL_BACK_FORM
F_PROGRAM.
PERFORM (F_CALL_BACK_FORM) IN PROGRAM (F_PROGRAM).
WRITE / 'I am the form in chap2310.'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Chapter 24: Working with Field Symbols
*&---------------------------------------------------------------------*
REPORT CHAP2401.
* Defining a Field Symbol
FIELD-SYMBOLS <FS>.
* Variable for later use
DATA FIELD VALUE 'X'.
* Assigning a field to a Field Symbol
ASSIGN FIELD TO <FS>.
* Using a Field Symbol which has an assigned field
WRITE <FS>.
*&---------------------------------------------------------------------*
*& Chapter 24: Using Field Symbols for variable parts of fields
*&---------------------------------------------------------------------*
REPORT CHAP2402.
DATA: EXTERNAL_RECORD(4000),
POSITION TYPE I,
LENGTH TYPE N.
FIELD-SYMBOLS <ENTRY>.
EXTERNAL_RECORD = '0005Smith0007Edwards0005Young'.
DO.
LENGTH = EXTERNAL_RECORD+POSITION(4).
IF LENGTH = 0.
EXIT.
ENDIF.
ADD 4 TO POSITION.
ASSIGN EXTERNAL_RECORD+POSITION(LENGTH) TO <ENTRY>.
WRITE <ENTRY>.
ADD LENGTH TO POSITION.
IF POSITION >= 4000.
EXIT.
ENDIF.
ENDDO.
*&---------------------------------------------------------------------*
*& Chapter 24: Using Field Symbols for components of a structure
*&---------------------------------------------------------------------*
REPORT CHAP2403.
* Table work area for later use
TABLES CUSTOMERS.
* Defining a Field Symbol
FIELD-SYMBOLS <OUTPUT>.
* Displaying all fields of all table entries
SELECT * FROM CUSTOMERS.
NEW-LINE.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE CUSTOMERS TO
<OUTPUT>.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
WRITE <OUTPUT>.
ENDDO.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Chapter 25: Working with temporary programs
*&---------------------------------------------------------------------*
REPORT CHAP2501.
* Internal table for source code, field for name of temporary program
DATA: SOURCE_TABLE(72) OCCURS 10 WITH HEADER LINE,
PROGRAM_NAME LIKE SY-CPROG.
* Building the source code
APPEND 'report test.'
TO SOURCE_TABLE.
APPEND 'form display.'
TO SOURCE_TABLE.
APPEND 'write ''I am a temporary program''.' TO SOURCE_TABLE.
APPEND 'endform.'
TO SOURCE_TABLE.
* Generating the temporary program
GENERATE SUBROUTINE POOL SOURCE_TABLE NAME PROGRAM_NAME.
* Calling a form externally
PERFORM DISPLAY IN PROGRAM (PROGRAM_NAME).
*&---------------------------------------------------------------------*
*& Chapter 25: Syntax errors in temporary programs
*&---------------------------------------------------------------------*
REPORT CHAP2502.
* Variables for later use
DATA: SOURCE_TABLE(72) OCCURS 10 WITH HEADER LINE,
PROGRAM_NAME LIKE SY-CPROG,
SYNTAX_CHECK_MESSAGE(128),
LINE_NO TYPE I.
* Building the source code
APPEND 'report test.'
TO SOURCE_TABLE.
APPEND 'form display.'
TO SOURCE_TABLE.
APPEND 'write ''I am a temporary program''.' TO SOURCE_TABLE.
APPEND 'endform'
TO SOURCE_TABLE.
* Generating the temporary program, checking syntax errors
GENERATE SUBROUTINE POOL SOURCE_TABLE
NAME PROGRAM_NAME
MESSAGE SYNTAX_CHECK_MESSAGE
LINE LINE_NO.
IF SY-SUBRC NE 0.
WRITE: / 'Syntax error, message', SYNTAX_CHECK_MESSAGE,
/ 'in line', LINE_NO.
EXIT.
ENDIF.
* Calling a form externally
PERFORM DISPLAY IN PROGRAM (PROGRAM_NAME).
*&---------------------------------------------------------------------*
*& Chapter 25: A real life example for using a temporary program
*&---------------------------------------------------------------------*
REPORT CHAP2503.
* Variables for later use
PARAMETERS TABNAME(10) DEFAULT 'CUSTOMERS'.
DATA: SOURCE_TABLE(72) OCCURS 100 WITH HEADER LINE,
PROGRAM_NAME LIKE SY-CPROG,
SYNTAX_CHECK_MESSAGE(128),
LINE_NO TYPE I.
* Building the source code
PERFORM BUILD_THE_SOURCE_CODE USING TABNAME.
* Generating the temporary program, checking syntax errors
GENERATE SUBROUTINE POOL SOURCE_TABLE
NAME PROGRAM_NAME
MESSAGE SYNTAX_CHECK_MESSAGE
LINE LINE_NO.
IF SY-SUBRC NE 0.
WRITE: / 'Syntax error, message', SYNTAX_CHECK_MESSAGE,
/ 'in line', LINE_NO.
EXIT.
ENDIF.
* Calling a form externally
PERFORM DISPLAY_TABLE IN PROGRAM (PROGRAM_NAME).
* Form to build the source code of the temporary program
FORM BUILD_THE_SOURCE_CODE USING F_NAME.
APPEND:
'report ztmpprog.
' TO SOURCE_TABLE,
'tables
' TO SOURCE_TABLE,
F_NAME
TO SOURCE_TABLE,
'.
' TO SOURCE_TABLE,
'field-symbols <output>.
' TO SOURCE_TABLE,
'form display_table.
' TO SOURCE_TABLE,
'select * from
' TO SOURCE_TABLE,
F_NAME
TO SOURCE_TABLE,
'.
' TO SOURCE_TABLE,
' new-line.
' TO SOURCE_TABLE,
' do.
' TO SOURCE_TABLE,
' assign component sy-index ' TO SOURCE_TABLE,
'
of structure
' TO SOURCE_TABLE,
F_NAME
TO SOURCE_TABLE,
'
to <output>.
' TO SOURCE_TABLE,
*&---------------------------------------------------------------------*
*& Chapter 26: Transferring data to a file (presentation server)
*&---------------------------------------------------------------------*
REPORT CHAP2603.
* Data declarations for later use
PARAMETERS FILENAME(128) DEFAULT 'c:\users\default\testfile.dat'
LOWER CASE.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
* Get data for file transfer
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
SORT ALL_CUSTOMERS BY CITY.
LOOP AT ALL_CUSTOMERS.
WRITE: / ALL_CUSTOMERS-CITY,
ALL_CUSTOMERS-NAME.
ENDLOOP.
* Transferring Data
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME
= FILENAME
TABLES
DATA_TAB
= ALL_CUSTOMERS
EXCEPTIONS
FILE_OPEN_ERROR = 1
OTHERS
= 2.
CASE SY-SUBRC.
WHEN 1.
WRITE 'Error when file opened'.
EXIT.
WHEN 2.
WRITE 'Error during data transfer'.
EXIT.
ENDCASE.
*&---------------------------------------------------------------------*
*& Chapter 26: Reading data from a file (presentation server)
*&---------------------------------------------------------------------*
REPORT CHAP2604.
* Data declarations for later use
PARAMETERS FILENAME(128) DEFAULT 'c:\users\default\testfile.dat'
LOWER CASE.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME
= FILENAME
TABLES
DATA_TAB
= ALL_CUSTOMERS
EXCEPTIONS
FILE_OPEN_ERROR = 1
OTHERS
= 2.
CASE SY-SUBRC.
WHEN 1.
WRITE 'Error when file opened'.
EXIT.
WHEN 2.
WRITE 'Error during data transfer'.
EXIT.
ENDCASE.
* Display the result
LOOP AT ALL_CUSTOMERS.
WRITE: / ALL_CUSTOMERS-NAME,
ALL_CUSTOMERS-CITY.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Chapter 28: Sample program for OLE Automation
*&---------------------------------------------------------------------*
REPORT CHAP2801.
* Including OLE types
INCLUDE OLE2INCL.
* Tables and variables for later use
TABLES: CUSTOMERS.
DATA: APPLICATION TYPE OLE2_OBJECT,
WORKBOOK TYPE OLE2_OBJECT,
SHEET
TYPE OLE2_OBJECT,
CELLS
TYPE OLE2_OBJECT.
* Creating an object
CREATE OBJECT APPLICATION 'excel.application'.
IF SY-SUBRC NE 0.
WRITE: / 'Error when opening excel.application', SY-MSGLI.
ENDIF.
* Setting properties
SET PROPERTY OF APPLICATION 'Visible' = 1.
* Calling methods
CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK.
PERFORM ERRORS.
CALL METHOD OF WORKBOOK 'Add'.
PERFORM ERRORS.
CALL METHOD OF APPLICATION 'Worksheets' = SHEET EXPORTING #1 = 1.
PERFORM ERRORS.
CALL METHOD OF SHEET 'Activate'.
PERFORM ERRORS.
PERFORM FILL_SHEET.
* Subroutine for filling the spread sheet
FORM FILL_SHEET.
DATA: ROW_MAX TYPE I VALUE 256,
INDEX TYPE I.
FIELD-SYMBOLS: <NAME>.
SELECT * FROM CUSTOMERS.
INDEX = ROW_MAX * ( SY-DBCNT - 1 ) + 1.
DO 4 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE CUSTOMERS TO
<NAME>.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = INDEX.
SET PROPERTY OF CELLS 'Value' = <NAME>.
ADD 1 TO INDEX.
ENDDO.
ENDSELECT.
ENDFORM.
* Subroutine for error handling
FORM ERRORS.
IF SY-SUBRC NE 0.
WRITE: / 'Error in OLE call', SY-MSGLI.
EXIT.
ENDIF.
ENDFORM.