Query SAP (II): infosets

domingo, 4 de abril de 2010


El segundo paso en la creación de una query es la definición del infoset asociado. Los infosets son vistas especiales de datos donde se agrupan todos los campos que se utilizarán en una query. En un infoset enlazaremos diferentes tablas a través de campos comunes y seleccionaremos qué campos queremos que estén disponibles para nuestras queries. A su vez, asignaremos el infoset a uno o más grupos de usuarios (recordad el post anterior sobre grupos de usuarios).


Funcionalidad

Siguiendo con el ejemplo del anterior post vamos a crear un infoset de información de ventas, en concreto, de las cantidades que nuestros clientes nos han pedido en un rango de fechas. Para ello debemos saber que la tabla en la que se almacena la información de pedidos de clientes en SAP se encuentra en la tabla VBAK. La información de las cantidades solicitadas se encuentra en la tabla VBAP. También debemos saber que ambas tablas se relacionan entre sí a través del campo "documento de ventas" (VBAK-VBELN / VBAP-VBELN). Ahora podemos empezar a construir nuestro infoset.

  • Entramos en la transacción de infosets.
Herramientas / Utilidades / Query SAP / SQ02 - Infosets
  • Creamos un infoset, le damos una descripción y una tabla base sobre la que generaremos nuestro infoset. En nuestro caso sobre la tabla VBAK. En este apartado existen varias opciones: podemos crear el infoset realizando la consulta sólo sobre una tabla en exclusiva, sobre varias tablas, sobre una base de datos lógica o incluso sobre datos externos. Hay que pensar bien qué opción escoger ya que una vez se ha creado ya no hay vuelta atrás. Por ejemplo, si escogemos crear un infoset a través de una tabla, si en el futuro decidimos añadir una nueva tabla tendremos que borrar el infoset y crear uno nuevo. Y eso será un problema mayor si ya hemos creado la query subsiguiente pues en ese caso también habría que borrar antes la query. Personalmente, siempre creo las queries vía unión de tablas aunque en el momento que cree el infoset sólo necesito información de una de las dos. Así me ahorro problemas en el futuro.
Infoset
  • Creamos el enlace entre ambas tablas añadiendo la nueva tabla VBAP. Automáticamente, SAP nos propone las conexiones entre tablas. Sin embargo, podéis borrar el enlace y asociarlo a través de otros campos (siempre que sean del mismo tipo, de lo contrario SAP no lo aceptará). Yo voy a aceptar la propuesta que me hace SAP. Atención, en este punto hay que decir que debemos tener cuidado con las tablas que utilizamos en nuestro join. SAP no suele tomarse muy bien las tablas cluster como la BSEG. En este caso es mejor utilizar tablas transparentes como la BSID, BSAD, BSIK o BSAK.
Tratar / Insertar tabla
 
Join de tablas
  • Volvemos hacia atrás y creamos los grupos de campos (Pasar a / Back). Esto son una especie de carpetas donde asignaremos los campos de nuestras disponibles para las futuras queries. Yo escogeré crear 'Grupos de campos vacíos' con lo que me creará dos carpetas, una para la tabla VBAK y otro para la VBAP sin ningún campo asignado.
  • Arrastramos los campos de las tablas (parte izquierda de la pantalla) hacia los grupos de campos que hemos creado (parte derecha de la pantalla). En mi caso, arrastro los campos solicitante y documento de ventas de la VBAK y cantidad y material de la VBAP. Como veis sobre los campos solicitante y número de material SAP escribe una T. Eso significa que asociado a estos códigos SAP internamente también arrastra sus descripciones, por lo que no hay que hacer ninguna selección hacia las tablas de descripciones del solicitante (KNA1) ni del material (MAKT).
Grupos de campos
  • Además, para complicarlo un poco más voy a añadir un campo que no está en ninguna de las tablas. Por ejemplo, si la posición ha sido rechazada (lo que se indica en SAP a través del campo VBAP-ABGRU) le voy a dar la descripción 'Posición rechazada'. Esto sólo lo podemos hacer mediante programación ABAP, una herramienta muy interesante que nos permiten los infosets.
Pasar a / Detalles
  • Creamos el campo adicional y le damos descripción y tipo.
Campo

Datos del campo adicional
  • Escribimos el coding para el campo. Verificamos el código ABAP (corregimos si es necesario) y grabamos.
Código ABAP campo adicional
  • Volvemos a 'Grupo de campos'. Vemos ahora que en la parte izquierda de la pantalla nos aparece un nuevo campo de datos 'Campos adicionales' que contiene el campo que hemos creado. Lo que hay que hacer ahora es crear un nuevo grupo de campos y arrastrar nuestro campo adicional a este grupo de campos (también podríamos arrastrarlo a uno de los grupos de campos que ya tenemos).
Grupo de campos
  • Sólo nos queda grabar, verificar y activar nuestro infoset.
Infoset / Grabar
Infoset / Verificar
Infoset / Generar
  • Ya podemos volver a la pantalla inicial y asignar el infoset al grupo de usuarios que creamos anteriormente a través de la transacción SQ01 (ver el post anterior).
Pasar a / Asignación a grupo de usuarios

Asignar grupo de usuarios

Imagen inicial | Samuel Mann

4 comentarios:

  1. Hola, como hago si quiero que mi Query solo muestre el resultado de las tablas en las cuales existe un campo vacío, es decir algo así: select * from miTabla where micampo = ''. Que esto sea fijo.

    ResponderEliminar
    Respuestas
    1. Lo puedes indicar un campo más en la pantalla de selección de tu query y dejar que el usuario indique que ese campo esté vacío o bien puedes crear una delimitación en la pestaña Delimit. Esta delimitación la puedes utilizar en el código ABAP de tu infoset.

      Eliminar
  2. Hola Oscar. Tengo un reporte de usuarios donde requiero agregar la columna de correo electronico de la tabla ADR6, pero al ejecutarlo solo me trae los registros que cuentan con informacion en ese campo y yo requiero que me traiga todos no importando si hay infomracion en el campo de correo o no.

    ¿Alguna sugerencia?

    ResponderEliminar
    Respuestas
    1. Si utilizas el correo como campo clave deberías poner la unión de tablas como conexión externa izquierda.

      Eliminar