Query SAP (0): crear una query[SQ00] Utiliza SQ00 En ámbito funcional elige específico de mandante Luego en pinchas en entorno grupo de usuarios Creas un grupo de usuario Luego asignas grupos de usuarios Aquí asignas los usuarios que usarán el Query, posteriormente asignaremos el infoset. Luego entorno ->infosets Digitas un nombre y pones Crear Aquí se levanta esta pestaña, completas los datos En fuente de datos hay varias opciones unión via tablas, tabla directa o base de datos lógica (son las que he usado). Para tu caso usuaria la tercera opción base de datos lógica VLV (de entregas) , es obligación una denominación, le das al check Te muestra las tablas y estructuras donde buscará los datos Selecciónalos todos, siempre es mejor tener todos los datos. le das check te muestra esto En mi caso yo borro todos los grupos de campo y dejo solo uno o creo uno nuevo y borro los demás (a gusto de uno) (carpetas de la derecha). Aquí seleccionas los campo que ocuparás de las distintas tablas que están disponibles con botón derecho sobre el campo y pinchar sobre “incluir en grupo de campos” (tambien agarrar y soltar en el grupo de campos con el mouse). Una vez ya incluiste todos los datos en el grupo de campos. Guardas y generas el infoset. (se puede modificar las veces que quieras). Una vez creado el infosets lo agregamos a nuestro grupo de usuarios, creado anteriormente. Lo asignas a tu grupo de usuarios y grabas Ahora crearemos nuestra Querie para eso vamos a entorno -> Queries Si el grupo de usuario mostrado no es el que creaste, pinchas en el botón y lo seleccionas le das un nombre y le das crear inmediatamente aparece una ventana con los infosets asociados al grupo de usuarios. Seleccionas el que vas a usar y te muestra la siguiente pantalla Le pones título, algún comentario y pinchas en lista básica, te muestra lo siguiente Imagen pegada1246x552 47 KB Como te darás cuenta esto es la pantalla normal de la SQVI, cuando aquí vas seleccionando campos de lista (desplegables) o de selección (vienen algunos por defectos). Si notas también viene otra carpeta con las descripciones de los datos (dependiendo del campo que elegiste en el queries). Grabas y ya está. Puedes crear tus propios campos, aquí en esta sección, así como tambien puedes modificar la glosa de los datos predefinidos, eso sí cambiando el texto en el infoset. Query SAP (I): Grupos de usuarios [SQ03] ¿Cómo puedo recuperar información almacenada en el sistema acerca de mis clientes? ¿Y acerca de mis proveedores? ¿Y de mis ventas? En definitiva, ¿cómo puedo obtener listados de consulta sobre los datos que anteriormente he entrado en mi SAP? Éste es el primer post de un grupo de tres sobre queries en SAP. Una query en SAP es una herramienta que nos permite recuperar información de la base de datos para generar listados de información en tiempo real. Es verdad que existen herramientas de programación ABAP que ya nos permiten hacer listados y recuperar información de las tablas de la base de datos. Sin embargo, con las quexx ries no tenemos necesidad de saber programar (aunque puede ser una ayuda) y hace el proceso de construcción de listados una tarea más rápida e intuitiva. Siempre que creemos una query debemos seguir tres pasos siempre en el siguiente orden. -I: Crear un grupo de usuarios -II: Crear un infoset. -III: Crea la query. Definición de un grupo de usuarios Un grupo de usuarios es el primer paso en la creación de una query SAP. En cada grupo asignamos los nombres de los usuarios que tendrán acceso final a la query que generaremos. No es más que una autorización para poder utilizar nuestra query a un grupo ordenado de personas. Por ejemplo, podemos determinar que las consultas o queries del módulo SD sólo las podrán consultar aquellas personas de los departamentos de Ventas y Marketing. En este caso, crearemos un grupo de usarios llamado VENTAS donde incluiremos el nombre de los usuarios de estos departamentos. Funcionalidad Herramientas / Workbench ABAP / Utilidades / Query SAP / SQ03 - Grupo de usuarios Creamos y asignamos un nombre a nuestro grupo de usuarios: botón 'Crear'. Asignamos los usuarios: botón 'Asignar usuario y Infosets". Para permitir que un usuario modifique las queries del grupo de usuarios debemos mantener marcado el flag de autorización junto al nombre de usuario. Guardamos. Y ya hemos acabado el primer paso en la creación de una query. Query SAP (II): Grupos de usuarios (Infoset) [SQ02] 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. 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 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). 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. Escribimos el coding para el campo. Verificamos el código ABAP (corregimos si es necesario) y grabamos. 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). 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 Query SAP (III): crear una query [SQ01] Definición de query El tercer paso en la creación de una query es, precisamente, la creación de la query propiamente dicha. Esto es un listado de información extraída de la base de datos. Para ello es necesario que previamente hayamos creado el grupo de usuarios al que permitiremos extraer la información. Asimismo, debemos haber creado el infoset donde indicamos las tablas de información necesaria. Crear una query consiste en generar una pantalla de selección de la información y una disposición (layout) de salida de toda esta documentación. Funcionalidad Sigamos con el ejemplo. Creamos una query de información de ventas. Entramos en la transacción de queries. Herramientas / Workbench ABAP / Utilidades / Query SAP / SQ01 - Queries Podemos crear nuestra query bien en área estándar bien en ámbito global. Esto significa que podemos crear la query y luego transportarla (ámbito global) o bien crear la query directamente en nuestro entorno productivo (área estándar). Mi experiencia personal me dice que no merece la pena el trabajo de crear una query en un mandante de desarrollo y luego transportarla hasta nuestro mandante productivo. Será más rápido y más fácil testear nuestra query si la creamos directamente en el área estándar. Para eso vamos a Entorno / Ámbitos funcionales / Área estándar (específico de mandante). Nuestra query la crearemos dentro del grupo de usuarios que creamos en el paso I. Por eso, iremos a Tratar / Cambiar grupo de usuarios / Ventas. Damos un nombre a nuestra query y la creamos. Automáticamente nos pedirá que la asignemos a un infoset (recordar el paso II). Evidentemente, asignaremos el infoset que ya habíamos creado previamente (SD_VENTAS). En la siguiente pantalla, SAP nos pide una descripción de la query. Podemos también indicar la variante de la pantalla de selección que queremos que se utilice por defecto al ejecutar la query. Esta variante la podemos crear cuando ya hayamos generado nuestra query y añadirla aquí directamente (campo Variante estándar). En esta pantalla también aparecen datos de 'Formato de salida'. Aquí le podemos indicar a nuestra query cómo queremos que se muestre. Por defecto, utilizamos el "List Viewer ABAP", es decir, el ALV típico. Aunque SAP nos da la posibilidad incluso de lanzar el resultado directamente hacia un Excel si así se quiere (EXCEL). Pasamos a 'Selección de grupos de campos'. Aquí debemos seleccionar todos nuestros grupos de campos del infoset. O, si alguno de los grupos de campos no los quisiéramos utilizar en nuestra query, entonces simplemente no lo seleccionamos. En 'Lista básica' nos muestra los campos disponibles en cada uno de los grupos de campos. Debemos seleccionar aquellos que nos interesa que se muestren en la query. En el caso del ejemplo, seleccionaré todos los campos. Como veis los campos de texto, aunque no los habíamos seleccionado directamente en nuestro infoset, sí que nos aparecen dentro de los campos disponibles. Eso es simplemente porque los campos de código solicitante y número de material siempre llevan asociadas sus descripciones por defecto. En la pantalla de 'Selecciones' creamos nuestra pantalla de selección. Es decir, los criterios a partir de los cuales buscaremos la información. Yo voy a marcar los campos solicitante, material y documento de ventas. 'Lista básica': aquí construimos la disposición de salida donde indicamos qué campos queremos que se muestren en el listado y en qué orden. Además, podemos también darle algún formato especial como colores, guiones de separación, etc. Yo voy a marcar todos los campos disponibles y además voy a hacer que sea de verde intenso. Para hacer eso hay que arrastrar el campo ‘Afirmativo (intenso)' sobre el campo que queremos que sea de otro color. ABAP en queries: programas integrados Siguiendo con una serie de artículos anteriores donde ya explicaba como crear queries e infosets voy a intentar mostrar otra manera realizar queries. En este caso vamos a integrar programación ABAP en queries SAP. Se trata de utilizar toda la potencia que nos dan las presentaciones vía query para mostrar información, pero haciéndolo sin utilizar los joins gráficos de tablas. En un principio, las queries SAP se entienden como una forma sencilla de extraer información de la extensa base de datos de SAP. Para obtener esta información, la mejor manera es utilizar la conexión gráfica de tablas en nuestros infosets. Sin embargo, para aquellos que ya tengan conocimientos sencillos de programación ABAP, SAP provee una herramienta de programación integrada en infosets. Con ella, no necesitamos utilizar ninguna conexión gráfica, sino que podemos obtener información a través de sentencias SQL y presentarlas en el formato que nos dan las queries SAP. ¿Qué ventajas puede tener esta forma de crear queries? En principio, la gran ventaja que yo observo es la posibilidad de utilizar todo el “envoltorio” que nos da una query, con sus ALV y layouts. Nos quita trabajo ya que sólo debemos concentrarnos en recuperar la información. De la presentación de ésta ya se ocupa la query. Además, nos da un entorno organizado de listados ya que nos permite tener todas nuestras consultas bajo la apariencia de la transacción de queries SQ01. Nos evita tener un grupo inconexo de transacciones programadas bajo nombres Z* que, en el mejor de los casos, habremos agrupado en menús de usuario o en menús de favoritos. También nos da la posibilidad de crear consultas de información impensables en un join simple de tablas creado mediante la conexión gráfica. Podemos, por ejemplo, unir dos tablas pero manteniendo una como cabecera y la otra debajo de ésta con sus posiciones. Veamos esto último. Queremos mostrar pedidos de compra, con una línea de cabecera para cada pedido y siguiendo a esta cabecera, toda la serie de posiciones del pedido. Creamos el infoset marcando ‘Obtención de datos mediante programa’ y ‘Programa integrado’. El infoset nos exigirá que introduzcamos una estructura de datos. Por lo tanto, previamente debemos ir al diccionario y crear la estructura que soportará la salida de información. Este paso previo no lo explico pero tenéis un ejemplo en el siguiente enlace. En este punto, los campos disponibles serán los que nos indique nuestra estructura. Arrastraremos estos campos al grupo de campos que tengamos creados. Lo interesante aquí, es que se nos abre un botón que no habíamos visto hasta ahora. Este botón se llama ‘Programa de lectura de datos’ y nos señala el lugar a través del que haremos nuestra programación ABAP. Así que lo marcamos. El editor ABAP que se nos abre consta de diversos eventos donde escribimos nuestros comandos ABAP: o Declaración de variables. Pantalla de selección. Definimos el pedido de compras como parámetro de selección en nuestra query. Podemos indicar una descripción del parámetro para que no aparezca el nombre de la variable al ejecutar la query. Para ello tenemos que ir a la pestaña ‘Delimit’ y haciendo doble click sobre el parámetro cambiamos el texto de selección. Extracción de datos. Salida de información. Generamos nuestro infoset. Asociamos el infoset a un grupo de usuarios. Creamos nuestra query normalmente. Y éste es el resultado: Un listado de las posiciones de un pedido con una cabecera para el pedido. El ejemplo es muy sencillo y poco significativo pero nos da una idea de la potencia de la herramienta.