GENERACIÓN DE LISTADOS
|
4.1. SENTENCIAS PARA CREAR EL LISTADO:
Generación de listados para salida de datos mediante sentencias Abap/4.
WRITE [ AT ] [ / ] [ columna ] [ long ] campo [ opciones_de_formato ][ opciones_de_salida ][ AS CHECKBOX[ INPUT OFF ] ] [ AS SYMBOL] [ ASICON ] [ AS LINE ].
Con la barra ‘/’ se salta de línea. El siguiente número (“columna”) indica la columna donde empieza a escribirse. En “long” se indica la longitud de salida del campo (que puede diferir de la suya real) para su mejor visualización. Para líneas, símbolos e iconos es obligatorio incluir en el programa el include correspondiente.
Ejemplos:
WRITE caja AS CHECKBOX. "Vale 'X' si está marcado, y ' ' si no lo está. INCLUDE < SYMBOL >. WRITE SYM_PHONE AS SYMBOL. INCLUDE < ICON >. WRITE ICON_ALARM AS ICON. INCLUDE < LINE >. WRITE LINE_TOP_LEFT_CORNER AS LINE.Las opciones de formato son como las de la sentencia FORMAT:
Para todos los tipo de datos:LEFT-JUSTIFIED, CENTERED, RIGHT-JUSTIFIED, UNDER campo (escribe en la línea siguiente, justo bajo el campo dado), NO-GAP(omite el blanco posterior al campo), USING EDIT MASK máscara (forma especial de presentar un campo), USING NO EDITMASK (desactiva la máscara definida en el Diccionario de Datos para ese tipo de campo), NO-ZERO (si el campo es todo ceros, los cambia por blancos).
Para campos numéricos:NO-SIGN (no escribe el signo), DECIMALS nr (nº de decimales), EXPONENT exp (sólo se define para el tipo F), ROUND redondeo (para el tipo P), CURRENCYmoneda (formato de moneda. Todos los formatos están almacenados en la tabla del sistema TCURX), UNIT unidad (unidad en la cual se mide un valor; tabla T006).
Para fechas: Las posibles maneras (automáticas) de escribir una fecha son: DD/MM/AA, MM/DD/AA, DD/MM/AAAA, MM/DD/AAAA, DDMMAA, MMDDAA, AAMMDD.
ULINE [ offset ] [ (long) ].
Con ULINE a secas se dibuja una línea horizontal completa de subrayado. Puede hacerse ésta más corta. Ejemplo: ULINE /5 (50): Escribe una nueva línea (por la ‘/’) a partir de la columna 5, de 50 caracteres de ‘_’ (este número debe ir entre paréntesis). VLINE.
Dibuja una línea vertical.
SKIP [ n ].
Saltan líneas (aparecen en blanco). Por defecto, con SKIPsin número salta 1 línea.
SKIP TO LINE línea.
Salta a la línea indicada (la primera del texto es la 1, y están numeradas internamente). Se debe cumplir la condición: 1 <= línea <= máximo líneas por página.
SET BLANK LINES ON | OFF.
Se activa o desactiva la posibilidad de escribir líneas en blanco (OFF por defecto), sin SKIP.
NEW-LINE [ NO-SCROLLING | SCROLLING ].
Genera una nueva línea en el listado, acabando la anterior y moviendo el cursor. Se consigue lo mismo con ‘/’ en WRITE. NEW-PAGE y CALL SCREEN llevan implícita una NEW-LINE. Con NO-SCROLLINGno se hace scroll de la línea en el informe (básico o secundarios). Esta opción se desactiva con SCROLLING.
NEW-PAGE [NO-TITLE | WITH-TITLE ] [ NO-HEADING | WITH-HEADING ][ LINE-COUNT líneas ] [ LINE-SIZE columnas ].
Genera una nueva página, pero no debe estar en blanco (pues sería ignorada). Se incrementa el contador de páginas SY-PAGNO. NEW-PAGE se ejecuta automáticamente al alcanzar el nº de líneas por página, o con la sentencia RESERVE (que reserva líneas al final de la página para el evento END-OF-PAGE). El TITLE de la página es el título, fecha y número de página. El HEADING es el elemento de texto de cabecera de las tabla del listado. LINE-COUNT indica el nº de líneas de la página. LINE-SIZE indica el nº de columnas de la página.
FORMAT [ COLOR color[ ON ]| COLOR OFF ][ INPUT [ ON ]| INPUT OFF ][ INTENSIFIED [ ON ]| INTENSIFIED OFF ][ INVERSE [ ON ]| INVERSE OFF ][ HOTSPOT [ ON ]| HOTSPOT OFF ][ RESET].
Esta sentencia da formato a los textos y listados que se muestran por pantalla, como colores e intensidad. Deja fijo el formato hasta un RESET (opción de FORMAT) o hasta la siguiente sentencia FORMAT, mientras que las opciones de formato de un WRITE sólo afectan a dicho WRITE.
Ejemplo:
*Color predeterminado para encabezados. FORMAT COLOR COL_HEADING.
DETAIL.
Equivale a la opción INTENSIFIED OFF de la sentencia FORMAT.
SUMMARY.
Equivale a la opción INTENSIFIED ON de la sentencia FORMAT.
POSITION col.
Posiciona el cursor en la columna especificada, para sobreescribir luego en ella con WRITE.
BACK.
Pone el cursor en la primera línea de la pantalla, o bien tras las escritas por TOP-OF-PAGE o reservadas por la sentencia RESERVE.
RESERVEnLINES.
Reserva espacio de n líneas al final de la página para el pie de página que escribe el END-OF-PAGE (si no se hace esto, no aparecerá el pie de página).
SET LEFT SCROLL-BOUNDARY [ COLUMN col ].
Al generar un listado la posición actual del cursor (columna SY-COLNO) se deja como límite izquierdo del ‘área móvil’ (zona de la pantalla que puede tener scroll mediante barras de desplazamiento). El ancho de esta área móvil se puede modificar. En ‘col’ se puede especificar la posición del nuevo límite izquierdo de esta área, de forma que las columnas a la izquierda de ésta serán fijas, no serán desplazadas al hacer scroll horizontal.
SET COUNTRY país.
La escritura en pantalla de las fechas y de cantidades monetarias sale formateada de acuerdo con lo acostumbrado en el país especificado. Se toman estos datos de la tabla T005X. Devuelve SY-SUBRC 0 si existe ese identificador de país, y 4 en otro caso.4.2. SENTENCIAS PARA LISTADOS INTERACTIVOS:
- HIDE f1 [, f2, … fn].
Almacena en memoria interna (“área hide”) el contenido de una línea de un listado interactivo (la línea actual, la del cursor), mientras ésta es mostrada. Se puede hacer incluso con líneas que no sean visualizadas en pantalla. Se usa en el evento AT LINE-SELECTION, que es el momento en el que el usuario hace doble clic sobre alguna línea del listado interactivo. Así, con esta sentencia se puede conocer (leer) la línea que el usuario ha elegido. Los f1 … fn son los campos que se están imprimiendo en pantalla, susceptibles de que el usuario los seleccione (los que deben “recordarse”).
HIDE debe codificarse justo después del WRITE que muestra el campo o variable a guardar en memoria, o bien el WRITE que muestra la línea correspondiente (si concretamente esa variable no se va a visualizar). El “área hide” es una tabla con tantas filas como líneas tiene el listado, y 2 campos o columnas por línea (y por campo a almacenar): variable - contenido. Aquí se guarda el valor de la variable dada, para cada línea del listado.
- WINDOW STARTING AT x1 y1 ENDING AT x2 y2.
Muestra el listado secundario (detallado) en una ventana nueva aparte. (x1, y1) son las coordenadas (en (columnas, líneas), no en pixels) de la esquina superior izquierda de la ventana, y (x2, y2) son las coordenadas de la esquina inferior derecha. Se pueden crear status (menús, botones, …) específicos para las ventanas, pero entonces no aparecerá el menú estándar ni la barra de herramientas (esas funciones básicas quedarán desactivadas) salvo que se definan de nuevo. El status a crear para una ventana debe ser del tipo “ventana de diálogo”, no “lista”. Soporta todas las funciones de los listados secundarios.
- SET PF-STATUS status EXCLUDING código | tabla [ INMEDIATELY ].
- Uso:Activa un nuevo status en pantalla. Un status es un conjunto de puntos de menú, botones, iconos, teclas de función … que se definen de forma específica para una(s) pantalla(s) de un programa o informe. Algunos de estos elementos existen siempre activos en todo status de forma predefinida, pero pueden desactivarse. Cada punto de menú, botón, … debe tener definido su propio código, distintos todos entre sí, para que por programa pueda saberse cuál se ha pulsado (mediante eventos como AT PFn, AT USER-COMMAND). Se pueden incluir funciones estándar, iconos, … Para la barra de menú se pueden además “incorporar normas”.
- Creación de un status, por menú: Herramientas – Workbench Abap 4 – Menu Painter – Status (o bien haciendo doble clic sobre el nombre del status a crear, una vez escrita la sentencia SET PF-STATUS). Al finalizar el diseño del status, grabarlo y activarlo. En el programa, antes de mostrar el listado, poner la sentencia SET PF-STATUS name_status (8 caracteres máximo) para que éste aparezca en pantalla.
- Desactivación o exclusión de funciones (aparecerán en gris y no se podrán pulsar): para ello se usa la opción EXCLUDING. Tras EXCLUDING puede especificarse, o bien un código concreto, o bien una tabla en la cual en cada entrada se ha guardado uno de los códigos a desactivar (para el caso de que haya que excluir varios). Esto hace los status creados mucho más reutilizables. Con INMEDIATELY se activa el status sólo en la pantalla actual, y tras pasar a otra vuelve a activarse el status principal.
- SET TITLEBAR número_de_título [ WITH g1 … g9].
Inserta un título de pantalla, para la barra de títulos de la ventana de Windows. Para crearlo, por menú: Herramientas – Workbench Abap 4 – Menu Painter – Lista Títulos. Dar el nombre del programa asociado, crear, escribir el título, grabar y activar (pues es un objeto SAP autónomo, no es un atributo interno del programa). Para que aparezca en pantalla, escribir: SET TITLEBAR número_de_título. (es un código de 3 caracteres que se refiere a una línea de texto almacenado en la Lista de Títulos). Esta sentencia debe ir antes del primer WRITE que constituya el listado. Con WITH se pueden introducir hasta 9 parámetros actuales g1 ... g9, que sustituirán a los actuales &1 ... &9.
- READ LINE linea [ INDEX índice ] [ FIELD VALUE f1 [ INTO g1 ] … fn [ INTO gn ] ][ OF CURRENT PAGE | OF PAGE p].
En su forma básica, lee el contenido de una línea del listado: por defecto es la actual (SY-LILLI), donde se activó el evento AT LINE-SELECTION (esta sentencia debe usarse tras seleccionar una línea); o la de número de línea indicado en el parámetro INDEX. Dicho contenido se almacena como string en el campo del sistema SY-LISEL. Además, pone ese valor en el leído en el campo f de un HIDE f, si hay. Devuelve un valor de retorno en SY-SUBRC (0 si la lectura fue correcta, 4 si hubo algún error, como que no haya línea para leer). Con FIELD-VALUE, en lugar de recorrer la línea como un string, la lee “partida” en las variables especificadas fi, o en las gi si se usa INTO. Con OF CURRENT PAGE se indica leer de la página actual, y con OF PAGE p se especifica la página donde está la línea a leer.
- MODIFY LINE n [ INDEX índice | OF CURRENT PAGE | OF PAGE OF p ] [ modifics. ].
Modifica el contenido de la línea n del listado, poniendo su contenido en el campo del sistema SY-LISEL (que también puede modificarse con asignaciones). Devuelve código de retorno 0 si la operación fue correcta, y distinto de cero en otro caso. Enmodificadores puede especificarse un nuevo color, nuevo formato, ...
Ejemplo:
* INPUT OFF indica campo de sólo lectura MODIFY LINE 3 LINE FORMAT INPUT OFF COLOR = c.
SCROLL LIST [ parámetros ].
Realiza el scroll de parte o de todo un listado, mediante programa. Permite desplazarnos por la lista, mediante unas barras de desplazamiento. Devuelve código de retorno cero si el desplazamiento fue correcto, y distinto de cero en otro caso. Esta sentencia tiene muchas variantes, como: TO FIRST PAGE, TO LAST PAGE, TO PAGE pag, TO COLUMN col, FORWARD, BACKWARD, LEFT, RIGHT. También tiene muchos parámetros, como INDEX nº lista y LINE nº línea (todas las variantes de scroll los admiten).
DESCRIBE LIST NUMBER OF LINES líneas PAGES pags [ INDEX índice ].
Esta sentencia es útil para conocer el número total de páginas del listado, número de líneas, … Con el parámetro INDEX se especifica de qué listado se leen esos datos.
DESCRIBE LIST [ LINE línea ] PAGE pag [ INDEX índice ] [ opciones ].
Devuelve el número de línea y de la página (actuales) del listado dado. Las opciones pueden ser: LINE-SIZE nº cols, LINE-COUNT nº filas, ...
SET CURSOR FIELD f [ OFFSET var ] [ LINE línea ] [ VALUE val ] [ LENGTH long ].
Posiciona el cursor sobre una línea dada del listado interactivo. Transfiere a la variable f el nombre (no el valor) de la variable donde se posicionó el cursor en el listado. Devuelve 0 en SY-SUBRC si la operación fue correcta, y distinto de cero en otro caso. Si el cursor no se posiciona en una variable, sino en una constante, variable local o literal, SY-SUBRC sigue valiendo cero, pero en la variable f se guarda SPACE (un blanco).
- Parámetros: Todos usan variables de salida (para recoger información). Con OFFSET se recoge la posición del cursor en un campo concreto. Con LINE se obtiene la línea donde se posicionó el cursor, con VALUE el valor de ese campo, y con LENGTH la longitud de salida del campo (la longitud del substring mostrado, no la longitud de la definición del mismo).
- Uso:Esta sentencia se usa si el cursor queda dentro del área visible del listado (normalmente éste será mayor que lo que cabe en pantalla). Si no, no tiene efecto (se debería usar antes SCROLL LIST para mover el área de visualización). El cursor puede posicionarse en líneas WRITE y SKIP, pero no sobre ULINE’s.
- Ejemplos (otras variaciones de la sentencia):
SET CURSOR col line. " no tiene 'FIELD' SET CURSOR LINE line [ OFFSET col ]. " col: nº columna a posicionarse
- GET CURSOR LINE f [ OFFSET variable ] [ VALUE val ] [ LENGTH long ].
Devuelve la posición del cursor, en pantallas o listados. Se obtiene el número de línea en la que se posicionó el cursor, para prevenir la selección de líneas no válidas del listado. Los parámetros son como en la sentencia SET CURSOR FIELD.
- SET USER-COMMAND código.
Sólo para listados interactivos. Se usa para forzar la ejecución de un comando, definido en un menú o status, sin que el usuario lo desencadene. Mueve dicho código al campo SY-UCOMM.
4.3. SENTENCIAS PARA IMPRESIÓN EN PAPEL:
- NEW-PAGE PRINT
- SET MARGIN
- PRINT-CONTROL
- SUBMIT TO SAP-SPOOL report.
Llama al report especificado con un listado de salida a la base de datos (con nº de copias, nº de lista, título, autorización, ...). Para acceso al spool de la impresora se puede ir por el menú: Sistema – Servicios – Control de impresión.