Encabezado (Header) completo para reporte ALV

17 05 2008

image

Voy a explicar los pasos a seguir para incorporar un encabezado/header en un reporte ALV. Es decir, tener una imágen de fondo, un logo y texto.

Hay dos imágenes en mi ejemplo:
1_ logo (ENJOYSAP_LOGO)
2_ background (ALV_BACKGROUND)

Cada uno puede elegir las imágenes que quiera, pero siempre y cuando estén subidas en la transacción OAER


* Variables y estructuras para ALV
TYPE-POOLS: SLIS.

DATA:
  LV_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV,
  LV_REPID       TYPE SY-REPID,
  T_EVENTS      TYPE SLIS_T_EVENT,              ” Eventos.
  GT_HEADER    TYPE SLIS_T_LISTHEADER,    ” Tabla con el Título y el Logo
  WA_HEADER    TYPE SLIS_LISTHEADER.      ” Work Area con el Título

DATA: BEGIN OF IT_TABLE OCCURS 0,
        VALOR TYPE STRING,
      END OF IT_TABLE.

* Agregar el programa para el callback
  LV_REPID = SY-REPID.

 

*&———————————————————————*
*& Acá en el medio llenamos la tabla interna IT_TABLE

*& para mostrar en el AVL
*&———————————————————————*

 

*Llamo al ALV
PERFORM FILL_EVENT USING T_EVENTS.
PERFORM CARGAR_FIELDCAT TABLES LV_FIELDCAT.
PERFORM INIT_HEADER.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
  EXPORTING
    I_CALLBACK_PROGRAM          = LV_REPID
    I_CALLBACK_TOP_OF_PAGE   = ‘TOP_OF_PAGE’   ” llama al form
    I_BACKGROUND_ID                 = ‘ALV_BACKGROUND‘  ” imagen de fondo
    IT_FIELDCAT                          = LV_FIELDCAT   
    IT_EVENTS                             = T_EVENTS
  TABLES
    T_OUTTAB                             = IT_TABLE.

 

*&———————————————————————*
*&      Form  cargar_fieldcat
*&———————————————————————*

FORM CARGAR_FIELDCAT  TABLES   LV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

  DATA: LV_POSICION TYPE I.
  CLEAR LV_FIELDCAT.

  REFRESH LV_FIELDCAT.

  ADD 1 TO LV_POSICION.
  LV_FIELDCAT-COL_POS   = LV_POSICION.
  LV_FIELDCAT-FIELDNAME = ‘VALOR’.
  LV_FIELDCAT-JUST = ‘C’.
  LV_FIELDCAT-DDICTXT = ‘L’.
  LV_FIELDCAT-TABNAME = ‘IT_TABLE’.
  LV_FIELDCAT-SELTEXT_M = ‘Valor’.
  LV_FIELDCAT-SELTEXT_L = ‘Valor’.

  APPEND LV_FIELDCAT.
  CLEAR  LV_FIELDCAT.

ENDFORM. “CATALOG

 

*&——————————————————————–*
*& Form fill_event
*&——————————————————————–*

FORM FILL_EVENT USING P_T_EVENTS TYPE SLIS_T_EVENT.

  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.

* Toma los eventos
  CALL FUNCTION ‘REUSE_ALV_EVENTS_GET’
    EXPORTING
      I_LIST_TYPE = 0
    IMPORTING
      ET_EVENTS   = P_T_EVENTS.

* Selecciono el evento ‘TOP_OF_PAGE’ y le seteo el FORM a ejecutar
  CLEAR LS_EVENT.

  READ TABLE P_T_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
  INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE ‘TOP_OF_PAGE’ TO LS_EVENT-FORM.
    APPEND LS_EVENT TO P_T_EVENTS.
  ENDIF.

ENDFORM. ” FILL_EVENT

 

*———————————————————————-*
*      Carga el título y subtítulo del reporte
*———————————————————————-*
FORM INIT_HEADER.

  DATA: WA_HEADER TYPE SLIS_LISTHEADER.

* Cargo el Título
  WA_HEADER-TYP = ‘H’.
  WA_HEADER-INFO = ‘Título en Mayúsculas‘.
  APPEND  WA_HEADER TO GT_HEADER.

* Cargo el Subtítulo
  CLEAR WA_HEADER.
  WA_HEADER-TYP = ‘A’.
  WA_HEADER-INFO = ‘Texto para un subtítulo.‘.
  APPEND  WA_HEADER TO GT_HEADER.
ENDFORM.                    “init_header

 

*&——————————————————————–*
*&      Form  top_of_page
*&——————————————————————–*

FORM TOP_OF_PAGE .
* Pasa a la cabecera el logo
  CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
    EXPORTING
      I_LOGO             = ‘ENJOYSAP_LOGO‘  “Logo
      IT_LIST_COMMENTARY = GT_HEADER.
ENDFORM.                    ” TOP_OF_PAGE

 


Technorati tags:




Transacción OAER - Objetos de aplicación (imágenes)

10 05 2008

Mediante la transacción OAER podemos administrar y tratar cualquier tipo de objeto de aplicación.
Pero generalmente, al menos yo, la utilizamos para trabajar con imágenes. Ya que es común utilizar logos o backgrounds en los encabezados (headers) de los reportes ALV.

La transacción es muy intuitiva de utilizarla, tiene varias opciones de selección. Pero siempre debemos completar los campos obligatorios Nombre clase del objeto y Tipo clase del objeto.

Voy a mostrar de ejemplo cómo ver y subir imágenes:

1º) En la primera pantalla completamos los campos obligatorios mencionados anteriormente y ejecutamos.
image

2º) Veremos que arriba a la izquierda podemos navegar entre las distintas carpetas para buscar imágenes.
Debajo hay varias solapas, entre otras Detail que nos va a mostrar los detalles de las imágenes y Crear para subir archivos.
Y a la derecha podemos ver las imágenes e incluso guardarlas en nuestra computadora. O bien transportarlas a otro mandante con una orden de transporte con el icono del camión.

image

3º) Para subir una imagen debemos volver a la pantalla inicial y completar el campo Clave del objeto además de los campos obligatorios.

image
Luego nos posicionamos en la solapa Crear y hacemos doble click sobre la opción Imagen.

image
Esto nos abre un browser para que podamos subir nuestra imagen. Para luego usarla por ejemplo en un reporte ALV.


Technorati tags:




Ocho cosas que (probablemente) no sabías acerca de mi…

26 04 2008

Aprovecho para tomar la posta que me dejó Blag y escribir sobre las ocho cosas que (probablemente) no saben acerca de mi.

Aquí van:

1.- Cuando empecé en el mundo de SAP, no tenía idea que fuese tan grande y chico a la vez .

2.- Lo mejor de SAP es la cantidad de gente que se conoce. Muchas amistades nuevas!!!  

3.- Mis hobbies entre otros son jugar al paddle y salir los fines de semana con mis amigos.

4.- Soy fanático de Boca Juniors, un sentimiento que no se puede explicar. Cara feliz

5.- Me gusta estar al tanto y conocer las nuevas tecnologías.

6.- Escucho mucha música… preferentemente Rock and Roll.

7.- Suelo ver muchas series de televisión (Lost, Prison Break, Heroes, Dexter, etc) 

8.- Mi comida favorita son las pastas.


Technorati tags:




Cambiar la denominación de las clases de órdenes

23 04 2008

Este documento explica cómo cambiar la denominación de las clases de órdenes para una orden de trabajo (OT).

La modificación se debe realizar desde el mandante de desarrollo. Para luego transportar una orden hasta el mandante de producción.

Pasos a seguir:

1º) Ingresar al Customizing:

clip_image002 y clickear en botón clip_image004

 

2º) Seguir el camino:

Mantenimiento y servicio al cliente -> Gestión de mantenimiento y servicio -> Órdenes de mantenimiento y de servicios -> Funciones y parametrizaciones de clases de orden -> Parametrizar clases de órdenes

clip_image006

 

3º) Modificar los textos de las Clases de órdenes que deseamos y luego apretar el botón de guardar

clip_image008

Nos pedirá que grabemos los cambios en una orden de transporte

 

4º) El último paso es agregar las modificaciones en nuestra orden de transporte:

Hay que pasar al modo de visualización: clip_image010

Seleccionamos las filas que queremos transportar:

clip_image012

Y vamos al menú: Tratar -> Transporte -> Incluir en la orden

Finalmente, sólo nos resta pedir que pasen la orden de transporte hasta el ambiente de producción.


Technorati tags:




Bases de datos lógica - HR

19 04 2008

¿Qué es una base de datos lógica?

Una base de datos lógica (BDL) es un programa SAP especial abap/4 que lee y procesa información de tablas de una base de datos. Puede incluirse como atributo de un programa abap/4 de usuario, y se compila conjuntamente con él.
Desde la transacción SE36 podemos crear o administrar base de datos lógica.
Más información sobre BDL

 

¿Cómo utilizar base de datos lógica en nuestros programas?

Voy a mostrar como usamos BDL en nuestros reportes. Este es un ejemplo para un programa para el módulo de HR (Human Resources), ya que para ese módulo se utilizan mucho las bases de datos lógica.

Para agregar una BDL en un programa hay que ir a la transacción SE38 donde colocamos el nombre de nuestro reporte, nos posicionamos en la opción Atributos y clickeamos en Modificar.

image 

Tenemos que modificar las siguientes opciones:

Aplicación: elegimos el tipo de aplicación, en este caso por ser de HR elegí Gestión de personal.
Base de datos lógica: completamos con el nombre de una BDL, las mismas se pueden visualizar desde la SE36.
Vers.imagen selecc: Acá se elige el tipo de pantalla de selección que queremos para nuestro reporte.

 

Se pueden crear o modificar los filtros de selección:
Clickeando en el botón Clase report HR

image 
En este caso PY_DEF es un tipo de pantalla de selección, para ver las opciones de la misma o crear una nueva definición de filtros vamos a la opción Clase report.
Se abrirá una tabla donde vamos a poder crear nuevas entradas y elegir los filtros de selección que queramos que aparezcan en nuestra pantalla inicial.

 

Finalmente para traer los datos de la BDL; desde nuestro código fuente utilizamos la sentencia GET más el nombre de la tabla. Ej: GET PAYROLL. 

En este link podrán encontrar más detalles sobre el uso de base de datos lógica y HR.


Technorati tags:




Transacción SM04 - Lista de usuarios

18 04 2008

Con la transacción SM04 vamos a poder visualizar los usuarios conectados en el mandante.

Podemos ver entre otras cosas:

  • la terminal de donde esta conectado el usuario
  • la cantidad de modos que tiene abierto
  • el consumo de memoria

 

Desde esta transacción también podemos cerrar el modo/transacción/programa de un usuario. Para eso debemos seleccionar al usuario, clickear en el botón Modos. Esto nos abrirá un pop up donde nos posicionamos en la transacción y apretamos en Borrar modo.


Technorati tags:




Transacción SU01 - Actualización de usuarios

17 04 2008

Con la transacción SU01 podemos crear, copiar, eliminar o modificar la clave de cualquier usuario.

También se puede modificar un usuario:

  • los datos personales
  • los datos logon
  • los parámetros
  • los roles

 


Technorati tags:




Transacción SCC4 - Vista de Mandantes

16 04 2008

La transacción SCC4 nos lista los mandantes de un ambiente. Nos muestra el Nro de mandante, la denominación, población y moneda.


Technorati tags:




Transacción SM66 - Resumen general de procesos

15 04 2008

SM66 es la transacción que nos muestra todos los procesos que se están corriendo en el servidor.

Esta transacción nos detalla lo siguiente:

  • Nombre del servidor
  • Número y Tipo del proceso de trabajo
  • Identificación del proceso del sistema operativo
  • Status del proceso de trabajo
  • Motivo de espera
  • Tiempo de CPU consumido
  • Nombre del usuario cuya orden está siendo ejecutada
  • Report ejecutado actualmente
  • Actividad actual del proceso de trabajo
  • Tabla BD a la que accedió por última vez el proceso trabajo

Otra opción importante que tenemos es la de poder activar el modo debugging en cualquiera de los procesos que se estén ejecutando. Para esto sólo hay que elegir el proceso y clickear en el botón Debugging.


Technorati tags:




Transacción SU53 - Datos de autorización de usuarios

14 04 2008

Es usual que nos falte autorización para ejecutar alguna transacción, reporte o cualquier tipo de permiso.

Para saber cuál es el objeto de autorización que nos falta, lo que podemos hacer es correr la transacción SU53. Allí se mostrará el objeto de autorización que nos falta. Sabiendo cual es el objeto podemos avisarle a nuestro administrador (BASIS) para que lo agregue en nuestro perfil.

Cabe aclarar que esta transacción la debemos correr inmediatamente después de que sale el error de falta de autorización. 


Technorati tags:




Enviar e-mails desde SAP

23 01 2008

Con la función SO_DOCUMENT_SEND_API1 se pueden enviar mails desde nuestros programas.
Hay que tener en cuenta que una vez que se ejecuta la función, el email debe ser liberado con la transacción SCOT.


Technorati tags:




Tabla TNAPR - tratamiento de mensajes

11 12 2007

La tabla transparente TNAPR contiene toda la información referida al tratamiento de clase de mensajes.

Se puede buscar u obtener información de:

  • Clase de mensaje
  • Medio de envío
  • Aplicación
  • Programa impresor
  • Rutina form
  • Formulario

Es muy útil cuando hay que modificar formularios, ya sean sapscripts o smartforms.


Technorati tags:




TRY-CATCH para ABAP

8 12 2007

El otro día viendo la documentación de SAP me encontré que existe la posibilidad de utilizar en ABAP el TRY-CATCH (muy usado en Java).
TRY-CATCH sirve para el manejo de errores y excepciones. Y nos puede ser muy útil para evitar los odiosos Short Dumps.


Dejo un ejemplo donde trato de insertar un registro en una tabla Z usando try-catch para evitar errores de SQL:

*Intento insertar un registro en la tabla ZPROYECTOS, si hay algún tipo de error de SQL (que generalmente arroja un dump)… manejo la excepción con un mensaje de advertencia.
                TRY.
                    INSERT INTO ZPROYECTOS VALUES WA_ZPROYEC.  
                  CATCH CX_SY_DYNAMIC_OSQL_ERROR.
                    MESSAGE ‘Error al actualizar la tabla ZPROYECTOS’ TYPE ‘I’.
                ENDTRY.


Technorati tags:




RSTXPDFT4 - Pasar orden de spool (formulario) a PDF

7 12 2007

RSTXPDFT4 es un programa estándar que se corre desde la transacción SE38 y que sirve para convertir un sapscript (formulario) o orden de spool a pdf.

Solamente hay que pasarle como filtro el número de una orden de spool y si deseamos una ruta para guardarla en PDF.
Para encontrar una orden de spool, hay que ir al menú Sistema –> Órdenes SPOOL propias o bien buscarla en la tabla TSP01.


Technorati tags:




Pasar un formulario a PDF

6 12 2007

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con este código vamos a poder tomar una orden de spool, por ejemplo de un formulario, para luego crear el PDF.


  DATA: IT_TSP01 LIKE TSP01 OCCURS 0 WITH HEADER LINE.
  DATA: NUMBYTES TYPE I,
             PDFSPOOLID LIKE TSP01-RQIDENT,
             IT_PDF LIKE TLINE OCCURS 0.

*Lo primero es buscar el número de la orden de spool en la tabla  TSP01. *En este caso le paso el nombre del usuario y el mandante.
  SELECT RQIDENT
     INTO (IT_TSP01-RQIDENT)
     FROM TSP01
     WHERE RQOWNER EQ SY-UNAME
       AND RQCLIENT EQ SY-MANDT.
    APPEND IT_TSP01.
  ENDSELECT.

*Ordeno en forma descendente para quedarme con el último formulario *generado
  SORT IT_TSP01 DESCENDING.

*Al siguiente módulo de función le paso el número de la orden para que *me devuelva el formulario dentro de la tabla IT_PDF
  CALL FUNCTION ‘CONVERT_OTFSPOOLJOB_2_PDF’
    EXPORTING
      SRC_SPOOLID              = IT_TSP01-RQIDENT
    IMPORTING
      PDF_BYTECOUNT            = NUMBYTES
    TABLES
      PDF                      = IT_PDF
    EXCEPTIONS
      ERR_NO_OTF_SPOOLJOB      = 1
      ERR_NO_SPOOLJOB          = 2
      ERR_NO_PERMISSION        = 3
      ERR_CONV_NOT_POSSIBLE    = 4
      ERR_BAD_DSTDEVICE        = 5
      USER_CANCELLED           = 6
      ERR_SPOOLERROR           = 7
      ERR_TEMSEERROR           = 8
      ERR_BTCJOB_OPEN_FAILED   = 9
      ERR_BTCJOB_SUBMIT_FAILED = 10
      ERR_BTCJOB_CLOSE_FAILED  = 11
      OTHERS                   = 12.

  IF SY-SUBRC EQ 0.

*Una vez que tengo el formulario en la tabla hago el download 
    CALL FUNCTION ‘GUI_DOWNLOAD’
      EXPORTING
        BIN_FILESIZE            = NUMBYTES
        FILENAME                = P_FILE
        FILETYPE                = ‘BIN’
      TABLES
        DATA_TAB                = IT_PDF
      EXCEPTIONS
        FILE_WRITE_ERROR        = 1
        NO_BATCH                = 2
        GUI_REFUSE_FILETRANSFER = 3
        INVALID_TYPE            = 4
        NO_AUTHORITY            = 5
        UNKNOWN_ERROR           = 6.

    IF SY-SUBRC EQ 0.
      MESSAGE I014(ZSM) WITH P_FILE
           ‘ .Nombre de archivo creado’
           ‘ con Nro. Doc. Interno Sap.’.
    ELSE.
      MESSAGE I014(ZSM) WITH P_FILE.
      DELETE FROM TSP01 WHERE RQIDENT EQ T_TSP01-RQIDENT.
    ENDIF.

  ENDIF.


Technorati tags:




Agregar una imagen en un SapScript

3 12 2007

Voy a indicar los pasos necesarios para poder agregar un logo o una imagen a un formulario de tipo sapscript:

1 ) Generar una imagen con extensión TIF o BMP.

2 ) Para agregar la imagen se debe ingresar a la transacción SE78 y hacer doble click en “BMAP imágenes gráfico en tramas“.
image

Vamos al menú Grafico –> Import
image

Y a continuación ingresamos nuestra imagen:
image

Luego de agregarla aparece la siguiente pantalla:
image

 

3 ) Sólo nos falta agregar nuestra imagen en el formulario. Para eso entramos en la ventana donde queremos que aparezca y clickeamos en ‘Incluir’-> Funcion Grafica
image

Finalmente buscamos y seleccionamos la imagen que agregamos en el punto anterior
 image
Y luego chequeamos que tengamos agregada la siguiente línea de código en la ventana:

/: BITMAP Z_IMAGEN OBJECT GRAPHICS ID BMON LANGUAGE ES

Esta línea va a variar en el nombre de la imagen que hayamos ingresado (en este ejemplo Z_IMAGEN). Y según el formato de la imagen puede decir en ID: blanco/negro o color.


Technorati tags:




Formas de recordar o relacionar los nombres de las tablas de SAP

29 11 2007

La manera fácil de recordar las tabla en sap es:

Simplemente hay que tratar de relacionar la terminología de SAP para los objetos de negocio.

Todas las tablas de proveedores comienzan con L como ser LFA1, etc..
Todas las tablas de clientes comienzan con K … KNA1, KONV, etc..
Todas las tablas de ventas comienzan con V… VBAK, VBAP, etc..
Todas las tablas de maestros comienzan con T… T001, T001W, etc..
Todas las tablas de bancos comienzan con B.. BKNF, BKPF, etc..
Todas las tablas de compras comienzan con E.. EKKO, EKPO, etc..
Todas las tablas de materiales comienzan con M… MARA, MAKT, MARC, etc..

 

En ventas, entregas, facturación y compras:
Si el nombre de la tabla contiene una K es de cabecera de datos, como VBAK, LIKP, VBRK, EKKO, etc..
Si el nombre de la tabla contiene una P es de posición, como VBAP, LIPS, VBRP, EKPO, etc..

 

En el módulo de finanzas (FI)… existen solamente 6 tablas importantes…
Pueden ser recordadas por:
Si el nombre de la tabla contiene una I, es una posición abierta. Ej: BSID
Si el nombre de la tabla contiene una A, es una posición cerrada. Ej: BSAD
Si el nombre de la tabla termina con S, es una cuenta GL. Ej: BSIS - GL maestro de posiciones abiertas, BSAS - GL maestro de posiciones cerradas.
Por otro lado, si el nombre de la tabla termina con una D es de clientes. Y si el nombre de la tabla termina con una K, es de proveedores. 

 

Finalmente, la tabla TSTC contiene la lista de todas las transacciones.


Technorati tags:




Crear Matchcodes (ayudas) con una tabla interna.

28 11 2007

El próximo ejemplo sirve para crear ayudas (matchcodes) con una tabla interna de nuestro programa.
Así de simple, hacemos una búsqueda a alguna tabla y el resultado lo guardamos en una tabla interna que se la pasamos a la función F4IF_INT_TABLE_VALUE_REQUEST que nos va a mostrar la ayuda.

Quiero agradecer esta forma de crear ayudas a mi compañero y amigo Rodrigo (http://ramgv-sap.blogspot.com).


*En este ejemplo creo un select-option para un material. Cuya ayuda será *el nº de material para VBELN =  ‘0000000001′ y POSNR = ‘000010′.

TABLES: VBAP,
             DDSHRETVAL.

DATA: BEGIN OF IT_MATNR OCCURS 0,
               MATNR LIKE VBAP-MATNR,
               ARKTX LIKE VBAP-ARKTX,
           END OF IT_MATNR.

DATA: BEGIN OF IT_MATCH OCCURS 0,  “Esta tabla nos devuelve la ayuda
               SHLPNAME  LIKE DDSHRETVAL-SHLPNAME,
               FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
               RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
               FIELDVAL  LIKE DDSHRETVAL-FIELDVAL,
               RETFIELD  LIKE DDSHRETVAL-RETFIELD,
           END OF IT_MATCH.

SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
  SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLQ1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
  SELECT MATNR
              ARKTX
      FROM VBAP
        INTO TABLE IT_MATNR
        WHERE VBELN EQ ‘0000000001′ AND
                    POSNR EQ ‘000010′.

  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
    EXPORTING
      RETFIELD        = ‘MATNR’
      WINDOW_TITLE    = ‘Material’
      VALUE_ORG       = ‘S’
    TABLES
      VALUE_TAB       = IT_MATNR
      RETURN_TAB      = IT_MATCH
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC EQ 0.
    READ TABLE IT_MATCH INDEX 1.
    MOVE IT_MATCH-FIELDVAL TO S_MATNR-LOW.
  ENDIF.


Technorati tags:




Ayudas (matchcodes) para entradas en base al tipo de datos

27 11 2007

Generalmente cuando queremos agregar ayudas (matchcodes) vamos a la transacción SE11 y nos fijamos qué “Ayuda para búsqueda” tiene asociado el campo.

Pero muchas veces el matchcode es del tipo “Ayudas para entradas en base al tipo de datos”. En esos casos la ayuda se genera con una función.
Por tal motivo la solución es buscar alguna transacción que tenga el matchcode del campo que necesitamos y debuggueamos al momento de abrir la ayuda para encontrar la función.

A continuación voy a dejar un ejemplo para los campos LAUFD (Fecha de Ejecución) y LAUFI (ID Ejecución). Son parámetros muy comunes (Ej: transacción F110).


DATA: TLAUFK LIKE ILAUFK OCCURS 0 WITH HEADER LINE.

PARAMETERS:
            P_LAUFD LIKE F110V-LAUFD OBLIGATORY,   “Fecha de Ejecución
            P_LAUFI LIKE F110V-LAUFI OBLIGATORY.     “ID Ejecución

**Habilito con la tecla F4 el matchcode para el campo LAUFI
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFI.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

  CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.

 

**Habilito con la tecla F4 el matchcode para el campo LAUFD
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFD.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.


Technorati tags:




ALV Tree Orientado a Objetos

26 11 2007

Hace unos días en el trabajo me tocó hacer un reporte ALV Tree .
image 

No encontré mucha información ni manuales al respecto, mucho menos en español. Pero por suerte pude encontrar un ejemplo que me sirvió mucho. Es un post de ALV Tree orientado a objetos del conocido Alvaro Tejada Galindo (http://atejada.blogspot.com/2007/05/alv-tree-orientado-objetos.html#links)

Por lo tanto aprovecho para hacer referencia de ese post con algunas cosas que faltaban y cambios en la sintaxis para que active. Y además voy a describir en detalle como crear una Dynpro y el Custom Control necesarios para correr el reporte ALV Tree.


1º) Desde la transacción SE38 creamos el reporte Z_ALV_TREE y pegamos el siguiente código:

*&———————————————————————*
*& Report  Z_ALV_TREE                                                  *
*&                                                                     *
*&———————————————————————*
*&                                                                     *
*&                                                                     *
*&———————————————————————*

REPORT Z_ALV_TREE.

*——————————————————————*
*  DECLARACION DE TYPES                                            *
*——————————————————————*

TYPES: BEGIN OF TY_SPFLI,
       CARRID TYPE SPFLI-CARRID,
       CONNID TYPE SPFLI-CONNID,
       COUNTRYFR TYPE SPFLI-COUNTRYFR,
       CITYFROM TYPE SPFLI-CITYFROM,
       AIRPFROM TYPE SPFLI-AIRPFROM,
       COUNTRYTO TYPE SPFLI-COUNTRYTO,
       CITYTO TYPE SPFLI-CITYTO,
       END OF TY_SPFLI.

TYPES: BEGIN OF TY_HEADER,
       CARRID TYPE SPFLI-CARRID,
       END OF TY_HEADER.

*—————————————————————–*
*  DECLARACION DE TABLAS INTERNAS                                 *
*—————————————————————–*

DATA: T_SPFLI TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      TAB_TREE TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      T_TREE TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      T_HEADER TYPE STANDARD TABLE OF TY_HEADER
      WITH HEADER LINE.

*—————————————————————–*
*  DECLARACION DE VARIABLES                                       *
*—————————————————————–*

DATA: G_ALV_TREE TYPE REF TO CL_GUI_ALV_TREE,
      L_HIERARCHY_HEADER TYPE TREEV_HHDR,
      GS_FIELDCAT TYPE LVC_S_FCAT,
      GT_FIELDCAT_TREE TYPE LVC_T_FCAT,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

*—————————————————————–*
*  DECLARACION DE FIELD-SYMBOLS                                   *
*—————————————————————–*

FIELD-SYMBOLS:  <HEADER> LIKE LINE OF T_HEADER,
                <SPFLI> LIKE LINE OF T_SPFLI.

*—————————————————————–*
*   SELECTION-SCREEN                                              *
*—————————————————————–*

SELECTION-SCREEN BEGIN OF SCREEN 1001.
SELECTION-SCREEN END OF SCREEN 1001.

*—————————————————————–*
*   START-OF-SELECTION                                            *
*—————————————————————–*

START-OF-SELECTION.

  PERFORM OBTENER_DATOS.

  IF G_ALV_TREE IS INITIAL.
    PERFORM INIT_TREE.

    CALL METHOD CL_GUI_CFW=>FLUSH
            EXCEPTIONS CNTL_SYSTEM_ERROR = 1
                       CNTL_ERROR        = 2.
  ENDIF.

  CALL SCREEN 100.

*—————————————————————–*
*       FORM init_tree                                            *
*—————————————————————–*

FORM INIT_TREE.

  DATA: L_TREE_CONTAINER_NAME(30) TYPE C.

  L_TREE_CONTAINER_NAME = ‘TREE_CONTROL’.

  CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
            CONTAINER_NAME = L_TREE_CONTAINER_NAME
      EXCEPTIONS
            CNTL_ERROR                  = 1
            CNTL_SYSTEM_ERROR           = 2
            CREATE_ERROR                = 3
            LIFETIME_ERROR              = 4
            LIFETIME_DYNPRO_DYNPRO_LINK = 5.

  CREATE OBJECT G_ALV_TREE
    EXPORTING
        PARENT              = G_CUSTOM_CONTAINER
        NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
        ITEM_SELECTION      = ”
        NO_HTML_HEADER      = ‘X’
        NO_TOOLBAR          = ”
    EXCEPTIONS
        CNTL_ERROR                   = 1
        CNTL_SYSTEM_ERROR            = 2
        CREATE_ERROR                 = 3
        LIFETIME_ERROR               = 4
        ILLEGAL_NODE_SELECTION_MODE  = 5
        FAILED                       = 6
        ILLEGAL_COLUMN_NAME          = 7.

  PERFORM FILL_CATALOG_TREE.
  PERFORM BUILD_HIERARCHY_HEADER CHANGING L_HIERARCHY_HEADER.

  CALL METHOD G_ALV_TREE->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
                 IS_HIERARCHY_HEADER  = L_HIERARCHY_HEADER
       CHANGING
                 IT_OUTTAB        = T_TREE[]
                 IT_FIELDCATALOG  = GT_FIELDCAT_TREE.

  PERFORM CREATE_HIERARCHY.

ENDFORM.

*—————————————————————–*
*   FORM FILL_CATALOG_TREE                                        *
*—————————————————————–*

FORM FILL_CATALOG_TREE.

  DATA: GS_FIELDCAT_ADD TYPE LVC_S_FCAT.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 1.
  GS_FIELDCAT-REPTEXT   = ‘Flight’.
  GS_FIELDCAT-SCRTEXT_S = ‘Flight’.
  GS_FIELDCAT-FIELDNAME = ‘CONNID’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 2.
  GS_FIELDCAT-REPTEXT   = ‘Country’.
  GS_FIELDCAT-SCRTEXT_S = ‘Country’.
  GS_FIELDCAT-FIELDNAME = ‘COUNTRYFR’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 3.
  GS_FIELDCAT-REPTEXT   = ‘Dep.City’.
  GS_FIELDCAT-SCRTEXT_S = ‘Dep.City’.
  GS_FIELDCAT-FIELDNAME = ‘CITYFROM’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  GS_FIELDCAT-OUTPUTLEN = ‘15′.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 4.
  GS_FIELDCAT-REPTEXT   = ‘Dep.Airp’.
  GS_FIELDCAT-SCRTEXT_S = ‘Dep.Airp’.
  GS_FIELDCAT-FIELDNAME = ‘AIRPFROM’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  GS_FIELDCAT-OUTPUTLEN = ‘20′.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 5.
  GS_FIELDCAT-REPTEXT   = ‘Country’.
  GS_FIELDCAT-SCRTEXT_S = ‘Country’.
  GS_FIELDCAT-FIELDNAME = ‘COUNTRYTO’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  GS_FIELDCAT-OUTPUTLEN = ‘15′.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS   = 6.
  GS_FIELDCAT-REPTEXT   = ‘Arr.City’.
  GS_FIELDCAT-SCRTEXT_S = ‘Arr.City’.
  GS_FIELDCAT-FIELDNAME = ‘CITYTO’.
  GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
  GS_FIELDCAT-OUTPUTLEN = ‘20′.
  APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.

ENDFORM.

*———————————————————————*
*       FORM build_hierarchy_header                                   *
*———————————————————————*

FORM BUILD_HIERARCHY_HEADER CHANGING
                               P_HIERARCHY_HEADER TYPE TREEV_HHDR.

  CLEAR P_HIERARCHY_HEADER.
  P_HIERARCHY_HEADER-HEADING = ‘Airline carrier’(300).
  P_HIERARCHY_HEADER-WIDTH = 18.
  P_HIERARCHY_HEADER-WIDTH_PIX = ‘ ‘.

ENDFORM.

*———————————————————————*
*       FORM create_hierarchy                                         *
*———————————————————————*

FORM CREATE_HIERARCHY.

  DATA: L_ROOT_KEY TYPE LVC_NKEY,
        L_NEXT_KEY TYPE LVC_NKEY,
        L_LAST_KEY TYPE LVC_NKEY,
        HEADER TYPE STRING,
        W_MENGE_TEXT(13) TYPE C.

  CLEAR L_ROOT_KEY.

  LOOP AT T_HEADER ASSIGNING <HEADER>.
    CLEAR L_ROOT_KEY.
    CLEAR L_NEXT_KEY.
    PERFORM ADD_NODE USING <HEADER>-CARRID L_ROOT_KEY
                     CHANGING L_NEXT_KEY.
    LOOP AT T_SPFLI ASSIGNING <SPFLI>
    WHERE CARRID EQ <HEADER>-CARRID.

      MOVE-CORRESPONDING  <SPFLI> TO TAB_TREE.

      PERFORM ADD_LEAF USING TAB_TREE L_NEXT_KEY
                       CHANGING L_LAST_KEY.
    ENDLOOP.
  ENDLOOP.

  CALL METHOD G_ALV_TREE->FRONTEND_UPDATE.

ENDFORM.

*———————————————————————*
*       FORM ADD_NODE                                                 *
*———————————————————————*

FORM ADD_NODE USING L_NAME L_ROOT_KEY
              CHANGING L_NEXT_KEY.

  DATA: L_NODE_TEXT TYPE LVC_VALUE,
        LS_TREE TYPE TY_SPFLI.

  L_NODE_TEXT =  L_NAME.
  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
          I_RELAT_NODE_KEY = L_ROOT_KEY
          I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
          I_NODE_TEXT      = L_NODE_TEXT
          IS_OUTTAB_LINE   = LS_TREE
    IMPORTING
          E_NEW_NODE_KEY   = L_NEXT_KEY.

ENDFORM.

*———————————————————————*
*       FORM ADD_LEAF                                                 *
*———————————————————————*

FORM ADD_LEAF USING L_TREE TYPE TY_SPFLI
                    L_NEXT_KEY
              CHANGING L_LAST_KEY.

  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
          I_RELAT_NODE_KEY = L_NEXT_KEY
          I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
          IS_OUTTAB_LINE   = TAB_TREE
       IMPORTING
          E_NEW_NODE_KEY = L_LAST_KEY.

ENDFORM.

*———————————————————————*
*       FORM OBTENER_DATOS                                            *
*———————————————————————*

FORM OBTENER_DATOS.

  SELECT CARRID CONNID COUNTRYFR CITYFROM
         AIRPFROM COUNTRYTO CITYTO
  INTO TABLE T_SPFLI
  FROM SPFLI.

  IF SY-SUBRC EQ 0.
    LOOP AT T_SPFLI ASSIGNING <SPFLI>.
      MOVE <SPFLI>-CARRID TO T_HEADER-CARRID.
      APPEND T_HEADER.
    ENDLOOP.

    SORT T_HEADER.
    DELETE ADJACENT DUPLICATES FROM T_HEADER.

  ENDIF.

ENDFORM.

2º) Luego de activar el reporte vamos a la transacción SE80:
Buscamos nuestro programa Z_ALV_TREE. Nos paramos sobre la carpeta con mismo nombre, click con el botón derecho del mouse… opción Crear y luego Dynpro: 
image
Ingresamos como número de dynpro 100. Ponemos la descripción que queramos y luego de activar apretamos el botón “Dispos.

A continuación se va a abrir el Screen Painter: 
Clickeamos en el botón Custom Control (image ) y creamos un cuadrado con el nombre TREE_CONTROL
image
Simplemente falta guardar, activar… cerrar el Screen Painter. Y por último en la transacción SE80 doble click en la carpeta Z_ALV_TREE y ejecutamos.
Cabe aclarar que este ejemplo trabaja con la tabla SPFLI que se usa comúnmente en los ejemplos.


Technorati tags: