En esta página están todas las instrucciones ABAP/4 del sistema SAP R/3, además cada una de ellas contiene un pequeño ejemplo. Las sentencias están ordenadas alfabéticamente para una mejor búsqueda..
ADD..........................................................................................................................................................7
ADD-CORRESPONDING.....................................................................................................................7
APPEND..................................................................................................................................................8
ASSIGN...................................................................................................................................................8
AT .. ENDAT.........................................................................................................................................13
AT END OF .. ENDAT.........................................................................................................................13
AT FIRST .. ENDAT............................................................................................................................14
AT LAST .. ENDAT..............................................................................................................................15
AT LINE-SELECTION........................................................................................................................15
AT NEW .. ENDAT...............................................................................................................................17
AT PFNN...............................................................................................................................................17
AT SELECTION-SCREEN..................................................................................................................18
AT USER-COMMAND........................................................................................................................19
AUTHORITY-CHECK.........................................................................................................................20
BACK......................................................................................................................................................20
BREAK...................................................................................................................................................21
BREAK-POINT....................................................................................................................................21
CALL......................................................................................................................................................21
CALL CUSTOMER-FUNCTION.......................................................................................................22
CALL DIALOG.....................................................................................................................................22
CALL FUNCTION...............................................................................................................................23
CALL METHOD...................................................................................................................................25
CALL SCREEN......................................................................................................................................25
CALL SUBSCREEN...............................................................................................................................26
CALL TRANSACTION.........................................................................................................................26
CASE .. ENDCASE.................................................................................................................................27
CHAIN....................................................................................................................................................28
CHECK....................................................................................................................................................28
CLEAR....................................................................................................................................................29
CLOSE CURSOR...................................................................................................................................29
CLOSE DATASET.................................................................................................................................30
CNT.........................................................................................................................................................30
COLLECT...............................................................................................................................................30
COMMIT WORK...................................................................................................................................31
COMMUNICATION.............................................................................................................................31
COMPUTE.............................................................................................................................................36
CONCATENATE...................................................................................................................................38
CONDENSE............................................................................................................................................39
CONSTANTS.........................................................................................................................................39
CONTINUE............................................................................................................................................40
CONTROLS............................................................................................................................................40
CONVERT DATE...................................................................................................................................40
CONVERT TEXT...................................................................................................................................41
CREATE OBJECT..................................................................................................................................41
DATA.......................................................................................................................................................41
DEFINE .. END-OF-DEFINITION.....................................................................................................43
DELETE..................................................................................................................................................43
DELETE DATASET...............................................................................................................................45
DELETE DYNPRO.................................................................................................................................45
DELETE FROM DATABASE................................................................................................................45
2
DELETE FROM SHARED BUFFER....................................................................................................46
DELETE REPORT..................................................................................................................................46
DELETE TEXTPOOL............................................................................................................................46
DESCRIBE DISTANCE..........................................................................................................................46
DESCRIBE FIELD..................................................................................................................................47
DESCRIBE LIST.....................................................................................................................................47
DESCRIBE TABLE..................................................................................................................................48
DETAIL....................................................................................................................................................48
DIVIDE.....................................................................................................................................................49
DIVIDE-CORRESPONDING................................................................................................................49
DO .. ENDDO...........................................................................................................................................49
EDITOR-CALL FOR REPORT............................................................................................................50
END-OF-PAGE......................................................................................................................................50
END-OF-SELECTION..........................................................................................................................50
EXEC SQL .. ENDEXEC.........................................................................................................................51
EXIT.........................................................................................................................................................51
EXIT FROM STEP-LOOP....................................................................................................................52
EXIT FROM SQL...................................................................................................................................52
EXPORT..................................................................................................................................................52
EXPORT DYNPRO................................................................................................................................52
EXPORT TO DATABASE.....................................................................................................................53
EXPORT TO DATASET.......................................................................................................................53
EXPORT TO MEMORY.......................................................................................................................53
EXPORT TO SHARED BUFFER.........................................................................................................54
EXTRACT...............................................................................................................................................54
FETCH....................................................................................................................................................55
FIELD.....................................................................................................................................................55
FIELD GROUPS....................................................................................................................................56
FIELD-SYMBOLS.................................................................................................................................56
FIELDS...................................................................................................................................................57
FORM .. ENDFORM.............................................................................................................................57
FORMAT................................................................................................................................................59
FREE.......................................................................................................................................................60
FREE MEMORY....................................................................................................................................60
FREE OBJECT.......................................................................................................................................60
FUNCTION .. ENDFUNCTION..........................................................................................................60
FUNCTION-POOL...............................................................................................................................61
GENERATE DYNPRO..........................................................................................................................61
GENERATE REPORT..........................................................................................................................61
GENERATE SUBROUTINE POOL....................................................................................................62
GET.........................................................................................................................................................62
GET CURSOR........................................................................................................................................63
GET LOCALE ANGUAGE...................................................................................................................64
GET PARAMETER...............................................................................................................................64
GET PROPERTY..................................................................................................................................65
GET RUN TIME...................................................................................................................................65
GET TIME.............................................................................................................................................65
HIDE.......................................................................................................................................................66
IF .. ENDIF............................................................................................................................................66
IMPORT DIRECTORY FROM ATABASE.......................................................................................66
IMPORT DYNPRO..............................................................................................................................67
IMPORT FROM DATABASE............................................................................................................67
IMPORT FROM DATASET..............................................................................................................68
IMPORT FROM LOGFILE...............................................................................................................68
IMPORT FROM MEMORY..............................................................................................................68
IMPORT SHARED BUFFER.............................................................................................................69
3
INCLUDE............................................................................................................................................69
INCLUDE TRUCTURE.....................................................................................................................69
INCLUDE TYPE.................................................................................................................................70
INFOTYPES........................................................................................................................................70
INITIALIZATION.............................................................................................................................70
INSERT................................................................................................................................................71
INSERT .. INTO..................................................................................................................................72
INSERT REPORT...............................................................................................................................73
INSERT TEXTPOOL..........................................................................................................................73
LEAVE...................................................................................................................................................73
LEAVE PROGRAM.............................................................................................................................74
LEAVE SCREEN..................................................................................................................................74
LEAVE TO LIST-PROCESSING......................................................................................................74
LEAVE TO SCREEN...........................................................................................................................74
LEAVE TO TRANSACTION..............................................................................................................75
LOAD REPORT....................................................................................................................................75
LOCAL...................................................................................................................................................76
LOOP .. ENDLOOP..............................................................................................................................76
LOOP AT SCREEN .. ENDLOOP.......................................................................................................77
MESSAGE.............................................................................................................................................78
MODIFY................................................................................................................................................79
MODIFY CURRENT LINE.................................................................................................................79
MODIFY LINE.....................................................................................................................................80
MODIFY SCREEN................................................................................................................................81
MODULE................................................................................................................................................81
MODULE .. ENDMODULE..................................................................................................................81
MOVE.....................................................................................................................................................82
MOVE-CORRESPONDING.................................................................................................................82
MULTIPLY............................................................................................................................................83
MULTIPLY-CORRESPONDING.......................................................................................................83
NEW-LINE............................................................................................................................................84
NEW-PAGE...........................................................................................................................................84
ON CHANGE OF .. ENDON................................................................................................................84
OPEN CURSOR....................................................................................................................................85
OPEN ATASET....................................................................................................................................85
OPERADOR DE ASIGNACION "="..................................................................................................86
OVERLAY.............................................................................................................................................86
PACK......................................................................................................................................................87
PARAMETERS.....................................................................................................................................87
PERFORM.............................................................................................................................................88
POSITION.............................................................................................................................................91
PRINT-CONTROL...............................................................................................................................92
PROCESS...............................................................................................................................................92
PROGRAM.............................................................................................................................................93
PROVIDE .. ENDPROVIDE.................................................................................,...............................93
PUT.........................................................................................................................................................94
RAISE.....................................................................................................................................................94
RANGES.................................................................................................................................................95
READ CALENDAR................................................................................................................................95
READ CURRENT LINE........................,...............................................................................................95
READ DATASET................................................,..................................................................................95
READ LINE............................................................................................................................................96
READ REPORT.....................................................................................................................................96
READ TABLE........................................................................................................................................97
READ TEXTPOOL...............................................................................................................................98
RECEIVE RESULTS FROM FUNCTION.........................................................................................98
4
REFRESH..............................................................................................................................................99
REFRESH CONTROL.........................................................................................................................99
REFRESH SCREEN.............................................................................................................................99
REJECT.................................................................................................................................................99
REPLACE..............................................................................................................................................100
REPORT................................................................................................................................................100
RESERVE..............................................................................................................................................101
ROLLBACK WORK..............................................................................................................................102
SCAN......................................................................................................................................................102
SCROLL LIST.......................................................................................................................................102
SEARCH.................................................................................................................................................103
SELECT .. ENDSELECT.......................................................................................................................104
SELECTION-OPTIONS.......................................................................................................................107
SELECTION-SCREEN.........................................................................................................................108
SET BLANK LINES.............................................................................................................................110
SET COUNTRY....................................................................................................................................111
SET CURSOR........................................................................................................................................111
SET EXTENDED CHECK.....................................................................................................................112
SET LANGUAGE..................................................................................................................................112
SET LEFT SCROLL-BOUNDARY.....................................................................................................112
SET LOCALE LANGUAGE.................................................................................................................113
SET MARGIN.......................................................................................................................................113
SET PARAMETER...............................................................................................................................113
SET PF-STATUS..................................................................................................................................113
SET PROPERTY..................................................................................................................................114
SET RUN TIME ANALIZER.............................................................................................................114
SET SCREEN........................................................................................................................................115
SET TITLEBAR....................................................................................................................................115
SET UPDATE TASK LOCAL..............................................................................................................116
SET USER-COMMAND......................................................................................................................116
SHIFT....................................................................................................................................................116
SKIP......................................................................................................................................................117
SORT.....................................................................................................................................................117
SPLIT....................................................................................................................................................119
START-OF-SELECTION..................................................................................................................120
STATICS..............................................................................................................................................120
STOP....................................................................................................................................................120
SUBMIT...............................................................................................................................................120
SUBTRACT..........................................................................................................................................122
SUBTRACT-CORRESPONDING......................................................................................................123
SUM.......................................................................................................................................................123
SUMMARY...........................................................................................................................................124
SUPRESS DIALOG..............................................................................................................................124
SYNTAX-CHECK.................................................................................................................................124
SYNTAX-CHECK FOR DYNPRO......................................................................................................125
SYNTAX-TRACE.................................................................................................................................126
TABLES.................................................................................................................................................126
TOP-OF-PAGE....................................................................................................................................127
TRANSFER...........................................................................................................................................128
TRANSLATE.........................................................................................................................................128
TYPE-POOL..........................................................................................................................................128
TYPE-POOLS.......................................................................................................................................129
TYPES....................................................................................................................................................129
ULINE....................................................................................................................................................130
UNPACK................................................................................................................................................130 UPDATE................................................................................................................................................130
5
WAIT......................................................................................................................................................131
WHILE .. ENDWHILE..........................................................................................................................132
WINDOW...............................................................................................................................................132
WINDOW...............................................................................................................................................133
WRITE TO.............................................................................................................................................135
ADD
Definición
Añade el contenido del campo
Sintaxis:
ADD
ADD
Suma la secuencia de campos
• Con la cláusula GIVING el campo
• Con la cláusula TO al campo
Ejemplo 1
DATA: NUMBER TYPE I VALUE 3,
SUM TYPE I VALUE 5.
ADD NUMBER TO SUM.
Ejemplo 2
DATA: BEGIN OF NUMBERS,
ONE TYPE P VALUE 10,
TWO TYPE P VALUE 20,
THREE TYPE P VALUE 30,
FOUR TYPE P VALUE 40,
FIVE TYPE P VALUE 50,
SIX TYPE P VALUE 60,
END OF NUMBERS,
SUM TYPE I VALUE 1000.
ADD NUMBERS-ONE THEN NUMBERS-TWO
UNTIL NUMBERS-FIVE GIVING SUM.
Errores
• BCD_BADDATA : El campo P tiene un formato BCD incorrecto.
BCD_FIELD_OVERFLOW : El campo del resultado es demasiado pequeño.
BCD_OVERFLOW : Overflow al hacer la operación aritmética .
COMPUTE_INT_PLUS_OVERFLOW : Al añadir se ha producido un "Overflow" en un entero.
Vease también: COMPUTE, ADD-CORRESPONDING
ADD-CORRESPONDING
Definición
Añade el contenido de los componentes de un registro sobre otro.
Sintaxis:
ADD-CORRESPONDING
Añade el contenido de los componentes del registro
Ejemplo:
DATA: BEGIN OF VECTOR,
X TYPE I,
Y TYPE I,
LENGTH TYPE I,
END OF VECTOR,
BEGIN OF CIRCLE,
VOLUME TYPE P
7
Y TYPE P,
RADIUS TYPE I,
X TYPE I,
END OF CIRCLE.
...
ADD-CORRESPONDING VECTOR TO CIRCLE.
Vease también: ADD, MOVE-CORRESPONDING, SUBTRACT-CORRESPONDING, MULTIPLY-CORRESPONDING, DIVIDE-CORRESPONDING .
APPEND
Definición
Se utiliza para añadir registros en una tabla interna.
Sintaxis:
APPEND { <área-trabajo> TO INITIAL LINE TO}
Esta sentencia añade una línea sobre la tabla
• Con la cláusula <área-trabajo> TO se especifica el área de trabajo que queremos añadir. Con tablas internas con cabecera de línea se puede omitir esta cláusula, los datos serán leídos del área de trabajo de la tabla interna.
• En lugar de esta opción se puede utilizar INITIAL LINE TO, la cual añade una línea en la tabla interna con los valores iniciales correspondientes a cada componente de la tabla.
APPEND LINES OF
Para añadir parte del contenido de una tabla interna (o toda la tabla) al final de otra tabla, se puede utilizar la sentencia APPEND con el formato anterior.
Después de ejecutarse la sentencia la variable del sistema SY-TABIX tiene el índice de la última línea añadida. Este método de añadir líneas de una tabla sobre otra es de tres a cuatro veces más rápido si lo hacemos línea a línea. Siempre que sea posible, es mejor utilizar este metodo.
• Si no se especifican las cláusulas FROM
APPEND { <área-trabajo> TO }
Con este formato de la sentencia las líneas de la tabla no son añadidas al final de la tabla, sino que son añadidas en la tabla
Vease también: INSERT, MODIFY.
ASSIGN
Definición
Asigna con una referencia directa o dinámica el nombre del objeto que deseamos asignar a un campo.
Sintaxis:
Si conocemos el nombre del objeto de datos que deseamos asignar a un field-symbol antes de la ejecución del programa debemos realizar una asignación estática, es decir, con una referencia
8
directa al objeto de dato. Si no conocemos el objeto de dato hasta la ejecución del programa, la asignación deberá ser dinámica, es decir, con una referencia indirecta.
La sintaxis de la sentencia ASSIGN estática, sin especificación del offset, es la siguiente:
ASSIGN
Después de la asignación, el field-symbol
La sintaxis de la sentencia ASSIGN estática, con especificación del offset, es la siguiente:
ASSIGN
La única diferencia con la variante anterior es que en ésta especificamos el offset y la longitud del objeto de datos que hay que asignar. Las cláusulas
Si sólo en tiempo de ejecución conocemos el nombre del objeto de dato que hay que asignar al field-symbol debemos realizar una asignación dinámica. Para ello utilizaremos la sentencia ASSIGN con la siguiente sintaxis:
ASSIGN (
El nombre de objeto de dato que hay que asignar al field-symbol estará contenido en
• Si la asignación se realiza en una subrutina o módulo de función, el sistema busca el campo en la subrutina o módulo de función como objeto local.
• Si la asignación se realiza fuera de una subrutina o módulo de función, o el campo no se encuentra allí, el sistema busca el campo como objeto global al programa.
• Si el campo tampoco se encuentra como objeto global al programa, el sistema busca un área de trabajo declarada con la sentencia TABLES en el programa principal, o en el grupo de programas actual. La definición "grupo de programas" engloba un programa principal y todos los programa contenidos, incluyendo aquéllos en los que se realice una llamada a una subrutina.
Si la búsqueda del campo es satisfactoria y el campo puede ser asignado al field-symbol, el campo SY-SUBRC valdrá 0. En otro caso valdrá 4. Por razones de seguridad, se debe comprobar el valor de SY-SUBRC después de realizar la asignación para prevenir que un field-symbol apunte a un área indefinida. Las cláusulas
Si antes de la ejecución del programa sabemos que vamos a asignar un área de trabajo a un field-symbol, pero hasta la ejecución no sabemos de dicha área de trabajo se puede utilizar la siguiente variante dinámica de la sentencia ASSIGN:
ASSIGN TABLE FIELD (
El sistema busca el objeto de dato que vamos a asignar al field-symbol sólo en las áreas de trabajo declaradas con la sentencia TABLES en el programa principal de un grupo de programa. El sistema sólo realiza el paso 3 de la sentencia anteriormente vista. Si la búsqueda es satisfactoria y el campo puede ser asignado al field-symbol, SY-SUBRC es 0; en caso contrario es 4. Las cláusulas
Además de poder asignar objetos de datos a field-symbols, el sistema nos permite asignar un field-symbol sobre otro field-symbol. Para realizar esto se puede utilizar cualquier variante vista hasta el
9
momento de la sentencia ASSIGN, pero en lugar de utilizar un objeto de dato utilizaremos un field-symbol. Resumamos estas variantes a continuación:
ASSIGN (
ASSIGN (
ASSIGN (
ASSIGN TABLE FIELD (
ASSIGN COMPONENT
El sistema asigna el componente
• Se puede definir el tipo de un field-symbol utilizando la cláusula TYPE de la sentencia ASSIGN. La cláusula TYPE se puede utilizar con todas las variantes de la sentencia ASSIGN vistas anteriormente.
• También se puede especificar el número de decimales de un field-symbol si el campo asignado es del tipo P (empaquetado). Para ello se especifica la cláusula DECIMALS de la sentencia ASSIGN. La cláusula DECIMALS se puede utilizar con todas las variantes de la sentencia ASSIGN. Con esta cláusula se puede tener distinto número de decimales entre el objeto de dato asignado y el field-symbol.
Cuando trabajamos con subrutinas, se puede estar interesados en crear copias locales de datos globales sobre la pila de datos. Para realizar esto, disponemos de la siguiente cláusula de la sentencia ASSIGN:
ASSIGN LOCAL COPY OF ... TO
El sistema es una copia del dato global especificado sobre la pila. En la subrutina, se puede acceder y cambiar esta copia sin cambiar el valor del dato global. Se puede utilizar esta cláusula con todas las variantes de la sentencia ASSIGN a excepción de la vista en el apartado "Sentencia ASSIGN con componentes de un field-string".
Ejemplo 1:
DATA NAME(4) VALUE 'JOHN'.
FIELD-SYMBOLS
ASSIGN NAME TO
WRITE
Salida: JOHN
Ejemplo 2:
DATA: NAME(12) VALUE 'JACKJOHNCARL',
X(10) VALUE 'XXXXXXXXXX'.
FIELD-SYMBOLS
ASSIGN NAME+4 TO
WRITE
ASSIGN NAME+4(*) TO
WRITE
Salida: JOHNCARLXXXX JOHNCARL
Ejemplo 3:
DATA SALES_DEC2(10) TYPE P DECIMALS 2 VALUE 1234567.
FIELD-SYMBOLS
ASSIGN SALES_DEC2 TO
WRITE: / SALES_DEC2,
/
Salida:
10
1,234,567.00
1,234.56700
Ejemplo 4:
DATA X(4) VALUE 'Carl'.
PERFORM U.
FORM U.
FIELD-SYMBOLS
ASSIGN LOCAL COPY OF X TO
WRITE
MOVE 'John' TO
WRITE
WRITE X.
ENDFORM.
Salida: Carl John Carl
Ejemplo 5:
DATA: NAME(4) VALUE 'XYZ', XYZ VALUE '5'.
FIELD-SYMBOLS
ASSIGN (NAME) TO
WRITE
Salida: 5
Ejemplo 6:
TABLES TRDIR.
DATA NAME(10) VALUE 'TRDIR-NAME'.
FIELD-SYMBOLS
MOVE 'XYZ_PROG' TO TRDIR-NAME.
ASSIGN TABLE FIELD (NAME) TO
WRITE
Salida: XYZ_PROG
Ejemplo 7:
TABLES TRDIR.
DATA: F(8) VALUE 'F_global',
G(8) VALUE 'G_global'.
MOVE 'XYZ_PROG' TO TRDIR-NAME.
PERFORM U.
FORM U.
DATA: F(8) VALUE 'F_local',
NAME(30) VALUE 'F'.
FIELD-SYMBOLS
ASSIGN (NAME) TO
WRITE
MOVE 'G' TO NAME.
ASSIGN (NAME) TO
WRITE
MOVE 'TRDIR-NAME' TO NAME.
ASSIGN (NAME) TO
WRITE
ENDFORM.
Salida: F_local G_global XYZ_PROG
Ejemplo 8:
PROGRAM P1MAIN.
TABLES TRDIR.
DATA NAME(30) VALUE 'TFDIR-PNAME'.
FIELD-SYMBOLS
MOVE 'XYZ_PROG' TO TRDIR-NAME.
PERFORM U(P1SUB).
ASSIGN (NAME) TO
11
WRITE
CALL FUNCTION 'EXAMPLE'.
PROGRAM P1SUB.
TABLES TFDIR.
...
FORM U.
FIELD-SYMBOLS
DATA NAME(30) VALUE 'TRDIR-NAME'.
ASSIGN TABLE FIELD (NAME) TO
WRITE
MOVE 'FCT_PROG' TO TFDIR-PNAME.
ENDFORM.
FUNCTION-POOL FUN1.
FUNCTION EXAMPLE.
DATA NAME(30) VALUE 'TRDIR-NAME'.
FIELD-SYMBOLS
ASSIGN (NAME) TO
IF SY-SUBRC = 0.
WRITE
ELSE.
WRITE / 'TRDIR-NAME cannot be accessed'.
ENDIF.
ENDFUNCTION.
Salida: XYZ_PROG FCT_PROG
TRDIR-NAME no se tiene acceso.
Ejemplo 9:
PROGRAM P1MAIN.
TABLES TRDIR.
DATA NAME(30) VALUE 'TFDIR-PNAME'.
FIELD-SYMBOLS
MOVE 'XYZ_PROG' TO TRDIR-NAME.
CALL FUNCTION 'EXAMPLE'.
FUNCTION-POOL FUN1.
FUNCTION EXAMPLE.
DATA NAME(30) VALUE 'TRDIR-NAME'.
FIELD-SYMBOLS
ASSIGN LOCAL COPY OF MAIN
TABLE FIELD (NAME) TO
IF SY-SUBRC = 0.
WRITE
ELSE.
WRITE / 'TRDIR-NAME cannot be accessed'.
ENDIF.
ENDFUNCTION.
Salida: XYZ_PROG
Ejemplo 10:
PROGRAM P1MAIN.
DATA: BEGIN OF REC,
A VALUE 'a',
B VALUE 'b',
C VALUE 'c',
D VALUE 'd',
END OF REC,
CN(5) VALUE 'D'.
FIELD-SYMBOLS
DO 3 TIMES.
ASSIGN COMPONENT SY-INDEX OF
STRUCTURE REC TO
IF SY-SUBRC <> 0. EXIT. ENDIF.
WRITE
ENDDO.
ASSIGN COMPONENT CN OF STRUCTURE REC TO
WRITE
Output: a b c d
Vease también: DESCRIBE FIELD, MOVE.
AT .. ENDAT
Definición
La sentencia AT
Sintaxis:
AT
ENDAT.
La setencia AT
• La cláusula WITH se utiliza para indicar que la sentencia AT se debe ejecutar si para el field-group
Ejemplo 1:
DATA: NAME(30),
SALES TYPE I.
FIELD-GROUPS: HEADER, INFOS.
INSERT: NAME INTO HEADER,
SALES INTO INFOS.
...
LOOP.
AT NEW NAME.
NEW-PAGE.
ENDAT.
...
AT END OF NAME.
WRITE: / NAME, SUM(SALES).
ENDAT.
ENDLOOP.
Vease también: LOOP, EXTRACT.
AT END OF .. ENDAT
Definición
La sentencia AT END OF .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta cuando se detecta que cambia algún valor para el campo especificado.
Sintaxis:
AT END OF
ENDAT.
13
La sentencia AT END OF se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT END OF .. ENDAT el área de trabajo no se rellena con la línea actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea END OF
Ejemplo 1:
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT NEW NAME.
NEW-PAGE.
WRITE / COMPANIES-NAME.
ENDAT.
WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.
AT END OF NAME.
SUM.
WRITE: / COMPANIES-NAME, COMPANIES-SALES.
ENDAT.
ENDLOOP.
Vease también: LOOP.
AT FIRST .. ENDAT
Definición
La sentencia AT FIRST .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta con el primer valor o primer registro de la sentencia LOOP .. ENDLOOP.
Sintaxis:
AT FIRST.
ENDAT.
La sentencia AT FIRST se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT FIRST .. ENDAT el área de trabajo no se rellena con la línea actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea FIRST el sistema sobrescribe todos los campos de la clave estándar, que se encuentran a la derecha del campo
Ejemplo 1:
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT FIRST.
NEW-PAGE.
WRITE / COMPANIES-BUKRS.
14
ENDAT.
WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.
ENDLOOP.
Vease también: LOOP.
AT LAST .. ENDAT
Definición
La sentencia AT LAST .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta con el último valor o último registro de la sentencia LOOP .. ENDLOOP.
Sintaxis:
AT LAST.
ENDAT.
La sentencia AT LAST se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT LAST .. ENDAT el área de trabajo no se rellena con la línea actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea LAST el sistema sobrescribe todos los campos de la clave estándar, que se encuentran a la derecha del campo
Ejemplo 1:
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT NEW NAME.
NEW-PAGE.
ENDAT.
WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.
AT LAST.
SUM.
WRITE: / COMPANIES-NAME, COMPANIES-SALES.
ENDAT.
ENDLOOP.
Vease también: LOOP.
AT LINE-SELECTION
Definición
Para permitir al usuario seleccionar una línea de un listado y realizar alguna acción, se puede escribir un bloque de proceso en el programa para el evento AT LINE-SELECTION.
Sintaxis:
AT LINE-SELECTION..
ENDAT.
Este evento define un bloque de proceso que se activa cuando seleccionamos una línea del informe. Este evento se utiliza en los informes interactivos cuando generan salidas secundarias.
15
Este evento se describe con mayor detalle en el Capítulo 15: "Programas interactivos". Si no definimos una interfaz particular para el listado (a través de la transacción "menu painter") el sistema crea una interfaz estándar. La apariencia de esta interfaz es la misma que la de cualquier informe, interactivo o no. El usuario podrá activar este evento a través de las siguientes acciones:
• En el menú "edición", se elige la opción "seleccionar".
• Presionando la tecla de función F2.
• Realizando un doble-click sobre la línea o un solo click sobre un hotspot (ver las opciones sentencia WRITE).
después de posicionar el cursor sobre una línea y realizar alguna de las acciones anteriores, el evento AT LINE-SELECTION se activa.
Internamente, el código de función PICK activa el evento AT LINE-SELECTION. En la interfaz predefinida, la opción de menú "edición" -> "seleccionar" y la tecla de función F" están asignadas al código de función PICK.
Ejemplo 1:
DATA TEXT(20).
START-OF-SELECTION.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
AT LINE-SELECTION.
CASE TEXT.
WHEN 'List index'.
PERFORM WRITE_AND_HIDE USING 'X' SPACE.
WHEN 'User command'.
PERFORM WRITE_AND_HIDE USING SPACE 'X'.
WHEN OTHERS.
SUBTRACT 2 FROM SY-LSIND.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
ENDCASE.
CLEAR TEXT.
FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.
WRITE / 'SY-LSIND:'.
PERFORM WRITE_WITH_COLOR USING SY-LSIND P_FLAG_LSIND.
TEXT = 'List index'.
HIDE TEXT.
WRITE / 'SY-UCOMM:'.
PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.
TEXT = 'User command'.
HIDE TEXT.
IF SY-LSIND > 0.
WRITE / 'PICK here to go back one list level'.
ENDIF.
ENDFORM.
FORM WRITE_WITH_COLOR USING P_VALUE
P_FLAG_POSITIVE.
IF P_FLAG_POSITIVE = SPACE.
WRITE P_VALUE COLOR COL_NORMAL.
ELSE.
WRITE P_VALUE COLOR COL_POSITIVE.
ENDIF.
ENDFORM.
Vease también: HIDE, WINDOW, SCROLL LIST.
16
AT NEW .. ENDAT
Definición
La sentencia AT NEW .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta cuando se detecta que para el campo especificado se va a producir un nuevo valor
Sintaxis:
AT NEW
ENDAT.
La sentencia AT NEW se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT .. ENDAT el área de trabajo no se rellena con la línea actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea NEW el sistema sobrescribe todos los campos de la clave estándar, que se encuentran a la derecha del campo
Ejemplo 1:
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT NEW NAME.
NEW-PAGE.
WRITE / COMPANIES-NAME.
ENDAT.
WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.
ENDLOOP.
Vease también: LOOP.
AT PFnn
Definición
Para permitir que el usuario realice una acción tras pulsar una tecla de función, se puede escribir un bloque de proceso en el programa, encabezado por el evento ATPFnn.
Sintaxis:
AT PFnn
Este evento define un bloque de proceso que se activa cuando pulsamos la tecla de función PFnn, siendo "nn" un valor comprendido entre 1 y 24. Este evento se utiliza en los informes interactivos cuando generan salidas secundarias. Este evento se describe con mayor detalle en el Capítulo 15: "Programas interactivos".
De igual forma que en los eventos anteriores, si no definimos una interfaz de usuario particular para el programa, el sistema incorpora una estándar. Si el usuario presenta una tecla de función el sistema procesará el bloque de proceso de esa tecla de función (si existe). La posición del cursor no es relevante. Para ver una lista de tecla de función predefinidas se puede crear un programa que tenga un evento AT PFnn, ejecutar el listado, y sobre éste pulsar el botón derecho del ratón. Aparecerá un listado con todas las teclas de función definidas con un texto. Recomiendo no utilizar este evento, es preferible utiliza el evento AT USER-COMMAND. Hace más amigable la interfaz del usuario el uso de botones que el uso de teclas de función.
Ejemplo 1:
DATA NUMBER LIKE SY-INDEX.
17
START-OF-SELECTION.
DO 9 TIMES.
WRITE: / 'Row', (2) SY-INDEX.
NUMBER = SY-INDEX.
HIDE NUMBER.
ENDDO.
AT PF8.
CHECK NOT NUMBER IS INITIAL.
WRITE: / 'Cursor was in row', (2) NUMBER.
CLEAR NUMBER.
Vease también: HIDE, SET PF-STATUS.
AT SELECTION-SCREEN
Definición
El evento AT SELECTION-SCREEN provee de varias posibilidades de bloques de proceso pero todos relacionados con la pantalla de selección. Algunos se ejecutan antes de la pantalla de selección y otros después.
Sintaxis:
AT SELECTION-SCREEN
Si utilizamos la palabra clave sin usar ninguna opción, el bloque de proceso correspondiente se ejecuta después de que el sistema procese la pantalla de selección. Si durante la ejecución del bloque de proceso se activa algún mensaje de error, vuelve a aparecer la pantalla de selección. Todos los campos de la pantalla de selección se pueden modificar. La sentencia MESSAGE activa mensajes. Los tipo de error pueden ser A (abend), E (Error), I (Informativo), S (siguiente pantalla) o W (Warning). EL grupo de mensajes se especifica en la sentencia REPORT (Cláusula MESSAGE-ID ...).
AT SELECTION-SCREEN ON
La siguiente variante nos permite crear un bloque de proceso para un solo campo de la pantalla de selección.
AT SELECTION-SCREEN ON END OF
La siguiente variante nos permite validar un criterio de selección de la pantalla de selección. El bloque de proceso se ejecuta después de introducir valores en la pantalla "compleja" de introducción de datos en un criterio de selección.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR
La siguiente variante permite crear un bloque de proceso asociado cuando el usuario pulsa el botón de posibles valores (también se activa pulsando la tecla de función F4). Dicho botón aparece automáticamente a la derecha del campo (parámetro o criterio de selección) cuando se utiliza este evento. En el bloque de proceso se debe programar una lista de valores de proceso.
AT SELECTION-SCREEN ON HELP-REQUEST FOR
La siguiente variante permite crear un bloque de proceso asociado a la tecla de función F1 (ayuda en el estándar). Normalmente lo que codifica en el bloque de proceso es una ventana de ayuda.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP
La siguiente variante nos permite asociar un bloque de proceso a un radiobutton (grupo de botones). El bloque proceso se activa después de que el sistema procesa el radiobutton definido en
AT SELECTION-SCREEN ON BLOCK
18
La siguiente variante nos permite activar un bloque de proceso cuando el sistema termina de procesar un bloque. Recordemos que en un bloque de pantalla de selección se define con la sentencia SELECTION-SCREEN. Si activamos un mensaje de error en el bloque de proceso aparece de nuevo la pantalla de selección. Sólo los campos del bloque relacionado se pueden modificar.
AT SELECTION-SCREEN OUTPUT.
La siguiente variante nos permite activar un bloque de proceso antes de que el sistema muestre la pantalla de selección (parte PBO de la lógica de proceso). Este bloque de proceso se puede utilizar, por ejemplo, para mover valores a los campos de la pantalla de selección, pero hay que tener en cuenta que cada vez que se procesa la pantalla de selección (puede haber mensajes de error en otros eventos AT SELECTION-SCREEN) se procesa este evento. En cierta ocasiones puede ser más recomendable utilizar el evento INITIALIZATION.
Ejemplo 1:
SELECT-OPTIONS NAME FOR SY-REPID MODIF ID XYZ.
...
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 = 'XYZ'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDLOOP.
Vease también: PARAMETERS, SELECT-OPTIONS.
AT USER-COMMAND
Definición
Para permitir que el programa reaccione a las funciones que el usuario active se utiliza el evento AT USER-COMMAND.
Sintaxis:
AT USER-COMMAND.
Este evento define un bloque de proceso que se activa cuando seleccionamos un comando. Los comandos se pueden seleccionar a través de los botones proporcionados en el programa, o a través del campo OK-CODE. Este evento se utiliza en los informes interactivos cuando generan salidas secundarias.
El bloque de proceso del evento AT USER-COMMAND se ejecuta cuando el usuario activa un código de función presente en el status activo en ese momento. Este evento no se activa por los códigos de función predefinido del sistema o por el código de función PICK que, como ya hemos visto, activa el evento AT LINE-SELECTION. El campo del sistema SY-UCOMM nos permite saber qué código de función ha activado el usuario.
Ejemplo 1:
DATA: NUMBER1 TYPE I VALUE 20,
NUMBER2 TYPE I VALUE 5,
RESULT TYPE I.
START-OF-SELECTION.
WRITE: / NUMBER1, '?', NUMBER2.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ADD'.
RESULT = NUMBER1 + NUMBER2.
WHEN 'SUBT'.
RESULT = NUMBER1 - NUMBER2.
19
WHEN 'MULT'.
RESULT = NUMBER1 * NUMBER2.
WHEN 'DIVI'.
RESULT = NUMBER1 / NUMBER2.
WHEN OTHERS.
WRITE 'Unknown function code'.
EXIT.
ENDCASE.
WRITE: / 'Result:', RESULT.
Vease también: SCROLL LIST.
AUTHORITY-CHECK
Definición
Esta sentencia nos permite comprobar las autorizaciones de un usuario. Recordemos que dichas autorizaciones forman parte del perfil de usuario y el sistema las guarda en el maestro de usuarios.
Sintaxis:
AUTHORITY-CHECK OBJECT '
ID 'campo1> { FIELD
ID 'campo2> { FIELD
...
ID 'campon> { FIELD
• Un objeto de autorización esta compuesto de campos de autorización, todos ellos deben estar especificados a continuación de las cláusulas ID (
•
• Se puede saltar la comprobación de un campo sustituyendo la cláusula FIELD por DUMMY. Si SY-SUBRC vale 0, el usuario esta autorizado, en caso contrario, SY-SUBRC toma un valor distinto de 0.
Ejemplo 1:
AUTHORITY-CHECK OBJECT 'M_EINF_WRK'
ID 'WERKS' FIELD '0002'
ID 'ACTVT' FIELD '02'.
AUTHORITY-CHECK OBJECT 'M_EINF_WRK'
ID 'WERKS' DUMMY
ID 'ACTVT' FIELD '01'.
BACK
Definición
Para situar la línea de salida en la línea siguiente de la cabecera de página se puede utilizar la sentencia BACK.
Sintaxis:
BACK
Esta sentencia puede ser utilizada en combinación con la sentencia RESERVE. Si la sentencia BACK se utiliza sola, el sistema actualiza la línea actual de salida a la siguiente cabecera de página. Además actualiza la variable SY-COLNO a 1 y SY-LINNO al valor que corresponda en
20
función del número de líneas de cabecera. En combinación con la sentencia RESERVE se aplican otras condiciones. El sistema actualiza la línea actual de salida a la primera línea del bloque de líneas creado con la sentencia RESERVE.
Ejemplo 1:
DATA: TOWN(10) VALUE 'New York',
CUSTOMER1(10) VALUE 'Charly',
CUSTOMER2(10) VALUE 'Sam',
SALES1 TYPE I VALUE 1100,
SALES2 TYPE I VALUE 2200.
RESERVE 2 LINES.
WRITE: TOWN, CUSTOMER1,
/ CUSTOMER2 UNDER CUSTOMER1.
BACK.
WRITE: 50 SALES1,
/ SALES2 UNDER SALES1.
Vease también: RESERVE.
BREAK
Definición
Con esta sentencia activamos la transacción de depuración de programas.
Sintaxis:
BREAK
Cuando esta sentencia se ejecuta, si el usuario que está ejecutando el programa es el especificado en el literal
Vease también: BREAK-POINT.
BREAK-POINT
Definición
Sentencia utilizada para activar la transacción de depuración de programas.
Sintaxis:
BREAK-POINT
La sentencia BREAK-POINT interrumpe el proceso y activa el depurador de programa en ese punto. Una vez activo el depurador se pueden realizar todas las funciones que permite el sistema de debugging. Si el sistema es incapaz de activar el modo depuración, por ejemplo, si el programa se está ejecutando en fondo (background) o si el programa es de actualización, el sistema genera un mensaje en el log del sistema. El contenido de
Después de procesar el sistema la sentencia BREAK-POINT se realiza automáticamente un COMMIT-WORK de la base de datos.
Vease también: BREAK.
CALL
Definición
Permite realizar una llamada a una función del sistema.
Sintaxis:
CALL
21
La función
• La cláusula ID nos permite pasar parámetros por referencia.
Esta sentencia fue creada para uso exclusivo de los programa estándar de SAP R/3.
Vease también: CALL FUNCTION, CALL CUSTOMER-FUNCTION, CALL DIALOG.
CALL CUSTOMER-FUNCTION
Definición
Esta sentencia se utiliza para llamar a módulos de función, desarrollados por el usuario, que pueden o no estar activos.
Sintaxis:
CALL CUSTOMER-FUNCTION
Esta sentencia la utiliza el sistema de manera estándar para desarrollar el concepto de "ampliación". La idea es la siguiente, en los programas estándar del sistema, en aquellos puntos donde se ha considerado interesante, se ha incluido esta sentencia con llamadas a módulos existentes pero sin desarrollar y sin activar. El usuario puede incluir en estos módulos el desarrollo necesario para las especificaciones concretas de un sistema y activar posteriormente el módulo. De esta forma se evita que se modifiquen los programas estándar (como ha sucedido en tantas ocasiones en el sistema R/2 que no acepta este concepto).
El nombre del módulo de función tiene la siguiente nomenclatura: EXIT_XXXXXXXX_NNN, siendo XXXXXXXX el nombre del programa que realiza la llamada y NNN el número de función especificado en la llamada:
Aunque la sentencia no esta limitada al uso interno de SAP (como sucede con otras sentencias) realmente no veo la necesidad de utilizar esta sentencia. Si necesitamos crear un módulo de función os recomiendo que utilicéis CALL FUNCTION.
Vease también: CALL FUNCTION, CALL DIALOG, CALL.
CALL DIALOG
Definición
La sentencia CALL DIALOG llama a un módulo de diálogo.
Sintaxis:
CALL DIALOG
[ AND SKIP FIRST SCREEN ]
[ EXPORTING
[ IMPORTING
[ USING
• Con la cláusula AND SKIP FIRST SCREEN el sistema procesa la primera pantalla del módulo de diálogo en background, si hemos rellenado todos los campos obligatorios, gracias a la sentencia SET PARAMETERS.
• Con la cláusula EXPORTING especificamos todos los objetos de datos (campos, registros, tablas) que se pasan al módulo de función. Si el objeto de dato en el módulo de diálogo y en el programa coinciden en el nombre, la opción FROM no es necesaria. Si no coinciden,
22
• Con la cláusula IMPORTING especificamos todos los objetos de datos (campos, registros, tablas) que se devuelven desde el módulo de función. Si el objeto de dato en el módulo de diálogo y en el programa coinciden en el nombre, la opción TO no es necesaria. Si no coinciden,
• El campo SY-SUBRC se exporta y se importa automáticamente. Los objetos de datos export o import desconocidos se ignoran en el módulo de función. Los objetos de datos pasados deberían tener el mismo tipo o estructura en el módulo de diálogo y en el programa.
CALL DIALOG
Esta sentencia permite implementar el método de batch-input CALL DIALOG USING. La sentencia llama al módulo de diálogo
• La cláusula MODE tiene el mismo significado que en la sentencia CALL TRANSACTION USING.
• Los códigos de retorno devueltos por la sentencia son los mismos que en la sentencia CALL TRANSACTION USING. A diferencia de la anterior sentencia, CALL DIALOG USING no realiza COMMIT de la base de datos. Los errores en tiempo de ejecución que se pueden producir son los siguientes:
CALL_DIALOG_NOT_FOUND -> El módulo de diálogo no existe.
CALL_DIALOG_WRONG_TDCT_MODE -> El módulo de diálogo contiene errores.
CALL_DIALOG_NAME_TOO_LONG -> El nombre de algún parámetro es más largo que el permitido.
Vease también: CALL FUNCTION, CALL CUSTOMER-FUNCTION, CALL.
CALL FUNCTION
Definición
La sentencia CALL FUNCTION se utiliza para llamar a un módulo de función. Esta sentencia tiene varias variantes en función de la tarea de trabajo que procesa el módulo de función.
Sintaxis:
CALL FUNCTION
[ EXPORTING
[ IMPORTING