You are on page 1of 62

ABAP TIPS

ABAP TIPS
USEFUL ABAP/4 INFORMATION

TIP 1
Area Use of ON CHANGE in Loop Processing

ON CHANGE OF does seem to work in loop processing.However, it only


works the first time the code is used, and on the second pass you may
get unexpected results. Look at the code sample below.
ABAP TIPS
DATA: ITAB LIKE MARA OCCURS 10 WITH HEADER LINE.
ITAB-MATNR = '5'. APPEND ITAB.
ITAB-MATNR = '6'. APPEND ITAB.
PERFORM PRINT_ITAB.
REFRESH ITAB.
ITAB-MATNR = '6'. APPEND ITAB.
ITAB-MATNR = '7'. APPEND ITAB.
PERFORM PRINT_ITAB.
FORM PRINT_ITAB.
ON CHANGE OF MATNR.
WRITE: ITAB-MATNR.
ENDON.
ENDFORM
ABAP TIPS
Those of you who guessed that the output would be "5 6 6 7" are wrong!
The actual output is simply "5 6 7." What happens during the ON
CHANGE OF is that SAP holds the contents of the last ON CHANGE OF
variable in memory, and this does not get refreshed or cleared during
loop processing. For this reason you should avoid using ON CHANGE OF
when processing loops.

Another area to look out for in control statements for loop processing is
the use of AT. Do not use this statement when using the loop additions
FROM, TO, and WHERE. New programmers out there should remember
that AT NEW compares the structure for anything that has changed
starting at the left hand side of the structure all the way to the field that
you are specifying.
ABAP TIPS

TIP 2
Area Enhance performance of the SELECT statement

One of the most harmful things that I see nearly every day is SELECT *
FROM _ when you are using only one or two fields from the table being
read. This is usually the result of lazy coding practices. It can significantly
slow the program and put an unnecessary load on the whole system. To
understand why this is such a performance problem you have to
understand a little about SAP hardware architecture and what happens
when your ABAP processes the SELECT statement.
ABAP TIPS
When you execute an ABAP program, it runs on an application server,
which is usually a different physical box from the database server. When
you write a SELECT * statement, the application server sends the request
to the database server, which in turn must pass the entire structure for
each row back to the application server. This consumes both CPU and
networking resources, especially for tables with large structures. SELECT
ing only the specific fields you need from the database means that the
database server will only pass a small amount of data back. This will
greatly increase the speed of the SELECT. The following example outlines
this change:

SELECT MATNR MTART FROM MARA INTO (L_MATNR, L_MTART).


... processing code ...
ENDSELECT.
ABAP TIPS
Another item to avoid with the SELECT statement is code like the
following:

SELECT MATNR MTART FROM MARA INTO L_MATNR, L_MTART.


CHECK L_MTART <> 'KMAT'.
... processing code ...
ENDSELECT.

As in the previous SELECT * example, this will put an unnecessary load


on the overall system because potentially many records that will not be
processed are still going from the database 8server to the application
server.
ABAP TIPS

TIP 3
Area Generic routine to initialize all fields of a structure

It seems that whenever you have to write a tricky piece of code, you need
a field symbol. The following code example will initialize all the fields of
any structure to any character you want. The two assumptions here are
that the structure comprises fields of the same type and that you can
move IS_FILL into them. This routine is useful when building an ABAP
program that will write a file for one of SAP's standard load programs.
Typically, the header record these programs use has a NO-DATA field that
you populate with a character you will use when you do not want SAP to
touch a field. You then fill all fields in the data record with this character,
except the ones you want SAP to process. Look at the material direct load
header record BMM00 and data record BMMH1 for an example.
ABAP TIPS
FORM INIT_STRUCTURE USING IS_STRUC IS_FILL.
FIELD-SYMBOLS: <FS_STR1>,
<FS_STR2>.
ASSIGN (IS_STRUC) TO <FS_STR2>.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STR2>
TO <FS_STR1>.
IF SY-SUBRC NE 0. EXIT. ENDIF.
<FS_STR1> = IS_FILL.
ENDDO.
ENDFORM.

This routine is then simply called like this:

TABLES: BMM00, BMMH1.


PERFORM INIT_STRUCTURE USING: 'BMM00' '\',
'BMMH1' '\'.
After the call to INIT_STRUCTURE is performed, all fields in BMM00 and
BMMH1 are set to a \.
ABAP TIPS

TIP 4
Area Generic Tips

 When you're working in the ABAP editor and you want to print out just

a few lines of code, use the line


command PR. This works same as the

line command CC in that you put the PR at both the top line and bottom

line of the section of code that you want to


print and then press return.
You can also
use the WW command to copy sections of code to the

window's clipboard.

 Do you want to make your printed ABAP look a little better? Use the
ABAP TIPS

 Have you ever had a user ask you why a certain warning or error

message is coming up in a transaction? If


you're not familiar with the
transaction,
you'll probably slowly debug your way in until you get to

the message in question. This can be time-consuming. A


faster
approach is to go into
debug mode when you start the transaction and

then set up a break point on the keyword MESSAGE. Go to the pull

down menu once you're in the


debugging screen and select

BREAKPOINT-> BREAK-POINT-> KEYWORD in 3.x or BREAKPOINT->


ABAP TIPS

 When you're working on a piece of code that several others are using
(a
customer exit, for example), use the
macro BREAK followed by your
user
name instead of using the BREAK-POINT ABAP keyword. In the

following example, the code will stop only


when the user-id is DRABAP.
This allows
other users to use the transaction without ending up in the

debug screen and having to press Continue.


X = Y1.
BREAK DRABAP.
Z = SUM / X.
ABAP TIPS

TIP 5
Area Database Optimizer Hints

It's true that in many cases the programmer knows exactly which index
works best, which is one reason why different database system
vendors provide so-called "optimizer hints."At first glance, it seems that
optimizer hints could make the database optimizer obsolete. But a
closer look shows that in order to select an optimal search method and
index, the programmer needs a good idea of the value distribution of
the related tables. Because R/3 is a highly configurable meta-
application used in many industries and countries by many customers,
you can find very differently scaled customer-order and order-product
relationships.

Take the following query that returns all Lufthansa flights starting at
Frankfurt:
ABAP TIPS

DATA: xcarrid LIKE spfli-carrid,


xconnid LIKE spfli-connid,
xcityfrom LIKE spfli-cityfrom.
SELECT carrid
connid
cityfrom
FROM spfli INTO (xcarrid, xconnid, xcityfrom)
WHERE carrid = 'LH ' AND cityfrom ='FRANKFURT'.
WRITE: / xcarrid, xconnid, xcityfrom.
ENDSELECT.

Copy this ABAP code into a test program, and we'll take a look at SQL
Trace - an important tool for programmers and system administrators.
You'll need to follow these steps:
ABAP TIPS
Start transaction ST05.
On the initial screen, select the trace functions you want to switch on
(SQL Trace). To switch on the trace under your user name, choose
Trace on.

Run the test program you just created.


Select the trace functions you want to switch off. Choose Trace off.
Now the system has recorded all the SQL calls being executed during
this time. Choose Trace list to get a list of the calls.

If you've never tried out this function, you'll probably experience some
confusion:
ABAP TIPS
The trace list obviously contains many lines that are not related to the
SELECT statement in the ABAP program.
Explanation: The execution of any ABAP program requires additional
administrative SQL calls. To restrict the list output, you can use the
filter introducing the trace list.

The trace list contains different SQL statements simultaneously related to


the one SELECT statement in the ABAP program.
Explanation: The R/3 Database Interface - a sophisticated component
of the R/3 Application Server - maps every Open SQL statement to
one or a series of physical database calls and brings it to execution.
This mapping, crucial to R/3s performance, depends on the particular
call and database system.

The WHERE clause in the trace list's SQL statement is different from the
WHERE clause in the ABAP statement.
ABAP TIPS
Explanation: In an R/3 system, a client is a self-contained unit with
separate master records and its own set of table data (in commercial,
organizational, and technical terms). With ABAP, every Open SQL
statement automatically executes within the correct client
environment. For this reason, a condition with the actual client code
(here MANDT = '000') is added to every WHERE clause if a client field
is a component of the searched table.

Since release 4.5, you can provide optimizer hints for SELECT statements
using the %_HINTS parameter that enables emergency repairs on the
spot. Of course, this parameter only works for those database systems
that support optimizer hints. Because optimizer hints are not covered by
SQL standards, each database vendor is free to provide them. Note that
parameters starting with "%_" are never published in the documentation
and should be used with special care only in an emergency. This
introduction is very simplified; for a detailed description, please refer to
Note 129385 in OSS.
ABAP TIPS
Using the %_HINTS parameter, the example becomes:

SELECT carrid connid cityfrom


FROM spfli INTO (xcarrid, xconnid, xcityfrom)
WHERE carrid = 'LH ' AND cityfrom = 'FRANKFURT'
%_HINTS ORACLE 'INDEX("SPFLI" "SPFLI~001")'.
WRITE: / xcarrid, xconnid, xcityfrom.
ENDSELECT.

The optimizer's execution plan for the query has changed. Instead of
performing a full table scan, the optimizer will perform an index range
scan, which is almost always a more efficient operation, unless the table
has a small number of rows.
If you specify hints incorrectly, ABAP ignores them but doesn't return a
syntax or runtime error. This lack of notification is the reason why you
have to make sure that you specified the index's correct denotation.
ABAP TIPS
TIP 6
Area Assign content to a field structure

The problem: You want to assign a special content to every field of a


structure. What is the easiest routine to do that?

REPORT ZFTER910.
DATA I_BLFA1 LIKE BLFA1.
FIELD-SYMBOLS: <FS>.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE I_BLFA1 TO <FS>.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
<FS> = '/'.
ENDDO.
ABAP TIPS

TIP 7
Area Simple F4 selection from an internal tables
The problem: You want to select a value from an internal table within a
popup like the F4-selection?

DATA: FIELDTAB LIKE HELP_VALUE OCCURS 2 WITH HEADER LINE,


VALUETAB(40) OCCURS 200 WITH HEADER LINE.

FIELDTAB-TABNAME = 'AUSP'.
FIELDTAB-FIELDNAME = 'ATWRT'.
FIELDTAB-SELECTFLAG = 'X'.
APPEND FIELDTAB.

LOOP AT IT_TREE WHERE PPRICE NE SPACE.


VALUETAB = IT_TREE-PPRICE.
APPEND VALUETAB.
ENDLOOP.
ABAP TIPS

CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'


EXPORTING
TITEL = 'Allowed Values'
IMPORTING

SELECT_VALUE = PVAR
TABLES
FIELDS = FIELDTAB
VALUETAB = VALUETAB
EXCEPTIONS
FIELD_NOT_IN_DDIC = 1
MORE_THEN_ONE_SELECTFIELD = 2
NO_SELECTFIELD = 3
OTHERS = 4.
ABAP TIPS
TIP 8
Area Tools and techniques to analyze performance problems

ABAP Runtime Analysis (SE30)


ABAP Program Extended Syntax Check (SLIN)
Process Overview (SM50)
Performance workload Analysis (ST02, ST03)
Performance workload Statistics Records (STAT)
Miscellaneous database statistics (ST04, DB01, DB02)
Trace Requests (ST05)
ABAP Program Debugger (SE38).

Fundamental Tools for Application Tuning


When trying to improve the performance of your R/3 system, the toughest
job is deciding what to tune. In order to make this decision, everyone
must first agree on the objectives, costs, and benefits of the tuning the
project.
ABAP TIPS
PROBLEM DETERMINATION
To find out what to tune, start by asking these questions:
How many programs are slow ?
Which programs are slow ?
Are specific transactions or specific parts of a transaction slow ?
What are average response times?
Are response times high for all dialogs?

Let’s start with problems that seem to affect everyone.

TUNING THE SYSTEM

I will list the basics I always cover and let you develop a path that works
best for you. Rule number one is, don’t attempt to tune production
systems based on statistics from development systems or from any time
periods when data conversion, transport, or other one-time only
processes were executing.
ABAP TIPS
Here are some base-level tuning tips grouped by the five most common
tuning transactions.
1. Base configuration: servers, work processes, and load balancing. The
Process Overview (SM50, SM51, and SM66) is often the best way to gain a
high-level view of your R/3 system. With SM50 you can watch programs
execute in real time and see cumulative processing times for work
processes
Time statistics on work process activity will provide information on the
types of jobs that are being processed and on the servers handling the
heaviest loads, allowing you to quickly identify servers with too few or
too many processes.
When you see several servers with uneven distribution, review your logon
load balancing schemes
If you see work processes in PRIV mode, you need to analyze your
memory management strategies and server profile parameters. Private
mode is usually an indicator of serious or complex problems that should
be entrusted to the SAP EarlyWatch team.
ABAP TIPS
Work processes that stop or hang up will display a reason code and
probably semaphores or other valuable system codes. For semaphore
analysis, the SAP Online Support Services (OSS) Note 33873 provides a
listing of codes and definitions. Semaphores are generally wait or conflict
codes issued by the operating system.

2. Hardware and operating system. Although we hope nothing other than


R/3 is running on the operating system, in reality processes are often
contending for OS-level memory. These will have a dramatic effect on the
R/3 System because SAP memory management is completely dependent
on the resources allocated by the base operating system.
So tuning is even more complicated: You have to decide when to analyze
the operating system and when to concentrate on R/3.

These rough guidelines, and statistics from OS06/ST06, indicate reasons


to suspect the hardware and operating system:
ABAP TIPS
CPU idle time for a single server that consistently falls below 30 percent.
“Pages out/second” that exceeds 10,000 per hour over a 24-hour period.
Load average over the last 15 minutes that exceeds 3.00.
Low values for “physical memory available.” (These values vary greatly
by the operating system, R/3 release, and the server loads, but you
should expect at least 1GB of memory to be available for R/3.)

3. SAP R/3 WorkLoad Analysis. The WorkLoad Analysis statistics found


via transaction ST03 are the most popular indicators of R/3 performance.
WorkLoad Analysis will show average response times for the entire
environment or for individual servers. It also provides detailed statistics
for specific transactions and programs within a given time period.
Transaction RZ03 will generate some of these same statistics, as well as
buffer usage, in real time.
ABAP TIPS
Most background jobs are reported as a single dialog step and will have
very high average response times.
Response times for query or report programs should generally have a
lower percentage of CPU time and higher percentage of database request
time.

Programs that perform complex calculations or routine scheduling (for


example, Material Requirements Planning should have a higher
percentage of CPU time and lower percentage of database request time).

Programs with UPDATE LOCAL will have higher database request times.
Custom programs that are not stored in the buffer and programs that
generate code (for example, Batch Data Conversion programs [BDCs] will
have higher load times).
ABAP TIPS
4. SAP R/3 buffer statistics. ST02 is used to tune system memory and
buffers. Tuning memory and buffers is very complex, so don’t attempt to
do it without extensive analysis and expertise. Additionally, memory must
always be tuned as a unit, because changes to one parameter will always
affect other areas. Several hundred profile parameters affect system
performance, and the majority of these either directly affect memory or
rely on proper memory management.
Hitratio: The hitratio is an indication of the buffers’ efficiency. When an
SAP user or system function module needs data or additional objects, the
system will generally look in R/3 buffers first. When the system is initially
started, buffers are empty; once objects are called for they are stored
subsequently in each buffer. The buffers will start with a hitratio of zero
and should improve over time to a maximum possible of 100 percent. A
system must be active for a considerable length of time before the
hitratios will be stable enough for analysis. For a stable system,
investigate buffers that consistently show hit ratios below 95 percent or
whose hitratios appear to be declining.
ABAP TIPS
Directory entries: All buffers need free directory entries. Memory space
requirements for storing directory entries is minimal, so don’t hesitate to
increase the number of directory entries for any buffer.

Object swaps: A large number of object swaps is generally an indication


of poor tuning; however, some swaps are unavoidable. Object swap
totals are cumulative from system startup; therefore, you should expect
to see these numbers grow over time.

Roll and paging area memory: Analyze roll and paging area memory in
detail when the percentage of current use consistently exceeds 80
percent or when a large portion of processing occurs on disk rather than
in real memory.

Heap memory: Batch programs can use large amounts of heap memory
and, therefore, cause OS-level swap space requirements to increase.
When you see large amounts of heap memory being used, make sure you
have enough OS swap space to keep from freezing your operating
system.
ABAP TIPS
Call statistics: You can use call statistics to analyze table buffers and
how effectively ABAP programs use them. Investigate low hitratios and
high numbers of fails. Unusually high numbers for SELECT are often
caused by programs performing large numbers of table scans, improper
use or unavailability of appropriate indexes, or improper search
techniques.
5. SAP R/3 table statistics. Use transaction ST10 to review table call
statistics. ST10 will show the number of table changes, direct reads, and
sequential reads and the number of calls and rows affected. These
statistics can be invaluable when you’re considering buffering a table,
adding an alternate index, or stripping data and tablespaces.

TUNING SPECIFIC PROGRAMS

The following tools and techniques can be used to analyze performance


problems with a little more exacting science:
ABAP TIPS
ABAP Runtime Analysis (SE30)
ABAP Program Extended Syntax Check (SLIN)
Process Overview (SM50)
Performance workload Analysis (ST02, ST03)
Performance workload Statistics Records (STAT)
Miscellaneous database statistics (ST04, DB01, DB02)
Trace Requests (ST05)
ABAP Program Debugger (SE38).

 The ABAP Program Extended System Check is able to: SLIN


 Locate unused data fields and tables
 Find dead code in programs
 Check authorizations
 Quick check interfaces and compatibility of calls to forms,
modules,
and external
programs
 Locate type conversions
 Give details of errors or warnings.
ABAP TIPS
 The Process Overview, transaction SM50
Is often the best way to observe a program during execution. By
watching the function modules being processed in real time, you can
see which areas are the most time consuming and decide what types
of tracing or debugging is most appropriate.

 Performance workload Analysis statistics from transaction ST02.


You can use ST02 and ST03 to generate a nearly endless variety of
statistics to tune individual programs or the entire system. For a more
detailed breakdown of processing times for individual programs see
Top Time, By Task, and other displays within ST03. ST02 and ST03
are very complex transactions with a multitude of performance
statistics. For custom code or programs with user exits, use the
dialog step counts to determine roughly how modifications affect
standard SAP code. Comparing statistics from code before and after
modifications have been made will tell you a lot about how efficiently
the code was written.
ABAP TIPS
 Database statistics
Transaction DB01 can reveal exclusive lockwait situations, which can
be used for both system-level and application tuning. (It can often
explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for
missing indexes, files with too little or too much space, extent
problems, and a host of related items. These numbers will come in
handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance


statistics. With ST04, you can make sure the database interface isn’t
having problems servicing your program’s request for data.
ABAP TIPS
 SQL trace
For individual program tuning, try SQL, enqueue, and RFC tracing via
transaction ST05 – Trace Requests. The traces will show step-by-step
details of each and every function within your program. SQL trace will
show database-level activity, as well as ABAP. The SQL trace will
reveal full scans of tables, inappropriate index choice, any failure to
load record keys, repetitive calls to the same data, and similar
conditions that make tuning an application much easier.

 ABAP Program Debugger


This tool is best suited for program development and maintenance,
but may be useful for tracing some difficult performance problems.
The debugger allows you to watch particular sections of code or data
fields during program execution. You can also generate lists of
modules, calls, and other key commands to summarize program
execution. You also have the ability to change data fields and
processing routines in a real-time mode.
ABAP TIPS
 Database statistics

Transaction DB01 can reveal exclusive lockwait situations, which can


be used for both system-level and application tuning. (It can often
explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for
missing indexes, files with too little or too much space, extent
problems, and a host of related items. These numbers will come in
handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance


statistics. With ST04, you can make sure the database interface isn’t
having problems servicing your program’s request for data.
ABAP TIPS
 Database statistics

Transaction DB01 can reveal exclusive lockwait situations, which can


be used for both system-level and application tuning. (It can often
explain why programs appear to be doing nothing.)

Transaction DB02 shows table and index statistics. You can check for
missing indexes, files with too little or too much space, extent
problems, and a host of related items. These numbers will come in
handy when you begin stripping data and tablespaces.

Database transaction ST04 will provide high-level performance


statistics. With ST04, you can make sure the database interface isn’t
having problems servicing your program’s request for data.
ABAP TIPS

TIP 9
Area SAPscript upload/download

Use program RSTXSCRP to upload and download SAPscript data -


including: forms, styles, printers, character sets, etc..
Download to the front-end or application server.
ABAP TIPS
TIP 10
Area Calculating Invoice due dates

Use function: FI_TERMS_OF_PAYMENT_PROPOSE.


ABAP TIPS
TIP 11
Area Accessing the ABAP editors programmatically

To access the ABAP editors (as well as screen painter, menu painter)
programmatically; use function: RS_TOOL_ACCESS.
ABAP TIPS

TIP 12
Area Hiding ABAP source code

In SAP releases upto 4.6C you can place the special character sequence
*@#@@[SAP] on the first line of an ABAP to hide the source code - it will
still run and behave as normal. To bring the code back to visible you must
upload it again from a file or put it into a Transport - release it, then edit
the transport file and remove the character string.

For 4.6C you can look at table: D010SINF This table includes a field
SQLX. When this field is set to "X" the program source will not be
viewable as for program: SAPMSYST.
ABAP TIPS
TIP 13
Area Delivery due list for release 4.6

The delivery due list (VL10G) uses user-exits to enable extra data to be
presented to the user in the ALV list - these are:
LV50R_VIEWG03 for data from Sales and LV50R_VIEWG06 for data from
Purchasing.
ABAP TIPS
TIP 14
Area To change development class of a SAPscript

Use program RSWBO052


ABAP TIPS
TIP 15
Area To transport Standard Texts

Use Program RSTXTRAN or enter directly in transport

Put entry directly into the transport:

R3TR TEXT TEXT,Text Name,ST,Language

R3TR TEXT TEXT,Z_ALLERGAN_SWISS_DISTRIBUTOR,ST,E


ABAP TIPS
TIP 16
Area Importing Graphics (Logos) into SAPscript

The program RSTXLDMC can be used to upload graphics (file extension


.tif on PC files) into individual standard text.
ABAP TIPS

TIP 17
Area Calling an ABAP form from SAPscript

In Layout Set:
DEFINE &X& = ...
DEFINE &Y& = ...
DEFINE &Z& = ...
PERFORM XXXXXX IN Zxxxxxxx
USING &X&
USING &Y&
CHANGING &Z&

In ABAP program Zxxxxxx


FORM XXXXXX TABLES INPUT1 STRUCTURE ITCSY
OUTPUT1 STRUCTURE ITCSY
ABAP TIPS
*get input parameters
LOOP AT INPUT1.
CASE INPUT1-NAME.
WHEN 'X'.
INPUT_X = INPUT1-VALUE.
WHEN 'Y'.
INPUT_Y = INPUT1-VALUE.
ENDCASE.
ENDLOOP.
{logic to use program variable input_x and input_y to set say program
variable output_z}

*set output variables:


REFRESH OUTPUT1.
OUTPUT1-NAME = 'Z'.
OUTPUT1-VALUE = OUTPUT_Z.
APPEND OUTPUT1.
ABAP TIPS
TIP 18
Area Debug SAPscript

You can debug a SAPscript: Use Tools - Word Processing - Layout Set.
Enter name of layout set and then Utilities - Activate Debugger.

It is of no consequence which layout set you enter when selecting the


SAPscript debugger. (Menu path: Tools-Word-processing - Forms,
Utilities - Activate Debugger) The next layoutset called will invoke the
debugger. This is quite handy when verifying which layoutset is being
called (Verifying customizing settings).

Another way to set the SAPscript debugger is to run program


RSTXDBUG.
Save Internal Table as File on the Presentation Server
ABAP TIPS

TIP 19
Area Standard Conversion Exits

Most conversion exits used in screens by SAP are actually function


modules. You can find them by searching for
CONVERSION_EXIT_name_INPUT and
CONVERSION_EXIT_name_OUTPUT.
ABAP TIPS
TIP 20
Area List of ways to transport variants
There are at least three ways that you can transport a variant for a
program.
When you first transport a program, all elements of a program are
transported along with the source code. This includes any variants that
have been created at this time

After the first time a program has been transported, there are two ways to
move a variant. The first method is to manually add an entry to the
transport for the variant you want to move. The format of the entry is
LIMU VARX xxxxxxxxName_of_the_variant where xxxxxxxx is the
program name.

The last method is the easiest, in that you do not have to remember any
arcane codes. Go to the ABAP editor, and go to the variant screen.
Under the Utilities menu is Transport Variant. This allows you to choose
the variants to transport, and the transport to put them in.
ABAP TIPS

TIP 21
Area List of methods to FTP from within SAP

Write a UNIX script and call it via CALL SYSTEM


Create a command through transaction SM69 (and execute via
SXPG_CALL_SYSTEM) that call the script with parameters.

Use the FILTER option on the OPEN DATASET command


Have an external step in your job that runs after the dataset has been
created. The external step will call a script with parameters to do the ftp.

NOTE: ftp can accept commands from a file, and it is often useful to
create a file containing the commands, and pipe the file into the ftp
command.
ABAP TIPS

TIP 22
Area User Status Tip

If you have several status' for a program that are nearly identical, it can be
easier to setup and maintain a single status, and just hide parts of it as
required.

EG:

DATA: BEGIN OF MTAB_UCOMM_EXCLUDE OCCURS 0,


VALUE(4) TYPE C,
END OF MTAB_UCOMM.
AT USER-COMMAND.
PERFORM SET_PF_STATUS.
ABAP TIPS
*---------------------------------------------------------------------*
* FORM SET_PF_STATUS *
*---------------------------------------------------------------------*
* Set up the menus/buttons for the report *
*---------------------------------------------------------------------*
FORM SET_PF_STATUS.
CLEAR MTAB_UCOMM_EXCLUDE.
REFRESH MTAB_UCOMM_EXCLUDE.
CASE MI_CURRENT_PAGE.
WHEN 1.
*-- Do not want any pushbuttons that point to items to the right
*-- since the list is at its rightmost position
MTAB_UCOMM_EXCLUDE-UCOMM = 'FRST'.
APPEND MTAB_UCOMM_EXCLUDE.
MTAB_UCOMM_EXCLUDE-UCOMM = 'PREV'.
APPEND MTAB_UCOMM_EXCLUDE.
ABAP TIPS
WHEN MI_TOTAL_PAGES.
*-- Do not want any pushbuttons that point to items to the left
*-- since the list is at its leftmost position
MTAB_UCOMM_EXCLUDE-UCOMM = 'LAST'.
APPEND MTAB_UCOMM_EXCLUDE.
MTAB_UCOMM_EXCLUDE-UCOMM = 'NEXT'.
APPEND MTAB_UCOMM_EXCLUDE.
WHEN OTHERS.
*-- Want all pushbuttons to appear on any other page
ENDCASE.
SET PF-STATUS 'MAIN' EXCLUDING MTAB_UCOMM_EXCLUDE.
ENDFORM. " SET_PF_STATUS

Editor Tips (*EJECT and *$*$)


*EJECT - If you put *EJECT at the start of a line, it will force a new page
when you print your source code. This comes in real handy when you
would like to have subroutines start at the top of a new page.
ABAP TIPS

*$*$* - By placing *$*$ at the beginning of a comment line will lock the line
for editing. You are able to edit the line until you hit the enter key.
ABAP TIPS

TIP 23
Area Change the font on the X_65_255 paper size

This tip was taken from the SAP-R3 mailing list, and is by Sheila Tichener.
If you need to use a large line-size to get all your data in I know the sap
version of X_65_255 for hp laser jet 4 gives an unnecessarily small font .
You can change it in SPAD (or copy to Y_65_255) as follows.
Choose Device formats, Change
hplj4
x_65_255
Execute
Double click on printer initialization
Change from:-
# select Courier 16.67 CPI normal font
\e(s0p16.67h0s0b4099T
to:-
# select Arial 24 CPI 15 point normal
\e(s0p24h15v0s0b16602T
ABAP TIPS

Also bold as follows:-


# select Arial 24 CPI 15 point bold
\e(s0p24h15v0s3b16602T
it still fits and looks better.
Also the error you get when changing a format in the output screen is
only a warning and can be overridden by pressing the green tick.
If the sap standard formats don't fit your requirements you can create
your own e.g. Y_65_170 . It seems to be the numbers in the name that
somehow triggers which one the ABAP chooses.
ABAP TIPS

TIP 24
Area To find a single quote within a string

Use 4 single quotes to find one quote in a string. The following code
snippet will replace a single quote with a double quote. replace '''' with '"'
into field
ABAP TIPS

TIP 25
Area Helping the DBMS find the correct index

Sometime, you may find that the a SELECT that you have coded is very
slow, even though you have put all the fields needed for an index in
your where clause. Usually, this means that the DBMS is selecting the
wrong index, you can tell if this is the case by doing an SQL trace
(System - Utilities - SQL Trace). You can help the DBMS select the
correct index by providing hints, include all fields from the index, and
make sure that the fields are in the same order as they appear in the
index.
ABAP TIPS

TIP 26
Area Saving screens created with Screen Painter

You can not download code for the Screens (except for the ABAP part),
but at least you can download a printout of what you set up. If you are in
Object Browser looking at the module program, you can highlight the
screens and click the print button. Click no to print immediately, then go
into System -- Services -- Output Control to select the spool request and
then go into List -- Save -- Local File. (Of course, you can send it to a
printer to see documentation on your screen).
ABAP TIPS

TIP 27
Area Help Views

For instance, in a Multi-language environment when you have a code and


text combination you want to set up. Typically, you have to set up two
tables: One with just the valid codes i.e. Zxxx where the only field is the
code field, the second is ZxxxT which contains the code and language as
the primary index with the description as the data field. In this case, then
you usually define a view H_Zxxx which is a join on these two tables. The
key thing is that the Foreign Key definition for the code field in the ZxxxT
must have the must have the type "Key Fields of a Text Table". This
results in the Table Maintenance generator (SM30) generating a screen
that allows you to maintain the code and description together for the
system language.
ABAP TIPS
In a related note, to set up a customer transaction for a Table
Maintenance generated dialog, use SE80 and enter the function group
used for the table maintenance dialog. Then Create a transaction (Zxxx) of
type parameter. Fill in text, specify Transaction SM30, click on "skip initial
screen" and set up default values of VIEWNAME set to Zxxx and UPDATE
set to X.

* After defining a foreign key relation of type KEY FIELDS IN A TEXT


TABLE the system automatically combines updates of the base table and
the text table. Try defining two tables and the foreign key as stated above.
So creating a help view is not needed for this purpose.
ABAP TIPS
* The help view is useful when you want to have a matchcode-like F4 help
on a specific field. Every field that is based on same domain automatically
uses the help view if no other F4 help (Matchcode, Process on value
request) is related. For a value table only one help view can be defined.

Example:

If you define in your abap a parameter or select-options 'parameters:


pa_bukrs like t001-bukrs.' you will see that is automatically has a F4 help.
This help is provided by helpview H_T001.