WRITE
WRITE
Options:
... NO-ZERO
... NO-SIGN
... NO GROUPING
... DD/MM/YY
... MM/DD/YY
... DD/MM/YYYY
... MM/DD/YYYY
... DDMMYY
... MMDDYY
... YYMMDD
... CURRENCY w
... DECIMALS d
... ROUND r
... UNIT u
... EXPONENT e
... LEFT-JUSTIFIED
... CENTERED
... RIGHT-JUSTIFIED
Note
The formatting options UNDER g and NO-GAP are intended only output to lists and therefore cannot be used with WRITE ... TO.
Option
... NO-ZERO
Effect
If the contents of f are equal to zero, only blanks are output; if f is of type C or N, leading zeros are replaced by blanks.
Option
... NO-SIGN
Effect
Option
... NO GROUPING
Effect
Option
... DD/MM/YY
Option
... MM/DD/YY
Effect
If f is a date field (type D), the date is output with a 2-character year as specified in the user's master record. Both of these formatting options
have the same value.
Option
... DD/MM/YYYY
Option
... MM/DD/YYYY
Effect
If f is a date field (type D), the date is output with a 4-character year as specified in the user's master record. Both of these formatting options
have the same value.
Option
... DDMMYY
Option
... MMDDYY
Effect
Date formatting like the additions ... DD/MM/YY and ... MM/DD/YY, but without separators.
Option
... YYMMDD
Effect
If f is a date field (type D), the date is output in the format YYMMDD (YY = year, MM = month, DD = Day).
Option
... CURRENCY w
Effect
Option
... DECIMALS d
Effect
d specifies the number of decimal places for a number field (type I, P or F) in d. If this value is smaller than the number of decimal places in the
number, the number is rounded. If the value is greater, the number is padded with zeros.
Since accuracy with floating point arithmetic is up to about 15 decimal places (see ABAP number types), up to 17 digits are output with floating
point numbers (type F). (In some circumstances, 17 digits are needed to differentiate between two neighboring floating point numbers.) If the
output length is not sufficient, as many decimal places as possible are output. Negative DECIMALS specifications are treated as DECIMALS 0.
Example
Option
... ROUND r
Effect
The decimal point is first moved r places to the left (r > 0) or to the right (r < 0); this is the same as dividing with the appropriate exponent
10**r. The value determined in this way is output with the valid number of digits before and after the decimal point. If the decimal point is
moved to the left, the number is rounded.
For further information about the interaction between the formatting options CURRENCY and DECIMALS, see the notes below.
Example
Option
... UNIT u
Effect
Example
Option
Effect
Outputs f as a time stamp with reference to time zone tz.
f must have type P(8) (short form) or type P(11) with 7 decimal places (long form). tz must have type C(6). You can specify the type
exactly by using DATA ... LIKE ... with reference to the appropriate elements of the structure TZONREF in the ABAP Dictionary.
It is assumed that the time stamp f is in UTC time (see GET TIME STAMP FIELD f). The system then uses the time zone tz to determine
the difference from UTC time and converts the time stamp. If tz has the initial value ' ', the time stamp is output in UTC time
Outputting a time stamp in long form requires 27 characters, the short form requires 19. The date (corresponding to a date output with length 10)
is formatted according to the setting in the user master record. There is a space between date and time. In the time part (corresponding to a time
output with length 8), the system inserts ':' as a separator. If you output a time stamp in its long form, the system separates seconds and fractions
of seconds using a comma. If you use an output length shorter than the default, all separators in both the time and date parts are omitted. If the
time stamp is still too long, the system omits the spaces between the date and the time. After this, the output is truncated from the right-hand end.
If you specify a date formatting option that uses separators, these are not suppressed, even when you shorten the output.
If the time stamp f is inconsistent, or the system cannot find the time zone tz, it places a '*' as the first character of the output. The time stamp
f is then output without taking the time zone into account (in other words, as UTC time). The output is shifted one character to the right, and
the last character is omitted.
If time zone tz does not exist, you may need to create (or recreate) it in table TTZZ.
You may not use the TIME ZONE option with CURRENCY, DECIMALS, EXPONENT, NO-SIGN, NO-GROUPING, NO-ZERO, ROUND or
UNIT.
Example
Option
... EXPONENT e
Effect
The field e defines a fixed exponent for a floating point number (type F). The mantissa is adjusted to the exponent by moving the decimal point
and padding with zeros. With EXPONENT 0, the exponent specification is suppressed.
However, if the output length is too short to accommodate all digits before the decimal point, the standard output format is used.
Example
Option
Effect
Notes
1. When using a template, you must specify the an explicit output length because otherwise the implicit output length of the field f is used.
Usually, the template is longer than the implicit output length.
2. If the leading sign is to be output with a field of type P or I, you must specify the wildcard character V at the desired place. If this
character does not appear in the template, no leading sign will be output if the value of f is negative.
3. When formatting a field of type P with decimal places, the value is not aligned with a character in the template representing the decimal
point (either a period or a comma). If you want to have this character in the output, you must insert it in the correct position in the
template and define the formatting from the right. If there is no character for the decimal point in the template, no such character is
output.
4. Fields of type F are first converted to the standard format and the resulting sequence is then copied to the template in the case of a field
of type C.
5. You implement the user-specific conversion conv with a function module called CONVERSION_EXIT_conv_OUTPUT, e.g.
CONVERSION_EXIT_ALPHA_OUTPUT for the conversion of numeric values with leading zeros to a format without leading zeros for
type C fields. If a Dictionary field is output and the domain of that field defines a conversion routine, this is executed automatically. For
a description of the conversion, refer to the documentation of the appropriate function module.
Example
If the output length "(8)" was not specified here, the output would be "15:46:" because the implicit output length for the type T is 6.
Option
Effect
... UNDER g
Effect
Output of the field f begins at the column from which the field g was output. If this happens in the same output line, the output of the field g is
overwritten.
Note
After UNDER, the field g must be written exactly as the reference field in the previous WRITE statement, i.e. with an offset and length if
necessary. The exception to this rule is if g is a text symbol. In this case, the reference field is determined by the number of the text symbol (not
by the text stored there).
Example
FIELD-SYMBOLS <FNAME>.
ASSIGN 'First Name' TO <FNAME>.
This produces the following output (numbers appear right-justified in their output fields!):
Option
... NO-GAP
Effect
Suppresses the blank after the field f. Fields output one after the other are then displayed without gaps.
Example
Output several literals without gaps:
If NO-GAP was not specified here, the output would have been "A B C" because one blank is always implicitly generated between consecutive
output fields.
Option
... LEFT-JUSTIFIED
... CENTERED
... RIGHT-JUSTIFIED
Effect
Examples
* Output: |abcde |
* | abcde |
* | abcde|
DATA: TARGET_FIELD1(10),
TARGET_FIELD2 LIKE TARGET-FIELD1,
TARGET_FIELD3 LIKE TARGET-FIELD1.
* Output: |123 |
* | 456 |
* | 789|
Note
Every user can specify in his/her master record (User defaults) how the date is to be formatted on output and whether the decimal character
should be a comma or a period. You can also set these output parameters for a particular program by using the statement SET COUNTRY.
Notes
You can use the additions of the first group (NO-ZERO, NO-SIGN, DD/MM/YY etc., CURRENCY, DECIMALS, ROUND, EXPONENT)
simultaneously, provided it makes sense. You can combine the additions UNDER and NO-GAP with all other additions in any permutation;
however, they are not taken into account until the field f has been formatted according to all the other options.
If you want to format a field using a special conversion routine , all the other additions (apart from UNDER and NO-GAP) are ignored. This also
applies if the conversion routine is not explicitly specified, but comes from the ABAP Dictionary.
If you want to format a field using a template, the system first takes into account the options of the first group, and then places the result in the
template. However, if you specify one of the date-related formatting options (DD/MM/YY etc.), the template is ignored.
Finally, the formatted field or the template is copied to the target field according to the requested alignment. For type C fields, it is the occupied
length that is relevant, not the defined length; this means that trailing blanks are not taken into account.
rounding factor = c + r - d.
The field price is supposed to be of ABAP type P (or I); it contains a currency amount. The CURRENCY specification expresses how many
decimal places price is to have and may differ from the definition of price (the decimal point is not stored internally, but comes from the
type attributes of price). Normally, price is output with as many decimal places as the field has internally according to the type attributes or
the CURRENCY specification. You can override this number of output decimal places with DECIMALS. The addition ROUND addition moves the
decimal point r places to the left, if r is positive, otherwise to the right. This means that a $ amount is output with ROUND 3 in the unit 1000 $.
According to the above formula, there can also be a "negative" rounding factor; then, the corresponding number of zeros is appended to the
amount price on the right using the "rounding factor". However, the value of "rounding factor" must be at least equal to -14.
If the field price is normally formatted with decimal places (e.g. fields for currency amounts), these are treated like a CURRENCY specification
when rounding, if CURRENCY was not expressly specified.
If present, the DECIMALS specification defines how many decimal places are to be output after rounding.
If the DECIMALS and the (explicit or implicit) CURRENCY specifications are different, rounding takes place according to the above formula,
even if no ROUND specification was made (i.e. r = 0).
If a field in the DATA statement was declared with DECIMALS n, WRITE treats it like a currency field with n decimal places.
Examples
SALES = 99990.
WRITE SALES CURRENCY 'DEM' ROUND 3 DECIMALS 1. " 1,0 TDM
WRITE SALES CURRENCY 'ITL' ROUND 3 DECIMALS 1. " 100,0 TLira
SALES = 93860.
WRITE SALES CURRENCY 'DEM' ROUND 2 DECIMALS 2. " 9,38 HDM
WRITE SALES CURRENCY 'ITL' ROUND 2 DECIMALS 2. " 938,60 HLira
SALES = 93860.
WRITE SALES CURRENCY 'DEM' DECIMALS 0. " 939 DM
Exceptions
Non-Catchable Exceptions